@kreiseck/kasseneck-api 0.31.0 → 1.0.0-rc.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 +317 -0
- package/README.de.md +11 -7
- package/README.md +509 -126
- package/dist/cjs/client/api.d.ts +7 -6
- package/dist/cjs/client/api.js +2 -2
- package/dist/cjs/client/aufrufe.d.ts +29 -5
- package/dist/cjs/client/aufrufe.js +114 -2
- package/dist/cjs/client/auth.d.ts +2 -0
- package/dist/cjs/client/auth.js +17 -1
- package/dist/cjs/client/cashregisters.d.ts +1 -1
- package/dist/cjs/client/cashregisters.js +2 -2
- package/dist/cjs/client/errors.d.ts +94 -19
- package/dist/cjs/client/errors.js +132 -28
- package/dist/cjs/client/fehlercodes.d.ts +9 -0
- package/dist/cjs/client/fehlercodes.js +36 -0
- package/dist/cjs/client/index.d.ts +5 -5
- package/dist/cjs/client/index.js +11 -3
- package/dist/cjs/client/receipts.d.ts +131 -124
- package/dist/cjs/client/receipts.js +196 -137
- package/dist/cjs/client/reports.d.ts +26 -4
- package/dist/cjs/client/reports.js +37 -4
- package/dist/cjs/client/status.d.ts +3 -3
- package/dist/cjs/client/status.js +7 -7
- package/dist/cjs/client/transport.d.ts +56 -4
- package/dist/cjs/client/transport.js +234 -25
- package/dist/cjs/enums/vat-rate.d.ts +2 -2
- package/dist/cjs/enums/vat-rate.js +1 -1
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +42 -13
- package/dist/{esm/rechnung → cjs/invoice}/api.d.ts +18 -17
- package/dist/cjs/{rechnung → invoice}/api.js +6 -6
- package/dist/{esm/rechnung → cjs/invoice}/auth.d.ts +2 -2
- package/dist/cjs/{rechnung → invoice}/auth.js +5 -5
- package/dist/{esm/rechnung/rechnen.d.ts → cjs/invoice/calc.d.ts} +27 -27
- package/dist/cjs/{rechnung/rechnen.js → invoice/calc.js} +54 -54
- package/dist/{esm/rechnung → cjs/invoice}/endpunkte.d.ts +23 -21
- package/dist/cjs/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/cjs/invoice/fehler.d.ts +31 -0
- package/dist/cjs/invoice/fehler.js +39 -0
- package/dist/cjs/invoice/index.d.ts +21 -0
- package/dist/cjs/invoice/index.js +86 -0
- package/dist/cjs/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/cjs/{rechnung → invoice}/summen.js +14 -14
- package/dist/cjs/invoice/texte.d.ts +224 -0
- package/dist/cjs/invoice/texte.js +425 -0
- package/dist/{esm/rechnung → cjs/invoice}/typen.d.ts +32 -11
- package/dist/cjs/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/cjs/{rechnung → invoice}/vertrag.js +144 -82
- package/dist/cjs/models/cancellation.d.ts +43 -24
- package/dist/cjs/models/cancellation.js +94 -46
- package/dist/cjs/models/hobex-receipt.d.ts +3 -3
- package/dist/cjs/models/hobex-receipt.js +35 -35
- package/dist/cjs/models/index.d.ts +6 -5
- package/dist/cjs/models/index.js +22 -2
- package/dist/cjs/models/payment-errors.d.ts +32 -15
- package/dist/cjs/models/payment-errors.js +80 -32
- package/dist/cjs/models/receipt-company.d.ts +6 -5
- package/dist/cjs/models/receipt-company.js +4 -4
- package/dist/cjs/models/receipt-email.d.ts +32 -18
- package/dist/cjs/models/receipt-email.js +69 -24
- package/dist/cjs/models/receipt-errors.d.ts +39 -0
- package/dist/cjs/models/receipt-errors.js +94 -0
- package/dist/cjs/models/receipt-item.d.ts +9 -1
- package/dist/cjs/models/receipt-item.js +3 -0
- package/dist/cjs/models/receipt-summary.d.ts +10 -4
- package/dist/cjs/models/receipt-summary.js +10 -4
- package/dist/cjs/models/receipt.d.ts +31 -2
- package/dist/cjs/models/receipt.js +12 -1
- package/dist/cjs/models/voucher.d.ts +7 -6
- package/dist/cjs/models/voucher.js +2 -7
- package/dist/cjs/partner/ablauf.d.ts +10 -10
- package/dist/cjs/partner/ablauf.js +29 -29
- package/dist/cjs/partner/api.d.ts +26 -23
- package/dist/cjs/partner/api.js +11 -13
- package/dist/cjs/partner/auth.d.ts +1 -1
- package/dist/cjs/partner/auth.js +2 -2
- package/dist/cjs/partner/betrieb.d.ts +7 -7
- package/dist/cjs/partner/betrieb.js +10 -10
- package/dist/cjs/partner/endpunkte.d.ts +27 -14
- package/dist/cjs/partner/endpunkte.js +80 -39
- package/dist/cjs/partner/fehler.d.ts +60 -30
- package/dist/cjs/partner/fehler.js +99 -43
- package/dist/cjs/partner/index.d.ts +13 -12
- package/dist/cjs/partner/index.js +35 -22
- package/dist/cjs/partner/secret.d.ts +3 -3
- package/dist/cjs/partner/secret.js +6 -6
- package/dist/cjs/partner/typen.d.ts +129 -71
- package/dist/cjs/partner/typen.js +76 -3
- package/dist/cjs/partner/webhook-signatur.d.ts +2 -2
- package/dist/cjs/partner/webhook-signatur.js +12 -12
- package/dist/cjs/partner/webhooks.d.ts +60 -32
- package/dist/cjs/partner/webhooks.js +40 -34
- package/dist/cjs/payments/hobex.d.ts +11 -3
- package/dist/cjs/payments/hobex.js +17 -5
- package/dist/cjs/payments/stripe.d.ts +5 -2
- package/dist/cjs/payments/stripe.js +10 -5
- package/dist/cjs/pos/artikel.d.ts +90 -0
- package/dist/cjs/pos/artikel.js +89 -0
- package/dist/cjs/pos/client.d.ts +27 -0
- package/dist/cjs/pos/client.js +144 -0
- package/dist/cjs/pos/drucker.d.ts +86 -0
- package/dist/cjs/pos/drucker.js +78 -0
- package/dist/cjs/pos/errors.d.ts +36 -0
- package/dist/cjs/pos/errors.js +95 -0
- package/dist/cjs/pos/index.d.ts +15 -0
- package/dist/cjs/pos/index.js +102 -0
- package/dist/cjs/pos/settings.d.ts +313 -0
- package/dist/cjs/pos/settings.js +376 -0
- package/dist/cjs/pos/texte.d.ts +883 -0
- package/dist/cjs/pos/texte.js +489 -0
- package/dist/cjs/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/cjs/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/cjs/printing/escpos.d.ts +29 -29
- package/dist/cjs/printing/escpos.js +61 -61
- package/dist/cjs/printing/index.d.ts +2 -2
- package/dist/cjs/printing/index.js +17 -17
- package/dist/cjs/printing/qr-groesse.d.ts +38 -38
- package/dist/cjs/printing/qr-groesse.js +47 -47
- package/dist/cjs/printing/webusb.d.ts +2 -2
- package/dist/cjs/printing/webusb.js +4 -4
- package/dist/cjs/react/index.d.ts +21 -21
- package/dist/cjs/react/index.js +40 -30
- package/dist/cjs/receipt/bild.d.ts +4 -4
- package/dist/cjs/receipt/bild.js +11 -11
- package/dist/cjs/receipt/blatt.d.ts +46 -46
- package/dist/cjs/receipt/blatt.js +59 -59
- package/dist/cjs/receipt/discount.d.ts +1 -1
- package/dist/cjs/receipt/discount.js +8 -8
- package/dist/cjs/receipt/due.d.ts +86 -0
- package/dist/cjs/receipt/due.js +261 -0
- package/dist/cjs/receipt/epos.d.ts +22 -22
- package/dist/cjs/receipt/epos.js +45 -45
- package/dist/cjs/receipt/grid.d.ts +10 -10
- package/dist/cjs/receipt/grid.js +20 -20
- package/dist/cjs/receipt/index.d.ts +9 -8
- package/dist/cjs/receipt/index.js +26 -23
- package/dist/cjs/receipt/layout-escpos.d.ts +24 -24
- package/dist/cjs/receipt/layout-escpos.js +49 -49
- package/dist/cjs/receipt/layout.d.ts +28 -23
- package/dist/cjs/receipt/layout.js +45 -21
- package/dist/cjs/receipt/marke-daten.d.ts +8 -8
- package/dist/cjs/receipt/marke-daten.js +8 -8
- package/dist/cjs/receipt/marke.d.ts +7 -7
- package/dist/cjs/receipt/marke.js +10 -10
- package/dist/cjs/register/errors.d.ts +61 -0
- package/dist/cjs/register/errors.js +112 -0
- package/dist/cjs/register/index.d.ts +14 -1
- package/dist/cjs/register/index.js +20 -1
- package/dist/cjs/register/pairing.d.ts +55 -36
- package/dist/cjs/register/pairing.js +33 -29
- package/dist/cjs/register/session.d.ts +5 -5
- package/dist/cjs/register/session.js +7 -7
- package/dist/cjs/stored/draht.d.ts +45 -0
- package/dist/cjs/stored/draht.js +220 -0
- package/dist/cjs/stored/einstellungen.d.ts +23 -0
- package/dist/cjs/stored/einstellungen.js +200 -0
- package/dist/cjs/stored/index.d.ts +109 -0
- package/dist/cjs/stored/index.js +225 -0
- package/dist/cjs/stored/vokabular.d.ts +18 -0
- package/dist/cjs/stored/vokabular.js +389 -0
- package/dist/cjs/version.d.ts +7 -0
- package/dist/cjs/version.js +10 -0
- package/dist/cjs/vienna-time.d.ts +1 -1
- package/dist/cjs/vienna-time.js +2 -2
- package/dist/esm/client/api.d.ts +7 -6
- package/dist/esm/client/api.js +4 -4
- package/dist/esm/client/aufrufe.d.ts +29 -5
- package/dist/esm/client/aufrufe.js +111 -1
- package/dist/esm/client/auth.d.ts +2 -0
- package/dist/esm/client/auth.js +16 -1
- package/dist/esm/client/cashregisters.d.ts +1 -1
- package/dist/esm/client/cashregisters.js +2 -2
- package/dist/esm/client/errors.d.ts +94 -19
- package/dist/esm/client/errors.js +129 -27
- package/dist/esm/client/fehlercodes.d.ts +9 -0
- package/dist/esm/client/fehlercodes.js +32 -0
- package/dist/esm/client/index.d.ts +5 -5
- package/dist/esm/client/index.js +5 -5
- package/dist/esm/client/receipts.d.ts +131 -124
- package/dist/esm/client/receipts.js +195 -140
- package/dist/esm/client/reports.d.ts +26 -4
- package/dist/esm/client/reports.js +36 -4
- package/dist/esm/client/status.d.ts +3 -3
- package/dist/esm/client/status.js +7 -7
- package/dist/esm/client/transport.d.ts +56 -4
- package/dist/esm/client/transport.js +233 -24
- package/dist/esm/enums/vat-rate.d.ts +2 -2
- package/dist/esm/enums/vat-rate.js +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +4 -3
- package/dist/{cjs/rechnung → esm/invoice}/api.d.ts +18 -17
- package/dist/esm/{rechnung → invoice}/api.js +6 -6
- package/dist/{cjs/rechnung → esm/invoice}/auth.d.ts +2 -2
- package/dist/esm/{rechnung → invoice}/auth.js +4 -4
- package/dist/{cjs/rechnung/rechnen.d.ts → esm/invoice/calc.d.ts} +27 -27
- package/dist/esm/{rechnung/rechnen.js → invoice/calc.js} +45 -45
- package/dist/{cjs/rechnung → esm/invoice}/endpunkte.d.ts +23 -21
- package/dist/esm/{rechnung → invoice}/endpunkte.js +52 -42
- package/dist/esm/invoice/fehler.d.ts +31 -0
- package/dist/esm/invoice/fehler.js +33 -0
- package/dist/esm/invoice/index.d.ts +21 -0
- package/dist/esm/invoice/index.js +20 -0
- package/dist/esm/{rechnung → invoice}/summen.d.ts +12 -12
- package/dist/esm/{rechnung → invoice}/summen.js +12 -12
- package/dist/esm/invoice/texte.d.ts +224 -0
- package/dist/esm/invoice/texte.js +421 -0
- package/dist/{cjs/rechnung → esm/invoice}/typen.d.ts +32 -11
- package/dist/esm/{rechnung → invoice}/vertrag.d.ts +97 -71
- package/dist/esm/{rechnung → invoice}/vertrag.js +143 -81
- package/dist/esm/models/cancellation.d.ts +43 -24
- package/dist/esm/models/cancellation.js +90 -45
- package/dist/esm/models/hobex-receipt.d.ts +3 -3
- package/dist/esm/models/hobex-receipt.js +35 -35
- package/dist/esm/models/index.d.ts +6 -5
- package/dist/esm/models/index.js +6 -5
- package/dist/esm/models/payment-errors.d.ts +32 -15
- package/dist/esm/models/payment-errors.js +77 -32
- package/dist/esm/models/receipt-company.d.ts +6 -5
- package/dist/esm/models/receipt-company.js +4 -4
- package/dist/esm/models/receipt-email.d.ts +32 -18
- package/dist/esm/models/receipt-email.js +65 -23
- package/dist/esm/models/receipt-errors.d.ts +39 -0
- package/dist/esm/models/receipt-errors.js +87 -0
- package/dist/esm/models/receipt-item.d.ts +9 -1
- package/dist/esm/models/receipt-item.js +3 -0
- package/dist/esm/models/receipt-summary.d.ts +10 -4
- package/dist/esm/models/receipt-summary.js +9 -3
- package/dist/esm/models/receipt.d.ts +31 -2
- package/dist/esm/models/receipt.js +12 -2
- package/dist/esm/models/voucher.d.ts +7 -6
- package/dist/esm/models/voucher.js +2 -7
- package/dist/esm/partner/ablauf.d.ts +10 -10
- package/dist/esm/partner/ablauf.js +27 -27
- package/dist/esm/partner/api.d.ts +26 -23
- package/dist/esm/partner/api.js +13 -15
- package/dist/esm/partner/auth.d.ts +1 -1
- package/dist/esm/partner/auth.js +2 -2
- package/dist/esm/partner/betrieb.d.ts +7 -7
- package/dist/esm/partner/betrieb.js +8 -8
- package/dist/esm/partner/endpunkte.d.ts +27 -14
- package/dist/esm/partner/endpunkte.js +79 -39
- package/dist/esm/partner/fehler.d.ts +60 -30
- package/dist/esm/partner/fehler.js +91 -35
- package/dist/esm/partner/index.d.ts +13 -12
- package/dist/esm/partner/index.js +12 -11
- package/dist/esm/partner/secret.d.ts +3 -3
- package/dist/esm/partner/secret.js +5 -5
- package/dist/esm/partner/typen.d.ts +129 -71
- package/dist/esm/partner/typen.js +75 -2
- package/dist/esm/partner/webhook-signatur.d.ts +2 -2
- package/dist/esm/partner/webhook-signatur.js +12 -12
- package/dist/esm/partner/webhooks.d.ts +60 -32
- package/dist/esm/partner/webhooks.js +38 -32
- package/dist/esm/payments/hobex.d.ts +11 -3
- package/dist/esm/payments/hobex.js +18 -6
- package/dist/esm/payments/stripe.d.ts +5 -2
- package/dist/esm/payments/stripe.js +11 -6
- package/dist/esm/pos/artikel.d.ts +90 -0
- package/dist/esm/pos/artikel.js +79 -0
- package/dist/esm/pos/client.d.ts +27 -0
- package/dist/esm/pos/client.js +137 -0
- package/dist/esm/pos/drucker.d.ts +86 -0
- package/dist/esm/pos/drucker.js +71 -0
- package/dist/esm/pos/errors.d.ts +36 -0
- package/dist/esm/pos/errors.js +88 -0
- package/dist/esm/pos/index.d.ts +15 -0
- package/dist/esm/pos/index.js +20 -0
- package/dist/esm/pos/settings.d.ts +313 -0
- package/dist/esm/pos/settings.js +367 -0
- package/dist/esm/pos/texte.d.ts +883 -0
- package/dist/esm/pos/texte.js +481 -0
- package/dist/esm/{kasse → pos}/trinkgeld.d.ts +1 -1
- package/dist/esm/{kasse → pos}/trinkgeld.js +2 -2
- package/dist/esm/printing/escpos.d.ts +29 -29
- package/dist/esm/printing/escpos.js +56 -56
- package/dist/esm/printing/index.d.ts +2 -2
- package/dist/esm/printing/index.js +2 -2
- package/dist/esm/printing/qr-groesse.d.ts +38 -38
- package/dist/esm/printing/qr-groesse.js +42 -42
- package/dist/esm/printing/webusb.d.ts +2 -2
- package/dist/esm/printing/webusb.js +4 -4
- package/dist/esm/react/index.d.ts +21 -21
- package/dist/esm/react/index.js +39 -29
- package/dist/esm/receipt/bild.d.ts +4 -4
- package/dist/esm/receipt/bild.js +11 -11
- package/dist/esm/receipt/blatt.d.ts +46 -46
- package/dist/esm/receipt/blatt.js +55 -55
- package/dist/esm/receipt/discount.d.ts +1 -1
- package/dist/esm/receipt/discount.js +7 -7
- package/dist/esm/receipt/due.d.ts +86 -0
- package/dist/esm/receipt/due.js +257 -0
- package/dist/esm/receipt/epos.d.ts +22 -22
- package/dist/esm/receipt/epos.js +47 -47
- package/dist/esm/receipt/grid.d.ts +10 -10
- package/dist/esm/receipt/grid.js +18 -18
- package/dist/esm/receipt/index.d.ts +9 -8
- package/dist/esm/receipt/index.js +9 -8
- package/dist/esm/receipt/layout-escpos.d.ts +24 -24
- package/dist/esm/receipt/layout-escpos.js +51 -51
- package/dist/esm/receipt/layout.d.ts +28 -23
- package/dist/esm/receipt/layout.js +44 -20
- package/dist/esm/receipt/marke-daten.d.ts +8 -8
- package/dist/esm/receipt/marke-daten.js +7 -7
- package/dist/esm/receipt/marke.d.ts +7 -7
- package/dist/esm/receipt/marke.js +10 -10
- package/dist/esm/register/errors.d.ts +61 -0
- package/dist/esm/register/errors.js +104 -0
- package/dist/esm/register/index.d.ts +14 -1
- package/dist/esm/register/index.js +13 -0
- package/dist/esm/register/pairing.d.ts +55 -36
- package/dist/esm/register/pairing.js +33 -29
- package/dist/esm/register/session.d.ts +5 -5
- package/dist/esm/register/session.js +7 -7
- package/dist/esm/stored/draht.d.ts +45 -0
- package/dist/esm/stored/draht.js +208 -0
- package/dist/esm/stored/einstellungen.d.ts +23 -0
- package/dist/esm/stored/einstellungen.js +196 -0
- package/dist/esm/stored/index.d.ts +109 -0
- package/dist/esm/stored/index.js +217 -0
- package/dist/esm/stored/vokabular.d.ts +18 -0
- package/dist/esm/stored/vokabular.js +386 -0
- package/dist/esm/version.d.ts +7 -0
- package/dist/esm/version.js +7 -0
- package/dist/esm/vienna-time.d.ts +1 -1
- package/dist/esm/vienna-time.js +2 -2
- package/fixtures/{erwartet/storno-rabatt.lines.json → expected/cancellation-discount.lines.json} +2 -2
- package/fixtures/expected/cancellation-discount.sheet32.json +248 -0
- package/fixtures/{erwartet/storno-rabatt.blatt48.json → expected/cancellation-discount.sheet48.json} +119 -119
- package/fixtures/{erwartet/storno-voll.lines.json → expected/cancellation-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-full.sheet32.json +218 -0
- package/fixtures/{erwartet/storno-voll.blatt48.json → expected/cancellation-full.sheet48.json} +107 -107
- package/fixtures/{erwartet/storno-teil.lines.json → expected/cancellation-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-partial.sheet32.json +206 -0
- package/fixtures/{erwartet/storno-teil.blatt48.json → expected/cancellation-partial.sheet48.json} +101 -101
- package/fixtures/{erwartet/storno-split-voll.lines.json → expected/cancellation-split-full.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-full.sheet32.json +320 -0
- package/fixtures/{erwartet/storno-split-voll.blatt48.json → expected/cancellation-split-full.sheet48.json} +158 -158
- package/fixtures/{erwartet/storno-split-teil.lines.json → expected/cancellation-split-partial.lines.json} +2 -2
- package/fixtures/expected/cancellation-split-partial.sheet32.json +230 -0
- package/fixtures/{erwartet/storno-split-teil.blatt48.json → expected/cancellation-split-partial.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-eigener.lines.json → expected/card-custom.lines.json} +1 -1
- package/fixtures/expected/card-custom.sheet32.json +158 -0
- package/fixtures/{erwartet/karte-eigener.blatt48.json → expected/card-custom.sheet48.json} +80 -80
- package/fixtures/{erwartet/karte-gptom-ios.lines.json → expected/card-gptom-ios.lines.json} +1 -1
- package/fixtures/expected/card-gptom-ios.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom-ios.blatt48.json → expected/card-gptom-ios.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-gptom.lines.json → expected/card-gptom.lines.json} +1 -1
- package/fixtures/expected/card-gptom.sheet32.json +230 -0
- package/fixtures/{erwartet/karte-gptom.blatt48.json → expected/card-gptom.sheet48.json} +116 -116
- package/fixtures/{erwartet/karte-hobex-cloud.lines.json → expected/card-hobex-cloud.lines.json} +1 -1
- package/fixtures/expected/card-hobex-cloud.sheet32.json +200 -0
- package/fixtures/{erwartet/karte-hobex-cloud.blatt48.json → expected/card-hobex-cloud.sheet48.json} +101 -101
- package/fixtures/{erwartet/karte-hobex-hps.lines.json → expected/card-hobex-hps.lines.json} +1 -1
- package/fixtures/expected/card-hobex-hps.sheet32.json +224 -0
- package/fixtures/{erwartet/karte-hobex-hps.blatt48.json → expected/card-hobex-hps.sheet48.json} +113 -113
- package/fixtures/{erwartet/karte-mypos.lines.json → expected/card-mypos.lines.json} +1 -1
- package/fixtures/expected/card-mypos.sheet32.json +254 -0
- package/fixtures/{erwartet/karte-mypos.blatt48.json → expected/card-mypos.sheet48.json} +122 -122
- package/fixtures/{erwartet/karte-stripe-eps.lines.json → expected/card-stripe-eps.lines.json} +1 -1
- package/fixtures/expected/card-stripe-eps.sheet32.json +194 -0
- package/fixtures/{erwartet/karte-stripe-eps.blatt48.json → expected/card-stripe-eps.sheet48.json} +98 -98
- package/fixtures/{erwartet/karte-stripe.lines.json → expected/card-stripe.lines.json} +1 -1
- package/fixtures/expected/card-stripe.sheet32.json +212 -0
- package/fixtures/{erwartet/karte-stripe.blatt48.json → expected/card-stripe.sheet48.json} +107 -107
- package/fixtures/{erwartet/karte-sumup.lines.json → expected/card-sumup.lines.json} +1 -1
- package/fixtures/expected/card-sumup.sheet32.json +218 -0
- package/fixtures/{erwartet/karte-sumup.blatt48.json → expected/card-sumup.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabattzeilen.lines.json → expected/discount-lines.lines.json} +1 -1
- package/fixtures/expected/discount-lines.sheet32.json +200 -0
- package/fixtures/{erwartet/rabattzeilen.blatt48.json → expected/discount-lines.sheet48.json} +98 -98
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.lines.json → expected/discount-owner-tip.lines.json} +1 -1
- package/fixtures/expected/discount-owner-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-chef-trinkgeld.blatt48.json → expected/discount-owner-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-einfach.lines.json → expected/discount-simple.lines.json} +1 -1
- package/fixtures/expected/discount-simple.sheet32.json +182 -0
- package/fixtures/{erwartet/rabatt-einfach.blatt48.json → expected/discount-simple.sheet48.json} +89 -89
- package/fixtures/{erwartet/rabatt-trinkgeld.lines.json → expected/discount-tip.lines.json} +1 -1
- package/fixtures/expected/discount-tip.sheet32.json +212 -0
- package/fixtures/{erwartet/rabatt-trinkgeld.blatt48.json → expected/discount-tip.sheet48.json} +104 -104
- package/fixtures/{erwartet/rabatt-wertgutschein.lines.json → expected/discount-value-voucher.lines.json} +1 -1
- package/fixtures/expected/discount-value-voucher.sheet32.json +218 -0
- package/fixtures/{erwartet/rabatt-wertgutschein.blatt48.json → expected/discount-value-voucher.sheet48.json} +107 -107
- package/fixtures/{erwartet/langer-artikelname.lines.json → expected/long-item-name.lines.json} +1 -1
- package/fixtures/expected/long-item-name.sheet32.json +176 -0
- package/fixtures/{erwartet/langer-artikelname.blatt48.json → expected/long-item-name.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-karte.lines.json → expected/sale-card.lines.json} +1 -1
- package/fixtures/expected/sale-card.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-karte.blatt48.json → expected/sale-card.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-bar.lines.json → expected/sale-cash.lines.json} +1 -1
- package/fixtures/expected/sale-cash.sheet32.json +176 -0
- package/fixtures/{erwartet/verkauf-bar.blatt48.json → expected/sale-cash.sheet48.json} +86 -86
- package/fixtures/{erwartet/verkauf-kleinunternehmer.lines.json → expected/sale-small-business.lines.json} +1 -1
- package/fixtures/expected/sale-small-business.sheet32.json +182 -0
- package/fixtures/{erwartet/verkauf-kleinunternehmer.blatt48.json → expected/sale-small-business.sheet48.json} +89 -89
- package/fixtures/{erwartet/signaturausfall-verkauf.lines.json → expected/signature-outage-sale.lines.json} +1 -1
- package/fixtures/expected/signature-outage-sale.sheet32.json +194 -0
- package/fixtures/{erwartet/signaturausfall-verkauf.blatt48.json → expected/signature-outage-sale.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-karte-karte-bar.lines.json → expected/split-card-card-cash.lines.json} +1 -1
- package/fixtures/expected/split-card-card-cash.sheet32.json +356 -0
- package/fixtures/{erwartet/split-karte-karte-bar.blatt48.json → expected/split-card-card-cash.sheet48.json} +170 -170
- package/fixtures/{erwartet/split-bar-rueckgeld.lines.json → expected/split-cash-change.lines.json} +1 -1
- package/fixtures/expected/split-cash-change.sheet32.json +194 -0
- package/fixtures/{erwartet/split-bar-rueckgeld.blatt48.json → expected/split-cash-change.sheet48.json} +92 -92
- package/fixtures/{erwartet/split-langer-betrag.lines.json → expected/split-long-amount.lines.json} +1 -1
- package/fixtures/expected/split-long-amount.sheet32.json +266 -0
- package/fixtures/{erwartet/split-langer-betrag.blatt48.json → expected/split-long-amount.sheet48.json} +131 -131
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.lines.json → expected/split-one-card-tip.lines.json} +1 -1
- package/fixtures/expected/split-one-card-tip.sheet32.json +242 -0
- package/fixtures/{erwartet/split-eine-karte-trinkgeld.blatt48.json → expected/split-one-card-tip.sheet48.json} +113 -113
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.lines.json → expected/split-table-round-tip.lines.json} +1 -1
- package/fixtures/expected/split-table-round-tip.sheet32.json +470 -0
- package/fixtures/{erwartet/split-tischrunde-trinkgeld.blatt48.json → expected/split-table-round-tip.sheet48.json} +218 -218
- package/fixtures/{erwartet/split-trinkgeld-karte.lines.json → expected/split-tip-card.lines.json} +1 -1
- package/fixtures/expected/split-tip-card.sheet32.json +272 -0
- package/fixtures/{erwartet/split-trinkgeld-karte.blatt48.json → expected/split-tip-card.sheet48.json} +128 -128
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.lines.json → expected/split-two-cards-same-provider.lines.json} +1 -1
- package/fixtures/expected/split-two-cards-same-provider.sheet32.json +326 -0
- package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.blatt48.json → expected/split-two-cards-same-provider.sheet48.json} +149 -149
- package/fixtures/{erwartet/testkasse-verkauf.lines.json → expected/test-cashregister-sale.lines.json} +3 -3
- package/fixtures/expected/test-cashregister-sale.sheet32.json +224 -0
- package/fixtures/{erwartet/testkasse-verkauf.blatt48.json → expected/test-cashregister-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet/testsignatur-verkauf.lines.json → expected/test-signature-sale.lines.json} +3 -3
- package/fixtures/expected/test-signature-sale.sheet32.json +236 -0
- package/fixtures/{erwartet/testsignatur-verkauf.blatt48.json → expected/test-signature-sale.sheet48.json} +110 -110
- package/fixtures/{erwartet → expected}/training.lines.json +2 -2
- package/fixtures/expected/training.sheet32.json +236 -0
- package/fixtures/{erwartet/training.blatt48.json → expected/training.sheet48.json} +110 -110
- package/fixtures/{erwartet/null-jahr.lines.json → expected/zero-annual.lines.json} +2 -2
- package/fixtures/expected/zero-annual.sheet32.json +212 -0
- package/fixtures/{erwartet/null-jahr.blatt48.json → expected/zero-annual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-schluss.lines.json → expected/zero-final.lines.json} +2 -2
- package/fixtures/expected/zero-final.sheet32.json +206 -0
- package/fixtures/{erwartet/null-schluss.blatt48.json → expected/zero-final.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-pruef.lines.json → expected/zero-manual.lines.json} +2 -2
- package/fixtures/expected/zero-manual.sheet32.json +206 -0
- package/fixtures/{erwartet/null-pruef.blatt48.json → expected/zero-manual.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-monat.lines.json → expected/zero-monthly.lines.json} +2 -2
- package/fixtures/expected/zero-monthly.sheet32.json +206 -0
- package/fixtures/{erwartet/null-monat.blatt48.json → expected/zero-monthly.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-ausfall.lines.json → expected/zero-outage-end.lines.json} +2 -2
- package/fixtures/expected/zero-outage-end.sheet32.json +206 -0
- package/fixtures/{erwartet/null-ausfall.blatt48.json → expected/zero-outage-end.sheet48.json} +95 -95
- package/fixtures/{erwartet/null-start.lines.json → expected/zero-start.lines.json} +2 -2
- package/fixtures/expected/zero-start.sheet32.json +206 -0
- package/fixtures/{erwartet/null-start.blatt48.json → expected/zero-start.sheet48.json} +95 -95
- package/fixtures/hobex-hps-codes.json +12 -12
- package/fixtures/invoice-api-examples/brands-ok.json +8 -0
- package/fixtures/{rechnung-api-beispiele/credit-fehler-grund.json → invoice-api-examples/credit-error-reason.json} +6 -6
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/credit-ok.json +6 -6
- package/fixtures/{rechnung-api-beispiele/customer-fehler-uid.json → invoice-api-examples/customer-error-vat-id.json} +4 -4
- package/fixtures/invoice-api-examples/customer-get-error-both.json +15 -0
- package/fixtures/{rechnung-api-beispiele → invoice-api-examples}/customer-ok.json +4 -4
- package/fixtures/{rechnung-api-beispiele/customer-search-fehler-leer.json → invoice-api-examples/customer-search-error-empty.json} +4 -4
- package/fixtures/{rechnung-api-beispiele/issue-rabatt.json → invoice-api-examples/issue-discount.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-englisch.json → invoice-api-examples/issue-english.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-fehler-cent.json → invoice-api-examples/issue-error-cent.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-sprache.json → invoice-api-examples/issue-error-language.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-negativ.json → invoice-api-examples/issue-error-negative.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-zahlungsart.json → invoice-api-examples/issue-error-payment-method.json} +8 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-beide.json → invoice-api-examples/issue-error-price-both.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-preis-fehlt.json → invoice-api-examples/issue-error-price-missing.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-menge.json → invoice-api-examples/issue-error-quantity.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-satz.json → invoice-api-examples/issue-error-rate.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-fehler-einheit.json → invoice-api-examples/issue-error-unit.json} +5 -5
- package/fixtures/{rechnung-api-beispiele/issue-fehler-unbekannt.json → invoice-api-examples/issue-error-unknown.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-brutto-20.json → invoice-api-examples/issue-gross-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-mikropreis.json → invoice-api-examples/issue-micro-price.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-gemischt.json → invoice-api-examples/issue-mixed.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-netto-20.json → invoice-api-examples/issue-net-20.json} +6 -6
- package/fixtures/{rechnung-api-beispiele/issue-bezahlt.json → invoice-api-examples/issue-paid.json} +7 -7
- package/fixtures/{rechnung-api-beispiele/issue-kleinunternehmer.json → invoice-api-examples/issue-small-business.json} +6 -6
- package/fixtures/invoice-api-examples/payment-error-on-site.json +17 -0
- package/fixtures/invoice-api-examples/payment-error-without-key.json +16 -0
- package/fixtures/invoice-api-examples/payment-recorded-later.json +14 -0
- package/fixtures/{rechnung-api-beispiele/setup-status-fehler-feld.json → invoice-api-examples/setup-status-error-field.json} +4 -4
- package/fixtures/invoice-api-examples/setup-status-ok.json +8 -0
- package/fixtures/{rechnung-api.schema.json → invoice-api.schema.json} +24 -24
- package/fixtures/{rechnung-rechnen-zufall.json → invoice-calc-random.json} +828 -828
- package/fixtures/{rechnung-rechnen.json → invoice-calc.json} +47 -47
- package/fixtures/invoice-texts.json +464 -0
- package/fixtures/{rechnung-summen.json → invoice-totals.json} +25 -25
- package/fixtures/{position-aus-euro.json → item-from-euro.json} +26 -26
- package/fixtures/manifest.json +252 -252
- package/fixtures/pos-message-cases.json +32 -0
- package/fixtures/pos-settings-defaults.json +149 -0
- package/fixtures/{kasse-texte.json → pos-texts.json} +416 -416
- package/fixtures/receipt-due-generated.json +1218 -0
- package/fixtures/{belege/storno-rabatt.json → receipts/cancellation-discount.json} +3 -3
- package/fixtures/{belege/storno-voll.json → receipts/cancellation-full.json} +3 -3
- package/fixtures/{belege/storno-teil.json → receipts/cancellation-partial.json} +3 -3
- package/fixtures/{belege/storno-split-voll.json → receipts/cancellation-split-full.json} +3 -3
- package/fixtures/{belege/storno-split-teil.json → receipts/cancellation-split-partial.json} +3 -3
- package/fixtures/{belege/karte-eigener.json → receipts/card-custom.json} +2 -2
- package/fixtures/{belege/karte-gptom-ios.json → receipts/card-gptom-ios.json} +2 -2
- package/fixtures/{belege/karte-gptom.json → receipts/card-gptom.json} +2 -2
- package/fixtures/{belege/karte-hobex-cloud.json → receipts/card-hobex-cloud.json} +2 -2
- package/fixtures/{belege/karte-hobex-hps.json → receipts/card-hobex-hps.json} +2 -2
- package/fixtures/{belege/karte-mypos.json → receipts/card-mypos.json} +2 -2
- package/fixtures/{belege/karte-stripe-eps.json → receipts/card-stripe-eps.json} +2 -2
- package/fixtures/{belege/karte-stripe.json → receipts/card-stripe.json} +2 -2
- package/fixtures/{belege/karte-sumup.json → receipts/card-sumup.json} +2 -2
- package/fixtures/{belege/rabattzeilen.json → receipts/discount-lines.json} +2 -2
- package/fixtures/{belege/rabatt-chef-trinkgeld.json → receipts/discount-owner-tip.json} +2 -2
- package/fixtures/{belege/rabatt-einfach.json → receipts/discount-simple.json} +2 -2
- package/fixtures/{belege/rabatt-trinkgeld.json → receipts/discount-tip.json} +2 -2
- package/fixtures/{belege/rabatt-wertgutschein.json → receipts/discount-value-voucher.json} +2 -2
- package/fixtures/{belege/langer-artikelname.json → receipts/long-item-name.json} +2 -2
- package/fixtures/{belege/verkauf-karte.json → receipts/sale-card.json} +2 -2
- package/fixtures/{belege/verkauf-bar.json → receipts/sale-cash.json} +2 -2
- package/fixtures/{belege/verkauf-kleinunternehmer.json → receipts/sale-small-business.json} +1 -1
- package/fixtures/{belege/signaturausfall-verkauf.json → receipts/signature-outage-sale.json} +2 -2
- package/fixtures/{belege/split-karte-karte-bar.json → receipts/split-card-card-cash.json} +2 -2
- package/fixtures/{belege/split-bar-rueckgeld.json → receipts/split-cash-change.json} +2 -2
- package/fixtures/{belege/split-langer-betrag.json → receipts/split-long-amount.json} +2 -2
- package/fixtures/{belege/split-eine-karte-trinkgeld.json → receipts/split-one-card-tip.json} +2 -2
- package/fixtures/{belege/split-tischrunde-trinkgeld.json → receipts/split-table-round-tip.json} +2 -2
- package/fixtures/{belege/split-trinkgeld-karte.json → receipts/split-tip-card.json} +2 -2
- package/fixtures/{belege/split-zwei-karten-gleicher-anbieter.json → receipts/split-two-cards-same-provider.json} +2 -2
- package/fixtures/{belege/testsignatur-verkauf.json → receipts/test-cashregister-sale.json} +3 -3
- package/fixtures/{belege/testkasse-verkauf.json → receipts/test-signature-sale.json} +3 -3
- package/fixtures/{belege → receipts}/training.json +2 -2
- package/fixtures/{belege/null-jahr.json → receipts/zero-annual.json} +5 -5
- package/fixtures/{belege/null-schluss.json → receipts/zero-final.json} +5 -5
- package/fixtures/{belege/null-pruef.json → receipts/zero-manual.json} +5 -5
- package/fixtures/{belege/null-monat.json → receipts/zero-monthly.json} +5 -5
- package/fixtures/{belege/null-ausfall.json → receipts/zero-outage-end.json} +5 -5
- package/fixtures/{belege/null-start.json → receipts/zero-start.json} +5 -5
- package/fixtures/renames-1.0.json +1490 -0
- package/fixtures/{kasse-settings-standard.json → stored/pos-settings-defaults.json} +7 -7
- package/fixtures/surface.json +877 -0
- package/fixtures/v3/README.md +125 -0
- package/fixtures/v3/antworten/belege.json +4738 -0
- package/fixtures/v3/antworten/belegmail.json +154 -0
- package/fixtures/v3/antworten/kasse-belege.json +4304 -0
- package/fixtures/v3/antworten/kasse.json +12716 -0
- package/fixtures/v3/antworten/rechnungen.json +1712 -0
- package/fixtures/v3/antworten/storno.json +737 -0
- package/fixtures/v3/stored/belege.json +502 -0
- package/fixtures/v3/stored/kasse.json +3461 -0
- package/fixtures/v3/stored/rechnungen.json +750 -0
- package/fixtures/v3/v3-vokabular.json +3375 -0
- package/fixtures/v3/zahlbetrag-faelle.json +794 -0
- package/package.json +32 -18
- package/dist/cjs/kasse/artikel.d.ts +0 -83
- package/dist/cjs/kasse/artikel.js +0 -79
- package/dist/cjs/kasse/client.d.ts +0 -10
- package/dist/cjs/kasse/client.js +0 -38
- package/dist/cjs/kasse/drucker.d.ts +0 -59
- package/dist/cjs/kasse/drucker.js +0 -50
- package/dist/cjs/kasse/index.d.ts +0 -13
- package/dist/cjs/kasse/index.js +0 -83
- package/dist/cjs/kasse/settings.d.ts +0 -229
- package/dist/cjs/kasse/settings.js +0 -172
- package/dist/cjs/kasse/texte.d.ts +0 -868
- package/dist/cjs/kasse/texte.js +0 -474
- package/dist/cjs/rechnung/fehler.d.ts +0 -21
- package/dist/cjs/rechnung/fehler.js +0 -44
- package/dist/cjs/rechnung/index.d.ts +0 -21
- package/dist/cjs/rechnung/index.js +0 -82
- package/dist/cjs/rechnung/texte.d.ts +0 -222
- package/dist/cjs/rechnung/texte.js +0 -425
- package/dist/esm/kasse/artikel.d.ts +0 -83
- package/dist/esm/kasse/artikel.js +0 -70
- package/dist/esm/kasse/client.d.ts +0 -10
- package/dist/esm/kasse/client.js +0 -33
- package/dist/esm/kasse/drucker.d.ts +0 -59
- package/dist/esm/kasse/drucker.js +0 -45
- package/dist/esm/kasse/index.d.ts +0 -13
- package/dist/esm/kasse/index.js +0 -18
- package/dist/esm/kasse/settings.d.ts +0 -229
- package/dist/esm/kasse/settings.js +0 -168
- package/dist/esm/kasse/texte.d.ts +0 -868
- package/dist/esm/kasse/texte.js +0 -466
- package/dist/esm/rechnung/fehler.d.ts +0 -21
- package/dist/esm/rechnung/fehler.js +0 -39
- package/dist/esm/rechnung/index.d.ts +0 -21
- package/dist/esm/rechnung/index.js +0 -20
- package/dist/esm/rechnung/texte.d.ts +0 -222
- package/dist/esm/rechnung/texte.js +0 -421
- package/fixtures/erwartet/karte-eigener.blatt32.json +0 -158
- package/fixtures/erwartet/karte-gptom-ios.blatt32.json +0 -230
- package/fixtures/erwartet/karte-gptom.blatt32.json +0 -230
- package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +0 -200
- package/fixtures/erwartet/karte-hobex-hps.blatt32.json +0 -224
- package/fixtures/erwartet/karte-mypos.blatt32.json +0 -254
- package/fixtures/erwartet/karte-stripe-eps.blatt32.json +0 -194
- package/fixtures/erwartet/karte-stripe.blatt32.json +0 -212
- package/fixtures/erwartet/karte-sumup.blatt32.json +0 -218
- package/fixtures/erwartet/langer-artikelname.blatt32.json +0 -176
- package/fixtures/erwartet/null-ausfall.blatt32.json +0 -206
- package/fixtures/erwartet/null-jahr.blatt32.json +0 -212
- package/fixtures/erwartet/null-monat.blatt32.json +0 -206
- package/fixtures/erwartet/null-pruef.blatt32.json +0 -206
- package/fixtures/erwartet/null-schluss.blatt32.json +0 -206
- package/fixtures/erwartet/null-start.blatt32.json +0 -206
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-einfach.blatt32.json +0 -182
- package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +0 -212
- package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +0 -218
- package/fixtures/erwartet/rabattzeilen.blatt32.json +0 -200
- package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +0 -194
- package/fixtures/erwartet/split-bar-rueckgeld.blatt32.json +0 -194
- package/fixtures/erwartet/split-eine-karte-trinkgeld.blatt32.json +0 -242
- package/fixtures/erwartet/split-karte-karte-bar.blatt32.json +0 -356
- package/fixtures/erwartet/split-langer-betrag.blatt32.json +0 -266
- package/fixtures/erwartet/split-tischrunde-trinkgeld.blatt32.json +0 -470
- package/fixtures/erwartet/split-trinkgeld-karte.blatt32.json +0 -272
- package/fixtures/erwartet/split-zwei-karten-gleicher-anbieter.blatt32.json +0 -326
- package/fixtures/erwartet/storno-rabatt.blatt32.json +0 -248
- package/fixtures/erwartet/storno-split-teil.blatt32.json +0 -230
- package/fixtures/erwartet/storno-split-voll.blatt32.json +0 -320
- package/fixtures/erwartet/storno-teil.blatt32.json +0 -206
- package/fixtures/erwartet/storno-voll.blatt32.json +0 -218
- package/fixtures/erwartet/testkasse-verkauf.blatt32.json +0 -224
- package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +0 -236
- package/fixtures/erwartet/training.blatt32.json +0 -236
- package/fixtures/erwartet/verkauf-bar.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-karte.blatt32.json +0 -176
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +0 -182
- package/fixtures/kasse-meldungen-faelle.json +0 -32
- package/fixtures/oberflaeche.json +0 -558
- package/fixtures/rechnung-api-beispiele/brands-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/customer-get-fehler-beide.json +0 -15
- package/fixtures/rechnung-api-beispiele/setup-status-ok.json +0 -8
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-ohne-schluessel.json +0 -14
- package/fixtures/rechnung-api-beispiele/zahlung-fehler-vor-ort.json +0 -15
- package/fixtures/rechnung-api-beispiele/zahlung-nachtrag.json +0 -14
- package/fixtures/rechnung-texte.json +0 -464
- /package/dist/cjs/{rechnung → invoice}/typen.js +0 -0
- /package/dist/esm/{rechnung → invoice}/typen.js +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid32.txt → expected/cancellation-discount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-rabatt.grid48.txt → expected/cancellation-discount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid32.txt → expected/cancellation-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-voll.grid48.txt → expected/cancellation-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid32.txt → expected/cancellation-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-teil.grid48.txt → expected/cancellation-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid32.txt → expected/cancellation-split-full.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-voll.grid48.txt → expected/cancellation-split-full.grid48.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid32.txt → expected/cancellation-split-partial.grid32.txt} +0 -0
- /package/fixtures/{erwartet/storno-split-teil.grid48.txt → expected/cancellation-split-partial.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid32.txt → expected/card-custom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-eigener.grid48.txt → expected/card-custom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid32.txt → expected/card-gptom-ios.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom-ios.grid48.txt → expected/card-gptom-ios.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid32.txt → expected/card-gptom.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-gptom.grid48.txt → expected/card-gptom.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid32.txt → expected/card-hobex-cloud.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-cloud.grid48.txt → expected/card-hobex-cloud.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid32.txt → expected/card-hobex-hps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-hobex-hps.grid48.txt → expected/card-hobex-hps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid32.txt → expected/card-mypos.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-mypos.grid48.txt → expected/card-mypos.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid32.txt → expected/card-stripe-eps.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe-eps.grid48.txt → expected/card-stripe-eps.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid32.txt → expected/card-stripe.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-stripe.grid48.txt → expected/card-stripe.grid48.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid32.txt → expected/card-sumup.grid32.txt} +0 -0
- /package/fixtures/{erwartet/karte-sumup.grid48.txt → expected/card-sumup.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid32.txt → expected/discount-lines.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabattzeilen.grid48.txt → expected/discount-lines.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid32.txt → expected/discount-owner-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-chef-trinkgeld.grid48.txt → expected/discount-owner-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid32.txt → expected/discount-simple.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-einfach.grid48.txt → expected/discount-simple.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid32.txt → expected/discount-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-trinkgeld.grid48.txt → expected/discount-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid32.txt → expected/discount-value-voucher.grid32.txt} +0 -0
- /package/fixtures/{erwartet/rabatt-wertgutschein.grid48.txt → expected/discount-value-voucher.grid48.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe-hoch.raster32.txt → expected/logo-sample-tall.raster32.txt} +0 -0
- /package/fixtures/{erwartet/logo-probe.raster32.txt → expected/logo-sample.raster32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid32.txt → expected/long-item-name.grid32.txt} +0 -0
- /package/fixtures/{erwartet/langer-artikelname.grid48.txt → expected/long-item-name.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid32.txt → expected/sale-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-karte.grid48.txt → expected/sale-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid32.txt → expected/sale-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-bar.grid48.txt → expected/sale-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid32.txt → expected/sale-small-business.grid32.txt} +0 -0
- /package/fixtures/{erwartet/verkauf-kleinunternehmer.grid48.txt → expected/sale-small-business.grid48.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid32.txt → expected/signature-outage-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/signaturausfall-verkauf.grid48.txt → expected/signature-outage-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid32.txt → expected/split-card-card-cash.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-karte-karte-bar.grid48.txt → expected/split-card-card-cash.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid32.txt → expected/split-cash-change.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-bar-rueckgeld.grid48.txt → expected/split-cash-change.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid32.txt → expected/split-long-amount.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-langer-betrag.grid48.txt → expected/split-long-amount.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid32.txt → expected/split-one-card-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-eine-karte-trinkgeld.grid48.txt → expected/split-one-card-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid32.txt → expected/split-table-round-tip.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-tischrunde-trinkgeld.grid48.txt → expected/split-table-round-tip.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid32.txt → expected/split-tip-card.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-trinkgeld-karte.grid48.txt → expected/split-tip-card.grid48.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid32.txt → expected/split-two-cards-same-provider.grid32.txt} +0 -0
- /package/fixtures/{erwartet/split-zwei-karten-gleicher-anbieter.grid48.txt → expected/split-two-cards-same-provider.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid32.txt → expected/test-cashregister-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testkasse-verkauf.grid48.txt → expected/test-cashregister-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid32.txt → expected/test-signature-sale.grid32.txt} +0 -0
- /package/fixtures/{erwartet/testsignatur-verkauf.grid48.txt → expected/test-signature-sale.grid48.txt} +0 -0
- /package/fixtures/{erwartet → expected}/training.grid32.txt +0 -0
- /package/fixtures/{erwartet → expected}/training.grid48.txt +0 -0
- /package/fixtures/{erwartet/null-jahr.grid32.txt → expected/zero-annual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-jahr.grid48.txt → expected/zero-annual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid32.txt → expected/zero-final.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-schluss.grid48.txt → expected/zero-final.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid32.txt → expected/zero-manual.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-pruef.grid48.txt → expected/zero-manual.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid32.txt → expected/zero-monthly.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-monat.grid48.txt → expected/zero-monthly.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid32.txt → expected/zero-outage-end.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-ausfall.grid48.txt → expected/zero-outage-end.grid48.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid32.txt → expected/zero-start.grid32.txt} +0 -0
- /package/fixtures/{erwartet/null-start.grid48.txt → expected/zero-start.grid48.txt} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const ALL_CALLS = [
|
|
2
2
|
'activateCashregister',
|
|
3
3
|
'cancelInvoice',
|
|
4
4
|
'cancelReceipt',
|
|
@@ -30,6 +30,7 @@ export const AUFRUFE = [
|
|
|
30
30
|
'getPartnerInfo',
|
|
31
31
|
'getPrintJob',
|
|
32
32
|
'getReceipt',
|
|
33
|
+
'getReportV2',
|
|
33
34
|
'hobexPayApi',
|
|
34
35
|
'hobexRefundApi',
|
|
35
36
|
'issueInvoice',
|
|
@@ -52,11 +53,13 @@ export const AUFRUFE = [
|
|
|
52
53
|
'registerPinLogin',
|
|
53
54
|
'registerUserLogin',
|
|
54
55
|
'renewRegisterSession',
|
|
56
|
+
'reportCustomerContract',
|
|
55
57
|
'requestCustomerSignature',
|
|
56
58
|
'searchCustomers',
|
|
57
59
|
'sendPartnerCustomerFonLink',
|
|
58
60
|
'sendPartnerWebhookTest',
|
|
59
61
|
'sendReceiptEmail',
|
|
62
|
+
'setMyKasseLogo',
|
|
60
63
|
'setMyKasseSettings',
|
|
61
64
|
'setMyRegisterDeviceSettings',
|
|
62
65
|
'stripeCaptureIntent',
|
|
@@ -65,3 +68,110 @@ export const AUFRUFE = [
|
|
|
65
68
|
'updateCustomer',
|
|
66
69
|
'updatePartnerWebhook',
|
|
67
70
|
];
|
|
71
|
+
/**
|
|
72
|
+
* Die oeffentlichen Endpunkte unter `/v3` (`https://api.kasseneck.at/v3/<name>`),
|
|
73
|
+
* mit ihrem **aeusseren** Namen und in der Reihenfolge des Backend-Vertrags
|
|
74
|
+
* (`fixtures/v3/v3-vokabular.json`, `endpoints.public`, umbenannt nach
|
|
75
|
+
* `names`). Ein Test haelt beide Listen deckungsgleich.
|
|
76
|
+
*/
|
|
77
|
+
export const PUBLIC_CALLS = [
|
|
78
|
+
'createReceipt',
|
|
79
|
+
'getReceipt',
|
|
80
|
+
'cancelReceipt',
|
|
81
|
+
'sendReceiptEmail',
|
|
82
|
+
'generateFullReceiptId',
|
|
83
|
+
'downloadReceipt',
|
|
84
|
+
'getFirstReceiptDate',
|
|
85
|
+
'getReportV2',
|
|
86
|
+
'downloadReport',
|
|
87
|
+
'downloadDailyReport',
|
|
88
|
+
'createPaymentLinkStripe',
|
|
89
|
+
'stripeCaptureIntent',
|
|
90
|
+
'hobexPayApi',
|
|
91
|
+
'hobexRefundApi',
|
|
92
|
+
'hobexGetStatus',
|
|
93
|
+
'financeWebService',
|
|
94
|
+
'listMyTipRecipients',
|
|
95
|
+
'getPartnerInfo',
|
|
96
|
+
'createPartnerCustomer',
|
|
97
|
+
'checkPartnerCustomerEmail',
|
|
98
|
+
'listPartnerCustomers',
|
|
99
|
+
'getPartnerCustomer',
|
|
100
|
+
'sendPartnerCustomerFonLink',
|
|
101
|
+
'createPartnerWebhook',
|
|
102
|
+
'updatePartnerWebhook',
|
|
103
|
+
'deletePartnerWebhook',
|
|
104
|
+
'listPartnerWebhooks',
|
|
105
|
+
'sendPartnerWebhookTest',
|
|
106
|
+
'rotatePartnerWebhookSecret',
|
|
107
|
+
'listPartnerWebhookDeliveries',
|
|
108
|
+
'requestCustomerSignature',
|
|
109
|
+
'getCustomerSignatureStatus',
|
|
110
|
+
'createCustomerCashregister',
|
|
111
|
+
'activateCashregister',
|
|
112
|
+
'listCustomerCashregisters',
|
|
113
|
+
'getCustomerCredentials',
|
|
114
|
+
'reportCustomerContract',
|
|
115
|
+
'createCustomer',
|
|
116
|
+
'getCustomer',
|
|
117
|
+
'updateCustomer',
|
|
118
|
+
'searchCustomers',
|
|
119
|
+
'issueInvoice',
|
|
120
|
+
'cancelInvoice',
|
|
121
|
+
'createCreditNote',
|
|
122
|
+
'getInvoice',
|
|
123
|
+
'listInvoices',
|
|
124
|
+
'getInvoicePdf',
|
|
125
|
+
'getInvoiceXml',
|
|
126
|
+
'getInvoiceSetupStatus',
|
|
127
|
+
'listBrands',
|
|
128
|
+
'recordInvoicePayment',
|
|
129
|
+
];
|
|
130
|
+
/**
|
|
131
|
+
* Die Endpunkte des Kassenwegs (`https://kasse.kasseneck.at/api/v3/<name>`,
|
|
132
|
+
* Web-Kasse: gleicher Ursprung `/api/v3`), in der Reihenfolge von
|
|
133
|
+
* `endpoints.register`. Sechs davon sind zugleich oeffentlich; die Kasse ruft
|
|
134
|
+
* sie trotzdem ueber diesen Weg (ein Dialekt je Client, Nachtrag §5.2).
|
|
135
|
+
*/
|
|
136
|
+
export const POS_CALLS = [
|
|
137
|
+
'pairRegisterDevice',
|
|
138
|
+
'listRegisterUsersForDevice',
|
|
139
|
+
'listRegisterSessionsForDevice',
|
|
140
|
+
'registerUserLogin',
|
|
141
|
+
'registerPinLogin',
|
|
142
|
+
'renewRegisterSession',
|
|
143
|
+
'endRegisterSession',
|
|
144
|
+
'unpairRegisterDevice',
|
|
145
|
+
'listMyCashregisters',
|
|
146
|
+
'listMyReceipts',
|
|
147
|
+
'getReceipt',
|
|
148
|
+
'createReceipt',
|
|
149
|
+
'generateFullReceiptId',
|
|
150
|
+
'cancelReceipt',
|
|
151
|
+
'sendReceiptEmail',
|
|
152
|
+
'listMyArticleGroups',
|
|
153
|
+
'listMyArticles',
|
|
154
|
+
'getKasseSettings',
|
|
155
|
+
'setMyKasseSettings',
|
|
156
|
+
'setMyKasseLogo',
|
|
157
|
+
'setMyRegisterDeviceSettings',
|
|
158
|
+
'listMyPrinters',
|
|
159
|
+
'createPrintJob',
|
|
160
|
+
'getPrintJob',
|
|
161
|
+
'listMyTipRecipients',
|
|
162
|
+
];
|
|
163
|
+
const OEFFENTLICH = new Set(PUBLIC_CALLS);
|
|
164
|
+
const KASSENWEG = new Set(POS_CALLS);
|
|
165
|
+
const NUR_KASSE = new Set(POS_CALLS.filter((name) => !OEFFENTLICH.has(name)));
|
|
166
|
+
/** Einer der 25 Aufrufe des Kassenwegs. */
|
|
167
|
+
export function isPosCall(name) {
|
|
168
|
+
return KASSENWEG.has(name);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Nur ueber den Kassenweg erreichbar (19 Namen): unter `api.kasseneck.at/v3`
|
|
172
|
+
* gibt es sie nicht. Der Transport schickt sie darum ohne eigene Basis an
|
|
173
|
+
* [POS_BASE_URL] statt an die oeffentliche Basis.
|
|
174
|
+
*/
|
|
175
|
+
export function isPosOnlyCall(name) {
|
|
176
|
+
return NUR_KASSE.has(name);
|
|
177
|
+
}
|
|
@@ -48,5 +48,7 @@ export interface RegisterUserAuthOptions {
|
|
|
48
48
|
}
|
|
49
49
|
/** Anmeldung per API-Schluessel und Kassen-Token (Geraete, POS-Apps, Dritte). */
|
|
50
50
|
export declare function apiKeyAuth(options: ApiKeyAuthOptions): KasseneckAuth;
|
|
51
|
+
/** Nur fuer den Transport; nicht Teil der oeffentlichen Oberflaeche. */
|
|
52
|
+
export declare function isRegisterUserAuth(auth: KasseneckAuth): boolean;
|
|
51
53
|
/** Anmeldung eines Kassen-Benutzers der Browser-Kasse (ID-Token + Sitzung). */
|
|
52
54
|
export declare function registerUserAuth(options: RegisterUserAuthOptions): KasseneckAuth;
|
package/dist/esm/client/auth.js
CHANGED
|
@@ -42,13 +42,26 @@ export function apiKeyAuth(options) {
|
|
|
42
42
|
params: {},
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Anmeldungen der Kassen-Benutzer. Ein Transport mit einer davon ruft ohne
|
|
47
|
+
* eigene Basis **jeden** Aufruf ueber den Kassenweg (`kasse.kasseneck.at/api/v3`,
|
|
48
|
+
* Kanal `app`), auch die sechs oeffentlichen: die Kasse spricht einen Dialekt
|
|
49
|
+
* und braucht am Beleg die Anbieterdaten der Kartenzahlung (Nachtrag §5.2, §8).
|
|
50
|
+
* Eine Menge statt eines Felds am Funktionsobjekt: niemand kann eine fremde
|
|
51
|
+
* Anmeldung von aussen zur Kassen-Anmeldung erklaeren.
|
|
52
|
+
*/
|
|
53
|
+
const KASSENWEG = new WeakSet();
|
|
54
|
+
/** Nur fuer den Transport; nicht Teil der oeffentlichen Oberflaeche. */
|
|
55
|
+
export function isRegisterUserAuth(auth) {
|
|
56
|
+
return KASSENWEG.has(auth);
|
|
57
|
+
}
|
|
45
58
|
/** Anmeldung eines Kassen-Benutzers der Browser-Kasse (ID-Token + Sitzung). */
|
|
46
59
|
export function registerUserAuth(options) {
|
|
47
60
|
if (!options.cashregisterId) {
|
|
48
61
|
throw new KasseneckAuthError('registerUserAuth: cashregisterId fehlt');
|
|
49
62
|
}
|
|
50
63
|
const { getIdToken, getSessionId, cashregisterId } = options;
|
|
51
|
-
|
|
64
|
+
const anmeldung = async () => {
|
|
52
65
|
// Beides bei JEDEM Aufruf frisch — siehe Modulkommentar (Ablaufzeiten).
|
|
53
66
|
const [idToken, sessionId] = await Promise.all([getIdToken(), getSessionId()]);
|
|
54
67
|
if (!idToken) {
|
|
@@ -65,4 +78,6 @@ export function registerUserAuth(options) {
|
|
|
65
78
|
params: { cashregisterId },
|
|
66
79
|
};
|
|
67
80
|
};
|
|
81
|
+
KASSENWEG.add(anmeldung);
|
|
82
|
+
return anmeldung;
|
|
68
83
|
}
|
|
@@ -18,4 +18,4 @@ import type { InternerTransport } from './aufrufe.js';
|
|
|
18
18
|
*
|
|
19
19
|
* Ohne diesen Aufruf kann eine Browser-Kasse ihre Kasse nicht auswaehlen.
|
|
20
20
|
*/
|
|
21
|
-
export declare function listMyCashregisters(
|
|
21
|
+
export declare function listMyCashregisters(transport: InternerTransport): Promise<Cashregister[]>;
|
|
@@ -18,8 +18,8 @@ import { KasseneckValidationError } from './errors.js';
|
|
|
18
18
|
*
|
|
19
19
|
* Ohne diesen Aufruf kann eine Browser-Kasse ihre Kasse nicht auswaehlen.
|
|
20
20
|
*/
|
|
21
|
-
export async function listMyCashregisters(
|
|
22
|
-
const daten = await
|
|
21
|
+
export async function listMyCashregisters(transport) {
|
|
22
|
+
const daten = await transport('listMyCashregisters');
|
|
23
23
|
const liste = daten?.cashregisters;
|
|
24
24
|
if (!Array.isArray(liste)) {
|
|
25
25
|
throw new KasseneckValidationError('listMyCashregisters', 'Antwort enthaelt keine Kassenliste (data.cashregisters fehlt)', 'response');
|
|
@@ -11,24 +11,41 @@
|
|
|
11
11
|
* `'response'`: das Backend meldete Erfolg, die Nutzlast enthielt aber
|
|
12
12
|
* nicht, was der Aufruf zusagt.
|
|
13
13
|
*
|
|
14
|
-
* - `KasseneckApiError
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
14
|
+
* - `KasseneckApiError`: **fachlicher** Fehler mit `code`. Das Backend legt
|
|
15
|
+
* Erfolg/Misserfolg in den Rumpf (`{status:'success'|'error', message,
|
|
16
|
+
* code, data}`, siehe `successResponse`/`errorResponse` im Backend), meist
|
|
17
|
+
* unter HTTP 200, unter `/v3` bei unbekanntem Endpunkt auch unter HTTP 404
|
|
18
|
+
* (`not_found`). Dazu kommen drei Codes des Pakets selbst:
|
|
19
|
+
* `route_missing` (HTTP 200 mit HTML: die Auffangregel der
|
|
20
|
+
* Single-Page-App hat geantwortet, der Aufruf kam nie an),
|
|
21
|
+
* `dialect_mismatch` (Antwort ohne Kennzeichen `Kasseneck-Api-Version: v3`:
|
|
22
|
+
* ein Rand ohne `/v3` hat geantwortet, **Ausgang unklar**) und
|
|
23
|
+
* `response_unreadable` (ein Aufruf mit Wirkung meldete Erfolg, die
|
|
24
|
+
* Antwort traegt aber nicht, was er zusagt: **Ausgang unklar**).
|
|
25
|
+
* **Entscheidend ist `outcome`:** `'rejected'` heisst abgelehnt, nichts
|
|
26
|
+
* geschehen, Wiederholen hilft nicht. `'unknown'` heisst: der Vorgang kann
|
|
27
|
+
* ausgefuehrt sein (bei `createReceipt` ein signierter Beleg). Dann **nie
|
|
28
|
+
* wiederholen**, sondern das Ergebnis nachlesen (Belegliste, `getReceipt`).
|
|
20
29
|
* - `KasseneckHttpError` — die Antwort war **keine** verwertbare Huelle:
|
|
21
|
-
* HTTP 500/404, leerer Rumpf
|
|
22
|
-
* wenn ein Aufruf mangels Rewrite auf der Single-Page-App landet). Beim
|
|
30
|
+
* HTTP 500/404 ohne Huelle, leerer Rumpf oder Text statt JSON. Beim
|
|
23
31
|
* Bericht-Download gelten dieselben Gruende fuer alles, was kein PDF ist.
|
|
24
|
-
* `reason` trennt die Faelle maschinenlesbar.
|
|
32
|
+
* `reason` trennt die Faelle maschinenlesbar. Auf einem Aufruf mit
|
|
33
|
+
* Wirkung (signierend oder geldbewegend) hat HTTP 5xx
|
|
34
|
+
* `outcome: 'unknown'`, ebenso HTTP 200 mit Kennzeichen, aber leerem oder
|
|
35
|
+
* unlesbarem Rumpf.
|
|
25
36
|
* - `KasseneckNetworkError` — die Antwort kam gar nicht: Netz weg, DNS,
|
|
26
|
-
* abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`).
|
|
37
|
+
* abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`). Auch hier
|
|
38
|
+
* gilt `outcome`: war die Anfrage schon unterwegs und ist der Aufruf einer
|
|
39
|
+
* mit Wirkung (signierend: `createReceipt`, `cancelReceipt`,
|
|
40
|
+
* `financeWebService`; geldbewegend: `hobexPayApi`, `hobexRefundApi`,
|
|
41
|
+
* `stripeCaptureIntent`), ist er `'unknown'`.
|
|
27
42
|
* - `KasseneckAuthError` — es kam nicht einmal zur Anfrage, weil die Anmeldung
|
|
28
43
|
* scheiterte (fehlende Zugangsdaten, oder der Token-/Sitzungsgeber warf).
|
|
29
44
|
* In der Browser-Kasse mit ihrer 90-Sekunden-Sitzung ist das Alltag, kein
|
|
30
45
|
* Sonderfall.
|
|
31
46
|
*
|
|
47
|
+
* [isOutcomeUnknown] fasst das fuer jede Fehlerart zusammen.
|
|
48
|
+
*
|
|
32
49
|
* **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
|
|
33
50
|
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
|
|
34
51
|
* ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
|
|
@@ -87,6 +104,21 @@ export declare function causeDigest(ursache: unknown, geheimnisse: readonly stri
|
|
|
87
104
|
* demselben Grund **keinen** Vorgabewert.
|
|
88
105
|
*/
|
|
89
106
|
export declare function fehlerDetails(daten: unknown, geheimnisse: readonly string[]): Record<string, unknown>;
|
|
107
|
+
/**
|
|
108
|
+
* Ausgang eines gescheiterten Aufrufs. `'rejected'`: nichts geschehen.
|
|
109
|
+
* `'unknown'`: der Vorgang kann ausgefuehrt sein; nie wiederholen, sondern
|
|
110
|
+
* das Ergebnis nachlesen.
|
|
111
|
+
*/
|
|
112
|
+
export type ErrorOutcome = 'unknown' | 'rejected';
|
|
113
|
+
/**
|
|
114
|
+
* Codes, die das Paket selbst vergibt, nicht der Server: `route_missing`
|
|
115
|
+
* (HTML statt Backend, der Aufruf kam nie an) und `response_unreadable`
|
|
116
|
+
* (ein Aufruf mit Wirkung meldete Erfolg, die Antwort ist aber unlesbar;
|
|
117
|
+
* Ausgang unklar). `dialect_mismatch` vergibt das Paket ebenfalls, der Code
|
|
118
|
+
* gehoert aber schon zum Rand des Servers (`errorCodes.edge`).
|
|
119
|
+
*/
|
|
120
|
+
export declare const CLIENT_ERROR_CODES: readonly ["route_missing", "response_unreadable"];
|
|
121
|
+
export type ClientErrorCode = (typeof CLIENT_ERROR_CODES)[number];
|
|
90
122
|
export declare class KasseneckApiError extends Error {
|
|
91
123
|
readonly name = "KasseneckApiError";
|
|
92
124
|
/** Aufgerufene Backend-Funktion, z. B. `createReceipt`. */
|
|
@@ -109,21 +141,38 @@ export declare class KasseneckApiError extends Error {
|
|
|
109
141
|
* beilegt. Immer ein Objekt, notfalls ein leeres.
|
|
110
142
|
*/
|
|
111
143
|
readonly details: Record<string, unknown>;
|
|
144
|
+
/**
|
|
145
|
+
* `'unknown'` bei `dialect_mismatch`, `receipt_outcome_unknown`,
|
|
146
|
+
* `cancellation_outcome_unknown`, `response_unreadable` (Erfolg gemeldet,
|
|
147
|
+
* Antwort eines Aufrufs mit Wirkung aber unlesbar) und
|
|
148
|
+
* `response_translation_failed` (ausser mit `details.handled === false`);
|
|
149
|
+
* sonst `'rejected'`. Bei `'unknown'` nie wiederholen, sondern nachlesen.
|
|
150
|
+
*/
|
|
151
|
+
readonly outcome: ErrorOutcome;
|
|
112
152
|
constructor(functionName: string, serverMessage: string, details?: Record<string, unknown>, code?: string);
|
|
113
153
|
}
|
|
114
154
|
/** Warum die Antwort keine verwertbare Huelle war. */
|
|
115
155
|
export type HttpFailureReason = 'server-error' | 'empty-body' | 'not-json' | 'missing-status';
|
|
116
|
-
/** Antwort ohne verwertbare Huelle (HTTP-Fehler, leerer Rumpf,
|
|
156
|
+
/** Antwort ohne verwertbare Huelle (HTTP-Fehler ohne Huelle, leerer Rumpf, Text statt JSON). */
|
|
117
157
|
export declare class KasseneckHttpError extends Error {
|
|
118
158
|
readonly name = "KasseneckHttpError";
|
|
119
159
|
readonly functionName: string;
|
|
120
|
-
/** HTTP-Statuscode der Antwort (bei
|
|
160
|
+
/** HTTP-Statuscode der Antwort (bei Text statt JSON durchaus 200). */
|
|
121
161
|
readonly statusCode: number;
|
|
122
162
|
/** Inhaltstyp der Antwort, falls die Gegenstelle einen gesetzt hat. */
|
|
123
163
|
readonly contentType: string | undefined;
|
|
124
164
|
/** Maschinenlesbarer Grund — trennt den Rewrite-Fall vom 500er ohne Textparsen. */
|
|
125
165
|
readonly reason: HttpFailureReason;
|
|
126
|
-
|
|
166
|
+
/**
|
|
167
|
+
* `'unknown'` auf einem Aufruf mit Wirkung (`createReceipt`,
|
|
168
|
+
* `cancelReceipt`, `financeWebService`, `hobexPayApi`, `hobexRefundApi`,
|
|
169
|
+
* `stripeCaptureIntent`) bei HTTP 5xx und bei HTTP 200 mit
|
|
170
|
+
* Kennzeichen, aber unlesbarem Rumpf (`empty-body`, `not-json` auch bei
|
|
171
|
+
* `text/html`, `missing-status`): der Handler kann gelaufen sein, nie wiederholen,
|
|
172
|
+
* sondern nachlesen. Sonst `'rejected'` (auch 4xx).
|
|
173
|
+
*/
|
|
174
|
+
readonly outcome: ErrorOutcome;
|
|
175
|
+
constructor(functionName: string, statusCode: number, contentType: string | undefined, reason: HttpFailureReason, outcome?: ErrorOutcome);
|
|
127
176
|
}
|
|
128
177
|
/** Es kam keine Antwort: Netzfehler oder Zeitueberschreitung. */
|
|
129
178
|
export declare class KasseneckNetworkError extends Error {
|
|
@@ -137,7 +186,13 @@ export declare class KasseneckNetworkError extends Error {
|
|
|
137
186
|
readonly causeName: string | undefined;
|
|
138
187
|
/** Code der zugrunde liegenden Ursache, sofern unbedenklich (z. B. `ECONNREFUSED`). */
|
|
139
188
|
readonly causeCode: string | undefined;
|
|
140
|
-
|
|
189
|
+
/**
|
|
190
|
+
* `'unknown'`, wenn die Anfrage schon unterwegs war und der Aufruf signiert
|
|
191
|
+
* (`createReceipt`, `cancelReceipt`, `financeWebService`): dann nie
|
|
192
|
+
* wiederholen, sondern nachlesen. Sonst `'rejected'`.
|
|
193
|
+
*/
|
|
194
|
+
readonly outcome: ErrorOutcome;
|
|
195
|
+
constructor(functionName: string, timedOut: boolean, timeoutMs: number, cause?: CauseDigest, outcome?: ErrorOutcome);
|
|
141
196
|
}
|
|
142
197
|
/**
|
|
143
198
|
* Die Anmeldung scheiterte — es ging keine Anfrage raus.
|
|
@@ -185,8 +240,28 @@ export declare class KasseneckValidationError extends Error {
|
|
|
185
240
|
}
|
|
186
241
|
/** Alle Fehler, die dieses Paket wirft. */
|
|
187
242
|
export type KasseneckError = KasseneckApiError | KasseneckHttpError | KasseneckNetworkError | KasseneckAuthError | KasseneckValidationError;
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
243
|
+
/**
|
|
244
|
+
* Ist der Ausgang dieses Fehlers unklar (`outcome === 'unknown'`)? Dann den
|
|
245
|
+
* Aufruf **nicht wiederholen**, sondern das Ergebnis nachlesen. Gilt fuer
|
|
246
|
+
* jede Fehlerart; nur [KasseneckApiError], [KasseneckHttpError] und
|
|
247
|
+
* [KasseneckNetworkError] koennen `'unknown'` sein.
|
|
248
|
+
*/
|
|
249
|
+
export declare function isOutcomeUnknown(error: unknown): boolean;
|
|
250
|
+
export declare function isKasseneckApiError(error: unknown): error is KasseneckApiError;
|
|
251
|
+
export declare function isKasseneckHttpError(error: unknown): error is KasseneckHttpError;
|
|
252
|
+
export declare function isKasseneckNetworkError(error: unknown): error is KasseneckNetworkError;
|
|
253
|
+
export declare function isKasseneckAuthError(error: unknown): error is KasseneckAuthError;
|
|
254
|
+
export declare function isKasseneckValidationError(error: unknown): error is KasseneckValidationError;
|
|
255
|
+
/**
|
|
256
|
+
* Liest die Erfolgsantwort eines Aufrufs **mit Wirkung** (signierend oder
|
|
257
|
+
* geldbewegend). Scheitert das Lesen (fehlender Beleg, fehlender Bezug,
|
|
258
|
+
* unbrauchbares Feld oder ein Laufzeitfehler beim Umwandeln), hat der Server
|
|
259
|
+
* trotzdem Erfolg gemeldet: der Beleg ist signiert und im DEP, die Karte
|
|
260
|
+
* belastet bzw. der Einzug gelaufen. Das darf nie als gewoehnlicher Fehler
|
|
261
|
+
* enden, sonst kassiert die Kasse ein zweites Mal. Darum wird daraus
|
|
262
|
+
* `KasseneckApiError` mit Code `response_unreadable` und `outcome: 'unknown'`.
|
|
263
|
+
* Der Grund stammt vom Paket; aus der Antwort selbst wird nichts uebernommen.
|
|
264
|
+
*
|
|
265
|
+
* Paketintern (receipts.ts, payments/); nicht Teil der Paketoberflaeche.
|
|
266
|
+
*/
|
|
267
|
+
export declare function signiertGelesen<T>(functionName: string, lesen: () => T): T;
|
|
@@ -11,24 +11,41 @@
|
|
|
11
11
|
* `'response'`: das Backend meldete Erfolg, die Nutzlast enthielt aber
|
|
12
12
|
* nicht, was der Aufruf zusagt.
|
|
13
13
|
*
|
|
14
|
-
* - `KasseneckApiError
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
14
|
+
* - `KasseneckApiError`: **fachlicher** Fehler mit `code`. Das Backend legt
|
|
15
|
+
* Erfolg/Misserfolg in den Rumpf (`{status:'success'|'error', message,
|
|
16
|
+
* code, data}`, siehe `successResponse`/`errorResponse` im Backend), meist
|
|
17
|
+
* unter HTTP 200, unter `/v3` bei unbekanntem Endpunkt auch unter HTTP 404
|
|
18
|
+
* (`not_found`). Dazu kommen drei Codes des Pakets selbst:
|
|
19
|
+
* `route_missing` (HTTP 200 mit HTML: die Auffangregel der
|
|
20
|
+
* Single-Page-App hat geantwortet, der Aufruf kam nie an),
|
|
21
|
+
* `dialect_mismatch` (Antwort ohne Kennzeichen `Kasseneck-Api-Version: v3`:
|
|
22
|
+
* ein Rand ohne `/v3` hat geantwortet, **Ausgang unklar**) und
|
|
23
|
+
* `response_unreadable` (ein Aufruf mit Wirkung meldete Erfolg, die
|
|
24
|
+
* Antwort traegt aber nicht, was er zusagt: **Ausgang unklar**).
|
|
25
|
+
* **Entscheidend ist `outcome`:** `'rejected'` heisst abgelehnt, nichts
|
|
26
|
+
* geschehen, Wiederholen hilft nicht. `'unknown'` heisst: der Vorgang kann
|
|
27
|
+
* ausgefuehrt sein (bei `createReceipt` ein signierter Beleg). Dann **nie
|
|
28
|
+
* wiederholen**, sondern das Ergebnis nachlesen (Belegliste, `getReceipt`).
|
|
20
29
|
* - `KasseneckHttpError` — die Antwort war **keine** verwertbare Huelle:
|
|
21
|
-
* HTTP 500/404, leerer Rumpf
|
|
22
|
-
* wenn ein Aufruf mangels Rewrite auf der Single-Page-App landet). Beim
|
|
30
|
+
* HTTP 500/404 ohne Huelle, leerer Rumpf oder Text statt JSON. Beim
|
|
23
31
|
* Bericht-Download gelten dieselben Gruende fuer alles, was kein PDF ist.
|
|
24
|
-
* `reason` trennt die Faelle maschinenlesbar.
|
|
32
|
+
* `reason` trennt die Faelle maschinenlesbar. Auf einem Aufruf mit
|
|
33
|
+
* Wirkung (signierend oder geldbewegend) hat HTTP 5xx
|
|
34
|
+
* `outcome: 'unknown'`, ebenso HTTP 200 mit Kennzeichen, aber leerem oder
|
|
35
|
+
* unlesbarem Rumpf.
|
|
25
36
|
* - `KasseneckNetworkError` — die Antwort kam gar nicht: Netz weg, DNS,
|
|
26
|
-
* abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`).
|
|
37
|
+
* abgebrochene Verbindung oder Zeitueberschreitung (`timedOut`). Auch hier
|
|
38
|
+
* gilt `outcome`: war die Anfrage schon unterwegs und ist der Aufruf einer
|
|
39
|
+
* mit Wirkung (signierend: `createReceipt`, `cancelReceipt`,
|
|
40
|
+
* `financeWebService`; geldbewegend: `hobexPayApi`, `hobexRefundApi`,
|
|
41
|
+
* `stripeCaptureIntent`), ist er `'unknown'`.
|
|
27
42
|
* - `KasseneckAuthError` — es kam nicht einmal zur Anfrage, weil die Anmeldung
|
|
28
43
|
* scheiterte (fehlende Zugangsdaten, oder der Token-/Sitzungsgeber warf).
|
|
29
44
|
* In der Browser-Kasse mit ihrer 90-Sekunden-Sitzung ist das Alltag, kein
|
|
30
45
|
* Sonderfall.
|
|
31
46
|
*
|
|
47
|
+
* [isOutcomeUnknown] fasst das fuer jede Fehlerart zusammen.
|
|
48
|
+
*
|
|
32
49
|
* **Geheimnisse gehoeren in keinen dieser Fehler.** Fehlermeldungen landen in
|
|
33
50
|
* Protokollen und Fehlerdiensten; weder `api_key`, Kassen-Token, ID-
|
|
34
51
|
* ID-Token noch Sitzungsbezeichner duerfen dorthin. Deshalb tragen die Fehler
|
|
@@ -187,6 +204,34 @@ function feldHinweis(details) {
|
|
|
187
204
|
const mehr = teile.length > 5 ? ` (+${teile.length - 5} weitere)` : '';
|
|
188
205
|
return ` [${teile.slice(0, 5).join('; ')}${mehr}]`;
|
|
189
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* Codes, deren Ausgang unklar ist. `response_translation_failed` nur, wenn
|
|
209
|
+
* der Rand nicht ausdruecklich `handled: false` meldet (Handler lief und
|
|
210
|
+
* lehnte ab); `handled: true` oder `null` heisst ausgefuehrt bzw. unbekannt.
|
|
211
|
+
*/
|
|
212
|
+
const AUSGANG_UNKLAR_CODES = new Set([
|
|
213
|
+
'dialect_mismatch',
|
|
214
|
+
'receipt_outcome_unknown',
|
|
215
|
+
'cancellation_outcome_unknown',
|
|
216
|
+
'response_unreadable',
|
|
217
|
+
]);
|
|
218
|
+
function ausgangAusCode(code, details) {
|
|
219
|
+
if (code === undefined)
|
|
220
|
+
return 'rejected';
|
|
221
|
+
if (AUSGANG_UNKLAR_CODES.has(code))
|
|
222
|
+
return 'unknown';
|
|
223
|
+
if (code === 'response_translation_failed' && details['handled'] !== false)
|
|
224
|
+
return 'unknown';
|
|
225
|
+
return 'rejected';
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Codes, die das Paket selbst vergibt, nicht der Server: `route_missing`
|
|
229
|
+
* (HTML statt Backend, der Aufruf kam nie an) und `response_unreadable`
|
|
230
|
+
* (ein Aufruf mit Wirkung meldete Erfolg, die Antwort ist aber unlesbar;
|
|
231
|
+
* Ausgang unklar). `dialect_mismatch` vergibt das Paket ebenfalls, der Code
|
|
232
|
+
* gehoert aber schon zum Rand des Servers (`errorCodes.edge`).
|
|
233
|
+
*/
|
|
234
|
+
export const CLIENT_ERROR_CODES = Object.freeze(['route_missing', 'response_unreadable']);
|
|
190
235
|
export class KasseneckApiError extends Error {
|
|
191
236
|
name = 'KasseneckApiError';
|
|
192
237
|
/** Aufgerufene Backend-Funktion, z. B. `createReceipt`. */
|
|
@@ -209,6 +254,14 @@ export class KasseneckApiError extends Error {
|
|
|
209
254
|
* beilegt. Immer ein Objekt, notfalls ein leeres.
|
|
210
255
|
*/
|
|
211
256
|
details;
|
|
257
|
+
/**
|
|
258
|
+
* `'unknown'` bei `dialect_mismatch`, `receipt_outcome_unknown`,
|
|
259
|
+
* `cancellation_outcome_unknown`, `response_unreadable` (Erfolg gemeldet,
|
|
260
|
+
* Antwort eines Aufrufs mit Wirkung aber unlesbar) und
|
|
261
|
+
* `response_translation_failed` (ausser mit `details.handled === false`);
|
|
262
|
+
* sonst `'rejected'`. Bei `'unknown'` nie wiederholen, sondern nachlesen.
|
|
263
|
+
*/
|
|
264
|
+
outcome;
|
|
212
265
|
constructor(functionName, serverMessage, details = {}, code) {
|
|
213
266
|
super(`${functionName} fehlgeschlagen: ${serverMessage}${feldHinweis(details)}`);
|
|
214
267
|
this.functionName = functionName;
|
|
@@ -218,6 +271,7 @@ export class KasseneckApiError extends Error {
|
|
|
218
271
|
// den Details. So bleibt die Klasse fuer beide Ablageorte dieselbe.
|
|
219
272
|
const kandidat = code !== undefined ? code : details['code'];
|
|
220
273
|
this.code = typeof kandidat === 'string' && BEZEICHNER.test(kandidat) ? kandidat : undefined;
|
|
274
|
+
this.outcome = ausgangAusCode(this.code, details);
|
|
221
275
|
}
|
|
222
276
|
}
|
|
223
277
|
const GRUND_TEXT = {
|
|
@@ -226,23 +280,33 @@ const GRUND_TEXT = {
|
|
|
226
280
|
'not-json': 'Antwort ist kein JSON',
|
|
227
281
|
'missing-status': 'Antwort ohne Statusfeld',
|
|
228
282
|
};
|
|
229
|
-
/** Antwort ohne verwertbare Huelle (HTTP-Fehler, leerer Rumpf,
|
|
283
|
+
/** Antwort ohne verwertbare Huelle (HTTP-Fehler ohne Huelle, leerer Rumpf, Text statt JSON). */
|
|
230
284
|
export class KasseneckHttpError extends Error {
|
|
231
285
|
name = 'KasseneckHttpError';
|
|
232
286
|
functionName;
|
|
233
|
-
/** HTTP-Statuscode der Antwort (bei
|
|
287
|
+
/** HTTP-Statuscode der Antwort (bei Text statt JSON durchaus 200). */
|
|
234
288
|
statusCode;
|
|
235
289
|
/** Inhaltstyp der Antwort, falls die Gegenstelle einen gesetzt hat. */
|
|
236
290
|
contentType;
|
|
237
291
|
/** Maschinenlesbarer Grund — trennt den Rewrite-Fall vom 500er ohne Textparsen. */
|
|
238
292
|
reason;
|
|
239
|
-
|
|
293
|
+
/**
|
|
294
|
+
* `'unknown'` auf einem Aufruf mit Wirkung (`createReceipt`,
|
|
295
|
+
* `cancelReceipt`, `financeWebService`, `hobexPayApi`, `hobexRefundApi`,
|
|
296
|
+
* `stripeCaptureIntent`) bei HTTP 5xx und bei HTTP 200 mit
|
|
297
|
+
* Kennzeichen, aber unlesbarem Rumpf (`empty-body`, `not-json` auch bei
|
|
298
|
+
* `text/html`, `missing-status`): der Handler kann gelaufen sein, nie wiederholen,
|
|
299
|
+
* sondern nachlesen. Sonst `'rejected'` (auch 4xx).
|
|
300
|
+
*/
|
|
301
|
+
outcome;
|
|
302
|
+
constructor(functionName, statusCode, contentType, reason, outcome = 'rejected') {
|
|
240
303
|
const typHinweis = contentType ? `, Inhaltstyp ${contentType}` : '';
|
|
241
304
|
super(`${functionName} fehlgeschlagen: ${GRUND_TEXT[reason]} (HTTP ${statusCode}${typHinweis})`);
|
|
242
305
|
this.functionName = functionName;
|
|
243
306
|
this.statusCode = statusCode;
|
|
244
307
|
this.contentType = contentType;
|
|
245
308
|
this.reason = reason;
|
|
309
|
+
this.outcome = outcome;
|
|
246
310
|
}
|
|
247
311
|
}
|
|
248
312
|
/** Es kam keine Antwort: Netzfehler oder Zeitueberschreitung. */
|
|
@@ -257,15 +321,22 @@ export class KasseneckNetworkError extends Error {
|
|
|
257
321
|
causeName;
|
|
258
322
|
/** Code der zugrunde liegenden Ursache, sofern unbedenklich (z. B. `ECONNREFUSED`). */
|
|
259
323
|
causeCode;
|
|
260
|
-
|
|
324
|
+
/**
|
|
325
|
+
* `'unknown'`, wenn die Anfrage schon unterwegs war und der Aufruf signiert
|
|
326
|
+
* (`createReceipt`, `cancelReceipt`, `financeWebService`): dann nie
|
|
327
|
+
* wiederholen, sondern nachlesen. Sonst `'rejected'`.
|
|
328
|
+
*/
|
|
329
|
+
outcome;
|
|
330
|
+
constructor(functionName, timedOut, timeoutMs, cause = {}, outcome = 'rejected') {
|
|
261
331
|
const grund = timedOut ? `Zeitueberschreitung nach ${timeoutMs} ms` : 'Netzwerkfehler';
|
|
262
|
-
const codeHinweis =
|
|
332
|
+
const codeHinweis = cause.causeCode ? ` (${cause.causeCode})` : '';
|
|
263
333
|
super(`${functionName} fehlgeschlagen: ${grund}${codeHinweis}`);
|
|
264
334
|
this.functionName = functionName;
|
|
265
335
|
this.timedOut = timedOut;
|
|
266
336
|
this.timeoutMs = timeoutMs;
|
|
267
|
-
this.causeName =
|
|
268
|
-
this.causeCode =
|
|
337
|
+
this.causeName = cause.causeName;
|
|
338
|
+
this.causeCode = cause.causeCode;
|
|
339
|
+
this.outcome = outcome;
|
|
269
340
|
}
|
|
270
341
|
}
|
|
271
342
|
/**
|
|
@@ -317,18 +388,49 @@ export class KasseneckValidationError extends Error {
|
|
|
317
388
|
this.scope = scope;
|
|
318
389
|
}
|
|
319
390
|
}
|
|
320
|
-
|
|
321
|
-
|
|
391
|
+
/**
|
|
392
|
+
* Ist der Ausgang dieses Fehlers unklar (`outcome === 'unknown'`)? Dann den
|
|
393
|
+
* Aufruf **nicht wiederholen**, sondern das Ergebnis nachlesen. Gilt fuer
|
|
394
|
+
* jede Fehlerart; nur [KasseneckApiError], [KasseneckHttpError] und
|
|
395
|
+
* [KasseneckNetworkError] koennen `'unknown'` sein.
|
|
396
|
+
*/
|
|
397
|
+
export function isOutcomeUnknown(error) {
|
|
398
|
+
return ((error instanceof KasseneckApiError || error instanceof KasseneckHttpError || error instanceof KasseneckNetworkError)
|
|
399
|
+
&& error.outcome === 'unknown');
|
|
400
|
+
}
|
|
401
|
+
export function isKasseneckApiError(error) {
|
|
402
|
+
return error instanceof KasseneckApiError;
|
|
403
|
+
}
|
|
404
|
+
export function isKasseneckHttpError(error) {
|
|
405
|
+
return error instanceof KasseneckHttpError;
|
|
322
406
|
}
|
|
323
|
-
export function
|
|
324
|
-
return
|
|
407
|
+
export function isKasseneckNetworkError(error) {
|
|
408
|
+
return error instanceof KasseneckNetworkError;
|
|
325
409
|
}
|
|
326
|
-
export function
|
|
327
|
-
return
|
|
410
|
+
export function isKasseneckAuthError(error) {
|
|
411
|
+
return error instanceof KasseneckAuthError;
|
|
328
412
|
}
|
|
329
|
-
export function
|
|
330
|
-
return
|
|
413
|
+
export function isKasseneckValidationError(error) {
|
|
414
|
+
return error instanceof KasseneckValidationError;
|
|
331
415
|
}
|
|
332
|
-
|
|
333
|
-
|
|
416
|
+
/**
|
|
417
|
+
* Liest die Erfolgsantwort eines Aufrufs **mit Wirkung** (signierend oder
|
|
418
|
+
* geldbewegend). Scheitert das Lesen (fehlender Beleg, fehlender Bezug,
|
|
419
|
+
* unbrauchbares Feld oder ein Laufzeitfehler beim Umwandeln), hat der Server
|
|
420
|
+
* trotzdem Erfolg gemeldet: der Beleg ist signiert und im DEP, die Karte
|
|
421
|
+
* belastet bzw. der Einzug gelaufen. Das darf nie als gewoehnlicher Fehler
|
|
422
|
+
* enden, sonst kassiert die Kasse ein zweites Mal. Darum wird daraus
|
|
423
|
+
* `KasseneckApiError` mit Code `response_unreadable` und `outcome: 'unknown'`.
|
|
424
|
+
* Der Grund stammt vom Paket; aus der Antwort selbst wird nichts uebernommen.
|
|
425
|
+
*
|
|
426
|
+
* Paketintern (receipts.ts, payments/); nicht Teil der Paketoberflaeche.
|
|
427
|
+
*/
|
|
428
|
+
export function signiertGelesen(functionName, lesen) {
|
|
429
|
+
try {
|
|
430
|
+
return lesen();
|
|
431
|
+
}
|
|
432
|
+
catch (ursache) {
|
|
433
|
+
const grund = ursache instanceof KasseneckValidationError ? ursache.reason : 'Antwort nicht lesbar';
|
|
434
|
+
throw new KasseneckApiError(functionName, `Erfolg gemeldet, Antwort aber unlesbar (${grund}). Der Vorgang kann ausgefuehrt sein: nicht wiederholen, sondern nachlesen.`, {}, 'response_unreadable');
|
|
435
|
+
}
|
|
334
436
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Der Code des Fehlers, wenn er in `bekannt` steht; sonst `undefined`. */
|
|
2
|
+
export declare function bekannterCode<C extends string>(error: unknown, bekannt: ReadonlySet<string>): C | undefined;
|
|
3
|
+
/** Ein Feldfehler aus `data.errors[]` einer `validation`-Antwort. */
|
|
4
|
+
export interface Feldfehler {
|
|
5
|
+
field: string;
|
|
6
|
+
message: string;
|
|
7
|
+
}
|
|
8
|
+
/** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
|
|
9
|
+
export declare function feldfehlerVon(error: unknown): Feldfehler[];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { KasseneckApiError } from './errors.js';
|
|
2
|
+
/*
|
|
3
|
+
* Gemeinsame Bausteine der Fehlerhelfer je Teilpfad (Belege, Storno,
|
|
4
|
+
* Zahlungen, Belegmail, Kasse, Anmeldung, Rechnung, Partner). Jeder Teilpfad
|
|
5
|
+
* bietet dieselbe Form: eine Codeliste, `isXErrorCode(wert)`,
|
|
6
|
+
* `xErrorCode(fehler)`, `isXError(fehler, code?)` und die Feldfehler einer
|
|
7
|
+
* `validation`-Antwort. Paketintern, nicht Teil der Oberflaeche.
|
|
8
|
+
*/
|
|
9
|
+
/** Der Code des Fehlers, wenn er in `bekannt` steht; sonst `undefined`. */
|
|
10
|
+
export function bekannterCode(error, bekannt) {
|
|
11
|
+
if (!(error instanceof KasseneckApiError))
|
|
12
|
+
return undefined;
|
|
13
|
+
const code = error.code;
|
|
14
|
+
return code !== undefined && bekannt.has(code) ? code : undefined;
|
|
15
|
+
}
|
|
16
|
+
/** Die Feldfehler einer `validation`-Antwort; leer, wenn es keine sind. */
|
|
17
|
+
export function feldfehlerVon(error) {
|
|
18
|
+
if (!(error instanceof KasseneckApiError))
|
|
19
|
+
return [];
|
|
20
|
+
const roh = error.details['errors'];
|
|
21
|
+
if (!Array.isArray(roh))
|
|
22
|
+
return [];
|
|
23
|
+
const raus = [];
|
|
24
|
+
for (const eintrag of roh) {
|
|
25
|
+
if (eintrag === null || typeof eintrag !== 'object')
|
|
26
|
+
continue;
|
|
27
|
+
const { field, message } = eintrag;
|
|
28
|
+
if (typeof field === 'string' && typeof message === 'string')
|
|
29
|
+
raus.push({ field, message });
|
|
30
|
+
}
|
|
31
|
+
return raus;
|
|
32
|
+
}
|