@kreiseck/kasseneck-api 0.27.2 → 0.28.0
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 +77 -0
- package/README.md +59 -9
- package/dist/cjs/partner/ablauf.d.ts +4 -3
- package/dist/cjs/partner/ablauf.js +4 -3
- package/dist/cjs/partner/api.d.ts +20 -8
- package/dist/cjs/partner/api.js +12 -1
- package/dist/cjs/partner/endpunkte.d.ts +9 -12
- package/dist/cjs/partner/endpunkte.js +85 -26
- package/dist/cjs/partner/fehler.d.ts +1 -1
- package/dist/cjs/partner/fehler.js +8 -3
- package/dist/cjs/partner/index.d.ts +7 -3
- package/dist/cjs/partner/index.js +7 -2
- package/dist/cjs/partner/typen.d.ts +144 -34
- package/dist/cjs/partner/typen.js +4 -0
- package/dist/cjs/partner/webhooks.d.ts +76 -14
- package/dist/cjs/partner/webhooks.js +40 -12
- package/dist/cjs/payments/index.d.ts +5 -4
- package/dist/cjs/payments/index.js +4 -3
- package/dist/cjs/rechnung/summen.d.ts +18 -3
- package/dist/cjs/rechnung/summen.js +18 -3
- package/dist/cjs/rechnung/typen.d.ts +1 -1
- package/dist/cjs/rechnung/vertrag.d.ts +1 -1
- package/dist/cjs/rechnung/vertrag.js +1 -1
- package/dist/esm/partner/ablauf.d.ts +4 -3
- package/dist/esm/partner/ablauf.js +4 -3
- package/dist/esm/partner/api.d.ts +20 -8
- package/dist/esm/partner/api.js +11 -1
- package/dist/esm/partner/endpunkte.d.ts +9 -12
- package/dist/esm/partner/endpunkte.js +85 -26
- package/dist/esm/partner/fehler.d.ts +1 -1
- package/dist/esm/partner/fehler.js +8 -3
- package/dist/esm/partner/index.d.ts +7 -3
- package/dist/esm/partner/index.js +5 -1
- package/dist/esm/partner/typen.d.ts +144 -34
- package/dist/esm/partner/typen.js +4 -0
- package/dist/esm/partner/webhooks.d.ts +76 -14
- package/dist/esm/partner/webhooks.js +40 -12
- package/dist/esm/payments/index.d.ts +5 -4
- package/dist/esm/payments/index.js +4 -3
- package/dist/esm/rechnung/summen.d.ts +18 -3
- package/dist/esm/rechnung/summen.js +18 -3
- package/dist/esm/rechnung/typen.d.ts +1 -1
- package/dist/esm/rechnung/vertrag.d.ts +1 -1
- package/dist/esm/rechnung/vertrag.js +1 -1
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/oberflaeche.json +3 -1
- package/fixtures/rechnung-api.schema.json +1 -1
- package/fixtures/rechnung-texte.json +1 -1
- package/package.json +1 -1
|
@@ -23,9 +23,10 @@
|
|
|
23
23
|
* Terminal spricht. Das ist kein Widerspruch zur Umgebungsgrenze, sondern ein
|
|
24
24
|
* zweiter, seit `hobex-hps.js` genutzter Weg um sie herum.
|
|
25
25
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* `
|
|
26
|
+
* Gutschrift und Storno am HPS-Terminal laufen ebenfalls ueber Connect
|
|
27
|
+
* (`POST /v1/terminal/refund` bzw. `/cancel`): `HpsPayments.refund`/`cancel`
|
|
28
|
+
* mit `HpsRefundOptions`/`HpsCancelOptions`, darunter
|
|
29
|
+
* `HpsConnectClient.refund`/`cancel`, siehe `hobex-hps/connect-client.ts`.
|
|
29
30
|
*
|
|
30
31
|
* **Kassen-Benutzer-Weg (`registerUserAuth`, Browser-Kasse):** **Keiner** der
|
|
31
32
|
* vier Cloud-Zahlungs-Endpunkte (Stripe, Hobex-Cloud) setzt `allowRegisterUser`;
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Summen einer Rechnung vorab rechnen
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Summen einer Rechnung vorab rechnen, nach der frueheren Formel (Weg 2,
|
|
3
|
+
* Gleitkomma). Gedacht fuer Shops, die kassieren, bevor die Rechnung entsteht.
|
|
4
|
+
*
|
|
5
|
+
* **Veraltet.** Seit dem 23.09.2026, 17:05 Uhr stellt der Server jede neue
|
|
6
|
+
* Rechnung ueber den exakten Ganzzahl-Kern aus (`rechnungRechnen` in
|
|
7
|
+
* `…/rechnung/rechnen`). An Halbcent-Grenzen weicht diese Funktion davon um
|
|
8
|
+
* einen Cent je Satz ab (21,35 EUR netto zu 10 %: hier 23,48 EUR, auf der
|
|
9
|
+
* Rechnung 23,49 EUR). Die Formel bleibt trotzdem, wie sie ist: der Server
|
|
10
|
+
* schaltet den Kern je Konto ueber einen Schalter und rechnet Entwuerfe
|
|
11
|
+
* ausserhalb des Ausstellens teils weiter nach Weg 2, und Backend und
|
|
12
|
+
* Dart-Zwilling pruefen gegen `fixtures/rechnung-summen.json`. Neuer Code
|
|
13
|
+
* nimmt `rechnungRechnen` oder `previewInvoice`.
|
|
5
14
|
*
|
|
6
15
|
* Die Regel (je USt-Satz, Betraege in Cent, kaufmaennisch gerundet):
|
|
7
16
|
*
|
|
@@ -38,5 +47,11 @@ export interface SummenPosition {
|
|
|
38
47
|
* Server einen steuerfreien Fall ab (etwa eine ig. Lieferung), gehoert dieser
|
|
39
48
|
* Fall hierher — sonst rechnet die Funktion Steuer, die die Rechnung nicht
|
|
40
49
|
* ausweist.
|
|
50
|
+
*
|
|
51
|
+
* @deprecated Seit 0.27.3: rechnet nach der frueheren Formel (Weg 2) und kann
|
|
52
|
+
* an Halbcent-Grenzen um einen Cent je Satz von einer heute ausgestellten
|
|
53
|
+
* Rechnung abweichen. Stattdessen `rechnungRechnen` aus
|
|
54
|
+
* `@kreiseck/kasseneck-api/rechnung/rechnen` (Euro-Positionen ueber
|
|
55
|
+
* `positionAusEuro`) oder `previewInvoice` verwenden.
|
|
41
56
|
*/
|
|
42
57
|
export declare function rechnungSummen(items: readonly SummenPosition[], priceMode: PriceMode, taxScheme?: TaxScheme): InvoiceTotals;
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Summen einer Rechnung vorab rechnen
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Summen einer Rechnung vorab rechnen, nach der frueheren Formel (Weg 2,
|
|
4
|
+
* Gleitkomma). Gedacht fuer Shops, die kassieren, bevor die Rechnung entsteht.
|
|
5
|
+
*
|
|
6
|
+
* **Veraltet.** Seit dem 23.09.2026, 17:05 Uhr stellt der Server jede neue
|
|
7
|
+
* Rechnung ueber den exakten Ganzzahl-Kern aus (`rechnungRechnen` in
|
|
8
|
+
* `…/rechnung/rechnen`). An Halbcent-Grenzen weicht diese Funktion davon um
|
|
9
|
+
* einen Cent je Satz ab (21,35 EUR netto zu 10 %: hier 23,48 EUR, auf der
|
|
10
|
+
* Rechnung 23,49 EUR). Die Formel bleibt trotzdem, wie sie ist: der Server
|
|
11
|
+
* schaltet den Kern je Konto ueber einen Schalter und rechnet Entwuerfe
|
|
12
|
+
* ausserhalb des Ausstellens teils weiter nach Weg 2, und Backend und
|
|
13
|
+
* Dart-Zwilling pruefen gegen `fixtures/rechnung-summen.json`. Neuer Code
|
|
14
|
+
* nimmt `rechnungRechnen` oder `previewInvoice`.
|
|
6
15
|
*
|
|
7
16
|
* Die Regel (je USt-Satz, Betraege in Cent, kaufmaennisch gerundet):
|
|
8
17
|
*
|
|
@@ -42,6 +51,12 @@ function centRund(x) {
|
|
|
42
51
|
* Server einen steuerfreien Fall ab (etwa eine ig. Lieferung), gehoert dieser
|
|
43
52
|
* Fall hierher — sonst rechnet die Funktion Steuer, die die Rechnung nicht
|
|
44
53
|
* ausweist.
|
|
54
|
+
*
|
|
55
|
+
* @deprecated Seit 0.27.3: rechnet nach der frueheren Formel (Weg 2) und kann
|
|
56
|
+
* an Halbcent-Grenzen um einen Cent je Satz von einer heute ausgestellten
|
|
57
|
+
* Rechnung abweichen. Stattdessen `rechnungRechnen` aus
|
|
58
|
+
* `@kreiseck/kasseneck-api/rechnung/rechnen` (Euro-Positionen ueber
|
|
59
|
+
* `positionAusEuro`) oder `previewInvoice` verwenden.
|
|
45
60
|
*/
|
|
46
61
|
function rechnungSummen(items, priceMode, taxScheme = 'normal') {
|
|
47
62
|
const steuerfrei = rechnen_js_1.STEUERFREIE_FAELLE.includes(taxScheme);
|
|
@@ -133,7 +133,7 @@ export interface PaymentInput {
|
|
|
133
133
|
reference?: string;
|
|
134
134
|
/**
|
|
135
135
|
* Die Zahlung erfolgte vor Ort beim Unternehmer (Terminal an der Kasse).
|
|
136
|
-
* Dann ist sie ein Barumsatz — auch mit Karte (§ 131b Abs. 1 Z 3
|
|
136
|
+
* Dann ist sie ein Barumsatz — auch mit Karte (§ 131b Abs. 1 Z 3 BAO) — und
|
|
137
137
|
* die Antwort traegt den Hinweis `cash_receipt_required`. Zu `transfer`
|
|
138
138
|
* passt das Kennzeichen nicht und wird abgewiesen.
|
|
139
139
|
*/
|
|
@@ -130,7 +130,7 @@ export type InvoiceLanguage = (typeof INVOICE_LANGUAGES)[number];
|
|
|
130
130
|
* Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
|
|
131
131
|
*
|
|
132
132
|
* Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
|
|
133
|
-
* mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3
|
|
133
|
+
* mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 BAO), nicht
|
|
134
134
|
* aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
|
|
135
135
|
* koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
|
|
136
136
|
* Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
|
|
@@ -147,7 +147,7 @@ exports.INVOICE_LANGUAGES = ['de', 'en'];
|
|
|
147
147
|
* Wie eine Rechnung bezahlt wurde. Der Vermerk ist Buchhaltung, kein Beleg.
|
|
148
148
|
*
|
|
149
149
|
* Ein **Barumsatz** ist nicht nur Bargeld: als Barzahlung gilt auch die Zahlung
|
|
150
|
-
* mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3
|
|
150
|
+
* mit Bankomat- oder Kreditkarte **vor Ort** (§ 131b Abs. 1 Z 3 BAO), nicht
|
|
151
151
|
* aber dieselbe Karte im Internet. Weil `card` und `online` beides sein
|
|
152
152
|
* koennen, sagt das Feld `onSite` es dem Server — und nur dann traegt die
|
|
153
153
|
* Antwort den Hinweis `cash_receipt_required` (bei `cash` immer).
|
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
* Fehler. Hier steht sie vorher — abfragbar, ausgebbar, und in
|
|
11
11
|
* [naechsterSchritt] auch beantwortbar.
|
|
12
12
|
*
|
|
13
|
-
* **
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* **Kein eigener Vertragsschritt.** AVV und Nutzungsvertrag bestaetigt der
|
|
14
|
+
* Betrieb ueber denselben Einrichtungs-Link wie seinen FinanzOnline-Zugang
|
|
15
|
+
* (Schritt `fon`). Live geht ohne beide keine Kasse live
|
|
16
|
+
* (`vertrag_offen`); den Stand zeigen `avv` und `terms` am Betrieb.
|
|
16
17
|
*
|
|
17
18
|
* Zwei Dinge laufen bewusst **parallel**: der Signaturantrag und das Anlegen
|
|
18
19
|
* der Kasse. Eine mit `automatic:true` angelegte Kasse wartet, bis die
|
|
@@ -10,9 +10,10 @@
|
|
|
10
10
|
* Fehler. Hier steht sie vorher — abfragbar, ausgebbar, und in
|
|
11
11
|
* [naechsterSchritt] auch beantwortbar.
|
|
12
12
|
*
|
|
13
|
-
* **
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* **Kein eigener Vertragsschritt.** AVV und Nutzungsvertrag bestaetigt der
|
|
14
|
+
* Betrieb ueber denselben Einrichtungs-Link wie seinen FinanzOnline-Zugang
|
|
15
|
+
* (Schritt `fon`). Live geht ohne beide keine Kasse live
|
|
16
|
+
* (`vertrag_offen`); den Stand zeigen `avv` und `terms` am Betrieb.
|
|
16
17
|
*
|
|
17
18
|
* Zwei Dinge laufen bewusst **parallel**: der Signaturantrag und das Anlegen
|
|
18
19
|
* der Kasse. Eine mit `automatic:true` angelegte Kasse wartet, bis die
|
|
@@ -5,12 +5,27 @@
|
|
|
5
5
|
* Funktionen und bleiben einzeln importierbar.
|
|
6
6
|
*/
|
|
7
7
|
import { type FetchLike } from '../client/transport.js';
|
|
8
|
-
import { type CreateWebhookOptions, type CreateWebhookResult, type PartnerWebhook, type WebhookListe, type PartnerWebhookEventType, type WebhookPatch, type WebhookTestResult, type WebhookZustellung } from './webhooks.js';
|
|
9
|
-
import type { ActivateCashregisterResult, CreateCashregisterOptions, CreateCashregisterResult, CreateCustomerOptions, CreateCustomerResult, CustomerCredentials, FonLinkResult, KassenListe, Kunde, KundenListe, ListCustomersOptions, PartnerInfo, RequestSignatureResult, SignaturStand } from './typen.js';
|
|
8
|
+
import { type CreateWebhookOptions, type CreateWebhookResult, type DeleteWebhookResult, type PartnerWebhook, type WebhookListe, type PartnerWebhookEventType, type WebhookPatch, type WebhookTestResult, type WebhookZustellung } from './webhooks.js';
|
|
9
|
+
import type { ActivateCashregisterResult, CreateCashregisterOptions, CreateCashregisterResult, CreateCustomerOptions, CreateCustomerResult, CustomerCredentials, FonLinkResult, KassenListe, Kunde, KundenListe, ListCustomersOptions, PartnerInfo, RequestSignatureOptions, RequestSignatureResult, SignaturStand } from './typen.js';
|
|
10
|
+
/**
|
|
11
|
+
* Die Basis-URL der Partner-API: `/v3`, die englische Fassung.
|
|
12
|
+
*
|
|
13
|
+
* Nur der Partner-Teil spricht `/v3`. Belege, Rechnungen, Kasse und Zahlungen
|
|
14
|
+
* laufen weiter ueber [DEFAULT_BASE_URL] (`/v1`), bis es fuer sie eine `/v3`
|
|
15
|
+
* gibt. Die Partner-Endpunkte unter `/v1` antworten weiter, deutsch und
|
|
16
|
+
* abgekuendigt (Kopfzeilen `Deprecation`/`Sunset`); dieser Client spricht sie
|
|
17
|
+
* nicht mehr.
|
|
18
|
+
*/
|
|
19
|
+
export declare const PARTNER_BASE_URL = "https://api.kasseneck.at/v3";
|
|
10
20
|
export interface PartnerApiOptions {
|
|
11
21
|
/** Partner-Schluessel `pk_test_…` / `pk_live_…`. Gehoert auf einen Server. */
|
|
12
22
|
partnerKey: string;
|
|
13
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Abweichende Basis-URL; Vorgabe [PARTNER_BASE_URL]
|
|
25
|
+
* (`https://api.kasseneck.at/v3`). Die Antworten werden in der Form der
|
|
26
|
+
* `/v3` gelesen: eine `/v1`-Adresse hier liefert deutsche Werte, die diese
|
|
27
|
+
* Typen nicht beschreiben.
|
|
28
|
+
*/
|
|
14
29
|
baseUrl?: string;
|
|
15
30
|
/** Zeitlimit je Aufruf in Millisekunden. */
|
|
16
31
|
timeoutMs?: number;
|
|
@@ -23,10 +38,7 @@ export interface PartnerApi {
|
|
|
23
38
|
listPartnerCustomers(optionen?: ListCustomersOptions): Promise<KundenListe>;
|
|
24
39
|
getPartnerCustomer(customerId: string): Promise<Kunde>;
|
|
25
40
|
sendPartnerCustomerFonLink(customerId: string): Promise<FonLinkResult>;
|
|
26
|
-
requestCustomerSignature(customerId: string, optionen?:
|
|
27
|
-
art?: string;
|
|
28
|
-
additional?: boolean;
|
|
29
|
-
}): Promise<RequestSignatureResult>;
|
|
41
|
+
requestCustomerSignature(customerId: string, optionen?: RequestSignatureOptions): Promise<RequestSignatureResult>;
|
|
30
42
|
getCustomerSignatureStatus(customerId: string): Promise<SignaturStand>;
|
|
31
43
|
createCustomerCashregister(optionen: CreateCashregisterOptions): Promise<CreateCashregisterResult>;
|
|
32
44
|
activateCashregister(customerId: string, cashregisterId: string): Promise<ActivateCashregisterResult>;
|
|
@@ -42,7 +54,7 @@ export interface PartnerApi {
|
|
|
42
54
|
createPartnerWebhook(optionen: CreateWebhookOptions): Promise<CreateWebhookResult>;
|
|
43
55
|
listPartnerWebhooks(): Promise<WebhookListe>;
|
|
44
56
|
updatePartnerWebhook(webhookId: string, patch: WebhookPatch): Promise<PartnerWebhook>;
|
|
45
|
-
deletePartnerWebhook(webhookId: string): Promise<
|
|
57
|
+
deletePartnerWebhook(webhookId: string): Promise<DeleteWebhookResult>;
|
|
46
58
|
/**
|
|
47
59
|
* Neues Secret fuer denselben Endpunkt — dieselbe `webhookId`, dieselben
|
|
48
60
|
* Ereignisse. Das alte gilt ab der Antwort nicht mehr.
|
package/dist/esm/partner/api.js
CHANGED
|
@@ -9,10 +9,20 @@ import { partnerKeyAuth } from './auth.js';
|
|
|
9
9
|
import { partnerFehlerRat } from './fehler.js';
|
|
10
10
|
import { activateCashregister, createCustomerCashregister, createPartnerCustomer, getCustomerCredentials, getCustomerSignatureStatus, getPartnerCustomer, getPartnerInfo, checkPartnerCustomerEmail, listCustomerCashregisters, listPartnerCustomers, requestCustomerSignature, sendPartnerCustomerFonLink, } from './endpunkte.js';
|
|
11
11
|
import { createPartnerWebhook, deletePartnerWebhook, listPartnerWebhookDeliveries, listPartnerWebhooks, rotatePartnerWebhookSecret, sendPartnerWebhookTest, updatePartnerWebhook, } from './webhooks.js';
|
|
12
|
+
/**
|
|
13
|
+
* Die Basis-URL der Partner-API: `/v3`, die englische Fassung.
|
|
14
|
+
*
|
|
15
|
+
* Nur der Partner-Teil spricht `/v3`. Belege, Rechnungen, Kasse und Zahlungen
|
|
16
|
+
* laufen weiter ueber [DEFAULT_BASE_URL] (`/v1`), bis es fuer sie eine `/v3`
|
|
17
|
+
* gibt. Die Partner-Endpunkte unter `/v1` antworten weiter, deutsch und
|
|
18
|
+
* abgekuendigt (Kopfzeilen `Deprecation`/`Sunset`); dieser Client spricht sie
|
|
19
|
+
* nicht mehr.
|
|
20
|
+
*/
|
|
21
|
+
export const PARTNER_BASE_URL = 'https://api.kasseneck.at/v3';
|
|
12
22
|
export function createPartnerApi(optionen) {
|
|
13
23
|
const rufen = createTransport({
|
|
14
24
|
auth: partnerKeyAuth({ partnerKey: optionen.partnerKey }),
|
|
15
|
-
baseUrl: optionen.baseUrl,
|
|
25
|
+
baseUrl: optionen.baseUrl ?? PARTNER_BASE_URL,
|
|
16
26
|
timeoutMs: optionen.timeoutMs,
|
|
17
27
|
fetch: optionen.fetch,
|
|
18
28
|
});
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* einen `TypeError` an unpassender Stelle.
|
|
20
20
|
*/
|
|
21
21
|
import type { InternerTransport } from '../client/aufrufe.js';
|
|
22
|
-
import type { ActivateCashregisterResult, CreateCashregisterOptions, CreateCashregisterResult, CreateCustomerOptions, CreateCustomerResult, CustomerCredentials, FonLinkResult, KassenListe, Kunde, KundenListe, ListCustomersOptions, PartnerInfo, RequestSignatureResult, SignaturStand } from './typen.js';
|
|
22
|
+
import type { ActivateCashregisterResult, CreateCashregisterOptions, CreateCashregisterResult, CreateCustomerOptions, CreateCustomerResult, CustomerCredentials, FonLinkResult, KassenListe, Kunde, KundenListe, ListCustomersOptions, PartnerInfo, RequestSignatureOptions, RequestSignatureResult, SignaturStand } from './typen.js';
|
|
23
23
|
/**
|
|
24
24
|
* Wer bin ich, in welcher Umgebung, mit welchen Rechten — und welche Apps
|
|
25
25
|
* gehoeren mir. `apps[].id` ist die `appId` fuer [createPartnerCustomer].
|
|
@@ -76,8 +76,8 @@ export declare function sendPartnerCustomerFonLink(rufen: InternerTransport, cus
|
|
|
76
76
|
* Vertrauensdiensteanbieter **auf diesen Betrieb** ausstellen und meldet sie
|
|
77
77
|
* bei FinanzOnline an; einen Vorrat fertiger Karten gibt es nicht.
|
|
78
78
|
*
|
|
79
|
-
* Der Antrag erzeugt sofort ein Signatur-OBJEKT: `
|
|
80
|
-
* zugleich die `
|
|
79
|
+
* Der Antrag erzeugt sofort ein Signatur-OBJEKT: `request.requestId` ist
|
|
80
|
+
* zugleich die `signatureRequestId`, auf die sich eine Kasse beruft — auch solange
|
|
81
81
|
* noch keine Karte zugewiesen ist.
|
|
82
82
|
*
|
|
83
83
|
* **Je Betrieb laeuft nur ein Antrag.** Ein zweiter Aufruf liefert den
|
|
@@ -87,23 +87,20 @@ export declare function sendPartnerCustomerFonLink(rufen: InternerTransport, cus
|
|
|
87
87
|
* Abschluss kommt als Ereignis `signature.ready`, nicht als Antwort auf diesen
|
|
88
88
|
* Aufruf.
|
|
89
89
|
*/
|
|
90
|
-
export declare function requestCustomerSignature(rufen: InternerTransport, customerId: string, optionen?:
|
|
91
|
-
|
|
92
|
-
additional?: boolean;
|
|
93
|
-
}): Promise<RequestSignatureResult>;
|
|
94
|
-
/** Stand der Signatur eines Betriebs samt aller Antraege und des FON-Zugangs. */
|
|
90
|
+
export declare function requestCustomerSignature(rufen: InternerTransport, customerId: string, optionen?: RequestSignatureOptions): Promise<RequestSignatureResult>;
|
|
91
|
+
/** Stand der Signatur eines Betriebs samt aller Signaturen, Antraege und des FON-Zugangs. */
|
|
95
92
|
export declare function getCustomerSignatureStatus(rufen: InternerTransport, customerId: string): Promise<SignaturStand>;
|
|
96
93
|
/**
|
|
97
94
|
* Legt eine Kasse an.
|
|
98
95
|
*
|
|
99
96
|
* **Jede Kasse bezieht sich auf eine Signatur.** Ohne eine einzige — auch eine
|
|
100
97
|
* noch laufende zaehlt — entsteht keine (`signature_missing`); bei mehreren
|
|
101
|
-
* muss `
|
|
98
|
+
* muss `signatureRequestId` dastehen (`signature_ambiguous`).
|
|
102
99
|
*
|
|
103
100
|
* **Darf vor der fertigen Signatur aufgerufen werden:** die Kasse bleibt dann
|
|
104
|
-
* auf `
|
|
105
|
-
* (`automatic:true`, Vorgabe). `
|
|
106
|
-
* nichts lief: `signature_not_ready` oder `
|
|
101
|
+
* auf `draft` und geht von selbst live, sobald IHRE Signatur bereit ist
|
|
102
|
+
* (`automatic:true`, Vorgabe). `activation.reason` sagt, warum gerade
|
|
103
|
+
* nichts lief: `signature_not_ready` oder `automation_off`.
|
|
107
104
|
*
|
|
108
105
|
* Hoechstens 20 Kassen je Betrieb (`cashregister_limit`); ohne gebuchtes Modul
|
|
109
106
|
* `module_inactive`.
|
|
@@ -45,6 +45,19 @@ function zahlOderNull(wert) {
|
|
|
45
45
|
function jaNein(wert, rueckfall = false) {
|
|
46
46
|
return typeof wert === 'boolean' ? wert : rueckfall;
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Das gebuchte Entgelt (`fee`), falls die Antwort eines fuehrt. Ohne Betrag
|
|
50
|
+
* ist es keines: ein erfundenes `0` saehe aus wie ein kostenloser Posten.
|
|
51
|
+
*/
|
|
52
|
+
function entgelt(wert) {
|
|
53
|
+
if (wert === null || typeof wert !== 'object' || Array.isArray(wert))
|
|
54
|
+
return null;
|
|
55
|
+
const f = wert;
|
|
56
|
+
const cents = zahlOderNull(f['cents']);
|
|
57
|
+
if (cents === null)
|
|
58
|
+
return null;
|
|
59
|
+
return { cents, interval: text(f['interval']), test: jaNein(f['test']) };
|
|
60
|
+
}
|
|
48
61
|
/**
|
|
49
62
|
* Verlangt ein Feld der Antwort. Der Fehler nennt das Feld und den Vorgang,
|
|
50
63
|
* damit ein Aufrufer nicht raten muss, welcher der Aufrufe etwas anderes
|
|
@@ -158,6 +171,7 @@ export async function createPartnerCustomer(rufen, optionen) {
|
|
|
158
171
|
appId: text(daten['appId'], appId),
|
|
159
172
|
access: { invited: jaNein(zugang['invited']), sentTo: textOderNull(zugang['sentTo']) },
|
|
160
173
|
nextSteps: liste(daten['nextSteps']).filter((s) => typeof s === 'string'),
|
|
174
|
+
fee: entgelt(daten['fee']),
|
|
161
175
|
replayed: jaNein(daten['replayed']),
|
|
162
176
|
};
|
|
163
177
|
}
|
|
@@ -186,26 +200,38 @@ function kundenZeile(eintrag) {
|
|
|
186
200
|
appId: textOderNull(k['appId']),
|
|
187
201
|
env: text(k['env']) === 'test' ? 'test' : 'live',
|
|
188
202
|
createdAt: zahlOderNull(k['createdAt']),
|
|
203
|
+
fon: fonStand(k['fon']),
|
|
189
204
|
avv: avvStand(k['avv']),
|
|
205
|
+
terms: vertragStand(k['terms']),
|
|
190
206
|
};
|
|
191
207
|
}
|
|
192
|
-
|
|
193
|
-
* Der Vertragsstand, **falls** die Antwort ihn ueberhaupt fuehrt — heute tut
|
|
194
|
-
* sie das nicht, dann bleibt es bei `null`. Kein erfundenes `offen`: „nicht
|
|
195
|
-
* mitgeliefert" und „nicht bestaetigt" duerfen fuer einen Aufrufer nicht
|
|
196
|
-
* dasselbe sein.
|
|
197
|
-
*/
|
|
198
|
-
function avvStand(wert) {
|
|
208
|
+
function fonStand(wert) {
|
|
199
209
|
if (wert === null || typeof wert !== 'object' || Array.isArray(wert))
|
|
200
210
|
return null;
|
|
201
|
-
const
|
|
211
|
+
const f = wert;
|
|
202
212
|
return {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
mode: textOderNull(a['mode']),
|
|
213
|
+
configured: jaNein(f['configured']),
|
|
214
|
+
linkSentAt: zahlOderNull(f['linkSentAt']),
|
|
215
|
+
linkOpenedAt: zahlOderNull(f['linkOpenedAt']),
|
|
207
216
|
};
|
|
208
217
|
}
|
|
218
|
+
function vertragStand(wert) {
|
|
219
|
+
if (wert === null || typeof wert !== 'object' || Array.isArray(wert))
|
|
220
|
+
return null;
|
|
221
|
+
const v = wert;
|
|
222
|
+
return { status: text(v['status']), version: textOderNull(v['version']), confirmedAt: zahlOderNull(v['confirmedAt']) };
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Der AVV-Stand, **falls** die Antwort ihn fuehrt; sonst `null`. Kein
|
|
226
|
+
* erfundenes `pending`: „nicht mitgeliefert" und „nicht bestaetigt" duerfen
|
|
227
|
+
* fuer einen Aufrufer nicht dasselbe sein.
|
|
228
|
+
*/
|
|
229
|
+
function avvStand(wert) {
|
|
230
|
+
const v = vertragStand(wert);
|
|
231
|
+
if (!v)
|
|
232
|
+
return null;
|
|
233
|
+
return { ...v, mode: textOderNull(wert['mode']) };
|
|
234
|
+
}
|
|
209
235
|
/** Ein Betrieb mit allem, was der Partner ueber ihn sehen darf — nie Geheimnisse. */
|
|
210
236
|
export async function getPartnerCustomer(rufen, customerId) {
|
|
211
237
|
const id = pflicht(customerId, 'getPartnerCustomer', 'customerId');
|
|
@@ -220,7 +246,13 @@ export async function getPartnerCustomer(rufen, customerId) {
|
|
|
220
246
|
createdAt: zahlOderNull(k['createdAt']),
|
|
221
247
|
createdVia: textOderNull(k['createdVia']),
|
|
222
248
|
business: objekt(k['business']),
|
|
223
|
-
fon: {
|
|
249
|
+
fon: {
|
|
250
|
+
configured: jaNein(fon['configured']),
|
|
251
|
+
verifiedAt: zahlOderNull(fon['verifiedAt']),
|
|
252
|
+
linkSentAt: zahlOderNull(fon['linkSentAt']),
|
|
253
|
+
linkSentTo: textOderNull(fon['linkSentTo']),
|
|
254
|
+
linkOpenedAt: zahlOderNull(fon['linkOpenedAt']),
|
|
255
|
+
},
|
|
224
256
|
access: zugang === null || typeof zugang !== 'object'
|
|
225
257
|
? null
|
|
226
258
|
: {
|
|
@@ -274,7 +306,7 @@ function antrag(eintrag) {
|
|
|
274
306
|
requestId: text(a['requestId']),
|
|
275
307
|
status: text(a['status']),
|
|
276
308
|
statusText: text(a['statusText']),
|
|
277
|
-
|
|
309
|
+
kind: text(a['kind'], 'signature_card'),
|
|
278
310
|
vdaId: textOderNull(a['vdaId']),
|
|
279
311
|
signatureId: textOderNull(a['signatureId']),
|
|
280
312
|
error: fehler === null || typeof fehler !== 'object'
|
|
@@ -290,8 +322,8 @@ function antrag(eintrag) {
|
|
|
290
322
|
history: liste(a['history']).map((h) => {
|
|
291
323
|
const e = objekt(h);
|
|
292
324
|
return {
|
|
293
|
-
|
|
294
|
-
|
|
325
|
+
from: textOderNull(e['from']),
|
|
326
|
+
to: text(e['to']),
|
|
295
327
|
at: zahlOderNull(e['at']) ?? 0,
|
|
296
328
|
reason: textOderNull(e['reason']),
|
|
297
329
|
};
|
|
@@ -303,8 +335,8 @@ function antrag(eintrag) {
|
|
|
303
335
|
* Vertrauensdiensteanbieter **auf diesen Betrieb** ausstellen und meldet sie
|
|
304
336
|
* bei FinanzOnline an; einen Vorrat fertiger Karten gibt es nicht.
|
|
305
337
|
*
|
|
306
|
-
* Der Antrag erzeugt sofort ein Signatur-OBJEKT: `
|
|
307
|
-
* zugleich die `
|
|
338
|
+
* Der Antrag erzeugt sofort ein Signatur-OBJEKT: `request.requestId` ist
|
|
339
|
+
* zugleich die `signatureRequestId`, auf die sich eine Kasse beruft — auch solange
|
|
308
340
|
* noch keine Karte zugewiesen ist.
|
|
309
341
|
*
|
|
310
342
|
* **Je Betrieb laeuft nur ein Antrag.** Ein zweiter Aufruf liefert den
|
|
@@ -318,27 +350,54 @@ export async function requestCustomerSignature(rufen, customerId, optionen = {})
|
|
|
318
350
|
const id = pflicht(customerId, 'requestCustomerSignature', 'customerId');
|
|
319
351
|
const daten = objekt(await rufen('requestCustomerSignature', {
|
|
320
352
|
customerId: id,
|
|
321
|
-
|
|
353
|
+
kind: optionen.kind,
|
|
322
354
|
additional: optionen.additional,
|
|
323
355
|
}));
|
|
324
356
|
return {
|
|
325
357
|
request: antrag(verlangt(daten['request'], 'requestCustomerSignature', 'request')),
|
|
326
358
|
replayed: jaNein(daten['replayed']),
|
|
327
359
|
note: textOderNull(daten['note']),
|
|
360
|
+
fee: entgelt(daten['fee']),
|
|
328
361
|
};
|
|
329
362
|
}
|
|
330
|
-
|
|
363
|
+
function signaturEinzeln(eintrag) {
|
|
364
|
+
const s = objekt(eintrag);
|
|
365
|
+
const fehler = s['error'];
|
|
366
|
+
return {
|
|
367
|
+
signatureRequestId: text(s['signatureRequestId']),
|
|
368
|
+
status: text(s['status']),
|
|
369
|
+
statusText: text(s['statusText']),
|
|
370
|
+
inProgress: jaNein(s['inProgress']),
|
|
371
|
+
ready: jaNein(s['ready']),
|
|
372
|
+
kind: text(s['kind'], 'signature_card'),
|
|
373
|
+
vdaId: textOderNull(s['vdaId']),
|
|
374
|
+
requestId: textOderNull(s['requestId']),
|
|
375
|
+
signatureId: textOderNull(s['signatureId']),
|
|
376
|
+
error: fehler === null || typeof fehler !== 'object'
|
|
377
|
+
? null
|
|
378
|
+
: {
|
|
379
|
+
code: textOderNull(objekt(fehler)['code']),
|
|
380
|
+
message: textOderNull(objekt(fehler)['message']),
|
|
381
|
+
rc: textOderNull(objekt(fehler)['rc']),
|
|
382
|
+
},
|
|
383
|
+
createdAt: zahlOderNull(s['createdAt']),
|
|
384
|
+
updatedAt: zahlOderNull(s['updatedAt']),
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
/** Stand der Signatur eines Betriebs samt aller Signaturen, Antraege und des FON-Zugangs. */
|
|
331
388
|
export async function getCustomerSignatureStatus(rufen, customerId) {
|
|
332
389
|
const id = pflicht(customerId, 'getCustomerSignatureStatus', 'customerId');
|
|
333
390
|
const daten = objekt(await rufen('getCustomerSignatureStatus', { customerId: id }));
|
|
334
|
-
const signatur = objekt(daten['
|
|
391
|
+
const signatur = objekt(daten['signature']);
|
|
335
392
|
const fon = objekt(daten['fon']);
|
|
336
393
|
return {
|
|
337
|
-
|
|
394
|
+
customerId: text(daten['customerId'], id),
|
|
395
|
+
signature: {
|
|
338
396
|
ready: jaNein(signatur['ready']),
|
|
339
397
|
signatureId: textOderNull(signatur['signatureId']),
|
|
340
398
|
vdaId: textOderNull(signatur['vdaId']),
|
|
341
399
|
},
|
|
400
|
+
signatures: liste(daten['signatures']).map(signaturEinzeln),
|
|
342
401
|
requests: liste(daten['requests']).map(antrag),
|
|
343
402
|
fon: { present: jaNein(fon['present']), verifiedAt: zahlOderNull(fon['verifiedAt']) },
|
|
344
403
|
};
|
|
@@ -378,12 +437,12 @@ function kasse(eintrag) {
|
|
|
378
437
|
*
|
|
379
438
|
* **Jede Kasse bezieht sich auf eine Signatur.** Ohne eine einzige — auch eine
|
|
380
439
|
* noch laufende zaehlt — entsteht keine (`signature_missing`); bei mehreren
|
|
381
|
-
* muss `
|
|
440
|
+
* muss `signatureRequestId` dastehen (`signature_ambiguous`).
|
|
382
441
|
*
|
|
383
442
|
* **Darf vor der fertigen Signatur aufgerufen werden:** die Kasse bleibt dann
|
|
384
|
-
* auf `
|
|
385
|
-
* (`automatic:true`, Vorgabe). `
|
|
386
|
-
* nichts lief: `signature_not_ready` oder `
|
|
443
|
+
* auf `draft` und geht von selbst live, sobald IHRE Signatur bereit ist
|
|
444
|
+
* (`automatic:true`, Vorgabe). `activation.reason` sagt, warum gerade
|
|
445
|
+
* nichts lief: `signature_not_ready` oder `automation_off`.
|
|
387
446
|
*
|
|
388
447
|
* Hoechstens 20 Kassen je Betrieb (`cashregister_limit`); ohne gebuchtes Modul
|
|
389
448
|
* `module_inactive`.
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
*
|
|
28
28
|
* Reihenfolge und Bestand wie im Abzug des Backends.
|
|
29
29
|
*/
|
|
30
|
-
export declare const PARTNER_FEHLER_CODES: readonly ["validation", "rate_limited", "app_not_found", "app_not_accepted", "kein_partnerbetrieb", "live_not_allowed", "customer_exists", "customer_conflict", "customer_limit", "zugang_nicht_erlaubt", "email_taken", "no_email", "fon_missing", "signature_pending", "request_not_found", "signature_missing", "signature_unknown", "signature_ambiguous", "signature_not_ready", "signature_limit", "signature_failed", "module_inactive", "cashregister_limit", "cashregister_not_found", "activation_failed", "webhook_limit", "webhook_inactive", "event_not_subscribed"];
|
|
30
|
+
export declare const PARTNER_FEHLER_CODES: readonly ["validation", "rate_limited", "app_not_found", "app_not_accepted", "kein_partnerbetrieb", "live_not_allowed", "customer_exists", "customer_conflict", "customer_limit", "zugang_nicht_erlaubt", "email_taken", "no_email", "kennung_fehlt", "fon_missing", "signature_pending", "request_not_found", "signature_missing", "signature_unknown", "signature_ambiguous", "signature_not_ready", "signature_limit", "signature_failed", "module_inactive", "cashregister_limit", "cashregister_not_found", "vertrag_offen", "activation_failed", "webhook_limit", "webhook_inactive", "event_not_subscribed"];
|
|
31
31
|
/**
|
|
32
32
|
* Die Codes, die nur im **Partner-Portal** entstehen — beim Pflegen der App,
|
|
33
33
|
* der Schluessel, der Mitglieder und der Signaturkarten.
|
|
@@ -43,6 +43,8 @@ export const PARTNER_FEHLER_CODES = [
|
|
|
43
43
|
'zugang_nicht_erlaubt',
|
|
44
44
|
'email_taken',
|
|
45
45
|
'no_email',
|
|
46
|
+
// FinanzOnline-Link
|
|
47
|
+
'kennung_fehlt',
|
|
46
48
|
// Signatur
|
|
47
49
|
'fon_missing',
|
|
48
50
|
'signature_pending',
|
|
@@ -57,6 +59,7 @@ export const PARTNER_FEHLER_CODES = [
|
|
|
57
59
|
'module_inactive',
|
|
58
60
|
'cashregister_limit',
|
|
59
61
|
'cashregister_not_found',
|
|
62
|
+
'vertrag_offen',
|
|
60
63
|
'activation_failed',
|
|
61
64
|
// Webhooks
|
|
62
65
|
'webhook_limit',
|
|
@@ -111,21 +114,23 @@ const RAT = {
|
|
|
111
114
|
customer_exists: 'Diesen Betrieb gibt es schon (data.customerId). Mit derselben customerId weiterarbeiten.',
|
|
112
115
|
customer_conflict: 'Die Steuernummer ist bei Kasseneck bereits registriert. Die Zuordnung zum Partner macht Kasseneck — hello@kasseneck.at.',
|
|
113
116
|
customer_limit: 'Das Tageslimit fuer neue Betriebe ist erreicht (data.max, data.resetAt). Morgen weiter.',
|
|
114
|
-
zugang_nicht_erlaubt: 'Fuer dieses Partner-Konto sind Zugaenge zum Kundenpanel nicht freigeschaltet — es entstand NICHTS, auch kein Betrieb. Ohne
|
|
117
|
+
zugang_nicht_erlaubt: 'Fuer dieses Partner-Konto sind Zugaenge zum Kundenpanel nicht freigeschaltet — es entstand NICHTS, auch kein Betrieb. Ohne access{invite:true} erneut anlegen oder die Freischaltung erfragen (Stand: getPartnerInfo.partner.canCreateAccess).',
|
|
115
118
|
email_taken: 'Fuer diese E-Mail gibt es schon einen Kasseneck-Zugang. Eine andere Adresse waehlen, auf die Einladung verzichten oder den Betrieb zuordnen lassen.',
|
|
116
119
|
no_email: 'Im Konto des Betriebs steht keine E-Mail-Adresse. Ohne sie geht weder eine Einladung noch der FinanzOnline-Link hinaus.',
|
|
120
|
+
kennung_fehlt: 'Am Betrieb ist keine Steuernummer hinterlegt, ohne sie gibt es keinen Einrichtungs-Link. Die Steuernummer bei Kasseneck nachtragen lassen (hello@kasseneck.at), dann sendPartnerCustomerFonLink erneut.',
|
|
117
121
|
fon_missing: 'Der Betrieb hat noch keinen FinanzOnline-Zugang. sendPartnerCustomerFonLink senden und customer.fon_verified abwarten. Betrifft das ANMELDEN der Signatureinheit, nicht das Beantragen.',
|
|
118
122
|
signature_pending: 'Fuer diesen Betrieb laeuft bereits ein Antrag. Auf signature.ready warten.',
|
|
119
123
|
request_not_found: 'Diese signaturId gibt es nicht. getCustomerSignatureStatus nennt die des Betriebs.',
|
|
120
124
|
signature_missing: 'Der Betrieb hat ueberhaupt keine Signatur, und jede Kasse bezieht sich auf eine. Zuerst requestCustomerSignature.',
|
|
121
|
-
signature_unknown: 'Die genannte
|
|
122
|
-
signature_ambiguous: 'Der Betrieb hat mehrere Signaturen; welche die Kasse benutzt, muss dastehen. Eine aus data.choices als
|
|
125
|
+
signature_unknown: 'Die genannte signatureRequestId gehoert nicht zu diesem Betrieb. getCustomerSignatureStatus nennt die seinen.',
|
|
126
|
+
signature_ambiguous: 'Der Betrieb hat mehrere Signaturen; welche die Kasse benutzt, muss dastehen. Eine aus data.choices als signatureRequestId mitgeben.',
|
|
123
127
|
signature_not_ready: 'Die Signatur DIESER Kasse ist noch nicht bereit. Auf signature.ready warten; eine mit automatic:true angelegte Kasse geht danach von selbst live.',
|
|
124
128
|
signature_limit: 'Hoechstens zehn Signaturen je Betrieb. Eine bestehende benutzen, statt mit additional:true eine weitere zu beantragen.',
|
|
125
129
|
signature_failed: 'FinanzOnline hat die Anmeldung abgelehnt (data.rc). Kasseneck klaert das — hello@kasseneck.at.',
|
|
126
130
|
module_inactive: 'Das Modul (data.modul) ist fuer diesen Betrieb nicht gebucht. Kasseneck schaltet es frei.',
|
|
127
131
|
cashregister_limit: 'Hoechstens 20 Registrierkassen je Betrieb. Eine bestehende nutzen.',
|
|
128
132
|
cashregister_not_found: 'Diese cashregisterId gibt es bei diesem Betrieb nicht.',
|
|
133
|
+
vertrag_offen: 'Nur live: der Betrieb hat Auftragsverarbeitungs- und Nutzungsvertrag noch nicht bestaetigt. An der Kasse aendert sich nichts. Den Betrieb ueber den Einrichtungs-Link bestaetigen lassen (sendPartnerCustomerFonLink, Stand in avv/terms von getPartnerCustomer), danach activateCashregister erneut.',
|
|
129
134
|
activation_failed: 'Die Inbetriebnahme blieb an data.step haengen (ggf. data.rc). activateCashregister erneut aufrufen — jeder Schritt ist idempotent, der Lauf setzt an der Bruchstelle an.',
|
|
130
135
|
webhook_limit: 'Hoechstens 10 Webhook-Endpunkte je Partner. Einen ungenutzten loeschen.',
|
|
131
136
|
webhook_inactive: 'Der Webhook steht auf active:false. Zuerst aktivieren, dann erneut proben.',
|
|
@@ -12,17 +12,21 @@
|
|
|
12
12
|
* Was hier steht, ist die Benutzung dieses Clients.
|
|
13
13
|
*
|
|
14
14
|
* Reihenfolge der Kette: [PARTNER_ABLAUF].
|
|
15
|
+
*
|
|
16
|
+
* **Seit 0.28.0 spricht dieser Teil die englische `/v3`** ([PARTNER_BASE_URL]).
|
|
17
|
+
* Alles andere im Paket (Belege, Rechnungen, Kasse, Druck, Zahlungen) bleibt
|
|
18
|
+
* auf `/v1`, bis es dort eine `/v3` gibt.
|
|
15
19
|
*/
|
|
16
|
-
export { createPartnerApi, type PartnerApi, type PartnerApiOptions } from './api.js';
|
|
20
|
+
export { createPartnerApi, PARTNER_BASE_URL, type PartnerApi, type PartnerApiOptions } from './api.js';
|
|
17
21
|
export { partnerKeyAuth, partnerKeyEnv, type PartnerKeyAuthOptions } from './auth.js';
|
|
18
22
|
export { PARTNER_ABLAUF, naechsterSchritt, type AblaufSchritt, } from './ablauf.js';
|
|
19
23
|
export { PARTNER_FEHLER_CODES, PARTNER_PORTAL_FEHLER_CODES, istPartnerFehlerCode, istPartnerPortalFehlerCode, istPartnerFehler, partnerFehlerCode, partnerFehlerRat, partnerFeldFehler, partnerWartezeitSek, type PartnerCode, type PartnerFehlerCode, type PartnerPortalFehlerCode, type PartnerFeldFehler, } from './fehler.js';
|
|
20
24
|
export { BETRIEB_FELDER, unbekannteBetriebsfelder, type BetriebFeld, } from './betrieb.js';
|
|
21
25
|
export { KasseneckSecret, SECRET_MASKE } from './secret.js';
|
|
22
26
|
export { getPartnerInfo, createPartnerCustomer, listPartnerCustomers, checkPartnerCustomerEmail, getPartnerCustomer, sendPartnerCustomerFonLink, requestCustomerSignature, getCustomerSignatureStatus, createCustomerCashregister, activateCashregister, listCustomerCashregisters, getCustomerCredentials, } from './endpunkte.js';
|
|
23
|
-
export { createPartnerWebhook, listPartnerWebhooks, rotatePartnerWebhookSecret, updatePartnerWebhook, deletePartnerWebhook, sendPartnerWebhookTest, listPartnerWebhookDeliveries, parseWebhookEvent, istPartnerWebhookEvent, PARTNER_WEBHOOK_EVENTS, WEBHOOK_UMSCHLAG_FELDER, type PartnerWebhookEvent, type PartnerWebhookEventType, type PartnerWebhook, type CreateWebhookOptions, type CreateWebhookResult, type WebhookPatch, type WebhookListe, type WebhookZustellung, type WebhookTestResult, type WebhookEventResult, } from './webhooks.js';
|
|
27
|
+
export { createPartnerWebhook, listPartnerWebhooks, rotatePartnerWebhookSecret, updatePartnerWebhook, deletePartnerWebhook, sendPartnerWebhookTest, listPartnerWebhookDeliveries, parseWebhookEvent, istPartnerWebhookEvent, PARTNER_WEBHOOK_EVENTS, WEBHOOK_UMSCHLAG_FELDER, type PartnerWebhookEvent, type PartnerWebhookEventType, type PartnerWebhook, type CreateWebhookOptions, type CreateWebhookResult, type DeleteWebhookResult, type WebhookApiVersion, type WebhookDeliveryStatus, type WebhookTestZustellung, type ContractKind, type ContractSource, type ContractAcceptedEventData, type WebhookPatch, type WebhookListe, type WebhookZustellung, type WebhookTestResult, type WebhookEventResult, } from './webhooks.js';
|
|
24
28
|
export { verifyWebhookSignature, parseSignatureHeader, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_EVENT_HEADER, WEBHOOK_DELIVERY_HEADER, WEBHOOK_TOLERANCE_SEC, WEBHOOK_RETRY_PLAN_SEC, WEBHOOK_MAX_ATTEMPTS, WEBHOOK_TIMEOUT_MS, WEBHOOK_LIMIT, type VerifyWebhookOptions, type WebhookVerifyResult, type WebhookVerifyReason, } from './webhook-signatur.js';
|
|
25
29
|
export { PARTNER_ENVS } from './typen.js';
|
|
26
|
-
export type { PartnerEnv, PartnerScope, PartnerApp, PartnerInfo, Rechtsform, Bundesland, KontaktRolle, BetriebAdresse, BetriebSteuer, BetriebKontakt, BetriebSteuerberater, Betrieb, CreateCustomerOptions, CreateCustomerResult, KundenStatus, KundenZeile, AvvStand, ListCustomersOptions, KundenListe, Kunde, FonLinkResult, SignaturAntragStatus, SignaturHistorieEintrag, SignaturAntrag, RequestSignatureResult, SignaturStand, KassenSchritt, KassenStatus, Kasse, CreateCashregisterOptions, CreateCashregisterResult, ActivateCashregisterResult, KassenListe, CustomerCashregisterCredential, CustomerCredentials, } from './typen.js';
|
|
30
|
+
export type { PartnerEnv, PartnerScope, PartnerApp, PartnerInfo, LegalForm, AustrianState, ContactRole, AvvMode, FeeInterval, PartnerFee, SignatureHistoryReason, RequestSignatureOptions, CustomerSignature, Rechtsform, Bundesland, KontaktRolle, BetriebAdresse, BetriebSteuer, BetriebKontakt, BetriebSteuerberater, Betrieb, CreateCustomerOptions, CreateCustomerResult, KundenStatus, KundenZeile, AvvStand, VertragStand, KundenFonStand, ListCustomersOptions, KundenListe, Kunde, FonLinkResult, SignaturAntragStatus, SignaturHistorieEintrag, SignaturAntrag, RequestSignatureResult, SignaturStand, KassenSchritt, KassenStatus, Kasse, CreateCashregisterOptions, CreateCashregisterResult, ActivateCashregisterResult, KassenListe, CustomerCashregisterCredential, CustomerCredentials, } from './typen.js';
|
|
27
31
|
/** `credentials:read` — nicht im Standardsatz, siehe typen.ts. */
|
|
28
32
|
export { SCOPE_CREDENTIALS } from './typen.js';
|
|
@@ -12,8 +12,12 @@
|
|
|
12
12
|
* Was hier steht, ist die Benutzung dieses Clients.
|
|
13
13
|
*
|
|
14
14
|
* Reihenfolge der Kette: [PARTNER_ABLAUF].
|
|
15
|
+
*
|
|
16
|
+
* **Seit 0.28.0 spricht dieser Teil die englische `/v3`** ([PARTNER_BASE_URL]).
|
|
17
|
+
* Alles andere im Paket (Belege, Rechnungen, Kasse, Druck, Zahlungen) bleibt
|
|
18
|
+
* auf `/v1`, bis es dort eine `/v3` gibt.
|
|
15
19
|
*/
|
|
16
|
-
export { createPartnerApi } from './api.js';
|
|
20
|
+
export { createPartnerApi, PARTNER_BASE_URL } from './api.js';
|
|
17
21
|
export { partnerKeyAuth, partnerKeyEnv } from './auth.js';
|
|
18
22
|
export { PARTNER_ABLAUF, naechsterSchritt, } from './ablauf.js';
|
|
19
23
|
export { PARTNER_FEHLER_CODES, PARTNER_PORTAL_FEHLER_CODES, istPartnerFehlerCode, istPartnerPortalFehlerCode, istPartnerFehler, partnerFehlerCode, partnerFehlerRat, partnerFeldFehler, partnerWartezeitSek, } from './fehler.js';
|