import { type HpsTransactionResponse } from './transaction-response.js'; /** * Client fuer die Terminal-Endpunkte von **Kasseneck Connect** — dem lokalen * Geraete-Agenten, der ueber HTTP erreichbar ist und mit dem hobex-HPS * spricht (`kasseneck-connect/lib/src/api/routes_terminal.dart`). Connect * reicht die Antwort des Terminals ROH durch und ordnet nichts ein; die * Einordnung passiert in `transaction-response.ts` und `payments.ts`. * * **Kein direkter Terminal-Kontakt.** Ein Browser hat keine rohen * TCP-Sockets — das ist der Unterschied zum Dart-Zwilling `HpsClient`, der * das HPS-Terminal direkt anspricht. Dieser Client spricht ausschliesslich * mit Connect, niemals mit dem Terminal selbst. * * **`payment`/`status`/`abort`/`refund`/`cancel`.** Seit * `kasseneck-connect` Commit `1c8a003` traegt Connect auch die Gutschrift * (`POST /v1/terminal/refund`) und die Aufhebung (`POST /v1/terminal/cancel`) * — beide erben denselben Fehlerpfad wie `payment` (`error.detail.terminalHttpStatus`, * siehe `HpsConnectTerminalError.isTerminalBusy`). */ /** Adresse des Ziel-Terminals — bei jedem Aufruf mitgegeben, Connect selbst ist zustandslos. */ export interface HpsConnectTarget { /** IP oder Hostname des Terminals im Kassen-Netz. */ host: string; /** Vorgabe: `8080` (hobex-HPS-Standardport), siehe Connect. */ port?: number; /** Terminal-ID, wie am Geraet angezeigt (fuehrende Nullen werden toleriert). */ tid: string; } export interface HpsConnectPaymentOptions extends HpsConnectTarget { /** Kennung dieser Zahlung — MUSS vor diesem Aufruf feststehen, siehe `transaction-id.ts`. */ transactionId: string; /** Zu belastender Betrag in **Cent** (ohne Trinkgeld). */ amountCents: number; /** Trinkgeld in **Cent**; das Terminal belastet Betrag + Trinkgeld in einem. */ tipCents?: number; reference?: string; currency?: string; language?: string; } export interface HpsConnectTransactionOptions extends HpsConnectTarget { transactionId: string; } export interface HpsConnectRefundOptions extends HpsConnectTarget { /** Kennung der Gutschrift SELBST — eine NEUE, nicht die der erstatteten Zahlung. */ transactionId: string; /** Kennung der erstatteten Zahlung. Verlangt Connect zwingend, siehe `_handleRefund`. */ originalTransactionId: string; /** Zu erstattender Betrag in **Cent**. */ amountCents: number; reference?: string; currency?: string; language?: string; } export interface HpsConnectCancelOptions extends HpsConnectTarget { /** Kennung der URSPRUENGLICHEN Zahlung — keine neue. */ transactionId: string; /** Pflicht: das Terminal weist einen Void ohne Betrag mit `400 Missing amount` ab. */ amountCents: number; currency?: string; language?: string; } /** Austauschbare `fetch`-Umsetzung, minimal genug fuer eine Attrappe im Test. */ export interface HpsConnectFetchResponse { status: number; text(): Promise; } export type HpsConnectFetch = (url: string, init: { method: string; headers: Record; body: string; signal: AbortSignal; }) => Promise; export interface HpsConnectClientOptions { /** Basisadresse des Agenten. Vorgabe `http://127.0.0.1:27182` (README `kasseneck-connect`). */ baseUrl?: string; /** Kopplungstoken, geht als `Authorization: Bearer ` mit. */ token: string; /** * Zeitlimit fuer `status`/`abort`/`diagnosis` in ms. Vorgabe 30 s — deutlich * ueber Connects eigenem `hpsKurzTimeout` (15 s), damit dieser Client nicht * VOR Connect selbst aufgibt und dessen Fehlermeldung verschluckt. */ shortTimeoutMs?: number; /** * Zeitlimit fuer `payment` in ms. Vorgabe 4,5 Minuten — ueber Connects * eigenem `hpsZahlungTimeout` (4 Minuten): eine Zahlung blockiert, bis der * Karteninhaber fertig ist, das darf nicht vorzeitig aufgegeben werden. */ paymentTimeoutMs?: number; /** Eigene `fetch`-Umsetzung (Tests). Vorgabe: globales `fetch`. */ fetch?: HpsConnectFetch; } export interface HpsConnectClient { payment(options: HpsConnectPaymentOptions): Promise; status(options: HpsConnectTransactionOptions): Promise; abort(options: HpsConnectTransactionOptions): Promise; /** Gutschrift — ein Kartenfluss wie [payment], deshalb dieselbe lange Frist. */ refund(options: HpsConnectRefundOptions): Promise; /** Aufhebung (Storno/Void) — kurzer Aufruf, keine Karteninteraktion. */ cancel(options: HpsConnectCancelOptions): Promise; /** Erreichbarkeits-/Firmware-Check, folgenlos. Rohe Nutzlast, Connect ordnet nichts ein. */ diagnosis(options: HpsConnectTarget): Promise>; } export declare function createHpsConnectClient(options: HpsConnectClientOptions): HpsConnectClient;