@kreiseck/kasseneck-api 0.6.45 → 0.6.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -15
- package/dist/cjs/client/aufrufe.d.ts +1 -1
- package/dist/cjs/client/aufrufe.js +2 -0
- package/dist/cjs/client/errors.d.ts +7 -1
- package/dist/cjs/client/errors.js +8 -1
- package/dist/cjs/client/receipts.d.ts +16 -0
- package/dist/cjs/client/receipts.js +10 -0
- package/dist/cjs/client/transport.js +5 -4
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +4 -2
- package/dist/cjs/kasse/index.d.ts +1 -0
- package/dist/cjs/kasse/index.js +3 -0
- package/dist/cjs/kasse/trinkgeld.d.ts +10 -0
- package/dist/cjs/kasse/trinkgeld.js +27 -0
- package/dist/cjs/models/cancellation.d.ts +22 -0
- package/dist/cjs/models/cancellation.js +31 -1
- package/dist/cjs/models/hobex-receipt.js +9 -2
- package/dist/cjs/models/index.d.ts +1 -1
- package/dist/cjs/models/index.js +3 -1
- package/dist/cjs/models/receipt.js +3 -0
- package/dist/cjs/models/voucher.js +18 -2
- package/dist/cjs/payments/hobex-hps/connect-client.d.ts +104 -0
- package/dist/cjs/payments/hobex-hps/connect-client.js +159 -0
- package/dist/cjs/payments/hobex-hps/errors.d.ts +122 -0
- package/dist/cjs/payments/hobex-hps/errors.js +158 -0
- package/dist/cjs/payments/hobex-hps/events.d.ts +22 -0
- package/dist/cjs/payments/hobex-hps/events.js +2 -0
- package/dist/cjs/payments/hobex-hps/index.d.ts +27 -0
- package/dist/cjs/payments/hobex-hps/index.js +66 -0
- package/dist/cjs/payments/hobex-hps/outcome.d.ts +31 -0
- package/dist/cjs/payments/hobex-hps/outcome.js +7 -0
- package/dist/cjs/payments/hobex-hps/payments.d.ts +149 -0
- package/dist/cjs/payments/hobex-hps/payments.js +550 -0
- package/dist/cjs/payments/hobex-hps/receipt.d.ts +28 -0
- package/dist/cjs/payments/hobex-hps/receipt.js +60 -0
- package/dist/cjs/payments/hobex-hps/transaction-id.d.ts +65 -0
- package/dist/cjs/payments/hobex-hps/transaction-id.js +91 -0
- package/dist/cjs/payments/hobex-hps/transaction-response.d.ts +163 -0
- package/dist/cjs/payments/hobex-hps/transaction-response.js +245 -0
- package/dist/cjs/payments/hobex.js +9 -6
- package/dist/cjs/payments/index.d.ts +26 -14
- package/dist/cjs/payments/index.js +59 -15
- package/dist/cjs/printing/index.d.ts +1 -1
- package/dist/cjs/printing/index.js +2 -1
- package/dist/cjs/printing/webusb.d.ts +37 -7
- package/dist/cjs/printing/webusb.js +76 -18
- package/dist/cjs/receipt/epos.d.ts +18 -0
- package/dist/cjs/receipt/epos.js +78 -6
- package/dist/cjs/receipt/index.d.ts +1 -1
- package/dist/cjs/receipt/index.js +2 -1
- package/dist/cjs/register/index.d.ts +1 -1
- package/dist/cjs/register/index.js +2 -1
- package/dist/cjs/register/pairing.d.ts +67 -1
- package/dist/cjs/register/pairing.js +59 -3
- package/dist/esm/client/aufrufe.d.ts +1 -1
- package/dist/esm/client/aufrufe.js +2 -0
- package/dist/esm/client/errors.d.ts +7 -1
- package/dist/esm/client/errors.js +8 -1
- package/dist/esm/client/receipts.d.ts +16 -0
- package/dist/esm/client/receipts.js +10 -0
- package/dist/esm/client/transport.js +5 -4
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/kasse/index.d.ts +1 -0
- package/dist/esm/kasse/index.js +1 -0
- package/dist/esm/kasse/trinkgeld.d.ts +10 -0
- package/dist/esm/kasse/trinkgeld.js +24 -0
- package/dist/esm/models/cancellation.d.ts +22 -0
- package/dist/esm/models/cancellation.js +29 -0
- package/dist/esm/models/hobex-receipt.js +10 -3
- package/dist/esm/models/index.d.ts +1 -1
- package/dist/esm/models/index.js +1 -1
- package/dist/esm/models/receipt.js +3 -0
- package/dist/esm/models/voucher.js +18 -2
- package/dist/esm/payments/hobex-hps/connect-client.d.ts +104 -0
- package/dist/esm/payments/hobex-hps/connect-client.js +156 -0
- package/dist/esm/payments/hobex-hps/errors.d.ts +122 -0
- package/dist/esm/payments/hobex-hps/errors.js +149 -0
- package/dist/esm/payments/hobex-hps/events.d.ts +22 -0
- package/dist/esm/payments/hobex-hps/events.js +1 -0
- package/dist/esm/payments/hobex-hps/index.d.ts +27 -0
- package/dist/esm/payments/hobex-hps/index.js +26 -0
- package/dist/esm/payments/hobex-hps/outcome.d.ts +31 -0
- package/dist/esm/payments/hobex-hps/outcome.js +4 -0
- package/dist/esm/payments/hobex-hps/payments.d.ts +149 -0
- package/dist/esm/payments/hobex-hps/payments.js +547 -0
- package/dist/esm/payments/hobex-hps/receipt.d.ts +28 -0
- package/dist/esm/payments/hobex-hps/receipt.js +57 -0
- package/dist/esm/payments/hobex-hps/transaction-id.d.ts +65 -0
- package/dist/esm/payments/hobex-hps/transaction-id.js +86 -0
- package/dist/esm/payments/hobex-hps/transaction-response.d.ts +163 -0
- package/dist/esm/payments/hobex-hps/transaction-response.js +233 -0
- package/dist/esm/payments/hobex.js +9 -6
- package/dist/esm/payments/index.d.ts +26 -14
- package/dist/esm/payments/index.js +26 -14
- package/dist/esm/printing/index.d.ts +1 -1
- package/dist/esm/printing/index.js +1 -1
- package/dist/esm/printing/webusb.d.ts +37 -7
- package/dist/esm/printing/webusb.js +74 -17
- package/dist/esm/receipt/epos.d.ts +18 -0
- package/dist/esm/receipt/epos.js +76 -6
- package/dist/esm/receipt/index.d.ts +1 -1
- package/dist/esm/receipt/index.js +1 -1
- package/dist/esm/register/index.d.ts +1 -1
- package/dist/esm/register/index.js +1 -1
- package/dist/esm/register/pairing.d.ts +67 -1
- package/dist/esm/register/pairing.js +58 -3
- package/fixtures/hobex-hps-codes.json +67 -0
- package/fixtures/oberflaeche.json +3 -1
- package/package.json +4 -2
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { HpsConnectClient, HpsConnectTarget } from './connect-client.js';
|
|
2
|
+
import type { HpsPaymentObserver } from './events.js';
|
|
3
|
+
import type { HpsPaymentResult } from './outcome.js';
|
|
4
|
+
/**
|
|
5
|
+
* Kartenzahlung ueber **Kasseneck Connect**, deren Ausgang IMMER bekannt ist.
|
|
6
|
+
*
|
|
7
|
+
* Zwilling von `HpsPayments` (`kasseneck_api/lib/src/hobex_hps/hps_payments.dart`)
|
|
8
|
+
* — Logik und Begruendungen sind von dort uebernommen, nicht neu erfunden.
|
|
9
|
+
* Was dort an Flutter/Dart-Spezifischem haengt, gehoert hier nicht hin; siehe
|
|
10
|
+
* `connect-client.ts` fuer den wesentlichen Unterschied (Connect statt
|
|
11
|
+
* direktem Terminal-Kontakt).
|
|
12
|
+
*
|
|
13
|
+
* [pay], [refund] und [cancel] -- seit `kasseneck-connect` Commit `1c8a003`
|
|
14
|
+
* traegt Connect auch die beiden letzteren, siehe `connect-client.ts`.
|
|
15
|
+
*
|
|
16
|
+
* Regel, von der nicht abgewichen wird: `outcome: 'declined'` entsteht
|
|
17
|
+
* ausschliesslich aus einer POSITIVEN Aussage — einem GEMESSENEN Ergebniscode
|
|
18
|
+
* des Terminals ungleich `'0'` ([isConclusive]), einem nachweislich
|
|
19
|
+
* gelungenen Abbruch, oder dem gemessenen "Terminal beschaeftigt"-Fall
|
|
20
|
+
* (HTTP 409 auf die ERZEUGENDE Anfrage, siehe `errors.ts`,
|
|
21
|
+
* `HpsConnectTerminalError.isTerminalBusy`). Ein Transportfehler, ein
|
|
22
|
+
* Zeitablauf oder eine Wissensluecke fuehren NIE dorthin: keines davon ist
|
|
23
|
+
* eine Aussage darueber, dass nichts belastet wurde. Genau diese
|
|
24
|
+
* Verwechslung hat am 24.08.2026 eine echte Belastung als unbelastet
|
|
25
|
+
* ausgewiesen und den Kunden ein zweites Mal belastet.
|
|
26
|
+
*
|
|
27
|
+
* ## Der Klaerweg, wie er am 26./27.08.2026 am hobex-HPS gemessen wurde
|
|
28
|
+
*
|
|
29
|
+
* Bleibt die Antwort auf eine Zahlung aus:
|
|
30
|
+
*
|
|
31
|
+
* 1. [HpsConnectClient.abort] einmalig versuchen.
|
|
32
|
+
* 2. `responseCode === '0'` -> der Vorgang war noch abbrechbar, also nicht
|
|
33
|
+
* abgeschlossen -> `declined`, beweisbar.
|
|
34
|
+
* 3. Jeder andere Code (gemessen `100010`) -> der Vorgang ist ueber den
|
|
35
|
+
* abbrechbaren Punkt hinaus -> JETZT die Statusabfrage pollen, sie liefert
|
|
36
|
+
* nun eine echte Aussage.
|
|
37
|
+
* 4. Abbruch scheitert am Transport -> pollen wie in 3.
|
|
38
|
+
* 5. Beim Pollen ist `9027` KEIN Ergebnis, sondern ein Grund weiterzumachen.
|
|
39
|
+
* Budget erschoepft -> `unresolved`.
|
|
40
|
+
*
|
|
41
|
+
* Der Abbruch VOR dem Pollen ist wesentlich: die Statusabfrage meldet
|
|
42
|
+
* "laeuft noch" nie (sie antwortet auf jeden nicht genehmigten Vorgang mit
|
|
43
|
+
* `9027`). Der Abbruchversuch ist auf einen Bruchteil des Klaerbudgets
|
|
44
|
+
* gedeckelt ([ABORT_BUDGET_DIVISOR]), sonst friesst ein haengender Abbruch
|
|
45
|
+
* die ganze Klaerung.
|
|
46
|
+
*
|
|
47
|
+
* Die Kennung ist in JEDEM Ergebnis gesetzt, auch bei `'unresolved'`.
|
|
48
|
+
*
|
|
49
|
+
* ## [refund] bekommt EXAKT denselben Klaerweg wie [pay]
|
|
50
|
+
*
|
|
51
|
+
* Abbruch eingeschlossen -- und das ist GEMESSEN, nicht analog geschlossen.
|
|
52
|
+
* Am 26.08.2026 nachgemessen: `abort` auf eine LAUFENDE Gutschrift antwortet
|
|
53
|
+
* ebenfalls mit `responseCode '0'`, und die Gutschrift endet daraufhin mit
|
|
54
|
+
* `100002` "Aborted". Der Abbruch ist dort also derselbe Diskriminator wie bei
|
|
55
|
+
* einer Zahlung. Die Kennung ist bei [refund] die des NEUEN Vorgangs (der
|
|
56
|
+
* Gutschrift selbst), eine Statusabfrage darauf liefert also genau deren
|
|
57
|
+
* Ausgang -- deshalb reicht dieselbe [resolve]-Funktion unveraendert. Ohne den
|
|
58
|
+
* Abbruch haette die Klaerung einer Gutschrift gar keinen Diskriminator mehr
|
|
59
|
+
* und endete fast immer bei `unresolved`, weil die Statusabfrage auch hier
|
|
60
|
+
* `9027` antwortet.
|
|
61
|
+
*
|
|
62
|
+
* ## [cancel] ist die Ausnahme, in beiden Richtungen
|
|
63
|
+
*
|
|
64
|
+
* Die uebergebene Kennung ist die der URSPRUENGLICHEN Zahlung, nicht die eines
|
|
65
|
+
* neuen Vorgangs -- und `'0'` bedeutet dort NICHT "genehmigt". Am 26. und
|
|
66
|
+
* 28.08.2026 gemessen (Statusabfrage auf die Original-Kennung, NACHDEM eine
|
|
67
|
+
* genehmigte Zahlung per Void aufgehoben wurde):
|
|
68
|
+
*
|
|
69
|
+
* | Antwort der Statusabfrage auf die Originalkennung | Bedeutung |
|
|
70
|
+
* |---|---|
|
|
71
|
+
* | `9011` "Transaction Canceled" | die Aufhebung hat GEWIRKT -> `approved` |
|
|
72
|
+
* | `'0'` | die Originalzahlung steht UNVERAENDERT -> die Aufhebung hat NICHT gegriffen -> `declined` |
|
|
73
|
+
* | `9027` und alles andere | weiter klaeren, am Ende `unresolved` |
|
|
74
|
+
*
|
|
75
|
+
* Zwei Sicherungen dagegen, `'0'` faelschlich fuer "nicht gegriffen" zu halten
|
|
76
|
+
* und damit den Kunden nach dem Tagesabschluss ueber eine Rueckerstattung ein
|
|
77
|
+
* zweites Mal zu bezahlen (siehe [fromCancelStatus]):
|
|
78
|
+
*
|
|
79
|
+
* 1. **`'0'` entscheidet erst ab der ZWEITEN beantworteten Statusabfrage.**
|
|
80
|
+
* Die erste laeuft unmittelbar nachdem der Aufhebungs-Aufruf abgerissen
|
|
81
|
+
* ist -- genau das Fenster, in dem die Aufhebung noch unterwegs sein kann.
|
|
82
|
+
* Reicht das Budget nur fuer eine Abfrage, endet die Klaerung bei
|
|
83
|
+
* `unresolved`.
|
|
84
|
+
* 2. **`9011` auf dem DIREKTEN Antwortweg von `cancel`** wird NICHT als
|
|
85
|
+
* `declined` gelesen -- was es dort genau heisst, ist ungemessen (siehe
|
|
86
|
+
* [fromCancelResponse]). Der Zustand der Originalzahlung wird abgefragt
|
|
87
|
+
* statt geraten.
|
|
88
|
+
*
|
|
89
|
+
* Kein [tryAbort]-Versuch bei [cancel]: die Originalzahlung ist laengst
|
|
90
|
+
* abgeschlossen und antwortet gemessen mit `100010` -- ein Abbruch darauf
|
|
91
|
+
* waere sinnlos.
|
|
92
|
+
*/
|
|
93
|
+
export interface HpsPaymentsOptions {
|
|
94
|
+
/** Wie lange insgesamt geklaert wird, bevor der Ausgang offen bleibt. Vorgabe 90 s. */
|
|
95
|
+
resolveBudgetMs?: number;
|
|
96
|
+
/** Obergrenze fuer den Abstand zwischen zwei Statusabfragen. Vorgabe 10 s. */
|
|
97
|
+
maxBackoffMs?: number;
|
|
98
|
+
/** Nach so vielen Statusabfragen in Folge, die am Transport scheitern, wird abgebrochen. Vorgabe 3. */
|
|
99
|
+
maxTransportFailures?: number;
|
|
100
|
+
/** Pausenquelle — Naht fuer Tests. Vorgabe `setTimeout`. */
|
|
101
|
+
sleep?: (ms: number) => Promise<void>;
|
|
102
|
+
/** Uhr fuer das Budget in ms — Naht fuer Tests. Vorgabe `Date.now`. */
|
|
103
|
+
now?: () => number;
|
|
104
|
+
observer?: HpsPaymentObserver;
|
|
105
|
+
}
|
|
106
|
+
export interface HpsPaymentOptions {
|
|
107
|
+
/** Zu belastender Betrag in **Cent** (ohne Trinkgeld). */
|
|
108
|
+
amountCents: number;
|
|
109
|
+
tipCents?: number;
|
|
110
|
+
reference?: string;
|
|
111
|
+
currency?: string;
|
|
112
|
+
language?: string;
|
|
113
|
+
/**
|
|
114
|
+
* Kennung; wird ohne Angabe erzeugt und im Ergebnis zurueckgegeben. Vorgeben,
|
|
115
|
+
* um einen abgebrochenen Vorgang gezielt weiterzuverfolgen.
|
|
116
|
+
*/
|
|
117
|
+
transactionId?: string;
|
|
118
|
+
}
|
|
119
|
+
export interface HpsRefundOptions {
|
|
120
|
+
/** Zu erstattender Betrag in **Cent**. */
|
|
121
|
+
amountCents: number;
|
|
122
|
+
/** Kennung der erstatteten Zahlung -- Connect verlangt sie zwingend. */
|
|
123
|
+
originalTransactionId: string;
|
|
124
|
+
reference?: string;
|
|
125
|
+
currency?: string;
|
|
126
|
+
language?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Kennung der Gutschrift SELBST; wird ohne Angabe erzeugt und im Ergebnis
|
|
129
|
+
* zurueckgegeben. Vorgeben, um eine abgebrochene Gutschrift gezielt
|
|
130
|
+
* weiterzuverfolgen -- wie bei [HpsPaymentOptions.transactionId].
|
|
131
|
+
*/
|
|
132
|
+
transactionId?: string;
|
|
133
|
+
}
|
|
134
|
+
export interface HpsCancelOptions {
|
|
135
|
+
/** Kennung der URSPRUENGLICHEN Zahlung -- keine neue, MUSS feststehen. */
|
|
136
|
+
transactionId: string;
|
|
137
|
+
/** Pflicht: ein Void ohne Betrag weist das Terminal mit `400 Missing amount` ab. */
|
|
138
|
+
amountCents: number;
|
|
139
|
+
currency?: string;
|
|
140
|
+
language?: string;
|
|
141
|
+
}
|
|
142
|
+
export interface HpsPayments {
|
|
143
|
+
pay(options: HpsPaymentOptions): Promise<HpsPaymentResult>;
|
|
144
|
+
/** Gutschrift, geklaert wie [pay] -- siehe Klassendoku oben. */
|
|
145
|
+
refund(options: HpsRefundOptions): Promise<HpsPaymentResult>;
|
|
146
|
+
/** Aufhebung (Storno/Void) einer bestehenden Zahlung -- eigener Klaerweg, siehe Klassendoku oben. */
|
|
147
|
+
cancel(options: HpsCancelOptions): Promise<HpsPaymentResult>;
|
|
148
|
+
}
|
|
149
|
+
export declare function createHpsPayments(client: HpsConnectClient, target: HpsConnectTarget, options?: HpsPaymentsOptions): HpsPayments;
|