/** * Die zwei Anmeldewege ans Kasseneck-Backend — gleichrangig, austauschbar, * keiner ist der bevorzugte: * * - `apiKeyAuth` — der Weg der Geraete, POS-Apps und Dritten: der `api_key` als * Bearer plus die Kopfzeile `cashregister-token` (wie im Flutter-Zwilling * `kasseneck_api`). * - `registerUserAuth` — der Weg der Browser-Kasse: ein Kassen-Benutzer, per * PIN an einem gekoppelten Geraet angemeldet. ID-Token als Bearer, * die laufende Sitzung als Kopfzeile `register-session`, die Kasse als * Parameter `cashregisterId` in der Nutzlast. * * Eine Anmeldung liefert **nur** Kopfzeilen und ggf. Zusatzparameter. Sie * fuehrt keine eigenen HTTP-Aufrufe, kennt den Transport nicht und haelt keinen * Zustand — genau deshalb ist sie austauschbar und einzeln testbar. * * Das Paket weiss **nichts** vom Anmeldedienst: `registerUserAuth` bekommt eine * Funktion, die ein gueltiges ID-Token liefert (darf `async` sein). Sie wird * bei **jedem** Aufruf befragt — ID-Tokens laufen nach einer Stunde * ab, die Sitzung der Browser-Kasse lebt sogar nur 90 Sekunden und wird alle * 30 Sekunden erneuert; ein einmal gemerkter Wert waere also bald tot. */ /** Was eine Anmeldung zu einer Anfrage beisteuert. */ export interface AuthCredentials { /** Kopfzeilen der Anfrage (mindestens `Authorization`). */ headers: Record; /** Zusatzparameter, die in die Nutzlast wandern (z. B. `cashregisterId`). */ params: Record; } /** * Eine Anmeldung ist eine Funktion, die pro Anfrage frische Zugangsdaten * liefert (synchron oder asynchron). */ export type KasseneckAuth = () => AuthCredentials | Promise; export interface ApiKeyAuthOptions { /** API-Schluessel im Format `kr__<...>` (opak). */ apiKey: string; /** Kassen-Token der Kasse, an der gearbeitet wird (`cb__<...>`). */ cashregisterToken: string; } export interface RegisterUserAuthOptions { /** Liefert ein gueltiges ID-Token des Anmeldediensts; wird pro Anfrage befragt. */ getIdToken: () => string | Promise; /** Liefert die laufende Kassen-Sitzung; wird pro Anfrage befragt. */ getSessionId: () => string | Promise; /** Kasse, an der der Kassen-Benutzer angemeldet ist. */ cashregisterId: string; } /** Anmeldung per API-Schluessel und Kassen-Token (Geraete, POS-Apps, Dritte). */ export declare function apiKeyAuth(options: ApiKeyAuthOptions): KasseneckAuth; /** Nur fuer den Transport; nicht Teil der oeffentlichen Oberflaeche. */ export declare function isRegisterUserAuth(auth: KasseneckAuth): boolean; /** Anmeldung eines Kassen-Benutzers der Browser-Kasse (ID-Token + Sitzung). */ export declare function registerUserAuth(options: RegisterUserAuthOptions): KasseneckAuth;