Kotlin-Auth-Kern für native Android-Apps (Pendant zu ManaCore) — Apache-2.0, Spiegel des Vereins mana.
Find a file
Till JS 37a5435bd3 Apache-2.0: LICENSE + NOTICE
Welle 1 aus platform/mana/docs/QUELLOEFFNUNG.md. Ein Repo ohne LICENSE ist
beim Veroeffentlichen kein Open Source, sondern "alle Rechte vorbehalten" —
damit faellt genau der Zweck aus, dass andere den Baustein als Grundlage
nutzen duerfen.

Apache-2.0 wegen der Patentklausel und weil sie bei oeffentlichen
Auftraggebern Standard ist. LICENSE traegt den kanonischen Volltext (ein
Link auf apache.org genuegt Paragraf 4(a) nicht); der Copyright-Vermerk
steht nach Apache-Konvention in NOTICE, damit der Lizenztext pruefbar
identisch bleibt.

Halter ist die natuerliche Person, nicht "mana" — der Verein ist nicht
gegruendet und kann keine Rechte halten. Der Uebergang steht in NOTICE.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 23:05:06 +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 build: Maven-Registry till/maven -> mana/maven (Namespace-Vereinheitlichung) 2026-06-17 18:05:20 +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).