@kreiseck/kasseneck-api 0.13.1 → 0.13.2
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/CHANGELOG.md +21 -0
- package/README.md +96 -16
- package/dist/cjs/client/auth.d.ts +4 -4
- package/dist/cjs/client/auth.js +3 -3
- package/dist/cjs/client/cashregisters.d.ts +1 -1
- package/dist/cjs/client/cashregisters.js +1 -1
- package/dist/cjs/client/errors.d.ts +1 -1
- package/dist/cjs/client/errors.js +2 -2
- package/dist/cjs/client/receipts.d.ts +1 -1
- package/dist/cjs/client/receipts.js +1 -1
- package/dist/cjs/client/transport.d.ts +1 -1
- package/dist/cjs/client/transport.js +2 -2
- package/dist/cjs/models/cashregister.d.ts +2 -2
- package/dist/cjs/models/receipt-company.d.ts +1 -1
- package/dist/cjs/register/index.d.ts +1 -1
- package/dist/cjs/register/index.js +1 -1
- package/dist/cjs/register/pairing.d.ts +2 -2
- package/dist/esm/client/auth.d.ts +4 -4
- package/dist/esm/client/auth.js +3 -3
- package/dist/esm/client/cashregisters.d.ts +1 -1
- package/dist/esm/client/cashregisters.js +1 -1
- package/dist/esm/client/errors.d.ts +1 -1
- package/dist/esm/client/errors.js +2 -2
- package/dist/esm/client/receipts.d.ts +1 -1
- package/dist/esm/client/receipts.js +1 -1
- package/dist/esm/client/transport.d.ts +1 -1
- package/dist/esm/client/transport.js +2 -2
- package/dist/esm/models/cashregister.d.ts +2 -2
- package/dist/esm/models/receipt-company.d.ts +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 +2 -2
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/oberflaeche.json +1 -1
- package/package.json +20 -5
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,27 @@ Was vor 0.7.0 geschah, steht in der Commit-Historie (`git log`); ab hier wird
|
|
|
4
4
|
es hier geführt. Ein Eintrag nennt die Änderung **und ihren Grund** —
|
|
5
5
|
nur der Grund überlebt den nächsten Umbau.
|
|
6
6
|
|
|
7
|
+
## 0.13.2
|
|
8
|
+
|
|
9
|
+
### Die Paketseite erklaert, wofuer das Paket da ist
|
|
10
|
+
|
|
11
|
+
**Anlass:** Wer auf npm landet, sah eine Wand aus Technik und nirgends, worum
|
|
12
|
+
es geht. Die Seite traegt jetzt das Kasseneck-Logo, einen englischen Einzeiler
|
|
13
|
+
fuer Besucher von aussen, und eine Tabelle, welche Pflichten einer
|
|
14
|
+
oesterreichischen Registrierkasse wo erledigt werden — mit Verweisen auf die
|
|
15
|
+
Wissensseiten und einem ausdruecklichen Hinweis, dass hier kein Rechtsrat steht
|
|
16
|
+
und die Verantwortung beim Unternehmer bleibt. Kopf und Fuss nennen Kreiseck
|
|
17
|
+
als Absender und verlinken dorthin. Am Code aendert sich nichts.
|
|
18
|
+
|
|
19
|
+
### Der Vertrag nennt keinen Anmeldedienst mehr beim Namen
|
|
20
|
+
|
|
21
|
+
**Anlass:** Die Doku sprach an 16 Stellen von einem bestimmten Anbieter,
|
|
22
|
+
obwohl das Paket ihn gar nicht kennt: `registerUserAuth` bekommt eine Funktion,
|
|
23
|
+
die ein Token liefert — woher es stammt, geht das Paket nichts an. Ein
|
|
24
|
+
Implementierungsdetail im Vertrag bindet beide Seiten grundlos aneinander;
|
|
25
|
+
jetzt steht dort "ID-Token des Anmeldediensts". Damit verschwindet der Name
|
|
26
|
+
auch aus den ausgelieferten Typdeklarationen.
|
|
27
|
+
|
|
7
28
|
## 0.13.1
|
|
8
29
|
|
|
9
30
|
### Der 404 beim Abbruch wird benannt, nicht als Abriss gefuehrt
|
package/README.md
CHANGED
|
@@ -1,15 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/kreiseck-at/kasseneck-api/main/doc/kasseneck.gif" alt="Kasseneck — RKSV-Registrierkasse aus Österreich" width="420">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">@kreiseck/kasseneck-api</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<b>Austrian fiscal cash register (RKSV) for JavaScript and TypeScript — signed receipts, card payments, receipt printing.</b>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/@kreiseck/kasseneck-api"><img src="https://img.shields.io/npm/v/%40kreiseck%2Fkasseneck-api?color=136B6B&label=npm" alt="npm"></a>
|
|
13
|
+
<img src="https://img.shields.io/badge/RKSV-%C2%A7%20131b%20BAO-136B6B" alt="RKSV">
|
|
14
|
+
<img src="https://img.shields.io/badge/Lizenz-Apache--2.0-136B6B" alt="Apache-2.0">
|
|
15
|
+
<a href="https://kasseneck.at"><img src="https://img.shields.io/badge/Kasseneck-kasseneck.at-132A2A" alt="kasseneck.at"></a>
|
|
16
|
+
<a href="https://kreiseck.com"><img src="https://img.shields.io/badge/von-Kreiseck-132A2A" alt="Kreiseck Software Solutions"></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
**Kasseneck** ist eine österreichische Registrierkasse nach RKSV. Dieses Paket ist
|
|
20
|
+
der JavaScript-/TypeScript-Client dafür: Ihr Code stellt Belege aus, storniert sie,
|
|
21
|
+
nimmt Kartenzahlungen entgegen und druckt Bons. Es ist der Zwilling des
|
|
22
|
+
Flutter-Pakets [`kasseneck_api`](https://pub.dev/packages/kasseneck_api):
|
|
23
|
+
dieselben Endpunkte, dieselben Modelle, dieselben Enum-Werte, im Test
|
|
24
|
+
gegeneinander geprüft.
|
|
25
|
+
|
|
26
|
+
## Was eine Registrierkasse in Österreich können muss
|
|
27
|
+
|
|
28
|
+
Die Registrierkassen- und Belegerteilungspflicht steht in § 131b der
|
|
29
|
+
Bundesabgabenordnung, die technischen Anforderungen an die Sicherheitseinrichtung
|
|
30
|
+
in der Registrierkassensicherheitsverordnung (RKSV). Daraus ergibt sich eine
|
|
31
|
+
ganze Kette von Aufgaben — die Tabelle zeigt, welche davon **diese Software**
|
|
32
|
+
übernimmt und welche beim Betrieb selbst bleiben:
|
|
33
|
+
|
|
34
|
+
| Aufgabe | Wo sie erledigt wird |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| [Signaturerstellungseinheit](https://kasseneck.at/wissen/signaturerstellungseinheit) — jede Barzahlung wird signiert | Kasseneck, nichts zu installieren |
|
|
37
|
+
| [Verkettung und DEP](https://kasseneck.at/wissen/dep) — jeder Beleg trägt den vorigen, das Protokoll ist exportierbar | Kasseneck-Backend |
|
|
38
|
+
| [Startbeleg, Monatsbeleg, Jahresbeleg](https://kasseneck.at/wissen/startbeleg-monatsbeleg-jahresbeleg) | Kasseneck, automatisch |
|
|
39
|
+
| [Meldungen an FinanzOnline](https://kasseneck.at/wissen/finanzonline) — Anmeldung, Ausfall, Außerbetriebnahme | Kasseneck-Backend |
|
|
40
|
+
| [Belegerteilungspflicht](https://kasseneck.at/wissen/belegerteilungspflicht) — jeder Kunde bekommt einen Beleg | **dieses Paket** — Bon, PDF, Bildschirm oder Link |
|
|
41
|
+
| [Ausfall der Signatureinheit](https://kasseneck.at/wissen/ausfall) — Sammelbeleg, Meldung, Nachsignatur | Kasseneck, automatisch |
|
|
42
|
+
| [Kassennachschau](https://kasseneck.at/wissen/kassennachschau) — der Prüfer verlangt das DEP | Kasseneck, Export auf Knopfdruck |
|
|
43
|
+
| Anmeldung der Kasse, Aufbewahrung, steuerliche Würdigung | **beim Unternehmer** |
|
|
44
|
+
|
|
45
|
+
Kurz: Sie bauen die Kassenoberfläche, nicht die Sicherheitseinrichtung. Ein Aufruf
|
|
46
|
+
von `createReceipt(...)` erzeugt einen signierten, verketteten und im DEP
|
|
47
|
+
abgelegten Beleg. Die Signaturkette wird gegen das offizielle Prüfwerkzeug des
|
|
48
|
+
BMF getestet.
|
|
49
|
+
|
|
50
|
+
> **Kein Rechts- oder Steuerrat.** Dieser Abschnitt beschreibt, was die Software
|
|
51
|
+
> tut. Er ersetzt keine Beratung und begründet keine Zusicherung, dass ein
|
|
52
|
+
> bestimmter Betrieb damit alle Pflichten erfüllt. Verbindlich sind die
|
|
53
|
+
> Bundesabgabenordnung, die RKSV und die Erlässe des BMF; die Verantwortung für
|
|
54
|
+
> Anmeldung, Betrieb und Aufbewahrung bleibt beim Unternehmer. Ausführlicher und
|
|
55
|
+
> mit Quellen: [kasseneck.at/wissen](https://kasseneck.at/wissen).
|
|
56
|
+
> Stand: September 2026.
|
|
57
|
+
|
|
58
|
+
## Erst ausprobieren
|
|
59
|
+
|
|
60
|
+
Es gibt eine Test-Umgebung mit eigenem Schlüssel und Test-Signaturen, getrennt
|
|
61
|
+
vom Echtbetrieb — die aktuellen Konditionen stehen auf
|
|
62
|
+
[kasseneck.at/preise](https://kasseneck.at/preise), die Schnittstelle ist unter
|
|
63
|
+
[kasseneck.at/api-doku](https://kasseneck.at/api-doku) beschrieben.
|
|
64
|
+
|
|
65
|
+
## Lieber eine fertige Kasse?
|
|
66
|
+
|
|
67
|
+
Dieses Paket ist für alle, die eine eigene Anwendung bauen. Wer einfach kassieren
|
|
68
|
+
will, muss nichts davon programmieren:
|
|
69
|
+
|
|
70
|
+
- **[Kasseneck — die fertige Registrierkasse](https://kasseneck.at)** für Telefon,
|
|
71
|
+
Tablet und Browser, inklusive Signaturerstellungseinheit und
|
|
72
|
+
FinanzOnline-Anmeldung.
|
|
73
|
+
- **[Lösungen nach Branche](https://kasseneck.at/branchen)** — vom Lokal bis zum Taxi.
|
|
74
|
+
- **[Preise](https://kasseneck.at/preise)**
|
|
75
|
+
- **[Kontakt](https://kasseneck.at/kontakt)** — auch für Kassenwechsel,
|
|
76
|
+
Partnerschaften und eigene Integrationen.
|
|
77
|
+
|
|
78
|
+
## Was drin ist
|
|
79
|
+
|
|
80
|
+
Belege ausstellen und stornieren, Belege und Kassen auflisten, Berichte
|
|
81
|
+
herunterladen, Status bei FinanzOnline abfragen, Stripe-Zahllinks und
|
|
82
|
+
Hobex-Cloud-Zahlungen, das Beleg-Layout und die ESC/POS-Erzeugung für den
|
|
83
|
+
Bondrucker — und unter `./partner` die **Partner-API**: Betriebe anlegen und bis
|
|
84
|
+
zur laufenden Kasse begleiten.
|
|
13
85
|
|
|
14
86
|
**Es läuft im Browser und in Node.** ESM ist das Hauptformat, CommonJS liegt
|
|
15
87
|
daneben; beides mit eigenen Typdeklarationen. Node ab 20.18 (`fetch` muss
|
|
@@ -33,7 +105,7 @@ bevorzugte:
|
|
|
33
105
|
| Weg | Wer | Wie |
|
|
34
106
|
|-----|-----|-----|
|
|
35
107
|
| `apiKeyAuth` | Geräte, POS-Apps, Dritte | `api_key` als Bearer + `cashregister-token`-Kopfzeile |
|
|
36
|
-
| `registerUserAuth` | Browser-Kasse |
|
|
108
|
+
| `registerUserAuth` | Browser-Kasse | ID-Token des Anmeldediensts als Bearer + `register-session`-Kopfzeile, Kasse als Parameter |
|
|
37
109
|
|
|
38
110
|
```ts
|
|
39
111
|
import { apiKeyAuth, registerUserAuth } from '@kreiseck/kasseneck-api';
|
|
@@ -41,7 +113,7 @@ import { apiKeyAuth, registerUserAuth } from '@kreiseck/kasseneck-api';
|
|
|
41
113
|
// Gerät/POS: der api_key gehört auf ein Gerät, nie in einen Browser.
|
|
42
114
|
const geraet = apiKeyAuth({ apiKey: 'kr_live_…', cashregisterToken: 'cb_live_…' });
|
|
43
115
|
|
|
44
|
-
// Browser-Kasse: das Paket kennt
|
|
116
|
+
// Browser-Kasse: das Paket kennt den Anmeldedienst nicht — es bekommt Funktionen, die
|
|
45
117
|
// ein gültiges Token bzw. die laufende Sitzung liefern. Beide werden bei JEDEM
|
|
46
118
|
// Aufruf befragt (ID-Tokens laufen nach einer Stunde ab, die Kassen-Sitzung
|
|
47
119
|
// nach 90 Sekunden).
|
|
@@ -66,7 +138,7 @@ const geraet = await pairRegisterDevice({ code: 'K7NPQR34', label: 'Schank' });
|
|
|
66
138
|
const sitzung = await registerUserLogin({ ...geraet, userId: 'ru-1', pin: '1234' });
|
|
67
139
|
```
|
|
68
140
|
|
|
69
|
-
Mit `sitzung.customToken` meldet sich der Verbraucher
|
|
141
|
+
Mit `sitzung.customToken` meldet sich der Verbraucher beim Anmeldedienst an; das
|
|
70
142
|
daraus entstehende ID-Token und `sitzung.sessionId` ergeben `registerUserAuth`.
|
|
71
143
|
|
|
72
144
|
Eine anmeldungsfreie Anmeldung gibt es dafür **nicht** — sie wäre ein
|
|
@@ -476,7 +548,7 @@ steht. Deshalb prüft das Skript auf ein `status`-Feld und nicht auf Erfolg.
|
|
|
476
548
|
Bewusst außerhalb von `npm test`: Sie braucht Netz. Ist keines da, sagt sie es
|
|
477
549
|
und endet mit 0. Aufrufe, die unter `/v1` absichtlich keine Weiterleitung
|
|
478
550
|
haben — der Kassen-Weg über `kasse.kasseneck.at/api`, die Aufrufe mit
|
|
479
|
-
|
|
551
|
+
ID-Token — stehen mit Grund in `scripts/erreichbarkeit-ausnahmen.json`.
|
|
480
552
|
Wird eine Ausnahme erreichbar, schlägt die Prüfung an: Sonst sänke die Zahl nie.
|
|
481
553
|
|
|
482
554
|
## Vertragsdateien für die Zwillinge
|
|
@@ -520,3 +592,11 @@ ankommt.
|
|
|
520
592
|
## Lizenz
|
|
521
593
|
|
|
522
594
|
Apache-2.0 — siehe `LICENSE` und `NOTICE`.
|
|
595
|
+
|
|
596
|
+
---
|
|
597
|
+
|
|
598
|
+
**Kasseneck** ist ein Produkt von
|
|
599
|
+
[Kreiseck Software Solutions](https://kreiseck.com) aus Salzburg — Apps,
|
|
600
|
+
Kassensysteme und Automatisierungen. Fragen zur Schnittstelle, zu eigenen
|
|
601
|
+
Integrationen oder zu einer Partnerschaft:
|
|
602
|
+
[kasseneck.at/kontakt](https://kasseneck.at/kontakt).
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Bearer plus die Kopfzeile `cashregister-token` (wie im Flutter-Zwilling
|
|
7
7
|
* `kasseneck_api`).
|
|
8
8
|
* - `registerUserAuth` — der Weg der Browser-Kasse: ein Kassen-Benutzer, per
|
|
9
|
-
* PIN an einem gekoppelten Geraet angemeldet.
|
|
9
|
+
* PIN an einem gekoppelten Geraet angemeldet. ID-Token als Bearer,
|
|
10
10
|
* die laufende Sitzung als Kopfzeile `register-session`, die Kasse als
|
|
11
11
|
* Parameter `cashregisterId` in der Nutzlast.
|
|
12
12
|
*
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* fuehrt keine eigenen HTTP-Aufrufe, kennt den Transport nicht und haelt keinen
|
|
15
15
|
* Zustand — genau deshalb ist sie austauschbar und einzeln testbar.
|
|
16
16
|
*
|
|
17
|
-
* Das Paket weiss **nichts**
|
|
17
|
+
* Das Paket weiss **nichts** vom Anmeldedienst: `registerUserAuth` bekommt eine
|
|
18
18
|
* Funktion, die ein gueltiges ID-Token liefert (darf `async` sein). Sie wird
|
|
19
|
-
* bei **jedem** Aufruf befragt —
|
|
19
|
+
* bei **jedem** Aufruf befragt — ID-Tokens laufen nach einer Stunde
|
|
20
20
|
* ab, die Sitzung der Browser-Kasse lebt sogar nur 90 Sekunden und wird alle
|
|
21
21
|
* 30 Sekunden erneuert; ein einmal gemerkter Wert waere also bald tot.
|
|
22
22
|
*/
|
|
@@ -39,7 +39,7 @@ export interface ApiKeyAuthOptions {
|
|
|
39
39
|
cashregisterToken: string;
|
|
40
40
|
}
|
|
41
41
|
export interface RegisterUserAuthOptions {
|
|
42
|
-
/** Liefert ein gueltiges
|
|
42
|
+
/** Liefert ein gueltiges ID-Token des Anmeldediensts; wird pro Anfrage befragt. */
|
|
43
43
|
getIdToken: () => string | Promise<string>;
|
|
44
44
|
/** Liefert die laufende Kassen-Sitzung; wird pro Anfrage befragt. */
|
|
45
45
|
getSessionId: () => string | Promise<string>;
|
package/dist/cjs/client/auth.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Bearer plus die Kopfzeile `cashregister-token` (wie im Flutter-Zwilling
|
|
8
8
|
* `kasseneck_api`).
|
|
9
9
|
* - `registerUserAuth` — der Weg der Browser-Kasse: ein Kassen-Benutzer, per
|
|
10
|
-
* PIN an einem gekoppelten Geraet angemeldet.
|
|
10
|
+
* PIN an einem gekoppelten Geraet angemeldet. ID-Token als Bearer,
|
|
11
11
|
* die laufende Sitzung als Kopfzeile `register-session`, die Kasse als
|
|
12
12
|
* Parameter `cashregisterId` in der Nutzlast.
|
|
13
13
|
*
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
* fuehrt keine eigenen HTTP-Aufrufe, kennt den Transport nicht und haelt keinen
|
|
16
16
|
* Zustand — genau deshalb ist sie austauschbar und einzeln testbar.
|
|
17
17
|
*
|
|
18
|
-
* Das Paket weiss **nichts**
|
|
18
|
+
* Das Paket weiss **nichts** vom Anmeldedienst: `registerUserAuth` bekommt eine
|
|
19
19
|
* Funktion, die ein gueltiges ID-Token liefert (darf `async` sein). Sie wird
|
|
20
|
-
* bei **jedem** Aufruf befragt —
|
|
20
|
+
* bei **jedem** Aufruf befragt — ID-Tokens laufen nach einer Stunde
|
|
21
21
|
* ab, die Sitzung der Browser-Kasse lebt sogar nur 90 Sekunden und wird alle
|
|
22
22
|
* 30 Sekunden erneuert; ein einmal gemerkter Wert waere also bald tot.
|
|
23
23
|
*/
|
|
@@ -5,7 +5,7 @@ import type { InternerTransport } from './aufrufe.js';
|
|
|
5
5
|
*
|
|
6
6
|
* **Anmeldeweg:** `listMyCashregisters` laeuft im Backend unter
|
|
7
7
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})` — der Bearer
|
|
8
|
-
* muss also ein
|
|
8
|
+
* muss also ein ID-Token des Anmeldediensts sein. Mit `apiKeyAuth` (api_key als Bearer)
|
|
9
9
|
* ist dieser Endpunkt **nicht** erreichbar; fuer die Browser-Kasse ist
|
|
10
10
|
* `registerUserAuth` der Weg. Dieses Paket bildet das nicht nach — wer darf,
|
|
11
11
|
* entscheidet allein das Backend. Der Hinweis steht hier, damit ein Leser
|
|
@@ -8,7 +8,7 @@ const errors_js_1 = require("./errors.js");
|
|
|
8
8
|
*
|
|
9
9
|
* **Anmeldeweg:** `listMyCashregisters` laeuft im Backend unter
|
|
10
10
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})` — der Bearer
|
|
11
|
-
* muss also ein
|
|
11
|
+
* muss also ein ID-Token des Anmeldediensts sein. Mit `apiKeyAuth` (api_key als Bearer)
|
|
12
12
|
* ist dieser Endpunkt **nicht** erreichbar; fuer die Browser-Kasse ist
|
|
13
13
|
* `registerUserAuth` der Weg. Dieses Paket bildet das nicht nach — wer darf,
|
|
14
14
|
* entscheidet allein das Backend. Der Hinweis steht hier, damit ein Leser
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* Sonderfall.
|
|
31
31
|
*
|
|
32
32
|
* **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
|
|
33
|
-
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token,
|
|
33
|
+
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
|
|
34
34
|
* ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
|
|
35
35
|
* ausschliesslich Funktionsname, HTTP-Status/Inhaltstyp, den vom Paket
|
|
36
36
|
* formulierten Grund und die vom Backend formulierte Meldung — nie Kopfzeilen,
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* Sonderfall.
|
|
32
32
|
*
|
|
33
33
|
* **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
|
|
34
|
-
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token,
|
|
34
|
+
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
|
|
35
35
|
* ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
|
|
36
36
|
* ausschliesslich Funktionsname, HTTP-Status/Inhaltstyp, den vom Paket
|
|
37
37
|
* formulierten Grund und die vom Backend formulierte Meldung — nie Kopfzeilen,
|
|
@@ -66,7 +66,7 @@ exports.isKasseneckAuthError = isKasseneckAuthError;
|
|
|
66
66
|
exports.isKasseneckValidationError = isKasseneckValidationError;
|
|
67
67
|
// Bezeichner-artig: Buchstabe vorn, danach nur Bezeichnerzeichen, hoechstens
|
|
68
68
|
// 64 Zeichen. Das laesst `TypeError`, `ECONNREFUSED` und `auth/internal-error`
|
|
69
|
-
// durch, aber keinen Freitext und kein
|
|
69
|
+
// durch, aber keinen Freitext und kein ID-Token (~900 Zeichen).
|
|
70
70
|
const BEZEICHNER = /^[A-Za-z][A-Za-z0-9_./-]{0,63}$/;
|
|
71
71
|
/**
|
|
72
72
|
* Reduziert eine fremde Ursache auf Name und Code — und verwirft beides, wenn
|
|
@@ -256,7 +256,7 @@ export interface ListMyReceiptsOptions {
|
|
|
256
256
|
*
|
|
257
257
|
* **Anmeldeweg:** Der Endpunkt laeuft im Backend unter
|
|
258
258
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})`, der Bearer
|
|
259
|
-
* muss also ein
|
|
259
|
+
* muss also ein ID-Token des Anmeldediensts sein — mit `apiKeyAuth` ist er nicht
|
|
260
260
|
* erreichbar. Ausserdem prueft das Backend die Kassenzuweisung hier im Rumpf
|
|
261
261
|
* (der Endpunkt laeuft mit `checkCashRegister: false`), ein Kassen-Benutzer
|
|
262
262
|
* bekommt also nur die ihm zugewiesenen Kassen.
|
|
@@ -217,7 +217,7 @@ function zeroReceipt(rufen) {
|
|
|
217
217
|
*
|
|
218
218
|
* **Anmeldeweg:** Der Endpunkt laeuft im Backend unter
|
|
219
219
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})`, der Bearer
|
|
220
|
-
* muss also ein
|
|
220
|
+
* muss also ein ID-Token des Anmeldediensts sein — mit `apiKeyAuth` ist er nicht
|
|
221
221
|
* erreichbar. Ausserdem prueft das Backend die Kassenzuweisung hier im Rumpf
|
|
222
222
|
* (der Endpunkt laeuft mit `checkCashRegister: false`), ein Kassen-Benutzer
|
|
223
223
|
* bekommt also nur die ihm zugewiesenen Kassen.
|
|
@@ -7,7 +7,7 @@ import type { KasseneckAuth } from './auth.js';
|
|
|
7
7
|
* Der Transport macht drei Dinge und sonst nichts: Anfrage bauen (Kopfzeilen
|
|
8
8
|
* von der Anmeldung, Nutzlast aus Auth-Parametern und Aufruferparametern),
|
|
9
9
|
* Zeitlimit ueberwachen, und die Antworthuelle aufloesen. Er kennt keine
|
|
10
|
-
* einzelne Backend-Funktion und keine
|
|
10
|
+
* einzelne Backend-Funktion und keine Details der Infrastruktur.
|
|
11
11
|
*
|
|
12
12
|
* Es gibt **zwei Einstiegspunkte** auf demselben Kern: [createTransport] fuer
|
|
13
13
|
* die JSON-Aufrufe und [createBinaryTransport] fuer die beiden Bericht-
|
|
@@ -12,7 +12,7 @@ const errors_js_1 = require("./errors.js");
|
|
|
12
12
|
* Der Transport macht drei Dinge und sonst nichts: Anfrage bauen (Kopfzeilen
|
|
13
13
|
* von der Anmeldung, Nutzlast aus Auth-Parametern und Aufruferparametern),
|
|
14
14
|
* Zeitlimit ueberwachen, und die Antworthuelle aufloesen. Er kennt keine
|
|
15
|
-
* einzelne Backend-Funktion und keine
|
|
15
|
+
* einzelne Backend-Funktion und keine Details der Infrastruktur.
|
|
16
16
|
*
|
|
17
17
|
* Es gibt **zwei Einstiegspunkte** auf demselben Kern: [createTransport] fuer
|
|
18
18
|
* die JSON-Aufrufe und [createBinaryTransport] fuer die beiden Bericht-
|
|
@@ -81,7 +81,7 @@ function createCore(options) {
|
|
|
81
81
|
throw new errors_js_1.KasseneckNetworkError(fehlerName, true, zeitlimitMs);
|
|
82
82
|
}
|
|
83
83
|
// Eigene Pruefungen tragen ihren geheimnisfreien Grund weiter; von einer
|
|
84
|
-
// fremden Ursache
|
|
84
|
+
// fremden Ursache bleibt nichts uebrig — weder Meldung
|
|
85
85
|
// noch Verdichtung, siehe Klassenkommentar zu KasseneckAuthError.
|
|
86
86
|
const grund = ursache instanceof errors_js_1.KasseneckAuthError ? ursache.reason : 'Anmeldung fehlgeschlagen';
|
|
87
87
|
throw new errors_js_1.KasseneckAuthError(grund, { functionName: fehlerName });
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Kasse — die Antwortform von `listMyCashregisters` (functions/index.js).
|
|
3
3
|
*
|
|
4
4
|
* Das Dart-Vorbild (`Cashregister` in kasseneck_api/lib/models/cashregister.dart)
|
|
5
|
-
* liest das **
|
|
5
|
+
* liest das **Datenbankdokument** direkt ueber das SDK der Echtzeit-Datenbank und
|
|
6
6
|
* kommt deshalb an `token` und `aes_key`. Dieses Paket spricht das Backend
|
|
7
7
|
* ausschliesslich ueber die HTTPS-Endpunkte, und die geben beides nicht her:
|
|
8
8
|
*
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* fehlendes.
|
|
21
21
|
*
|
|
22
22
|
* Aus demselben Grund fehlt `userId`: das Dart-Vorbild traegt es, weil es den
|
|
23
|
-
*
|
|
23
|
+
* **Pfad** in der Datenbank kennt (`users/{uid}/cashregisters/{id}`). In dieser
|
|
24
24
|
* Antwort steht es nicht, und ein Kassen-Benutzer erfaehrt die Kennung seines
|
|
25
25
|
* Betriebs bewusst nie — sie steckt allein im Token.
|
|
26
26
|
*/
|
|
@@ -36,7 +36,7 @@ export interface ReceiptCompany {
|
|
|
36
36
|
logoUrl?: string;
|
|
37
37
|
/** Dankestext am Belegende, je Zeile ein Eintrag. */
|
|
38
38
|
thanksMessage: string[];
|
|
39
|
-
/** Kreiseck-Branding am Belegende (
|
|
39
|
+
/** Kreiseck-Branding am Belegende (Konto-Flag `branding.kreiseck_logo`). */
|
|
40
40
|
showKreiseckLogo: boolean;
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* });
|
|
44
44
|
* ```
|
|
45
45
|
*
|
|
46
|
-
* Mit `sitzung.customToken` meldet sich der Verbraucher
|
|
46
|
+
* Mit `sitzung.customToken` meldet sich der Verbraucher beim Anmeldedienst an; das
|
|
47
47
|
* daraus entstehende ID-Token und `sitzung.sessionId` ergeben zusammen
|
|
48
48
|
* `registerUserAuth` — ab da laeuft alles Weitere ueber den ueblichen Weg.
|
|
49
49
|
*/
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
* });
|
|
45
45
|
* ```
|
|
46
46
|
*
|
|
47
|
-
* Mit `sitzung.customToken` meldet sich der Verbraucher
|
|
47
|
+
* Mit `sitzung.customToken` meldet sich der Verbraucher beim Anmeldedienst an; das
|
|
48
48
|
* daraus entstehende ID-Token und `sitzung.sessionId` ergeben zusammen
|
|
49
49
|
* `registerUserAuth` — ab da laeuft alles Weitere ueber den ueblichen Weg.
|
|
50
50
|
*/
|
|
@@ -188,9 +188,9 @@ export interface RegisterUser {
|
|
|
188
188
|
/** Ergebnis der PIN-Anmeldung. */
|
|
189
189
|
export interface RegisterUserSession {
|
|
190
190
|
/**
|
|
191
|
-
*
|
|
191
|
+
* Custom-Token des Anmeldediensts. Damit meldet der Verbraucher sich dort an
|
|
192
192
|
* und bekommt das ID-Token, das `registerUserAuth` braucht; dieses Paket
|
|
193
|
-
* kennt
|
|
193
|
+
* kennt den Anmeldedienst nicht.
|
|
194
194
|
*/
|
|
195
195
|
customToken: string;
|
|
196
196
|
/** Laufende Sitzung — Kopfzeile `register-session` jedes weiteren Aufrufs. */
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Bearer plus die Kopfzeile `cashregister-token` (wie im Flutter-Zwilling
|
|
7
7
|
* `kasseneck_api`).
|
|
8
8
|
* - `registerUserAuth` — der Weg der Browser-Kasse: ein Kassen-Benutzer, per
|
|
9
|
-
* PIN an einem gekoppelten Geraet angemeldet.
|
|
9
|
+
* PIN an einem gekoppelten Geraet angemeldet. ID-Token als Bearer,
|
|
10
10
|
* die laufende Sitzung als Kopfzeile `register-session`, die Kasse als
|
|
11
11
|
* Parameter `cashregisterId` in der Nutzlast.
|
|
12
12
|
*
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* fuehrt keine eigenen HTTP-Aufrufe, kennt den Transport nicht und haelt keinen
|
|
15
15
|
* Zustand — genau deshalb ist sie austauschbar und einzeln testbar.
|
|
16
16
|
*
|
|
17
|
-
* Das Paket weiss **nichts**
|
|
17
|
+
* Das Paket weiss **nichts** vom Anmeldedienst: `registerUserAuth` bekommt eine
|
|
18
18
|
* Funktion, die ein gueltiges ID-Token liefert (darf `async` sein). Sie wird
|
|
19
|
-
* bei **jedem** Aufruf befragt —
|
|
19
|
+
* bei **jedem** Aufruf befragt — ID-Tokens laufen nach einer Stunde
|
|
20
20
|
* ab, die Sitzung der Browser-Kasse lebt sogar nur 90 Sekunden und wird alle
|
|
21
21
|
* 30 Sekunden erneuert; ein einmal gemerkter Wert waere also bald tot.
|
|
22
22
|
*/
|
|
@@ -39,7 +39,7 @@ export interface ApiKeyAuthOptions {
|
|
|
39
39
|
cashregisterToken: string;
|
|
40
40
|
}
|
|
41
41
|
export interface RegisterUserAuthOptions {
|
|
42
|
-
/** Liefert ein gueltiges
|
|
42
|
+
/** Liefert ein gueltiges ID-Token des Anmeldediensts; wird pro Anfrage befragt. */
|
|
43
43
|
getIdToken: () => string | Promise<string>;
|
|
44
44
|
/** Liefert die laufende Kassen-Sitzung; wird pro Anfrage befragt. */
|
|
45
45
|
getSessionId: () => string | Promise<string>;
|
package/dist/esm/client/auth.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Bearer plus die Kopfzeile `cashregister-token` (wie im Flutter-Zwilling
|
|
7
7
|
* `kasseneck_api`).
|
|
8
8
|
* - `registerUserAuth` — der Weg der Browser-Kasse: ein Kassen-Benutzer, per
|
|
9
|
-
* PIN an einem gekoppelten Geraet angemeldet.
|
|
9
|
+
* PIN an einem gekoppelten Geraet angemeldet. ID-Token als Bearer,
|
|
10
10
|
* die laufende Sitzung als Kopfzeile `register-session`, die Kasse als
|
|
11
11
|
* Parameter `cashregisterId` in der Nutzlast.
|
|
12
12
|
*
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* fuehrt keine eigenen HTTP-Aufrufe, kennt den Transport nicht und haelt keinen
|
|
15
15
|
* Zustand — genau deshalb ist sie austauschbar und einzeln testbar.
|
|
16
16
|
*
|
|
17
|
-
* Das Paket weiss **nichts**
|
|
17
|
+
* Das Paket weiss **nichts** vom Anmeldedienst: `registerUserAuth` bekommt eine
|
|
18
18
|
* Funktion, die ein gueltiges ID-Token liefert (darf `async` sein). Sie wird
|
|
19
|
-
* bei **jedem** Aufruf befragt —
|
|
19
|
+
* bei **jedem** Aufruf befragt — ID-Tokens laufen nach einer Stunde
|
|
20
20
|
* ab, die Sitzung der Browser-Kasse lebt sogar nur 90 Sekunden und wird alle
|
|
21
21
|
* 30 Sekunden erneuert; ein einmal gemerkter Wert waere also bald tot.
|
|
22
22
|
*/
|
|
@@ -5,7 +5,7 @@ import type { InternerTransport } from './aufrufe.js';
|
|
|
5
5
|
*
|
|
6
6
|
* **Anmeldeweg:** `listMyCashregisters` laeuft im Backend unter
|
|
7
7
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})` — der Bearer
|
|
8
|
-
* muss also ein
|
|
8
|
+
* muss also ein ID-Token des Anmeldediensts sein. Mit `apiKeyAuth` (api_key als Bearer)
|
|
9
9
|
* ist dieser Endpunkt **nicht** erreichbar; fuer die Browser-Kasse ist
|
|
10
10
|
* `registerUserAuth` der Weg. Dieses Paket bildet das nicht nach — wer darf,
|
|
11
11
|
* entscheidet allein das Backend. Der Hinweis steht hier, damit ein Leser
|
|
@@ -5,7 +5,7 @@ import { KasseneckValidationError } from './errors.js';
|
|
|
5
5
|
*
|
|
6
6
|
* **Anmeldeweg:** `listMyCashregisters` laeuft im Backend unter
|
|
7
7
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})` — der Bearer
|
|
8
|
-
* muss also ein
|
|
8
|
+
* muss also ein ID-Token des Anmeldediensts sein. Mit `apiKeyAuth` (api_key als Bearer)
|
|
9
9
|
* ist dieser Endpunkt **nicht** erreichbar; fuer die Browser-Kasse ist
|
|
10
10
|
* `registerUserAuth` der Weg. Dieses Paket bildet das nicht nach — wer darf,
|
|
11
11
|
* entscheidet allein das Backend. Der Hinweis steht hier, damit ein Leser
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* Sonderfall.
|
|
31
31
|
*
|
|
32
32
|
* **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
|
|
33
|
-
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token,
|
|
33
|
+
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
|
|
34
34
|
* ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
|
|
35
35
|
* ausschliesslich Funktionsname, HTTP-Status/Inhaltstyp, den vom Paket
|
|
36
36
|
* formulierten Grund und die vom Backend formulierte Meldung — nie Kopfzeilen,
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* Sonderfall.
|
|
31
31
|
*
|
|
32
32
|
* **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
|
|
33
|
-
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token,
|
|
33
|
+
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
|
|
34
34
|
* ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
|
|
35
35
|
* ausschliesslich Funktionsname, HTTP-Status/Inhaltstyp, den vom Paket
|
|
36
36
|
* formulierten Grund und die vom Backend formulierte Meldung — nie Kopfzeilen,
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
*/
|
|
57
57
|
// Bezeichner-artig: Buchstabe vorn, danach nur Bezeichnerzeichen, hoechstens
|
|
58
58
|
// 64 Zeichen. Das laesst `TypeError`, `ECONNREFUSED` und `auth/internal-error`
|
|
59
|
-
// durch, aber keinen Freitext und kein
|
|
59
|
+
// durch, aber keinen Freitext und kein ID-Token (~900 Zeichen).
|
|
60
60
|
const BEZEICHNER = /^[A-Za-z][A-Za-z0-9_./-]{0,63}$/;
|
|
61
61
|
/**
|
|
62
62
|
* Reduziert eine fremde Ursache auf Name und Code — und verwirft beides, wenn
|
|
@@ -256,7 +256,7 @@ export interface ListMyReceiptsOptions {
|
|
|
256
256
|
*
|
|
257
257
|
* **Anmeldeweg:** Der Endpunkt laeuft im Backend unter
|
|
258
258
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})`, der Bearer
|
|
259
|
-
* muss also ein
|
|
259
|
+
* muss also ein ID-Token des Anmeldediensts sein — mit `apiKeyAuth` ist er nicht
|
|
260
260
|
* erreichbar. Ausserdem prueft das Backend die Kassenzuweisung hier im Rumpf
|
|
261
261
|
* (der Endpunkt laeuft mit `checkCashRegister: false`), ein Kassen-Benutzer
|
|
262
262
|
* bekommt also nur die ihm zugewiesenen Kassen.
|
|
@@ -202,7 +202,7 @@ export function zeroReceipt(rufen) {
|
|
|
202
202
|
*
|
|
203
203
|
* **Anmeldeweg:** Der Endpunkt laeuft im Backend unter
|
|
204
204
|
* `checkRequest(req, 'customer', …, {allowRegisterUser: true})`, der Bearer
|
|
205
|
-
* muss also ein
|
|
205
|
+
* muss also ein ID-Token des Anmeldediensts sein — mit `apiKeyAuth` ist er nicht
|
|
206
206
|
* erreichbar. Ausserdem prueft das Backend die Kassenzuweisung hier im Rumpf
|
|
207
207
|
* (der Endpunkt laeuft mit `checkCashRegister: false`), ein Kassen-Benutzer
|
|
208
208
|
* bekommt also nur die ihm zugewiesenen Kassen.
|
|
@@ -7,7 +7,7 @@ import type { KasseneckAuth } from './auth.js';
|
|
|
7
7
|
* Der Transport macht drei Dinge und sonst nichts: Anfrage bauen (Kopfzeilen
|
|
8
8
|
* von der Anmeldung, Nutzlast aus Auth-Parametern und Aufruferparametern),
|
|
9
9
|
* Zeitlimit ueberwachen, und die Antworthuelle aufloesen. Er kennt keine
|
|
10
|
-
* einzelne Backend-Funktion und keine
|
|
10
|
+
* einzelne Backend-Funktion und keine Details der Infrastruktur.
|
|
11
11
|
*
|
|
12
12
|
* Es gibt **zwei Einstiegspunkte** auf demselben Kern: [createTransport] fuer
|
|
13
13
|
* die JSON-Aufrufe und [createBinaryTransport] fuer die beiden Bericht-
|
|
@@ -7,7 +7,7 @@ import { KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNet
|
|
|
7
7
|
* Der Transport macht drei Dinge und sonst nichts: Anfrage bauen (Kopfzeilen
|
|
8
8
|
* von der Anmeldung, Nutzlast aus Auth-Parametern und Aufruferparametern),
|
|
9
9
|
* Zeitlimit ueberwachen, und die Antworthuelle aufloesen. Er kennt keine
|
|
10
|
-
* einzelne Backend-Funktion und keine
|
|
10
|
+
* einzelne Backend-Funktion und keine Details der Infrastruktur.
|
|
11
11
|
*
|
|
12
12
|
* Es gibt **zwei Einstiegspunkte** auf demselben Kern: [createTransport] fuer
|
|
13
13
|
* die JSON-Aufrufe und [createBinaryTransport] fuer die beiden Bericht-
|
|
@@ -76,7 +76,7 @@ function createCore(options) {
|
|
|
76
76
|
throw new KasseneckNetworkError(fehlerName, true, zeitlimitMs);
|
|
77
77
|
}
|
|
78
78
|
// Eigene Pruefungen tragen ihren geheimnisfreien Grund weiter; von einer
|
|
79
|
-
// fremden Ursache
|
|
79
|
+
// fremden Ursache bleibt nichts uebrig — weder Meldung
|
|
80
80
|
// noch Verdichtung, siehe Klassenkommentar zu KasseneckAuthError.
|
|
81
81
|
const grund = ursache instanceof KasseneckAuthError ? ursache.reason : 'Anmeldung fehlgeschlagen';
|
|
82
82
|
throw new KasseneckAuthError(grund, { functionName: fehlerName });
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Kasse — die Antwortform von `listMyCashregisters` (functions/index.js).
|
|
3
3
|
*
|
|
4
4
|
* Das Dart-Vorbild (`Cashregister` in kasseneck_api/lib/models/cashregister.dart)
|
|
5
|
-
* liest das **
|
|
5
|
+
* liest das **Datenbankdokument** direkt ueber das SDK der Echtzeit-Datenbank und
|
|
6
6
|
* kommt deshalb an `token` und `aes_key`. Dieses Paket spricht das Backend
|
|
7
7
|
* ausschliesslich ueber die HTTPS-Endpunkte, und die geben beides nicht her:
|
|
8
8
|
*
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* fehlendes.
|
|
21
21
|
*
|
|
22
22
|
* Aus demselben Grund fehlt `userId`: das Dart-Vorbild traegt es, weil es den
|
|
23
|
-
*
|
|
23
|
+
* **Pfad** in der Datenbank kennt (`users/{uid}/cashregisters/{id}`). In dieser
|
|
24
24
|
* Antwort steht es nicht, und ein Kassen-Benutzer erfaehrt die Kennung seines
|
|
25
25
|
* Betriebs bewusst nie — sie steckt allein im Token.
|
|
26
26
|
*/
|
|
@@ -36,7 +36,7 @@ export interface ReceiptCompany {
|
|
|
36
36
|
logoUrl?: string;
|
|
37
37
|
/** Dankestext am Belegende, je Zeile ein Eintrag. */
|
|
38
38
|
thanksMessage: string[];
|
|
39
|
-
/** Kreiseck-Branding am Belegende (
|
|
39
|
+
/** Kreiseck-Branding am Belegende (Konto-Flag `branding.kreiseck_logo`). */
|
|
40
40
|
showKreiseckLogo: boolean;
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* });
|
|
44
44
|
* ```
|
|
45
45
|
*
|
|
46
|
-
* Mit `sitzung.customToken` meldet sich der Verbraucher
|
|
46
|
+
* Mit `sitzung.customToken` meldet sich der Verbraucher beim Anmeldedienst an; das
|
|
47
47
|
* daraus entstehende ID-Token und `sitzung.sessionId` ergeben zusammen
|
|
48
48
|
* `registerUserAuth` — ab da laeuft alles Weitere ueber den ueblichen Weg.
|
|
49
49
|
*/
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* });
|
|
44
44
|
* ```
|
|
45
45
|
*
|
|
46
|
-
* Mit `sitzung.customToken` meldet sich der Verbraucher
|
|
46
|
+
* Mit `sitzung.customToken` meldet sich der Verbraucher beim Anmeldedienst an; das
|
|
47
47
|
* daraus entstehende ID-Token und `sitzung.sessionId` ergeben zusammen
|
|
48
48
|
* `registerUserAuth` — ab da laeuft alles Weitere ueber den ueblichen Weg.
|
|
49
49
|
*/
|
|
@@ -188,9 +188,9 @@ export interface RegisterUser {
|
|
|
188
188
|
/** Ergebnis der PIN-Anmeldung. */
|
|
189
189
|
export interface RegisterUserSession {
|
|
190
190
|
/**
|
|
191
|
-
*
|
|
191
|
+
* Custom-Token des Anmeldediensts. Damit meldet der Verbraucher sich dort an
|
|
192
192
|
* und bekommt das ID-Token, das `registerUserAuth` braucht; dieses Paket
|
|
193
|
-
* kennt
|
|
193
|
+
* kennt den Anmeldedienst nicht.
|
|
194
194
|
*/
|
|
195
195
|
customToken: string;
|
|
196
196
|
/** Laufende Sitzung — Kopfzeile `register-session` jedes weiteren Aufrufs. */
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kreiseck/kasseneck-api",
|
|
3
|
-
"version": "0.13.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.13.2",
|
|
4
|
+
"description": "RKSV-Registrierkasse fuer JavaScript und TypeScript: signierte Belege, Storno, Kartenzahlung, Bondruck. Austrian fiscal cash register (RKSV) API client.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Kreiseck",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://kasseneck.at/api-doku",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/kreiseck-at/kasseneck-api.git"
|
|
@@ -14,10 +14,25 @@
|
|
|
14
14
|
"kasseneck",
|
|
15
15
|
"rksv",
|
|
16
16
|
"registrierkasse",
|
|
17
|
+
"kassensystem",
|
|
18
|
+
"kassensoftware",
|
|
19
|
+
"belegerteilungspflicht",
|
|
20
|
+
"finanzonline",
|
|
21
|
+
"dep",
|
|
22
|
+
"beleg",
|
|
23
|
+
"bon",
|
|
24
|
+
"bondrucker",
|
|
25
|
+
"escpos",
|
|
26
|
+
"oesterreich",
|
|
17
27
|
"österreich",
|
|
18
28
|
"austria",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
29
|
+
"austrian",
|
|
30
|
+
"fiscal",
|
|
31
|
+
"cash-register",
|
|
32
|
+
"point-of-sale",
|
|
33
|
+
"pos",
|
|
34
|
+
"receipt",
|
|
35
|
+
"typescript"
|
|
21
36
|
],
|
|
22
37
|
"type": "module",
|
|
23
38
|
"main": "./dist/cjs/index.js",
|