import { type AxiosInstance } from 'axios'; import type { AgrarmonitorApiCustomer, AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, AgrarmonitorDeviceRegistrationOptions, AgrarmonitorDeviceRegistrationResult, AgrarmonitorFetchCustomersOptions, AgrarmonitorFreischaltungStatus, AgrarmonitorKunde2, AgrarmonitorRegistrierungStatus, Artikel, ArtikelEinheit, ArtikelKategorie, EingangsrechnungLivesearchResult, Firma, Maschine, MaschineMitGruppe, MaschinenKategorie, Mitarbeiter, Rechnungsdaten, Taetigkeit, ZeitbuchungDaten } from './types'; export declare class AgrarmonitorConnector implements AgrarmonitorConnectorResult { private readonly options; http: AxiosInstance; private static readonly maxLivesearchSeiten; private static readonly berlinFormat; private static readonly s3DateienBaseUrl; private readonly baseUrl; private readonly apiBaseUrl; private readonly timeoutMs; private readonly autoLogin; private readonly autoRetry; private readonly loginStrategy; private readonly logger?; private cookieJar; private apiHttp; private loginInProgress; constructor(options: AgrarmonitorConnectorOptions); init(): Promise; login(): Promise; clearSession(): Promise; saveSession(): Promise; getCookieCount(url?: string): Promise; checkFreigeschaltet(): Promise; checkRegistriert(): Promise; registerDevice(registration: AgrarmonitorDeviceRegistrationOptions): Promise; fetchCustomers(options?: AgrarmonitorFetchCustomersOptions): Promise; getKunden2(options?: AgrarmonitorFetchCustomersOptions): Promise; eingangsrechnungenLivesearch(suchstring: string): Promise; eingangsrechnungVorhanden(suchstring: string): Promise; eingangsrechnungImDateieingangVorhanden(suchstring: string): Promise; getRechnungsdaten(rechnungId: number): Promise; private rechnungsdatenAusFormular; setRechnungsdaten(rechnungId: number, daten: Rechnungsdaten): Promise; setLieferscheinNummer(rechnungId: number, nummer: string): Promise; setEingangsdatum(rechnungId: number, datum: Date): Promise; getCustomerById(id: number): Promise; getMaschinenKategorien(): Promise; getMaschinen(gruppenId: number, suchstring?: string): Promise; getAlleMaschinen(): Promise; getFirmen(): Promise; getArtikelEinheiten(): Promise; getArtikelKategorien(): Promise; getArtikel(artikelGruppe: number, suchstring?: string): Promise; getMitarbeiter(suchstring?: string, mitarbeitergruppe?: number): Promise; getTaetigkeiten(): Promise; /** * Bucht einen Taetigkeitsblock oder eine Pause. Gibt es fuer Mitarbeiter und * Arbeitstag noch keine Schicht, legt `nachtragen.php` Schicht und Verteilung * an (Pausen brauchen eine vorhandene Schicht). Sonst kommt die Buchung in die * passende Schicht, die bei Bedarf verlaengert wird. */ createZeitbuchung(daten: ZeitbuchungDaten): Promise<{ ref: string; }>; updateZeitbuchung(ref: string, daten: ZeitbuchungDaten): Promise; deleteZeitbuchung(ref: string): Promise; private zeitbuchungAufbereiten; /** Rundet auf die volle Minute - Agrarmonitor speichert keine Sekunden. */ private zeitpunkt; /** YYYY-MM-DD HH:MM -> dd.mm.yy (HH:MM) */ private vergleichZuFormular; private zeitbuchungRef; private parseZeitbuchungRef; private ladeTagesansicht; private ladeSchichten; private ladeSchicht; /** Schicht, die sich mit der Buchung ueberschneidet, sonst die letzte davor, sonst die erste. */ private passendeSchicht; /** Neue Verteilungen verlaengern die Schicht in Agrarmonitor nicht von selbst. */ private schichtErweitern; private schichtSetzen; /** * Erste Buchung des Tages: nachtragen.php legt Schicht und Verteilung an, * liefert aber keine ID. Die Verteilung wird danach in der Tagesansicht gesucht. */ private taetigkeitNachtragen; /** * editVerteilungForm.php mit shiftID legt sofort eine leere Verteilung an * (das Agrarmonitor-UI loescht sie bei "Abbrechen"). Schlaegt das Speichern * fehl, wird dieser Platzhalter wieder entfernt. */ private verteilungAnlegen; private ladeVerteilungFormular; private verteilungSpeichern; /** Wie bei Verteilungen legt editPauseForm.php mit shiftID sofort eine Pause an. */ private pauseAnlegen; private pauseSpeichern; /** * JSON-POST an die Arbeitszeit-API. 4xx (z. B. 422 mit Grund im Body) wird * als ZeitbuchungError geworfen; Netzwerk- und 5xx-Fehler bleiben Axios-Fehler. */ private zeitbuchungPost; private zeitbuchungAntwortPruefen; /** 422-Antworten sehen so aus: {"verteilungForm":"ganzertag must be present"} */ private zeitbuchungGrund; /** * Agrarmonitor speichert auch unbekannte oder inaktive Taetigkeits-IDs (dann * ohne Taetigkeit). Deshalb gegen die Auswahl im Buchungsformular pruefen. */ private taetigkeitPruefen; private selectedValue; private normalisiereText; /** * Laedt eine Livesearch-Liste Seite fuer Seite. Die Seitenzahl steht in * `.pagination[data-pages]`; zusaetzlich bricht die Schleife ab, sobald eine * Seite keine neuen Zeilen bringt (Agrarmonitor ignoriert `seite` teils). */ private loadLivesearchSeiten; private vorherigeUeberschrift; /** Agrarmonitor zeigt leere Werte in Livesearch-Tabellen als "-" an. */ private livesearchText; private createHttpClient; private createApiHttpClient; private apiRequest; private fetchAllCustomers; private mapKunde2; private performLogin; private performRedirectLogin; private isSessionValid; private loginRequestConfig; private isLoginRequiredResponse; /** * Liefert das Kriterium, an dem eine abgelaufene Session erkannt wurde, * oder null fuer eine gueltige Session. */ private loginRequiredReason; private retryAfterLogin; private createDateienLivesearchParams; private getEingangsrechnungEditMeta; private loadEingangsrechnungEditForm; /** Flaches Objekt aus allen Formularfeldern, wie es das Agrarmonitor-Frontend an update.php schickt. */ private serializeForm; private getEingangsrechnungDetailMeta; private formPostConfig; private parseHtmlDocument; private hasTableRows; private inputValue; private selectedNumberValue; private parseNumber; private parsePositiveNumber; private toStringValue; private toBoolean; private parseJaNein; private parseGermanShortDate; private requireDate; private formatGermanShortDate; private lastPathSegment; private fileBasename; private normalizeApiBaseUrl; private isWrappedApiCustomer; private isApiCustomer; private parseGermanShortDateFromText; private logDebug; private getResponseUrl; private getHeader; private isFreischaltungUrl; private isLoginPageText; private extractNonce; private maskNonce; private get debugLogging(); /** * Detail-Logging des Login-Flows. Anders als logDebug faellt das bewusst * NICHT auf info zurueck - ohne debug-Logger bleiben die Details still. */ private logLoginDetail; private maskValue; /** * Liest die Cookies des Jars fuer eine URL aus. Liefert eine leere Liste, * solange kein debug-Logger haengt - dann wird gar nicht erst serialisiert. */ private snapshotCookies; /** * Maskiert die Werte im rohen Set-Cookie-Header - sonst stuende die neue * Session-ID im Klartext im Log, obwohl der Jar-Snapshot sie maskiert. */ private formatSetCookieHeader; /** Wie snapshotCookies, aber mit maskierten Werten - nur das geht ins Log. */ private formatCookies; private diffCookies; /** * Klammert einen Request mit je einem Cookie-Snapshot davor und danach. * Der Snapshot davor wird vor dem Absenden geloggt, damit er auch dann * im Log steht, wenn der Request haengt oder wirft. */ private loggedRequest; } //# sourceMappingURL=AgrarmonitorConnector.d.ts.map