@kreiseck/kasseneck-api 0.27.3 → 0.29.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 +94 -0
- package/README.md +87 -2
- 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 +28 -2
- package/dist/cjs/partner/fehler.js +58 -9
- package/dist/cjs/partner/index.d.ts +7 -3
- package/dist/cjs/partner/index.js +7 -2
- package/dist/cjs/partner/typen.d.ts +152 -35
- 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/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 +28 -2
- package/dist/esm/partner/fehler.js +58 -9
- package/dist/esm/partner/index.d.ts +7 -3
- package/dist/esm/partner/index.js +5 -1
- package/dist/esm/partner/typen.d.ts +152 -35
- 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/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/oberflaeche.json +12 -4
- package/fixtures/rechnung-api.schema.json +1 -1
- package/fixtures/rechnung-texte.json +1 -1
- package/package.json +1 -1
|
@@ -20,6 +20,32 @@
|
|
|
20
20
|
* unterscheiden. Deshalb stehen hier BEIDE Flaechen: die der Schnittstelle
|
|
21
21
|
* ([PARTNER_FEHLER_CODES]) und die des Partner-Portals
|
|
22
22
|
* ([PARTNER_PORTAL_FEHLER_CODES]).
|
|
23
|
+
*
|
|
24
|
+
* **Seit 0.29.0 englisch, wie der Rest von `/v3`.** Dieser Client spricht seit
|
|
25
|
+
* 0.28.0 ausschliesslich `/v3` (`PARTNER_BASE_URL`): die paar deutschen Codes,
|
|
26
|
+
* die der Server bis dahin noch roh durchreichte, kommen jetzt genauso englisch
|
|
27
|
+
* an wie alle anderen. [PARTNER_FEHLER_CODES] fuehrt deshalb ausnahmslos die
|
|
28
|
+
* `/v3`-Schreibweise aus `fehlercodes.json`s `v3`-Zuordnung (deutsch -> englisch);
|
|
29
|
+
* ein Aufrufer bekommt vom Server nie mehr die deutsche Form.
|
|
30
|
+
*
|
|
31
|
+
* **`kein_partnerbetrieb` und `request_not_found` fehlen absichtlich.** Beide
|
|
32
|
+
* sind admin-only (`partner-endpoints.js`, ausserhalb von `FEHLER_KATALOG`) und
|
|
33
|
+
* erreichen `/v3` nie: ein Partner-Aufruf kann sie unter keinem Pfad bekommen.
|
|
34
|
+
* Sie standen frueher versehentlich in dieser Liste; `dart-partner.json` (ein
|
|
35
|
+
* eingefrorener Abzug aus Dart 5.3.0, bevor das korrigiert wurde) fuehrt sie
|
|
36
|
+
* weiterhin, siehe die Ausnahme in `test/partner-enums.test.ts`.
|
|
37
|
+
*
|
|
38
|
+
* **Die Vertrags-Codes (`kind_not_allowed`, `mode_not_allowed`,
|
|
39
|
+
* `power_of_attorney_missing`, `not_found`, `no_version`,
|
|
40
|
+
* `unknown_version`, `text_changed`, `already_accepted`) stehen hier, obwohl
|
|
41
|
+
* dieses Paket `reportCustomerContract` nicht anbietet.** Der Katalog des
|
|
42
|
+
* Backends fuehrt sie mit `flaeche: 'api'`/`'beide'`, dieselbe Regel wie bei
|
|
43
|
+
* den Portal-Codes oben: vollstaendig heisst vollstaendig, auch fuer einen
|
|
44
|
+
* Endpunkt, den (noch) kein Aufruf dieses Clients ausloest. Ein Server-Update,
|
|
45
|
+
* das den Endpunkt ergaenzt, bräuchte dann keinen zweiten Fehlerkatalog-Umbau.
|
|
46
|
+
* `not_required` fehlt bewusst: derselbe gemeinsame Server-Zweig wie die
|
|
47
|
+
* anderen sechs, aber ueber die Partner-API nicht erreichbar (der Server hat
|
|
48
|
+
* ihn aus `FEHLER_KATALOG` entfernt, siehe `partner-core.js` im Backend).
|
|
23
49
|
*/
|
|
24
50
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
51
|
exports.PARTNER_PORTAL_FEHLER_CODES = exports.PARTNER_FEHLER_CODES = void 0;
|
|
@@ -44,19 +70,19 @@ exports.PARTNER_FEHLER_CODES = [
|
|
|
44
70
|
'rate_limited',
|
|
45
71
|
'app_not_found',
|
|
46
72
|
'app_not_accepted',
|
|
47
|
-
'kein_partnerbetrieb',
|
|
48
73
|
'live_not_allowed',
|
|
49
74
|
// Betrieb anlegen
|
|
50
75
|
'customer_exists',
|
|
51
76
|
'customer_conflict',
|
|
52
77
|
'customer_limit',
|
|
53
|
-
'
|
|
78
|
+
'access_not_allowed',
|
|
54
79
|
'email_taken',
|
|
55
80
|
'no_email',
|
|
81
|
+
// FinanzOnline-Link
|
|
82
|
+
'tax_number_missing',
|
|
56
83
|
// Signatur
|
|
57
84
|
'fon_missing',
|
|
58
85
|
'signature_pending',
|
|
59
|
-
'request_not_found',
|
|
60
86
|
'signature_missing',
|
|
61
87
|
'signature_unknown',
|
|
62
88
|
'signature_ambiguous',
|
|
@@ -67,6 +93,17 @@ exports.PARTNER_FEHLER_CODES = [
|
|
|
67
93
|
'module_inactive',
|
|
68
94
|
'cashregister_limit',
|
|
69
95
|
'cashregister_not_found',
|
|
96
|
+
'contracts_pending',
|
|
97
|
+
// Vertraege (reportCustomerContract: dieses Paket bietet den Endpunkt nicht
|
|
98
|
+
// an, der Katalog fuehrt die Codes trotzdem vollstaendig, siehe oben)
|
|
99
|
+
'kind_not_allowed',
|
|
100
|
+
'mode_not_allowed',
|
|
101
|
+
'power_of_attorney_missing',
|
|
102
|
+
'not_found',
|
|
103
|
+
'no_version',
|
|
104
|
+
'unknown_version',
|
|
105
|
+
'text_changed',
|
|
106
|
+
'already_accepted',
|
|
70
107
|
'activation_failed',
|
|
71
108
|
// Webhooks
|
|
72
109
|
'webhook_limit',
|
|
@@ -116,26 +153,38 @@ const RAT = {
|
|
|
116
153
|
rate_limited: 'Zu viele Aufrufe. data.retryAfterSec Sekunden warten und denselben Aufruf wiederholen.',
|
|
117
154
|
app_not_found: 'Die appId gibt es nicht. getPartnerInfo liefert die eigenen Apps samt id.',
|
|
118
155
|
app_not_accepted: 'Diese App hat noch keine abgenommene Version. Mit einem pk_test_-Schluessel oder mit env:"test" geht es sofort weiter; live erst nach der Abnahme.',
|
|
119
|
-
kein_partnerbetrieb: 'Dieser Betrieb gehoert nicht zu diesem Partner-Konto. Die eigenen stehen in listPartnerCustomers.',
|
|
120
156
|
live_not_allowed: 'Ein Test-Schluessel erzeugt nichts Echtes. Fuer einen Live-Betrieb den Live-Schluessel nehmen — umgekehrt darf ein Live-Schluessel mit env:"test" sehr wohl einen Testbetrieb anlegen.',
|
|
121
157
|
customer_exists: 'Diesen Betrieb gibt es schon (data.customerId). Mit derselben customerId weiterarbeiten.',
|
|
122
158
|
customer_conflict: 'Die Steuernummer ist bei Kasseneck bereits registriert. Die Zuordnung zum Partner macht Kasseneck — hello@kasseneck.at.',
|
|
123
159
|
customer_limit: 'Das Tageslimit fuer neue Betriebe ist erreicht (data.max, data.resetAt). Morgen weiter.',
|
|
124
|
-
|
|
160
|
+
access_not_allowed: '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).',
|
|
125
161
|
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.',
|
|
126
162
|
no_email: 'Im Konto des Betriebs steht keine E-Mail-Adresse. Ohne sie geht weder eine Einladung noch der FinanzOnline-Link hinaus.',
|
|
163
|
+
tax_number_missing: '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.',
|
|
127
164
|
fon_missing: 'Der Betrieb hat noch keinen FinanzOnline-Zugang. sendPartnerCustomerFonLink senden und customer.fon_verified abwarten. Betrifft das ANMELDEN der Signatureinheit, nicht das Beantragen.',
|
|
128
165
|
signature_pending: 'Fuer diesen Betrieb laeuft bereits ein Antrag. Auf signature.ready warten.',
|
|
129
|
-
request_not_found: 'Diese signaturId gibt es nicht. getCustomerSignatureStatus nennt die des Betriebs.',
|
|
130
166
|
signature_missing: 'Der Betrieb hat ueberhaupt keine Signatur, und jede Kasse bezieht sich auf eine. Zuerst requestCustomerSignature.',
|
|
131
|
-
signature_unknown: 'Die genannte
|
|
132
|
-
signature_ambiguous: 'Der Betrieb hat mehrere Signaturen; welche die Kasse benutzt, muss dastehen. Eine aus data.choices als
|
|
167
|
+
signature_unknown: 'Die genannte signatureRequestId gehoert nicht zu diesem Betrieb. getCustomerSignatureStatus nennt die seinen.',
|
|
168
|
+
signature_ambiguous: 'Der Betrieb hat mehrere Signaturen; welche die Kasse benutzt, muss dastehen. Eine aus data.choices als signatureRequestId mitgeben.',
|
|
133
169
|
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.',
|
|
134
170
|
signature_limit: 'Hoechstens zehn Signaturen je Betrieb. Eine bestehende benutzen, statt mit additional:true eine weitere zu beantragen.',
|
|
135
171
|
signature_failed: 'FinanzOnline hat die Anmeldung abgelehnt (data.rc). Kasseneck klaert das — hello@kasseneck.at.',
|
|
136
|
-
module_inactive: 'Das Modul (data.
|
|
172
|
+
module_inactive: 'Das Modul (data.module, z. B. "cash_register", Text in data.detail) ist fuer diesen Betrieb nicht gebucht. Kasseneck schaltet es frei.',
|
|
137
173
|
cashregister_limit: 'Hoechstens 20 Registrierkassen je Betrieb. Eine bestehende nutzen.',
|
|
138
174
|
cashregister_not_found: 'Diese cashregisterId gibt es bei diesem Betrieb nicht.',
|
|
175
|
+
contracts_pending: '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.',
|
|
176
|
+
// -- Vertraege (reportCustomerContract) ------------------------------------
|
|
177
|
+
// Dieser Client bietet den Endpunkt (noch) nicht an; die Codes stehen hier
|
|
178
|
+
// nur fuer die Katalogseite und fuer einen Aufrufer, der die rohe Antwort
|
|
179
|
+
// selbst auswertet (siehe Kopfkommentar der Datei).
|
|
180
|
+
kind_not_allowed: 'reportCustomerContract mit einer anderen Art als "avv". Der Vollmachtsweg nimmt nur den Auftragsverarbeitungsvertrag entgegen. Dieser Client bietet den Endpunkt nicht an.',
|
|
181
|
+
mode_not_allowed: 'Der Vollmachtsweg ist fuer dieses Partner-Konto nicht freigeschaltet. Kasseneck fragen (hello@kasseneck.at).',
|
|
182
|
+
power_of_attorney_missing: 'Der Partnervertrag mit dem Vollmachts-Kapitel ist noch nicht bestaetigt. Erst danach nimmt der Vollmachtsweg Meldungen entgegen.',
|
|
183
|
+
not_found: 'Die genannte customerId gehoert nicht zu diesem Partner-Konto oder existiert nicht. listPartnerCustomers nennt die eigenen.',
|
|
184
|
+
no_version: 'Fuer die gemeldete Vertragsart gibt es derzeit keine gueltige Fassung. Bei Kasseneck nachfragen.',
|
|
185
|
+
unknown_version: 'Die gemeldete Vertragsversion gibt es nicht. Die aktuell geltende Fassung neu abrufen.',
|
|
186
|
+
text_changed: 'Der gezeigte Vertragstext hat sich seit dem Laden geaendert (data.textHash traegt die aktuell geltende Pruefsumme). Neu laden und danach erneut bestaetigen lassen.',
|
|
187
|
+
already_accepted: 'Diese Fassung ist bereits bestaetigt (data.contractId). Nichts weiter zu tun.',
|
|
139
188
|
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.',
|
|
140
189
|
webhook_limit: 'Hoechstens 10 Webhook-Endpunkte je Partner. Einen ungenutzten loeschen.',
|
|
141
190
|
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, SignatureErrorCode, 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';
|
|
@@ -13,12 +13,17 @@
|
|
|
13
13
|
* Was hier steht, ist die Benutzung dieses Clients.
|
|
14
14
|
*
|
|
15
15
|
* Reihenfolge der Kette: [PARTNER_ABLAUF].
|
|
16
|
+
*
|
|
17
|
+
* **Seit 0.28.0 spricht dieser Teil die englische `/v3`** ([PARTNER_BASE_URL]).
|
|
18
|
+
* Alles andere im Paket (Belege, Rechnungen, Kasse, Druck, Zahlungen) bleibt
|
|
19
|
+
* auf `/v1`, bis es dort eine `/v3` gibt.
|
|
16
20
|
*/
|
|
17
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.
|
|
19
|
-
exports.SCOPE_CREDENTIALS = exports.PARTNER_ENVS = exports.WEBHOOK_LIMIT = void 0;
|
|
22
|
+
exports.WEBHOOK_MAX_ATTEMPTS = exports.WEBHOOK_RETRY_PLAN_SEC = exports.WEBHOOK_TOLERANCE_SEC = exports.WEBHOOK_DELIVERY_HEADER = exports.WEBHOOK_EVENT_HEADER = exports.WEBHOOK_SIGNATURE_HEADER = exports.parseSignatureHeader = exports.verifyWebhookSignature = exports.WEBHOOK_UMSCHLAG_FELDER = exports.PARTNER_WEBHOOK_EVENTS = exports.istPartnerWebhookEvent = exports.parseWebhookEvent = exports.listPartnerWebhookDeliveries = exports.sendPartnerWebhookTest = exports.deletePartnerWebhook = exports.updatePartnerWebhook = exports.rotatePartnerWebhookSecret = exports.listPartnerWebhooks = exports.createPartnerWebhook = exports.getCustomerCredentials = exports.listCustomerCashregisters = exports.activateCashregister = exports.createCustomerCashregister = exports.getCustomerSignatureStatus = exports.requestCustomerSignature = exports.sendPartnerCustomerFonLink = exports.getPartnerCustomer = exports.checkPartnerCustomerEmail = exports.listPartnerCustomers = exports.createPartnerCustomer = exports.getPartnerInfo = exports.SECRET_MASKE = exports.KasseneckSecret = exports.unbekannteBetriebsfelder = exports.BETRIEB_FELDER = exports.partnerWartezeitSek = exports.partnerFeldFehler = exports.partnerFehlerRat = exports.partnerFehlerCode = exports.istPartnerFehler = exports.istPartnerPortalFehlerCode = exports.istPartnerFehlerCode = exports.PARTNER_PORTAL_FEHLER_CODES = exports.PARTNER_FEHLER_CODES = exports.naechsterSchritt = exports.PARTNER_ABLAUF = exports.partnerKeyEnv = exports.partnerKeyAuth = exports.PARTNER_BASE_URL = exports.createPartnerApi = void 0;
|
|
23
|
+
exports.SCOPE_CREDENTIALS = exports.PARTNER_ENVS = exports.WEBHOOK_LIMIT = exports.WEBHOOK_TIMEOUT_MS = void 0;
|
|
20
24
|
var api_js_1 = require("./api.js");
|
|
21
25
|
Object.defineProperty(exports, "createPartnerApi", { enumerable: true, get: function () { return api_js_1.createPartnerApi; } });
|
|
26
|
+
Object.defineProperty(exports, "PARTNER_BASE_URL", { enumerable: true, get: function () { return api_js_1.PARTNER_BASE_URL; } });
|
|
22
27
|
var auth_js_1 = require("./auth.js");
|
|
23
28
|
Object.defineProperty(exports, "partnerKeyAuth", { enumerable: true, get: function () { return auth_js_1.partnerKeyAuth; } });
|
|
24
29
|
Object.defineProperty(exports, "partnerKeyEnv", { enumerable: true, get: function () { return auth_js_1.partnerKeyEnv; } });
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
* einfuehrt, soll diesen Client nicht zum Absturz bringen, sondern ihn
|
|
13
13
|
* durchreichen. Eingabetypen sind dagegen eng — ein Tippfehler soll ein
|
|
14
14
|
* Compilerfehler sein und keine `validation`-Antwort vom Server.
|
|
15
|
+
*
|
|
16
|
+
* **Die Formen sind die der `/v3`** (seit 0.28.0): Feldnamen und Werte, auf
|
|
17
|
+
* die ein Programm verzweigt, sind englisch; Texte fuer Menschen (`message`,
|
|
18
|
+
* `note`, `statusText`, `nextSteps`) bleiben deutsch, die Fehlercodes ebenso.
|
|
15
19
|
*/
|
|
16
20
|
import type { KasseneckSecret } from './secret.js';
|
|
17
21
|
/**
|
|
@@ -67,9 +71,29 @@ export interface PartnerInfo {
|
|
|
67
71
|
};
|
|
68
72
|
apps: PartnerApp[];
|
|
69
73
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Rechtsform des Betriebs, so wie `/v3` sie schreibt und liest.
|
|
76
|
+
*
|
|
77
|
+
* Die oesterreichischen Kurzformen (`eu`, `og`, `kg`, `gmbh`, `gmbhcokg`, `ag`)
|
|
78
|
+
* bleiben wie sie sind; nur die drei Woerter, die es auf Englisch gibt, sind
|
|
79
|
+
* englisch. `/v3` weist die deutschen Werte aus `/v1` (`einzel`, `verein`,
|
|
80
|
+
* `sonstige`) mit `validation` ab, statt sie still zu uebersetzen.
|
|
81
|
+
*/
|
|
82
|
+
export type LegalForm = 'sole_proprietor' | 'eu' | 'og' | 'kg' | 'gmbh' | 'gmbhcokg' | 'ag' | 'association' | 'other';
|
|
83
|
+
/** @deprecated Seit 0.28.0 dasselbe wie [LegalForm] (englische Werte der `/v3`). */
|
|
84
|
+
export type Rechtsform = LegalForm;
|
|
85
|
+
/**
|
|
86
|
+
* Bundesland als ISO-3166-2-Code: `AT-1` Burgenland, `AT-2` Kaernten,
|
|
87
|
+
* `AT-3` Niederoesterreich, `AT-4` Oberoesterreich, `AT-5` Salzburg,
|
|
88
|
+
* `AT-6` Steiermark, `AT-7` Tirol, `AT-8` Vorarlberg, `AT-9` Wien.
|
|
89
|
+
*/
|
|
90
|
+
export type AustrianState = 'AT-1' | 'AT-2' | 'AT-3' | 'AT-4' | 'AT-5' | 'AT-6' | 'AT-7' | 'AT-8' | 'AT-9';
|
|
91
|
+
/** @deprecated Seit 0.28.0 dasselbe wie [AustrianState] (ISO-Codes der `/v3`). */
|
|
92
|
+
export type Bundesland = AustrianState;
|
|
93
|
+
/** Rolle einer Kontaktperson; `/v1` sagte `geschaeftsfuehrung`, `buchhaltung`, `technik`, `kasse`. */
|
|
94
|
+
export type ContactRole = 'management' | 'accounting' | 'technical' | 'pos';
|
|
95
|
+
/** @deprecated Seit 0.28.0 dasselbe wie [ContactRole] (englische Werte der `/v3`). */
|
|
96
|
+
export type KontaktRolle = ContactRole;
|
|
73
97
|
export interface BetriebAdresse {
|
|
74
98
|
street: string;
|
|
75
99
|
/** Hausnummer, kurz und alphanumerisch: `49`, `12a`, `49/5`. */
|
|
@@ -82,8 +106,11 @@ export interface BetriebSteuer {
|
|
|
82
106
|
/** Steuernummer im Format `12-345/6789`; die Pruefziffer wird geprueft. */
|
|
83
107
|
taxNumber: string;
|
|
84
108
|
smallBusiness: boolean;
|
|
85
|
-
/**
|
|
86
|
-
|
|
109
|
+
/**
|
|
110
|
+
* UID, z. B. `ATU12345675`. Heisst auf der Leitung `vatId` (auch schon unter
|
|
111
|
+
* `/v1`); ein `uid` wies der Server als unbekanntes Feld ab.
|
|
112
|
+
*/
|
|
113
|
+
vatId?: string;
|
|
87
114
|
/** GLN, 13 Ziffern. */
|
|
88
115
|
gln?: string;
|
|
89
116
|
}
|
|
@@ -91,7 +118,7 @@ export interface BetriebKontakt {
|
|
|
91
118
|
name: string;
|
|
92
119
|
email: string;
|
|
93
120
|
phone?: string;
|
|
94
|
-
roles?:
|
|
121
|
+
roles?: ContactRole[];
|
|
95
122
|
}
|
|
96
123
|
export interface BetriebSteuerberater {
|
|
97
124
|
name: string;
|
|
@@ -115,11 +142,11 @@ export interface BetriebSteuerberater {
|
|
|
115
142
|
*/
|
|
116
143
|
export interface Betrieb {
|
|
117
144
|
companyName: string;
|
|
118
|
-
legalForm:
|
|
145
|
+
legalForm: LegalForm;
|
|
119
146
|
/** Anmeldung des Betriebs im Kasseneck-Panel; darf dort noch keinen Zugang haben. */
|
|
120
147
|
email: string;
|
|
121
148
|
address: BetriebAdresse;
|
|
122
|
-
state:
|
|
149
|
+
state: AustrianState;
|
|
123
150
|
taxDetails: BetriebSteuer;
|
|
124
151
|
/** Mindestens einer, hoechstens zehn. */
|
|
125
152
|
contacts: BetriebKontakt[];
|
|
@@ -171,6 +198,20 @@ export interface CreateCustomerOptions {
|
|
|
171
198
|
env?: PartnerEnv;
|
|
172
199
|
}
|
|
173
200
|
export type KundenStatus = 'created' | 'fon_configured' | 'signature_requested' | 'signature_ready' | 'cashregister_created' | 'live' | 'blocked' | (string & {});
|
|
201
|
+
/** Abrechnungsrhythmus eines Entgelts; `/v1` sagte `monat`, `jahr`, `einmal`. */
|
|
202
|
+
export type FeeInterval = 'monthly' | 'yearly' | 'once';
|
|
203
|
+
/**
|
|
204
|
+
* Das Entgelt, das mit einem Aufruf gebucht wurde: nur dann in der Antwort,
|
|
205
|
+
* wenn die Konditionen des Partners dafuer einen Preis vorsehen. Unter `/v1`
|
|
206
|
+
* hiess es `entgelt` mit `rhythmus`.
|
|
207
|
+
*/
|
|
208
|
+
export interface PartnerFee {
|
|
209
|
+
/** Betrag in ganzen Cent. */
|
|
210
|
+
cents: number;
|
|
211
|
+
interval: FeeInterval | (string & {});
|
|
212
|
+
/** `true` fuer einen Testbetrieb: gebucht, aber nicht verrechnet. */
|
|
213
|
+
test: boolean;
|
|
214
|
+
}
|
|
174
215
|
export interface CreateCustomerResult {
|
|
175
216
|
customerId: string;
|
|
176
217
|
status: KundenStatus;
|
|
@@ -182,24 +223,48 @@ export interface CreateCustomerResult {
|
|
|
182
223
|
sentTo: string | null;
|
|
183
224
|
};
|
|
184
225
|
nextSteps: string[];
|
|
226
|
+
/** Das gebuchte Entgelt; `null`, wenn die Konditionen keinen Preis dafuer vorsehen. */
|
|
227
|
+
fee: PartnerFee | null;
|
|
185
228
|
/** `true`, wenn derselbe `idempotencyKey` schon einmal ankam. */
|
|
186
229
|
replayed: boolean;
|
|
187
230
|
}
|
|
188
231
|
/**
|
|
189
|
-
*
|
|
232
|
+
* Wie das Partnerkonto den AVV handhabt; `/v1` sagte `direkt`, `vollmacht`,
|
|
233
|
+
* `unterauftrag`.
|
|
234
|
+
*/
|
|
235
|
+
export type AvvMode = 'direct' | 'power_of_attorney' | 'subprocessor';
|
|
236
|
+
/**
|
|
237
|
+
* Stand eines Vertrags des Betriebs mit Kasseneck: `pending` (noch nicht
|
|
238
|
+
* bestaetigt), `confirmed`, `outdated` (eine neuere Pflichtfassung ist zu
|
|
239
|
+
* bestaetigen) oder `not_required` (Testumgebung).
|
|
190
240
|
*
|
|
191
|
-
* **Vertraege wirken
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
241
|
+
* **Die Vertraege wirken:** live geht ohne beide (AVV und Nutzungsvertrag)
|
|
242
|
+
* keine Kasse live, `activateCashregister` antwortet dann `vertrag_offen`. Der
|
|
243
|
+
* Betrieb bestaetigt sie selbst ueber den Einrichtungs-Link
|
|
244
|
+
* (`sendPartnerCustomerFonLink`); die Ereignisse `customer.avv_accepted` und
|
|
245
|
+
* `customer.terms_accepted` melden die Bestaetigung. In der Testumgebung sind
|
|
246
|
+
* sie nicht noetig.
|
|
197
247
|
*/
|
|
198
|
-
export interface
|
|
199
|
-
status: string;
|
|
248
|
+
export interface VertragStand {
|
|
249
|
+
status: 'pending' | 'confirmed' | 'outdated' | 'not_required' | (string & {});
|
|
200
250
|
version: string | null;
|
|
201
251
|
confirmedAt: number | null;
|
|
202
|
-
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Stand des Auftragsverarbeitungsvertrags (AVV, Art. 28 DSGVO). Zusaetzlich zu
|
|
255
|
+
* [VertragStand] der Status `via_partner` (der Partnervertrag deckt den AVV,
|
|
256
|
+
* Weg `subprocessor`) und `mode`, der Weg des Partnerkontos.
|
|
257
|
+
*/
|
|
258
|
+
export interface AvvStand extends VertragStand {
|
|
259
|
+
status: VertragStand['status'] | 'via_partner';
|
|
260
|
+
mode: AvvMode | (string & {}) | null;
|
|
261
|
+
}
|
|
262
|
+
/** FinanzOnline-Stand in der Liste: ist der Link draussen, geoeffnet, der Zugang geprueft? */
|
|
263
|
+
export interface KundenFonStand {
|
|
264
|
+
configured: boolean;
|
|
265
|
+
linkSentAt: number | null;
|
|
266
|
+
/** Erste Oeffnung; wird mit einem Ersatz-Link zurueckgesetzt. */
|
|
267
|
+
linkOpenedAt: number | null;
|
|
203
268
|
}
|
|
204
269
|
export interface KundenZeile {
|
|
205
270
|
customerId: string;
|
|
@@ -208,12 +273,15 @@ export interface KundenZeile {
|
|
|
208
273
|
appId: string | null;
|
|
209
274
|
env: PartnerEnv;
|
|
210
275
|
createdAt: number | null;
|
|
276
|
+
/** FinanzOnline-Stand; `null`, wenn die Antwort ihn nicht fuehrt. */
|
|
277
|
+
fon: KundenFonStand | null;
|
|
211
278
|
/**
|
|
212
|
-
*
|
|
213
|
-
* nicht
|
|
214
|
-
* setzt ihn voraus.
|
|
279
|
+
* AVV-Stand; `null`, wenn die Antwort ihn nicht fuehrt. Kein erfundenes
|
|
280
|
+
* `pending`: "nicht mitgeliefert" und "nicht bestaetigt" sind zweierlei.
|
|
215
281
|
*/
|
|
216
282
|
avv: AvvStand | null;
|
|
283
|
+
/** Stand des Nutzungsvertrags; `null`, wenn die Antwort ihn nicht fuehrt. */
|
|
284
|
+
terms: VertragStand | null;
|
|
217
285
|
}
|
|
218
286
|
export interface ListCustomersOptions {
|
|
219
287
|
status?: KundenStatus;
|
|
@@ -233,9 +301,10 @@ export interface Kunde extends KundenZeile {
|
|
|
233
301
|
createdAt: number | null;
|
|
234
302
|
createdVia: string | null;
|
|
235
303
|
business: Record<string, unknown>;
|
|
236
|
-
|
|
237
|
-
|
|
304
|
+
/** In der Einzelsicht zusaetzlich: wann geprueft, an welche (maskierte) Adresse der Link ging. */
|
|
305
|
+
fon: KundenFonStand & {
|
|
238
306
|
verifiedAt: number | null;
|
|
307
|
+
linkSentTo: string | null;
|
|
239
308
|
};
|
|
240
309
|
access: {
|
|
241
310
|
email: string | null;
|
|
@@ -250,26 +319,39 @@ export interface FonLinkResult {
|
|
|
250
319
|
expiresAt: number;
|
|
251
320
|
}
|
|
252
321
|
/**
|
|
253
|
-
* `
|
|
254
|
-
* Einheit ist FinanzOnline bekannt; `
|
|
255
|
-
* Testumgebung wird ohne `
|
|
322
|
+
* `requested → assigned → registered → ready`. `registered` heisst: die
|
|
323
|
+
* Einheit ist FinanzOnline bekannt; `ready` heisst: sie darf signieren. In der
|
|
324
|
+
* Testumgebung wird ohne `registered` direkt `ready` erreicht.
|
|
256
325
|
*/
|
|
257
326
|
export type SignaturAntragStatus = 'requested' | 'assigned' | 'registered' | 'ready' | 'failed' | 'cancelled' | (string & {});
|
|
327
|
+
/**
|
|
328
|
+
* Gruende in der Historie eines Signaturantrags. `card_entered` und
|
|
329
|
+
* `finanzonline` hiessen unter `/v1` `karte_eingetragen` und `fon`.
|
|
330
|
+
*/
|
|
331
|
+
export type SignatureHistoryReason = 'api' | 'portal' | 'card_entered' | 'finanzonline' | 'automation_off' | 'test_environment' | 'no_stock' | (string & {});
|
|
332
|
+
/**
|
|
333
|
+
* `error.code` eines Signaturantrags oder einer Signatur (`SignaturAntrag`,
|
|
334
|
+
* `CustomerSignature`). Hiess unter `/v1` `kunde_nicht_gefunden` /
|
|
335
|
+
* `unvollstaendig` / `fon_fehler`; dieser Client spricht seit 0.28.0 nur noch
|
|
336
|
+
* `/v3` und sieht darum nur die englische Form.
|
|
337
|
+
*/
|
|
338
|
+
export type SignatureErrorCode = 'customer_not_found' | 'incomplete' | 'finanzonline_error' | (string & {});
|
|
258
339
|
export interface SignaturHistorieEintrag {
|
|
259
|
-
|
|
260
|
-
|
|
340
|
+
from: SignaturAntragStatus | null;
|
|
341
|
+
to: SignaturAntragStatus;
|
|
261
342
|
at: number;
|
|
262
|
-
reason:
|
|
343
|
+
reason: SignatureHistoryReason | null;
|
|
263
344
|
}
|
|
264
345
|
export interface SignaturAntrag {
|
|
265
346
|
requestId: string;
|
|
266
347
|
status: SignaturAntragStatus;
|
|
267
348
|
statusText: string;
|
|
268
|
-
|
|
349
|
+
/** Art der Signatureinheit; heute nur `signature_card`. */
|
|
350
|
+
kind: string;
|
|
269
351
|
vdaId: string | null;
|
|
270
352
|
signatureId: string | null;
|
|
271
353
|
error: {
|
|
272
|
-
code:
|
|
354
|
+
code: SignatureErrorCode | null;
|
|
273
355
|
message: string | null;
|
|
274
356
|
rc: string | null;
|
|
275
357
|
} | null;
|
|
@@ -278,18 +360,53 @@ export interface SignaturAntrag {
|
|
|
278
360
|
updatedAt: number | null;
|
|
279
361
|
history: SignaturHistorieEintrag[];
|
|
280
362
|
}
|
|
363
|
+
export interface RequestSignatureOptions {
|
|
364
|
+
/** Art der Signatureinheit; heute nur `signature_card` (Vorgabe). */
|
|
365
|
+
kind?: string;
|
|
366
|
+
/** `true` beantragt eine WEITERE Signatur, obwohl schon eine besteht. */
|
|
367
|
+
additional?: boolean;
|
|
368
|
+
}
|
|
281
369
|
export interface RequestSignatureResult {
|
|
282
370
|
request: SignaturAntrag;
|
|
283
371
|
/** `true`, wenn schon ein Antrag lief — dann ist es der laufende. */
|
|
284
372
|
replayed: boolean;
|
|
285
373
|
note: string | null;
|
|
374
|
+
/** Das gebuchte Entgelt; `null`, wenn die Konditionen keinen Preis dafuer vorsehen. */
|
|
375
|
+
fee: PartnerFee | null;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Eine Signatur des Betriebs, einzeln. Ein Betrieb kann mehrere haben
|
|
379
|
+
* (Ersatzkarte, zweiter Standort); `signatureRequestId` ist die Kennung, auf die
|
|
380
|
+
* sich eine Kasse beruft.
|
|
381
|
+
*/
|
|
382
|
+
export interface CustomerSignature {
|
|
383
|
+
signatureRequestId: string;
|
|
384
|
+
status: SignaturAntragStatus | 'decommissioned';
|
|
385
|
+
statusText: string;
|
|
386
|
+
inProgress: boolean;
|
|
387
|
+
ready: boolean;
|
|
388
|
+
kind: string;
|
|
389
|
+
vdaId: string | null;
|
|
390
|
+
requestId: string | null;
|
|
391
|
+
signatureId: string | null;
|
|
392
|
+
error: {
|
|
393
|
+
code: SignatureErrorCode | null;
|
|
394
|
+
message: string | null;
|
|
395
|
+
rc: string | null;
|
|
396
|
+
} | null;
|
|
397
|
+
createdAt: number | null;
|
|
398
|
+
updatedAt: number | null;
|
|
286
399
|
}
|
|
287
400
|
export interface SignaturStand {
|
|
288
|
-
|
|
401
|
+
customerId: string;
|
|
402
|
+
/** Die Kurzform: hat der Betrieb ueberhaupt eine brauchbare Signatur? */
|
|
403
|
+
signature: {
|
|
289
404
|
ready: boolean;
|
|
290
405
|
signatureId: string | null;
|
|
291
406
|
vdaId: string | null;
|
|
292
407
|
};
|
|
408
|
+
/** Jede Signatur einzeln. */
|
|
409
|
+
signatures: CustomerSignature[];
|
|
293
410
|
requests: SignaturAntrag[];
|
|
294
411
|
fon: {
|
|
295
412
|
present: boolean;
|
|
@@ -297,8 +414,8 @@ export interface SignaturStand {
|
|
|
297
414
|
};
|
|
298
415
|
}
|
|
299
416
|
/** Die Schritte der Inbetriebnahme, in dieser Reihenfolge. */
|
|
300
|
-
export type KassenSchritt = '
|
|
301
|
-
export type KassenStatus = 'draft' | '
|
|
417
|
+
export type KassenSchritt = 'signature' | 'register_cashregister' | 'start_receipt' | 'transmit_start_receipt' | (string & {});
|
|
418
|
+
export type KassenStatus = 'draft' | 'in_progress' | 'live' | 'failed' | (string & {});
|
|
302
419
|
export interface Kasse {
|
|
303
420
|
cashregisterId: string;
|
|
304
421
|
name: string | null;
|
|
@@ -351,7 +468,7 @@ export interface CreateCashregisterResult {
|
|
|
351
468
|
started: boolean;
|
|
352
469
|
ok: boolean | null;
|
|
353
470
|
step: KassenSchritt | null;
|
|
354
|
-
/** `signature_not_ready` oder `
|
|
471
|
+
/** `signature_not_ready` oder `automation_off`, wenn nicht gestartet wurde. */
|
|
355
472
|
reason: string | null;
|
|
356
473
|
};
|
|
357
474
|
}
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
* einfuehrt, soll diesen Client nicht zum Absturz bringen, sondern ihn
|
|
14
14
|
* durchreichen. Eingabetypen sind dagegen eng — ein Tippfehler soll ein
|
|
15
15
|
* Compilerfehler sein und keine `validation`-Antwort vom Server.
|
|
16
|
+
*
|
|
17
|
+
* **Die Formen sind die der `/v3`** (seit 0.28.0): Feldnamen und Werte, auf
|
|
18
|
+
* die ein Programm verzweigt, sind englisch; Texte fuer Menschen (`message`,
|
|
19
|
+
* `note`, `statusText`, `nextSteps`) bleiben deutsch, die Fehlercodes ebenso.
|
|
16
20
|
*/
|
|
17
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
22
|
exports.SCOPE_CREDENTIALS = exports.PARTNER_ENVS = void 0;
|
|
@@ -11,11 +11,11 @@ import { type VerifyWebhookOptions, type WebhookVerifyReason } from './webhook-s
|
|
|
11
11
|
* Alle Ereignisse, die ein Webhook abonnieren **und proben** kann. Ein
|
|
12
12
|
* Endpunkt bekommt ausschliesslich die, die in seiner `events`-Liste stehen.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
14
|
+
* **Noch nicht in der Liste:** `customer.avv_accepted` und
|
|
15
|
+
* `customer.terms_accepted`. Das Backend bietet sie inzwischen zum Abonnieren
|
|
16
|
+
* an; die Liste wird mit dem Dart-Zwilling gemeinsam erweitert, weil beide
|
|
17
|
+
* gegeneinander geprueft werden. Abonnieren geht trotzdem schon (`events`
|
|
18
|
+
* nimmt jeden Namen), die Nutzlast beschreibt [ContractAcceptedEventData].
|
|
19
19
|
*/
|
|
20
20
|
export declare const PARTNER_WEBHOOK_EVENTS: readonly ["customer.created", "customer.updated", "customer.status_changed", "customer.fon_verified", "customer.live_enabled", "signature.requested", "signature.ready", "signature.failed", "cashregister.created", "cashregister.live", "cashregister.failed", "app.version.accepted", "app.version.rejected", "webhook.test"];
|
|
21
21
|
export type PartnerWebhookEventType = typeof PARTNER_WEBHOOK_EVENTS[number];
|
|
@@ -58,6 +58,38 @@ export interface PartnerWebhookEvent<T = Record<string, unknown>> {
|
|
|
58
58
|
test: boolean;
|
|
59
59
|
data: T;
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Die Sprache der Nutzlast eines Webhooks. Ein unter `/v1` angelegter Webhook
|
|
63
|
+
* spricht `v1` (deutsche Werte), ein unter `/v3` angelegter `v3`. Umstellen
|
|
64
|
+
* geht nur vorwaerts, mit `updatePartnerWebhook(id, { apiVersion: 'v3' })`;
|
|
65
|
+
* zurueck auf `v1` gibt es absichtlich nicht.
|
|
66
|
+
*
|
|
67
|
+
* Die Sprache der **Antworten** folgt dagegen dem Pfad: dieser Client ruft
|
|
68
|
+
* `/v3` und bekommt englische Antworten, gleich welche `apiVersion` ein
|
|
69
|
+
* Webhook hat.
|
|
70
|
+
*/
|
|
71
|
+
export type WebhookApiVersion = 'v1' | 'v3';
|
|
72
|
+
/** Art des Vertrags in `customer.avv_accepted` / `customer.terms_accepted`. */
|
|
73
|
+
export type ContractKind = 'avv' | 'terms';
|
|
74
|
+
/**
|
|
75
|
+
* Wo der Betrieb bestaetigt hat. Unter `v1` hiessen die ersten fuenf
|
|
76
|
+
* `einrichten`, `prozess`, `partner_vollmacht`, `admin_papier`,
|
|
77
|
+
* `papier_upload`; `app` und `portal` sind in beiden Sprachen gleich.
|
|
78
|
+
*/
|
|
79
|
+
export type ContractSource = 'setup_link' | 'process_link' | 'partner_power_of_attorney' | 'admin_paper' | 'paper_upload' | 'app' | 'portal' | (string & {});
|
|
80
|
+
/**
|
|
81
|
+
* Nutzlast von `customer.avv_accepted` und `customer.terms_accepted` in der
|
|
82
|
+
* Sprache `v3`. Ein Webhook mit `apiVersion: 'v1'` schickt hier weiter
|
|
83
|
+
* `kind: 'nutzung'` und die deutschen Quellen.
|
|
84
|
+
*/
|
|
85
|
+
export interface ContractAcceptedEventData {
|
|
86
|
+
customerId: string;
|
|
87
|
+
companyName: string;
|
|
88
|
+
kind: ContractKind;
|
|
89
|
+
version: string;
|
|
90
|
+
confirmedAt: number;
|
|
91
|
+
source: ContractSource;
|
|
92
|
+
}
|
|
61
93
|
export type WebhookEventResult = {
|
|
62
94
|
ok: true;
|
|
63
95
|
event: PartnerWebhookEvent;
|
|
@@ -82,14 +114,23 @@ export type WebhookEventResult = {
|
|
|
82
114
|
* 30 min, 2 h, 12 h) und gilt dann als fehlgeschlagen.
|
|
83
115
|
*/
|
|
84
116
|
export declare function parseWebhookEvent(optionen: VerifyWebhookOptions): Promise<WebhookEventResult>;
|
|
117
|
+
/** Stand einer Zustellung; `/v1` sagte `offen`, `zugestellt`, `fehlgeschlagen`, `verworfen`. */
|
|
118
|
+
export type WebhookDeliveryStatus = 'pending' | 'delivered' | 'failed' | 'dropped';
|
|
85
119
|
export interface PartnerWebhook {
|
|
86
120
|
webhookId: string;
|
|
121
|
+
/** Sprache der Nutzlast; fehlt sie in der Antwort, ist es ein Bestands-Webhook und damit `v1`. */
|
|
122
|
+
apiVersion: WebhookApiVersion | (string & {});
|
|
87
123
|
url: string;
|
|
88
124
|
events: string[];
|
|
89
125
|
active: boolean;
|
|
90
126
|
description: string | null;
|
|
91
127
|
createdAt: number | null;
|
|
92
|
-
|
|
128
|
+
/** Die letzte Zustellung; `null`, solange keine versucht wurde. */
|
|
129
|
+
lastDelivery: {
|
|
130
|
+
at: number | null;
|
|
131
|
+
status: WebhookDeliveryStatus | (string & {});
|
|
132
|
+
statusCode: number | null;
|
|
133
|
+
} | null;
|
|
93
134
|
/** Fehlversuche in Folge — steigt der Wert, stimmt beim Empfaenger etwas nicht. */
|
|
94
135
|
consecutiveFailures: number;
|
|
95
136
|
}
|
|
@@ -120,6 +161,17 @@ export interface WebhookPatch {
|
|
|
120
161
|
events?: (PartnerWebhookEventType | (string & {}))[];
|
|
121
162
|
description?: string;
|
|
122
163
|
active?: boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Stellt die Nutzlast auf Englisch um. Nur `'v3'` ist moeglich: zurueck auf
|
|
166
|
+
* `v1` geht nicht, damit ein Partner nicht versehentlich wieder deutsche
|
|
167
|
+
* Nutzlasten bekommt.
|
|
168
|
+
*/
|
|
169
|
+
apiVersion?: 'v3';
|
|
170
|
+
}
|
|
171
|
+
export interface DeleteWebhookResult {
|
|
172
|
+
webhookId: string;
|
|
173
|
+
/** Unter `/v1` hiess das Feld `geloescht`. */
|
|
174
|
+
deleted: boolean;
|
|
123
175
|
}
|
|
124
176
|
export interface WebhookListe {
|
|
125
177
|
webhooks: PartnerWebhook[];
|
|
@@ -134,11 +186,11 @@ export interface WebhookZustellung {
|
|
|
134
186
|
webhookId: string;
|
|
135
187
|
event: string;
|
|
136
188
|
eventId: string;
|
|
137
|
-
/** `
|
|
138
|
-
status: string;
|
|
189
|
+
/** `dropped`: der Webhook wurde vor der Faelligkeit deaktiviert oder geloescht. */
|
|
190
|
+
status: WebhookDeliveryStatus | (string & {});
|
|
139
191
|
attempts: number;
|
|
140
|
-
|
|
141
|
-
|
|
192
|
+
lastAttemptAt: number | null;
|
|
193
|
+
nextAttemptAt: number | null;
|
|
142
194
|
statusCode: number | null;
|
|
143
195
|
/** Auszug der Antwort des Empfaengers, hoechstens 500 Zeichen. */
|
|
144
196
|
response: string | null;
|
|
@@ -171,13 +223,23 @@ export declare function listPartnerWebhooks(rufen: InternerTransport): Promise<W
|
|
|
171
223
|
* tun.
|
|
172
224
|
*/
|
|
173
225
|
export declare function updatePartnerWebhook(rufen: InternerTransport, webhookId: string, patch: WebhookPatch): Promise<PartnerWebhook>;
|
|
174
|
-
/**
|
|
175
|
-
|
|
226
|
+
/**
|
|
227
|
+
* Loescht einen Endpunkt. Danach kommt dort nichts mehr an; offene
|
|
228
|
+
* Zustellungen werden verworfen (`dropped`).
|
|
229
|
+
*/
|
|
230
|
+
export declare function deletePartnerWebhook(rufen: InternerTransport, webhookId: string): Promise<DeleteWebhookResult>;
|
|
231
|
+
/** Eine Zustellung der Probe, so wie `sendPartnerWebhookTest` sie meldet. */
|
|
232
|
+
export interface WebhookTestZustellung {
|
|
233
|
+
deliveryId: string;
|
|
234
|
+
webhookId: string;
|
|
235
|
+
status: WebhookDeliveryStatus | (string & {});
|
|
236
|
+
statusCode: number | null;
|
|
237
|
+
}
|
|
176
238
|
export interface WebhookTestResult {
|
|
177
239
|
eventId: string;
|
|
178
240
|
/** Welches Ereignis geprobt wurde — ohne Angabe `webhook.test`. */
|
|
179
|
-
|
|
180
|
-
deliveries:
|
|
241
|
+
event: string;
|
|
242
|
+
deliveries: WebhookTestZustellung[];
|
|
181
243
|
}
|
|
182
244
|
/**
|
|
183
245
|
* Schickt eine Probe an genau diesen Endpunkt.
|