@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.
Files changed (110) hide show
  1. package/README.md +95 -15
  2. package/dist/cjs/client/aufrufe.d.ts +1 -1
  3. package/dist/cjs/client/aufrufe.js +2 -0
  4. package/dist/cjs/client/errors.d.ts +7 -1
  5. package/dist/cjs/client/errors.js +8 -1
  6. package/dist/cjs/client/receipts.d.ts +16 -0
  7. package/dist/cjs/client/receipts.js +10 -0
  8. package/dist/cjs/client/transport.js +5 -4
  9. package/dist/cjs/index.d.ts +1 -1
  10. package/dist/cjs/index.js +4 -2
  11. package/dist/cjs/kasse/index.d.ts +1 -0
  12. package/dist/cjs/kasse/index.js +3 -0
  13. package/dist/cjs/kasse/trinkgeld.d.ts +10 -0
  14. package/dist/cjs/kasse/trinkgeld.js +27 -0
  15. package/dist/cjs/models/cancellation.d.ts +22 -0
  16. package/dist/cjs/models/cancellation.js +31 -1
  17. package/dist/cjs/models/hobex-receipt.js +9 -2
  18. package/dist/cjs/models/index.d.ts +1 -1
  19. package/dist/cjs/models/index.js +3 -1
  20. package/dist/cjs/models/receipt.js +3 -0
  21. package/dist/cjs/models/voucher.js +18 -2
  22. package/dist/cjs/payments/hobex-hps/connect-client.d.ts +104 -0
  23. package/dist/cjs/payments/hobex-hps/connect-client.js +159 -0
  24. package/dist/cjs/payments/hobex-hps/errors.d.ts +122 -0
  25. package/dist/cjs/payments/hobex-hps/errors.js +158 -0
  26. package/dist/cjs/payments/hobex-hps/events.d.ts +22 -0
  27. package/dist/cjs/payments/hobex-hps/events.js +2 -0
  28. package/dist/cjs/payments/hobex-hps/index.d.ts +27 -0
  29. package/dist/cjs/payments/hobex-hps/index.js +66 -0
  30. package/dist/cjs/payments/hobex-hps/outcome.d.ts +31 -0
  31. package/dist/cjs/payments/hobex-hps/outcome.js +7 -0
  32. package/dist/cjs/payments/hobex-hps/payments.d.ts +149 -0
  33. package/dist/cjs/payments/hobex-hps/payments.js +550 -0
  34. package/dist/cjs/payments/hobex-hps/receipt.d.ts +28 -0
  35. package/dist/cjs/payments/hobex-hps/receipt.js +60 -0
  36. package/dist/cjs/payments/hobex-hps/transaction-id.d.ts +65 -0
  37. package/dist/cjs/payments/hobex-hps/transaction-id.js +91 -0
  38. package/dist/cjs/payments/hobex-hps/transaction-response.d.ts +163 -0
  39. package/dist/cjs/payments/hobex-hps/transaction-response.js +245 -0
  40. package/dist/cjs/payments/hobex.js +9 -6
  41. package/dist/cjs/payments/index.d.ts +26 -14
  42. package/dist/cjs/payments/index.js +59 -15
  43. package/dist/cjs/printing/index.d.ts +1 -1
  44. package/dist/cjs/printing/index.js +2 -1
  45. package/dist/cjs/printing/webusb.d.ts +37 -7
  46. package/dist/cjs/printing/webusb.js +76 -18
  47. package/dist/cjs/receipt/epos.d.ts +18 -0
  48. package/dist/cjs/receipt/epos.js +78 -6
  49. package/dist/cjs/receipt/index.d.ts +1 -1
  50. package/dist/cjs/receipt/index.js +2 -1
  51. package/dist/cjs/register/index.d.ts +1 -1
  52. package/dist/cjs/register/index.js +2 -1
  53. package/dist/cjs/register/pairing.d.ts +67 -1
  54. package/dist/cjs/register/pairing.js +59 -3
  55. package/dist/esm/client/aufrufe.d.ts +1 -1
  56. package/dist/esm/client/aufrufe.js +2 -0
  57. package/dist/esm/client/errors.d.ts +7 -1
  58. package/dist/esm/client/errors.js +8 -1
  59. package/dist/esm/client/receipts.d.ts +16 -0
  60. package/dist/esm/client/receipts.js +10 -0
  61. package/dist/esm/client/transport.js +5 -4
  62. package/dist/esm/index.d.ts +1 -1
  63. package/dist/esm/index.js +1 -1
  64. package/dist/esm/kasse/index.d.ts +1 -0
  65. package/dist/esm/kasse/index.js +1 -0
  66. package/dist/esm/kasse/trinkgeld.d.ts +10 -0
  67. package/dist/esm/kasse/trinkgeld.js +24 -0
  68. package/dist/esm/models/cancellation.d.ts +22 -0
  69. package/dist/esm/models/cancellation.js +29 -0
  70. package/dist/esm/models/hobex-receipt.js +10 -3
  71. package/dist/esm/models/index.d.ts +1 -1
  72. package/dist/esm/models/index.js +1 -1
  73. package/dist/esm/models/receipt.js +3 -0
  74. package/dist/esm/models/voucher.js +18 -2
  75. package/dist/esm/payments/hobex-hps/connect-client.d.ts +104 -0
  76. package/dist/esm/payments/hobex-hps/connect-client.js +156 -0
  77. package/dist/esm/payments/hobex-hps/errors.d.ts +122 -0
  78. package/dist/esm/payments/hobex-hps/errors.js +149 -0
  79. package/dist/esm/payments/hobex-hps/events.d.ts +22 -0
  80. package/dist/esm/payments/hobex-hps/events.js +1 -0
  81. package/dist/esm/payments/hobex-hps/index.d.ts +27 -0
  82. package/dist/esm/payments/hobex-hps/index.js +26 -0
  83. package/dist/esm/payments/hobex-hps/outcome.d.ts +31 -0
  84. package/dist/esm/payments/hobex-hps/outcome.js +4 -0
  85. package/dist/esm/payments/hobex-hps/payments.d.ts +149 -0
  86. package/dist/esm/payments/hobex-hps/payments.js +547 -0
  87. package/dist/esm/payments/hobex-hps/receipt.d.ts +28 -0
  88. package/dist/esm/payments/hobex-hps/receipt.js +57 -0
  89. package/dist/esm/payments/hobex-hps/transaction-id.d.ts +65 -0
  90. package/dist/esm/payments/hobex-hps/transaction-id.js +86 -0
  91. package/dist/esm/payments/hobex-hps/transaction-response.d.ts +163 -0
  92. package/dist/esm/payments/hobex-hps/transaction-response.js +233 -0
  93. package/dist/esm/payments/hobex.js +9 -6
  94. package/dist/esm/payments/index.d.ts +26 -14
  95. package/dist/esm/payments/index.js +26 -14
  96. package/dist/esm/printing/index.d.ts +1 -1
  97. package/dist/esm/printing/index.js +1 -1
  98. package/dist/esm/printing/webusb.d.ts +37 -7
  99. package/dist/esm/printing/webusb.js +74 -17
  100. package/dist/esm/receipt/epos.d.ts +18 -0
  101. package/dist/esm/receipt/epos.js +76 -6
  102. package/dist/esm/receipt/index.d.ts +1 -1
  103. package/dist/esm/receipt/index.js +1 -1
  104. package/dist/esm/register/index.d.ts +1 -1
  105. package/dist/esm/register/index.js +1 -1
  106. package/dist/esm/register/pairing.d.ts +67 -1
  107. package/dist/esm/register/pairing.js +58 -3
  108. package/fixtures/hobex-hps-codes.json +67 -0
  109. package/fixtures/oberflaeche.json +3 -1
  110. 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;