Kotlin-Auth-Kern für native Android-Apps (Pendant zu ManaCore) — Apache-2.0, Spiegel des Vereins mana.
Find a file
Till JS c8e6561b12 README: Bau-Anleitung aus offenen Klonen und Erwartungssatz
Vorbereitung für die Spiegelung nach git.mana.how/offen (Prüfliste
QUELLOEFFNUNG.md §5): Sweep sauber, keine Privat-Marker, Apache-2.0 mit
NOTICE seit Welle 1, Schriften mit OFL-Texten.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-30 13:35:35 +02:00
devlog devlog: Repo-Historie nachgezogen (spieler+macher) 2026-06-16 01:44:26 +02:00
gradle mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
src feat(feedback): voller FeedbackClient-Vertrag (title/description/images/context) 2026-06-12 19:55:54 +02:00
.editorconfig mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
.gitignore mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
build.gradle.kts build: Maven-Registry till/maven -> mana/maven (Namespace-Vereinheitlichung) 2026-06-17 18:05:20 +02:00
CHANGELOG.md feat(feedback): voller FeedbackClient-Vertrag (title/description/images/context) 2026-06-12 19:55:54 +02:00
gradle.properties mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
gradlew mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
gradlew.bat mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00
LICENSE Apache-2.0: LICENSE + NOTICE 2026-08-03 23:05:06 +02:00
NOTICE Apache-2.0: LICENSE + NOTICE 2026-08-03 23:05:06 +02:00
README.md README: Bau-Anleitung aus offenen Klonen und Erwartungssatz 2026-09-30 13:35:35 +02:00
settings.gradle.kts mana-kotlin-core v0.1 — Auth-Kern für native Android-Apps 2026-06-04 18:22:09 +02:00

mana-kotlin-core

Wiederverwendbarer Kotlin-Kern für die nativen Android-Apps von mana Das Kotlin-Pendant zu ManaCore aus mana-swift-core.

Reine Kotlin/JVM-Library (kein Android-SDK), damit sie unabhängig gebaut/getestet und später optional KMP-fähig gemacht werden kann. Die Android-App konsumiert sie als normale Maven-Dependency.

Was drin ist (v0.1)

  • auth.AuthClient — Login/Refresh/Logout gegen mana-auth (/api/v1/auth/*). Portiert das Resilienz-Verhalten aus dem Swift-Core: Single-Flight-Refresh, proaktiver Refresh vor Ablauf, Soft-Fail (Tokens nur bei tatsächlich invalidierter Sitzung wischen, nicht bei 5xx/429).
  • auth.TokenStore — plattform-neutrale Token-Persistenz (Interface). Android-App implementiert das über DataStore+Keystore; InMemoryTokenStore für Tests.
  • auth.Jwt — liest exp/sub/tier aus dem Token (ohne Signatur- Prüfung — die ist Server-Sache via JWKS).
  • net.AuthenticatedApi — Bearer-Transport mit einmaligem 401-Refresh-Retry, für die verbleibenden REST-Endpunkte (Marketplace, /me, dsgvo …).
  • net.manaHttpClient / net.ManaJson — Ktor-Client-Factory + geteilte Json-Konfiguration.
  • model — Deck, Card (5 text-only Typen), Tier.

Was NICHT drin ist (bewusst)

User-eigene Decks/Cards/Reviews laufen seit dem Event-Sync-Cutover (2026-05-20) komplett über Event-Sync (sync2.mana.how), nicht über REST. Die Server-CRUD-Endpunkte sind 410 Gone. Dieser Kern deckt nur Auth + den authentifizierten REST-Transport ab; der Daten-Layer kommt in mana-kotlin-event-sync (Phase 2 des Android-Plans).

SOT-Plan: mana/docs/playbooks/WORDECK_ANDROID_GREENFIELD.md.

Bauen & Testen

# JDK kommt aus Android Studio (JBR); kein System-JDK nötig:
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew test

Veröffentlichen (Forgejo Packages)

./gradlew publish \
  -PforgejoToken=<token> \
  -PforgejoPackagesUrl=https://git.mana.how/api/packages/mana/maven

Stack: Kotlin 2.1 · Ktor 3 · kotlinx.serialization · coroutines · kotlinx.datetime. Ziel-Bytecode: JVM 17 (AGP/compileSdk-36-kompatibel).

Bauen

Kotlin/Gradle. Die mana-Bibliotheken finden sich gegenseitig über mavenLocal() — in dieser Reihenfolge veröffentlichen:

for r in mana-kotlin-core mana-kotlin-tokens mana-kotlin-event-sync \
         mana-kotlin-widget mana-kotlin-event-sync-room mana-kotlin-ui; do
  git clone https://git.mana.how/offen/$r.git && (cd $r && ./gradlew publishToMavenLocal)
done

Danach baut auch Pageta für Android.

Für Mitlesende

Dieses Repo gehört zum Ökosystem von mana und liegt offen, damit andere es lesen, einordnen und als Grundlage nutzen können — das spart Arbeit, egal ob ein Mensch oder ein Modell davorsitzt.

Was du erwarten darfst: den Code so, wie er tatsächlich in Gebrauch ist, unter Apache-2.0 (siehe LICENSE und NOTICE). Keine Attrappe, kein zurechtgeschnittener Auszug — samt seiner Geschichte.

Was du nicht erwarten darfst: Support, Antwortzeiten, Zusagen zur Abwärtskompatibilität oder die Übernahme von Änderungswünschen. Dieses Repo folgt dem, was die eigenen Anwendungen brauchen. Fehlermeldungen sind willkommen, eine Antwort ist nicht zugesagt.

Fork ist ausdrücklich erlaubt und oft der schnellere Weg als zu warten.