@kreiseck/kasseneck-api 1.4.0 → 1.5.1
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 +166 -0
- package/README.md +255 -36
- package/dist/cjs/client/aufrufe.d.ts +58 -4
- package/dist/cjs/client/aufrufe.js +196 -1
- package/dist/cjs/client/errors.d.ts +32 -19
- package/dist/cjs/client/errors.js +28 -17
- package/dist/cjs/client/index.d.ts +2 -2
- package/dist/cjs/client/index.js +2 -1
- package/dist/cjs/client/transport.d.ts +27 -1
- package/dist/cjs/client/transport.js +25 -27
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +3 -2
- package/dist/cjs/inventory/api.d.ts +19 -3
- package/dist/cjs/inventory/api.js +18 -2
- package/dist/cjs/inventory/endpunkte.d.ts +22 -2
- package/dist/cjs/inventory/endpunkte.js +6 -1
- package/dist/cjs/inventory/fehler.d.ts +11 -1
- package/dist/cjs/inventory/fehler.js +19 -0
- package/dist/cjs/inventory/index.d.ts +6 -4
- package/dist/cjs/inventory/index.js +32 -2
- package/dist/cjs/inventory/lesen.d.ts +8 -1
- package/dist/cjs/inventory/lesen.js +131 -1
- package/dist/cjs/inventory/schreiben.d.ts +86 -0
- package/dist/cjs/inventory/schreiben.js +320 -0
- package/dist/cjs/inventory/typen.d.ts +371 -11
- package/dist/cjs/inventory/vertrag.d.ts +76 -16
- package/dist/cjs/inventory/vertrag.js +138 -13
- package/dist/cjs/inventory/webhook.d.ts +3 -1
- package/dist/cjs/inventory/webhook.js +7 -1
- package/dist/cjs/invoice/endpunkte.d.ts +6 -0
- package/dist/cjs/invoice/endpunkte.js +13 -2
- package/dist/cjs/invoice/index.d.ts +2 -2
- package/dist/cjs/invoice/index.js +2 -1
- package/dist/cjs/invoice/typen.d.ts +46 -2
- package/dist/cjs/invoice/vertrag.d.ts +19 -5
- package/dist/cjs/invoice/vertrag.js +37 -5
- package/dist/cjs/pos/texte.d.ts +11 -6
- package/dist/cjs/pos/texte.js +11 -6
- package/dist/cjs/stored/vokabular.d.ts +1 -1
- package/dist/cjs/stored/vokabular.js +5 -3
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/client/aufrufe.d.ts +58 -4
- package/dist/esm/client/aufrufe.js +194 -0
- package/dist/esm/client/errors.d.ts +32 -19
- package/dist/esm/client/errors.js +28 -17
- package/dist/esm/client/index.d.ts +2 -2
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/client/transport.d.ts +27 -1
- package/dist/esm/client/transport.js +26 -28
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/inventory/api.d.ts +19 -3
- package/dist/esm/inventory/api.js +18 -2
- package/dist/esm/inventory/endpunkte.d.ts +22 -2
- package/dist/esm/inventory/endpunkte.js +6 -5
- package/dist/esm/inventory/fehler.d.ts +11 -1
- package/dist/esm/inventory/fehler.js +18 -1
- package/dist/esm/inventory/index.d.ts +6 -4
- package/dist/esm/inventory/index.js +5 -3
- package/dist/esm/inventory/lesen.d.ts +8 -1
- package/dist/esm/inventory/lesen.js +127 -1
- package/dist/esm/inventory/schreiben.d.ts +86 -0
- package/dist/esm/inventory/schreiben.js +303 -0
- package/dist/esm/inventory/typen.d.ts +371 -11
- package/dist/esm/inventory/vertrag.d.ts +76 -16
- package/dist/esm/inventory/vertrag.js +137 -12
- package/dist/esm/inventory/webhook.d.ts +3 -1
- package/dist/esm/inventory/webhook.js +8 -2
- package/dist/esm/invoice/endpunkte.d.ts +6 -0
- package/dist/esm/invoice/endpunkte.js +13 -2
- package/dist/esm/invoice/index.d.ts +2 -2
- package/dist/esm/invoice/index.js +1 -1
- package/dist/esm/invoice/typen.d.ts +46 -2
- package/dist/esm/invoice/vertrag.d.ts +19 -5
- package/dist/esm/invoice/vertrag.js +36 -4
- package/dist/esm/pos/texte.d.ts +11 -6
- package/dist/esm/pos/texte.js +11 -6
- package/dist/esm/stored/vokabular.d.ts +1 -1
- package/dist/esm/stored/vokabular.js +5 -3
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/invoice-api-examples/credit-error-reservation.json +26 -0
- package/fixtures/invoice-api-examples/issue-error-reservation-article.json +25 -0
- package/fixtures/invoice-api-examples/issue-error-vat-id-risk.json +26 -0
- package/fixtures/invoice-api-examples/issue-reservation.json +24 -0
- package/fixtures/invoice-api-examples/issue-vat-id-risk.json +28 -0
- package/fixtures/invoice-api.schema.json +15 -2
- package/fixtures/invoice-texts.json +1 -1
- package/fixtures/pos-texts.json +1 -1
- package/fixtures/surface.json +206 -9
- package/fixtures/v3/antworten/belege.json +2 -2
- package/fixtures/v3/antworten/belegmail.json +2 -2
- package/fixtures/v3/antworten/kasse-belege.json +2 -2
- package/fixtures/v3/antworten/kasse.json +3 -3
- package/fixtures/v3/antworten/lager.json +2491 -130
- package/fixtures/v3/antworten/rechnungen.json +267 -44
- package/fixtures/v3/antworten/storno.json +2 -2
- package/fixtures/v3/stored/belege.json +2 -2
- package/fixtures/v3/stored/kasse.json +3 -3
- package/fixtures/v3/stored/rechnungen.json +174 -18
- package/fixtures/v3/v3-vokabular.json +593 -23
- package/fixtures/v3/zahlbetrag-faelle.json +2 -2
- package/package.json +1 -1
|
@@ -41,6 +41,12 @@ const errors_js_1 = require("./errors.js");
|
|
|
41
41
|
* **Kein Wiederholen fehlgeschlagener Aufrufe.** Ein Beleg ist nicht folgenlos
|
|
42
42
|
* wiederholbar; ohne entschiedene Idempotenz waere ein automatischer zweiter
|
|
43
43
|
* Versuch ein zweiter Beleg.
|
|
44
|
+
*
|
|
45
|
+
* **Ausgang je Aufruf.** Ob ein Scheitern nach dem Senden `outcome: 'unknown'`
|
|
46
|
+
* traegt, haengt am Aufruf: mit Wirkung ([UNKNOWN_OUTCOME_CALLS] in
|
|
47
|
+
* aufrufe.ts) ja, Lesen und Probelauf nein. Ein Probelauf traegt denselben
|
|
48
|
+
* Namen wie der echte Aufruf; die Huelle sagt es darum beim Aufruf
|
|
49
|
+
* (`hasEffect: false`, [TransportCallOptions]).
|
|
44
50
|
*/
|
|
45
51
|
/** Basis-URL der oeffentlichen API (Produktion). */
|
|
46
52
|
exports.DEFAULT_BASE_URL = 'https://api.kasseneck.at/v3';
|
|
@@ -61,23 +67,6 @@ const VERSION_WERT = 'v3';
|
|
|
61
67
|
const KASSENECK_HOSTS = new Set(['api.kasseneck.at', 'kasse.kasseneck.at']);
|
|
62
68
|
/** Die 1.x-Linie spricht nur `/v3`: jede Basis endet so (`/v3` oder `/api/v3`). */
|
|
63
69
|
const V3_ENDE = /\/v3$/;
|
|
64
|
-
/**
|
|
65
|
-
* Aufrufe mit Wirkung, die nie blind wiederholt werden duerfen: sie signieren
|
|
66
|
-
* (`createReceipt`, `cancelReceipt`), loesen bei FinanzOnline etwas aus
|
|
67
|
-
* (`financeWebService`) oder bewegen Geld (`hobexPayApi` belastet eine Karte,
|
|
68
|
-
* `hobexRefundApi` erstattet, `stripeCaptureIntent` zieht eine vorgemerkte
|
|
69
|
-
* Zahlung ein). Scheitert einer, nachdem die Anfrage unterwegs war (Netz,
|
|
70
|
-
* Zeitlimit, HTTP 5xx, unlesbare Erfolgsantwort, HTML mit Kennzeichen), ist
|
|
71
|
-
* sein Ausgang offen.
|
|
72
|
-
*/
|
|
73
|
-
const UNKNOWN_OUTCOME_CALLS = new Set([
|
|
74
|
-
'createReceipt',
|
|
75
|
-
'cancelReceipt',
|
|
76
|
-
'financeWebService',
|
|
77
|
-
'hobexPayApi',
|
|
78
|
-
'hobexRefundApi',
|
|
79
|
-
'stripeCaptureIntent',
|
|
80
|
-
]);
|
|
81
70
|
/**
|
|
82
71
|
* Produkte, die das Backend in `Kasseneck-Client` zaehlt (Positivliste,
|
|
83
72
|
* Nachtrag §6); alles andere zaehlte dort als `ungueltig`. Das Paket weist
|
|
@@ -94,7 +83,7 @@ const CLIENT_MAX = 64;
|
|
|
94
83
|
exports.DEFAULT_TIMEOUT_MS = 30_000;
|
|
95
84
|
function createTransport(options) {
|
|
96
85
|
const kern = createCore(options);
|
|
97
|
-
return (functionName, params, extraBodyFields, secretParams) => kern(functionName, params, extraBodyFields, secretParams, alsText, jsonAuswerten);
|
|
86
|
+
return (functionName, params, extraBodyFields, secretParams, callOptions) => kern(functionName, params, extraBodyFields, secretParams, callOptions, alsText, jsonAuswerten);
|
|
98
87
|
}
|
|
99
88
|
/**
|
|
100
89
|
* Zweiter Einstiegspunkt fuer die Bericht-Downloads. Er liest die Antwort als
|
|
@@ -106,7 +95,7 @@ function createTransport(options) {
|
|
|
106
95
|
*/
|
|
107
96
|
function createBinaryTransport(options) {
|
|
108
97
|
const kern = createCore(options);
|
|
109
|
-
return (functionName, params) => kern(functionName, params, undefined, undefined, alsBytes, pdfAuswerten);
|
|
98
|
+
return (functionName, params) => kern(functionName, params, undefined, undefined, undefined, alsBytes, pdfAuswerten);
|
|
110
99
|
}
|
|
111
100
|
/**
|
|
112
101
|
* Gemeinsamer Kern beider Einstiegspunkte: Anmeldung, Zeitlimit, Anfrage und
|
|
@@ -130,12 +119,21 @@ function createCore(options) {
|
|
|
130
119
|
* (Berichte, Zahlungen, FinanzOnline), geht an die oeffentliche Basis.
|
|
131
120
|
*/
|
|
132
121
|
const basisFuer = (functionName) => (0, aufrufe_js_1.isPosOnlyCall)(functionName) || (kassenweg && (0, aufrufe_js_1.isPosCall)(functionName)) ? kassenBasis : oeffentlicheBasis;
|
|
133
|
-
return async function aufrufen(functionName, params = {}, extraBodyFields, secretParams, lesen, auswerten) {
|
|
122
|
+
return async function aufrufen(functionName, params = {}, extraBodyFields, secretParams, callOptions, lesen, auswerten) {
|
|
134
123
|
// Die URL nennt die Backend-Funktion, die Fehler nennen den **Vorgang**:
|
|
135
124
|
// `financeWebService` fuehrt ein Dutzend verschiedener Vorgaenge unter einem
|
|
136
125
|
// Endpunkt, und ein Fehler, der nur "financeWebService" sagt, verschweigt
|
|
137
126
|
// dem Aufrufer, welcher davon scheiterte.
|
|
138
127
|
const fehlerName = extraBodyFields?.method ? `${functionName}/${extraBodyFields.method}` : functionName;
|
|
128
|
+
// Ausgang eines Scheiterns nach dem Senden: offen, wenn der Aufruf Wirkung
|
|
129
|
+
// hat. `hasEffect: true` hebt einen fremden Aufruf auf `unknown`.
|
|
130
|
+
// `hasEffect: false` senkt einen Aufruf mit Wirkung nur, wenn er wirklich
|
|
131
|
+
// ein Probelauf ist (`dryRun === true`, so streng prueft auch das
|
|
132
|
+
// Backend): sonst liefe ein echter Beleg oder eine Buchung nach einem
|
|
133
|
+
// Zeitlimit als `rejected`, und genau das fuehrt zur Doppelbuchung.
|
|
134
|
+
const probelauf = callOptions?.hasEffect === false && params['dryRun'] === true;
|
|
135
|
+
const wirkung = callOptions?.hasEffect === true || ((0, aufrufe_js_1.isUnknownOutcomeCall)(functionName) && !probelauf);
|
|
136
|
+
const nachDemSenden = wirkung ? 'unknown' : 'rejected';
|
|
139
137
|
// Das Zeitlimit laeuft ab HIER — es deckt die Anmeldung mit ab. Haengt die
|
|
140
138
|
// Token-Erneuerung auf flauem Netz, haette der Aufruf sonst weder Ergebnis
|
|
141
139
|
// noch Fehler, und die Kasse stuende still.
|
|
@@ -175,8 +173,9 @@ function createCore(options) {
|
|
|
175
173
|
}
|
|
176
174
|
// Bis hierher kam keine verwertbare Antwort: Netz weg oder Zeitlimit.
|
|
177
175
|
// Die Anfrage war schon unterwegs: bei einem Aufruf mit Wirkung kann
|
|
178
|
-
// der
|
|
179
|
-
|
|
176
|
+
// der Vorgang ausgefuehrt sein (Beleg, Zahlung, Buchung, Rechnung;
|
|
177
|
+
// Ausgang unklar).
|
|
178
|
+
return new errors_js_1.KasseneckNetworkError(fehlerName, abbruch.signal.aborted, zeitlimitMs, (0, errors_js_1.causeDigest)(ursache, geheimnisse), nachDemSenden);
|
|
180
179
|
};
|
|
181
180
|
const basis = basisFuer(functionName);
|
|
182
181
|
const url = `${basis}/${encodeURIComponent(functionName)}`;
|
|
@@ -230,7 +229,7 @@ function createCore(options) {
|
|
|
230
229
|
throw fehler;
|
|
231
230
|
}
|
|
232
231
|
// 5xx auf einem Aufruf mit Wirkung: der Handler kann gelaufen sein.
|
|
233
|
-
const ausgang = antwort.status >= 500
|
|
232
|
+
const ausgang = antwort.status >= 500 ? nachDemSenden : 'rejected';
|
|
234
233
|
throw new errors_js_1.KasseneckHttpError(fehlerName, antwort.status, inhaltstyp, 'server-error', ausgang);
|
|
235
234
|
}
|
|
236
235
|
// HTTP 200 mit HTML: die Auffangregel der Single-Page-App hat den Aufruf
|
|
@@ -238,9 +237,9 @@ function createCore(options) {
|
|
|
238
237
|
if (inhaltstyp !== undefined && /^\s*text\/html\b/i.test(inhaltstyp)) {
|
|
239
238
|
// Mit Kennzeichen hat der `/v3`-Rand den Aufruf gesehen (etwa ein
|
|
240
239
|
// Proxy, der nur den Inhaltstyp umschreibt). Bei einem Aufruf mit
|
|
241
|
-
// Wirkung kann der
|
|
240
|
+
// Wirkung kann der Vorgang dann ausgefuehrt sein: unlesbarer Rumpf,
|
|
242
241
|
// Ausgang unklar, statt `route_missing`.
|
|
243
|
-
if (
|
|
242
|
+
if (nachDemSenden === 'unknown' && traegtKennzeichen(antwort)) {
|
|
244
243
|
throw new errors_js_1.KasseneckHttpError(fehlerName, antwort.status, inhaltstyp, 'not-json', 'unknown');
|
|
245
244
|
}
|
|
246
245
|
throw new errors_js_1.KasseneckApiError(fehlerName, 'Route fehlt: die Antwort ist eine HTML-Seite statt des Backends', {}, 'route_missing');
|
|
@@ -258,8 +257,7 @@ function createCore(options) {
|
|
|
258
257
|
// Ab hier kam HTTP 200 mit Kennzeichen: der `/v3`-Rand hat den Aufruf
|
|
259
258
|
// gesehen. Ist der Rumpf dann unlesbar (gekuerzt von einem Proxy,
|
|
260
259
|
// abgebrochene Verbindung), kann ein Handler mit Wirkung gelaufen sein.
|
|
261
|
-
|
|
262
|
-
return auswerten(koerper, fehlerName, antwort.status, inhaltstyp, geheimnisse, unlesbar);
|
|
260
|
+
return auswerten(koerper, fehlerName, antwort.status, inhaltstyp, geheimnisse, nachDemSenden);
|
|
263
261
|
}
|
|
264
262
|
finally {
|
|
265
263
|
// Ohne Abraeumen haelt der Wecker den Node-Prozess bis zum Zeitlimit wach.
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { ReceiptType, type ReceiptTypeKey, VatRate, type VatRateKey, KeckPaymentMethod, type KeckPaymentMethodKey, CreditCardProvider, type CreditCardProviderKey, VoucherType, type VoucherTypeKey, VoucherAction, type VoucherActionKey, StripeLinkMode, type StripeLinkModeKey, } from './enums/index.js';
|
|
2
2
|
export { type ReceiptItem, type ReceiptItemPayload, type ReceiptItemPayloadRead, toReceiptItemPayload, fromReceiptItemPayload, receiptItemTotalCents, receiptItemIsValid, negateReceiptItem, type TipRecipient, isTipItem, type Voucher, type VoucherPayload, toVoucherPayload, fromVoucherPayload, voucherIsValid, type Receipt, type RegistrationInfo, type ReceiptPayload, type ReceiptPayloadRead, toReceiptPayload, fromReceiptPayload, receiptSubSumCents, receiptSumCents, type CancellationOf, type CancellationItem, type Cancellation, type CancellationReason, type CancellationErrorCode, type CancellationStatus, type ReturnDisposition, RETURN_DISPOSITIONS, CANCELLATION_REASONS, CANCELLATION_STATUSES, CANCELLATION_ERROR_CODES, CANCELLATION_RESERVATION_MS, isCancellationReason, isReturnDisposition, isCancellationErrorCode, cancellationErrorCode, isCancellationError, cancellationFieldErrors, type CancellationFieldError, type ReceiptPayment, type ReceiptPaymentPayload, type ReceiptPaymentInput, fromReceiptPaymentPayload, toReceiptPaymentPayload, type PaymentErrorCode, PAYMENT_ERROR_CODES, isPaymentErrorCode, paymentErrorCode, isPaymentError, paymentFieldErrors, type PaymentFieldError, type ReceiptEmailErrorCode, type ReceiptEmailVia, RECEIPT_EMAIL_ERROR_CODES, RECEIPT_EMAIL_SEND_ERROR_CODES, type ReceiptEmailSendErrorCode, RECEIPT_EMAIL_VIAS, isReceiptEmailErrorCode, receiptEmailErrorCode, isReceiptEmailError, receiptEmailFieldErrors, type ReceiptEmailFieldError, type ReceiptErrorCode, type ReceiptFieldError, RECEIPT_ERROR_CODES, isReceiptErrorCode, receiptErrorCode, isReceiptError, receiptFieldErrors, remainingQuantities, type ReceiptCompany, type ReceiptCompanyPayload, fromReceiptCompanyPayload, receiptCompanyTaxInfo, type Cashregister, type CashregisterOnboarding, type CashregisterPayload, type CashregisterOnboardingPayload, fromCashregisterPayload, type ReceiptSummary, type ReceiptSummaryPayload, fromReceiptSummaryPayload, type ZeroKind, ZERO_KINDS, isZeroKind, type ReportMonth, reportMonthFromDate, previousReportMonth, nextReportMonth, reportMonthKey, reportMonthReadable, type StripeUrlSession, type StripeUrlSessionPayload, toStripeUrlSessionPayload, fromStripeUrlSessionPayload, type HobexReceipt, type HobexReceiptPayload, toHobexReceiptPayload, fromHobexReceiptPayload, hobexReceiptToCardPaymentData, hobexReceiptNeedsSignature, } from './models/index.js';
|
|
3
|
-
export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type RegisterUserAuthOptions, apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type KasseneckTransport, type KasseneckBinaryTransport, ALL_CALLS, type ApiCall, PUBLIC_CALLS, POS_CALLS, type PublicCall, type PosCall, createTransport, createBinaryTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, type ErrorOutcome, CLIENT_ERROR_CODES, type ClientErrorCode, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CancelReceiptResult, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, listMyCashregisters, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, downloadDailyReport, downloadMonthlyReport, getReportV2, type ReportV2, type ReportV2Metadata, type ReportV2Options, type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, type KasseneckApi, createKasseneckApi, } from './client/index.js';
|
|
3
|
+
export { type AuthCredentials, type KasseneckAuth, type ApiKeyAuthOptions, type RegisterUserAuthOptions, apiKeyAuth, registerUserAuth, DEFAULT_BASE_URL, POS_BASE_URL, DEFAULT_TIMEOUT_MS, type HttpResponseLike, type HttpRequestInit, type FetchLike, type TransportOptions, type TransportBodyFields, type TransportCallOptions, type KasseneckTransport, type KasseneckBinaryTransport, ALL_CALLS, type ApiCall, PUBLIC_CALLS, POS_CALLS, UNKNOWN_OUTCOME_CALLS, type PublicCall, type PosCall, createTransport, createBinaryTransport, KasseneckApiError, KasseneckAuthError, KasseneckHttpError, KasseneckNetworkError, KasseneckValidationError, type ValidationScope, type KasseneckError, type HttpFailureReason, type CauseDigest, type ErrorOutcome, CLIENT_ERROR_CODES, type ClientErrorCode, isKasseneckApiError, isKasseneckAuthError, isKasseneckHttpError, isKasseneckNetworkError, isKasseneckValidationError, isOutcomeUnknown, type ReceiptCommonOptions, type SellReceiptOptions, type TipOptions, type TipRecipientShare, type CancelReceiptOptions, type CancelReceiptResult, type ReceiptWithCompany, sellReceipt, sellReceiptWithCompany, paymentsExpectedCents, cardRefundReference, receiptLayoutFromResult, cancelReceipt, zeroReceipt, getReceipt, getReceiptWithCompany, generateFullReceiptId, getFirstReceiptDate, listMyReceipts, type ListMyReceiptsOptions, type ReceiptList, type ReceiptListStats, listMyCashregisters, checkVoucherCombinationError, type SendReceiptEmailOptions, type SendReceiptEmailResult, sendReceiptEmail, downloadDailyReport, downloadMonthlyReport, getReportV2, type ReportV2, type ReportV2Metadata, type ReportV2Options, type CashboxStatus, type SignatureStatus, getCashboxStatus, getSignatureStatus, type KasseneckApi, createKasseneckApi, } from './client/index.js';
|
|
4
4
|
export { type ReceiptDueTip, type ReceiptDueTipRecipient, type ReceiptDueOptions, type ReceiptDueBuckets, type ReceiptDueBreakdown, type ReceiptDueErrorReason, receiptDueCents, receiptDueBreakdown, ReceiptDueError, RECEIPT_DUE_ERROR_REASONS, isReceiptDueError, } from './receipt/due.js';
|
|
5
5
|
export { parseServerTimeStamp, toViennaWallClock, type ViennaWallClock } from './vienna-time.js';
|
|
6
6
|
export { type PosBusinessSettings, type PosDeviceSettings, type PosSettings, type ArticleGroup, type PosArticle, POS_BUSINESS_DEFAULTS, POS_DEVICE_DEFAULTS, mergePosSettings, fromArticleGroupPayload, fromPosArticlePayload, listMyArticleGroups, listMyArticles, getPosSettings, setMyPosSettings, setMyRegisterDeviceSettings, distributeDiscount, cancelScopeOf, receiptsScopeOf, stockViewOf, } from './pos/index.js';
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.receiptFieldErrors = exports.isReceiptError = exports.receiptErrorCode = exports.isReceiptErrorCode = exports.RECEIPT_ERROR_CODES = exports.receiptEmailFieldErrors = exports.isReceiptEmailError = exports.receiptEmailErrorCode = exports.isReceiptEmailErrorCode = exports.RECEIPT_EMAIL_VIAS = exports.RECEIPT_EMAIL_SEND_ERROR_CODES = exports.RECEIPT_EMAIL_ERROR_CODES = exports.paymentFieldErrors = exports.isPaymentError = exports.paymentErrorCode = exports.isPaymentErrorCode = exports.PAYMENT_ERROR_CODES = exports.toReceiptPaymentPayload = exports.fromReceiptPaymentPayload = exports.cancellationFieldErrors = exports.isCancellationError = exports.cancellationErrorCode = exports.isCancellationErrorCode = exports.isReturnDisposition = exports.isCancellationReason = exports.CANCELLATION_RESERVATION_MS = exports.CANCELLATION_ERROR_CODES = exports.CANCELLATION_STATUSES = exports.CANCELLATION_REASONS = exports.RETURN_DISPOSITIONS = exports.receiptSumCents = exports.receiptSubSumCents = exports.fromReceiptPayload = exports.toReceiptPayload = exports.voucherIsValid = exports.fromVoucherPayload = exports.toVoucherPayload = exports.isTipItem = exports.negateReceiptItem = exports.receiptItemIsValid = exports.receiptItemTotalCents = exports.fromReceiptItemPayload = exports.toReceiptItemPayload = exports.StripeLinkMode = exports.VoucherAction = exports.VoucherType = exports.CreditCardProvider = exports.KeckPaymentMethod = exports.VatRate = exports.ReceiptType = void 0;
|
|
4
|
-
exports.
|
|
5
|
-
exports.stockViewOf = exports.receiptsScopeOf = exports.cancelScopeOf = exports.distributeDiscount = exports.setMyRegisterDeviceSettings = exports.setMyPosSettings = exports.getPosSettings = exports.listMyArticles = exports.listMyArticleGroups = exports.fromPosArticlePayload = exports.fromArticleGroupPayload = exports.mergePosSettings = exports.POS_DEVICE_DEFAULTS = exports.POS_BUSINESS_DEFAULTS = exports.toViennaWallClock = exports.parseServerTimeStamp = exports.isReceiptDueError = exports.RECEIPT_DUE_ERROR_REASONS = exports.ReceiptDueError = exports.receiptDueBreakdown = exports.receiptDueCents = exports.createKasseneckApi = exports.getSignatureStatus = exports.getCashboxStatus = exports.getReportV2 = exports.downloadMonthlyReport = exports.downloadDailyReport = exports.sendReceiptEmail = exports.checkVoucherCombinationError = exports.listMyCashregisters = exports.listMyReceipts = exports.getFirstReceiptDate = void 0;
|
|
4
|
+
exports.getReceiptWithCompany = exports.getReceipt = exports.zeroReceipt = exports.cancelReceipt = exports.receiptLayoutFromResult = exports.cardRefundReference = exports.paymentsExpectedCents = exports.sellReceiptWithCompany = exports.sellReceipt = exports.isOutcomeUnknown = exports.isKasseneckValidationError = exports.isKasseneckNetworkError = exports.isKasseneckHttpError = exports.isKasseneckAuthError = exports.isKasseneckApiError = exports.CLIENT_ERROR_CODES = exports.KasseneckValidationError = exports.KasseneckNetworkError = exports.KasseneckHttpError = exports.KasseneckAuthError = exports.KasseneckApiError = exports.createBinaryTransport = exports.createTransport = exports.UNKNOWN_OUTCOME_CALLS = exports.POS_CALLS = exports.PUBLIC_CALLS = exports.ALL_CALLS = exports.DEFAULT_TIMEOUT_MS = exports.POS_BASE_URL = exports.DEFAULT_BASE_URL = exports.registerUserAuth = exports.apiKeyAuth = exports.hobexReceiptNeedsSignature = exports.hobexReceiptToCardPaymentData = exports.fromHobexReceiptPayload = exports.toHobexReceiptPayload = exports.fromStripeUrlSessionPayload = exports.toStripeUrlSessionPayload = exports.reportMonthReadable = exports.reportMonthKey = exports.nextReportMonth = exports.previousReportMonth = exports.reportMonthFromDate = exports.isZeroKind = exports.ZERO_KINDS = exports.fromReceiptSummaryPayload = exports.fromCashregisterPayload = exports.receiptCompanyTaxInfo = exports.fromReceiptCompanyPayload = exports.remainingQuantities = void 0;
|
|
5
|
+
exports.stockViewOf = exports.receiptsScopeOf = exports.cancelScopeOf = exports.distributeDiscount = exports.setMyRegisterDeviceSettings = exports.setMyPosSettings = exports.getPosSettings = exports.listMyArticles = exports.listMyArticleGroups = exports.fromPosArticlePayload = exports.fromArticleGroupPayload = exports.mergePosSettings = exports.POS_DEVICE_DEFAULTS = exports.POS_BUSINESS_DEFAULTS = exports.toViennaWallClock = exports.parseServerTimeStamp = exports.isReceiptDueError = exports.RECEIPT_DUE_ERROR_REASONS = exports.ReceiptDueError = exports.receiptDueBreakdown = exports.receiptDueCents = exports.createKasseneckApi = exports.getSignatureStatus = exports.getCashboxStatus = exports.getReportV2 = exports.downloadMonthlyReport = exports.downloadDailyReport = exports.sendReceiptEmail = exports.checkVoucherCombinationError = exports.listMyCashregisters = exports.listMyReceipts = exports.getFirstReceiptDate = exports.generateFullReceiptId = void 0;
|
|
6
6
|
var index_js_1 = require("./enums/index.js");
|
|
7
7
|
Object.defineProperty(exports, "ReceiptType", { enumerable: true, get: function () { return index_js_1.ReceiptType; } });
|
|
8
8
|
Object.defineProperty(exports, "VatRate", { enumerable: true, get: function () { return index_js_1.VatRate; } });
|
|
@@ -82,6 +82,7 @@ Object.defineProperty(exports, "DEFAULT_TIMEOUT_MS", { enumerable: true, get: fu
|
|
|
82
82
|
Object.defineProperty(exports, "ALL_CALLS", { enumerable: true, get: function () { return index_js_3.ALL_CALLS; } });
|
|
83
83
|
Object.defineProperty(exports, "PUBLIC_CALLS", { enumerable: true, get: function () { return index_js_3.PUBLIC_CALLS; } });
|
|
84
84
|
Object.defineProperty(exports, "POS_CALLS", { enumerable: true, get: function () { return index_js_3.POS_CALLS; } });
|
|
85
|
+
Object.defineProperty(exports, "UNKNOWN_OUTCOME_CALLS", { enumerable: true, get: function () { return index_js_3.UNKNOWN_OUTCOME_CALLS; } });
|
|
85
86
|
Object.defineProperty(exports, "createTransport", { enumerable: true, get: function () { return index_js_3.createTransport; } });
|
|
86
87
|
Object.defineProperty(exports, "createBinaryTransport", { enumerable: true, get: function () { return index_js_3.createBinaryTransport; } });
|
|
87
88
|
Object.defineProperty(exports, "KasseneckApiError", { enumerable: true, get: function () { return index_js_3.KasseneckApiError; } });
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Fassade ueber den Aufrufen der Lager-API
|
|
3
|
-
* rufen. Wie [createInvoiceApi] bewusst keine Klasse; die Aufrufe sind freie
|
|
2
|
+
* Fassade ueber den Aufrufen der Lager-API (lesen, Webhooks, schreiben,
|
|
3
|
+
* reservieren): Schluessel einmal binden, dann rufen. Wie [createInvoiceApi] bewusst keine Klasse; die Aufrufe sind freie
|
|
4
4
|
* Funktionen (endpunkte.ts) und bleiben einzeln importierbar.
|
|
5
5
|
*/
|
|
6
6
|
import { type FetchLike } from '../client/transport.js';
|
|
7
|
-
import type { Article, ArticleListQuery, ArticleLookup, ArticlePage, CreateInventoryWebhookOptions, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookList, InventoryWebhookPatch, InventoryWebhookTestResult, InventoryWebhookWithSecret, Location, StockLevel, StockListQuery, StockMovement, StockMovementPage, StockMovementQuery, StockPage, StockResult } from './typen.js';
|
|
7
|
+
import type { Article, ChangeStockConditionRequest, CreateArticleRequest, CreateReservationRequest, DeactivateArticleRequest, ExtendReservationRequest, GoodsReceiptPreview, GoodsReceiptPreviewRequest, ReceiveGoodsRequest, RecordStockLossRequest, ReleaseReservationRequest, Reservation, ReservationListQuery, ReservationPage, ReverseStockMovementRequest, StockOperation, TransferStockRequest, UpdateArticleRequest, ArticleListQuery, ArticleLookup, ArticlePage, CreateInventoryWebhookOptions, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookList, InventoryWebhookPatch, InventoryWebhookTestResult, InventoryWebhookWithSecret, Location, StockLevel, StockListQuery, StockMovement, StockMovementPage, StockMovementQuery, StockPage, StockResult } from './typen.js';
|
|
8
8
|
import type { InventoryWebhookEventType } from './vertrag.js';
|
|
9
9
|
export interface InventoryClientOptions {
|
|
10
10
|
/** `api_key` des Kontos (`kr_live_…` / `kr_test_…`). Gehoert auf einen Server. */
|
|
@@ -41,5 +41,21 @@ export interface InventoryClient {
|
|
|
41
41
|
webhookId?: string;
|
|
42
42
|
limit?: number;
|
|
43
43
|
}): Promise<InventoryWebhookDelivery[]>;
|
|
44
|
+
createArticle(request: CreateArticleRequest): Promise<Article>;
|
|
45
|
+
updateArticle(request: UpdateArticleRequest): Promise<Article>;
|
|
46
|
+
deactivateArticle(request: DeactivateArticleRequest): Promise<Article>;
|
|
47
|
+
receiveGoods(request: ReceiveGoodsRequest): Promise<StockOperation>;
|
|
48
|
+
/** `receiveGoods` mit `dryRun: true`: rechnet, schreibt nichts, Schluessel freigestellt. */
|
|
49
|
+
previewGoodsReceipt(request: GoodsReceiptPreviewRequest): Promise<GoodsReceiptPreview>;
|
|
50
|
+
transferStock(request: TransferStockRequest): Promise<StockOperation>;
|
|
51
|
+
recordStockLoss(request: RecordStockLossRequest): Promise<StockOperation>;
|
|
52
|
+
changeStockCondition(request: ChangeStockConditionRequest): Promise<StockOperation>;
|
|
53
|
+
reverseStockMovement(request: ReverseStockMovementRequest): Promise<StockOperation>;
|
|
54
|
+
createReservation(request: CreateReservationRequest): Promise<Reservation>;
|
|
55
|
+
extendReservation(request: ExtendReservationRequest): Promise<Reservation>;
|
|
56
|
+
releaseReservation(request: ReleaseReservationRequest): Promise<Reservation>;
|
|
57
|
+
getReservation(reservationId: string): Promise<Reservation>;
|
|
58
|
+
listReservations(query?: ReservationListQuery): Promise<ReservationPage>;
|
|
59
|
+
iterateReservations(query?: ReservationListQuery): AsyncGenerator<Reservation, void, undefined>;
|
|
44
60
|
}
|
|
45
61
|
export declare function createInventoryClient(options: InventoryClientOptions): InventoryClient;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Fassade ueber den Aufrufen der Lager-API
|
|
4
|
-
* rufen. Wie [createInvoiceApi] bewusst keine Klasse; die Aufrufe sind freie
|
|
3
|
+
* Fassade ueber den Aufrufen der Lager-API (lesen, Webhooks, schreiben,
|
|
4
|
+
* reservieren): Schluessel einmal binden, dann rufen. Wie [createInvoiceApi] bewusst keine Klasse; die Aufrufe sind freie
|
|
5
5
|
* Funktionen (endpunkte.ts) und bleiben einzeln importierbar.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -9,6 +9,7 @@ exports.createInventoryClient = createInventoryClient;
|
|
|
9
9
|
const transport_js_1 = require("../client/transport.js");
|
|
10
10
|
const auth_js_1 = require("./auth.js");
|
|
11
11
|
const endpunkte_js_1 = require("./endpunkte.js");
|
|
12
|
+
const schreiben_js_1 = require("./schreiben.js");
|
|
12
13
|
function createInventoryClient(options) {
|
|
13
14
|
const rufen = (0, transport_js_1.createTransport)({
|
|
14
15
|
auth: (0, auth_js_1.inventoryKeyAuth)({ apiKey: options.apiKey }),
|
|
@@ -34,5 +35,20 @@ function createInventoryClient(options) {
|
|
|
34
35
|
sendWebhookTest: (id, event) => (0, endpunkte_js_1.sendWebhookTest)(rufen, id, event),
|
|
35
36
|
rotateWebhookSecret: (id) => (0, endpunkte_js_1.rotateWebhookSecret)(rufen, id),
|
|
36
37
|
listWebhookDeliveries: (o) => (0, endpunkte_js_1.listWebhookDeliveries)(rufen, o),
|
|
38
|
+
createArticle: (r) => (0, schreiben_js_1.createArticle)(rufen, r),
|
|
39
|
+
updateArticle: (r) => (0, schreiben_js_1.updateArticle)(rufen, r),
|
|
40
|
+
deactivateArticle: (r) => (0, schreiben_js_1.deactivateArticle)(rufen, r),
|
|
41
|
+
receiveGoods: (r) => (0, schreiben_js_1.receiveGoods)(rufen, r),
|
|
42
|
+
previewGoodsReceipt: (r) => (0, schreiben_js_1.previewGoodsReceipt)(rufen, r),
|
|
43
|
+
transferStock: (r) => (0, schreiben_js_1.transferStock)(rufen, r),
|
|
44
|
+
recordStockLoss: (r) => (0, schreiben_js_1.recordStockLoss)(rufen, r),
|
|
45
|
+
changeStockCondition: (r) => (0, schreiben_js_1.changeStockCondition)(rufen, r),
|
|
46
|
+
reverseStockMovement: (r) => (0, schreiben_js_1.reverseStockMovement)(rufen, r),
|
|
47
|
+
createReservation: (r) => (0, schreiben_js_1.createReservation)(rufen, r),
|
|
48
|
+
extendReservation: (r) => (0, schreiben_js_1.extendReservation)(rufen, r),
|
|
49
|
+
releaseReservation: (r) => (0, schreiben_js_1.releaseReservation)(rufen, r),
|
|
50
|
+
getReservation: (id) => (0, schreiben_js_1.getReservation)(rufen, id),
|
|
51
|
+
listReservations: (q) => (0, schreiben_js_1.listReservations)(rufen, q),
|
|
52
|
+
iterateReservations: (q) => (0, schreiben_js_1.iterateReservations)(rufen, q),
|
|
37
53
|
};
|
|
38
54
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Die Aufrufe der Lager-API: Artikel, Standorte, Bestand und Bewegungen
|
|
3
|
-
* lesen, Konto-Webhooks verwalten (Backend Stufe 5a).
|
|
3
|
+
* lesen, Konto-Webhooks verwalten (Backend Stufe 5a). Die schreibenden
|
|
4
|
+
* Aufrufe (Stufe 5b) stehen in `schreiben.ts` und teilen die Helfer hier.
|
|
4
5
|
*
|
|
5
6
|
* Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln
|
|
6
7
|
* importierbar; die Fassade [createInventoryClient] bindet ihn nur einmal.
|
|
@@ -14,8 +15,26 @@
|
|
|
14
15
|
* wiederholt werden. Bei `rate_limited` vorher `retryAfterSec` warten
|
|
15
16
|
* ([inventoryRetryAfterSec]).
|
|
16
17
|
*/
|
|
17
|
-
import type { InternerTransport } from '../client/aufrufe.js';
|
|
18
|
+
import type { ApiCall, InternerTransport } from '../client/aufrufe.js';
|
|
19
|
+
import { KasseneckValidationError } from '../client/errors.js';
|
|
18
20
|
import type { Article, ArticleListQuery, ArticleLookup, ArticlePage, CreateInventoryWebhookOptions, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookList, InventoryWebhookPatch, InventoryWebhookTestResult, InventoryWebhookWithSecret, Location, StockLevel, StockListQuery, StockMovement, StockMovementPage, StockMovementQuery, StockPage, StockResult } from './typen.js';
|
|
21
|
+
type Params = Record<string, unknown>;
|
|
22
|
+
export declare function anfragefehler(name: ApiCall, grund: string): KasseneckValidationError;
|
|
23
|
+
/** Eine Kennung, die gesendet werden muss: Text mit mindestens einem Zeichen ausser Leerraum. */
|
|
24
|
+
export declare function kennung(name: ApiCall, feld: string, wert: unknown): string;
|
|
25
|
+
/**
|
|
26
|
+
* Die Abfrage einer Liste als Parameter. Unbekannte Felder gehen unveraendert
|
|
27
|
+
* hinaus (der Server weist sie mit `validation` ab), `undefined` faellt weg.
|
|
28
|
+
*/
|
|
29
|
+
export declare function abfrage(name: ApiCall, query: object | undefined): Params;
|
|
30
|
+
/**
|
|
31
|
+
* Blaettert ueber alle Seiten, Eintrag fuer Eintrag. Derselbe Cursor zweimal
|
|
32
|
+
* waere eine Endlosschleife: dann endet die Schleife mit einem Antwortfehler.
|
|
33
|
+
*/
|
|
34
|
+
export declare function seitenweise<T>(name: ApiCall, start: string | undefined, seite: (cursor: string | undefined) => Promise<{
|
|
35
|
+
eintraege: T[];
|
|
36
|
+
nextCursor: string | null;
|
|
37
|
+
}>): AsyncGenerator<T, void, undefined>;
|
|
19
38
|
export declare function getArticle(transport: InternerTransport, articleId: string): Promise<Article>;
|
|
20
39
|
export declare function listArticles(transport: InternerTransport, query?: ArticleListQuery): Promise<ArticlePage>;
|
|
21
40
|
/** Alle Artikel der Abfrage, Seite fuer Seite ueber `nextCursor`. */
|
|
@@ -69,3 +88,4 @@ export declare function listWebhookDeliveries(transport: InternerTransport, opti
|
|
|
69
88
|
webhookId?: string;
|
|
70
89
|
limit?: number;
|
|
71
90
|
}): Promise<InventoryWebhookDelivery[]>;
|
|
91
|
+
export {};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Die Aufrufe der Lager-API: Artikel, Standorte, Bestand und Bewegungen
|
|
4
|
-
* lesen, Konto-Webhooks verwalten (Backend Stufe 5a).
|
|
4
|
+
* lesen, Konto-Webhooks verwalten (Backend Stufe 5a). Die schreibenden
|
|
5
|
+
* Aufrufe (Stufe 5b) stehen in `schreiben.ts` und teilen die Helfer hier.
|
|
5
6
|
*
|
|
6
7
|
* Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln
|
|
7
8
|
* importierbar; die Fassade [createInventoryClient] bindet ihn nur einmal.
|
|
@@ -16,6 +17,10 @@
|
|
|
16
17
|
* ([inventoryRetryAfterSec]).
|
|
17
18
|
*/
|
|
18
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.anfragefehler = anfragefehler;
|
|
21
|
+
exports.kennung = kennung;
|
|
22
|
+
exports.abfrage = abfrage;
|
|
23
|
+
exports.seitenweise = seitenweise;
|
|
19
24
|
exports.getArticle = getArticle;
|
|
20
25
|
exports.listArticles = listArticles;
|
|
21
26
|
exports.iterateArticles = iterateArticles;
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* `KasseneckApiError.code`.
|
|
9
9
|
*/
|
|
10
10
|
import type { KasseneckApiError } from '../client/errors.js';
|
|
11
|
-
import
|
|
11
|
+
import type { InventoryShortfall } from './typen.js';
|
|
12
|
+
import { type InventoryErrorCode, type InventoryRequestErrorCode, type InventoryWarningCode } from './vertrag.js';
|
|
12
13
|
/** Ein Code, den ein Lager-Aufruf liefern kann. */
|
|
13
14
|
export type InventoryApiErrorCode = InventoryErrorCode | InventoryRequestErrorCode;
|
|
14
15
|
export declare function isInventoryErrorCode(value: unknown): value is InventoryApiErrorCode;
|
|
@@ -31,3 +32,12 @@ export declare function inventoryFieldErrors(error: unknown): InventoryFieldErro
|
|
|
31
32
|
* Konto (etwa 20 Anfragen je Sekunde, kurze Spitzen bis 40).
|
|
32
33
|
*/
|
|
33
34
|
export declare function inventoryRetryAfterSec(error: unknown): number | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Die Positionen, fuer die beim Reservieren der verfuegbare Bestand nicht
|
|
37
|
+
* reicht (`insufficient_available`, `data.details[]`): je Artikel und Standort
|
|
38
|
+
* angefragt und verfuegbar, in Tausendstel. Leer, wenn der Fehler ein anderer
|
|
39
|
+
* ist. Es fehlen nur diese Positionen; reserviert wurde nichts.
|
|
40
|
+
*/
|
|
41
|
+
export declare function inventoryShortfalls(error: unknown): InventoryShortfall[];
|
|
42
|
+
/** `true` fuer einen Hinweis-Code einer Buchung (`warnings[].code`); Hinweise sind nie Fehler. */
|
|
43
|
+
export declare function isInventoryWarningCode(value: unknown): value is InventoryWarningCode;
|
|
@@ -14,7 +14,10 @@ exports.inventoryErrorCode = inventoryErrorCode;
|
|
|
14
14
|
exports.isInventoryError = isInventoryError;
|
|
15
15
|
exports.inventoryFieldErrors = inventoryFieldErrors;
|
|
16
16
|
exports.inventoryRetryAfterSec = inventoryRetryAfterSec;
|
|
17
|
+
exports.inventoryShortfalls = inventoryShortfalls;
|
|
18
|
+
exports.isInventoryWarningCode = isInventoryWarningCode;
|
|
17
19
|
const fehlercodes_js_1 = require("../client/fehlercodes.js");
|
|
20
|
+
const lesen_js_1 = require("./lesen.js");
|
|
18
21
|
const vertrag_js_1 = require("./vertrag.js");
|
|
19
22
|
const BEKANNT = new Set([...vertrag_js_1.INVENTORY_ERROR_CODES, ...vertrag_js_1.INVENTORY_REQUEST_ERROR_CODES]);
|
|
20
23
|
function isInventoryErrorCode(value) {
|
|
@@ -45,3 +48,19 @@ function inventoryRetryAfterSec(error) {
|
|
|
45
48
|
const wert = error.details['retryAfterSec'];
|
|
46
49
|
return typeof wert === 'number' && Number.isFinite(wert) && wert >= 0 ? wert : undefined;
|
|
47
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Die Positionen, fuer die beim Reservieren der verfuegbare Bestand nicht
|
|
53
|
+
* reicht (`insufficient_available`, `data.details[]`): je Artikel und Standort
|
|
54
|
+
* angefragt und verfuegbar, in Tausendstel. Leer, wenn der Fehler ein anderer
|
|
55
|
+
* ist. Es fehlen nur diese Positionen; reserviert wurde nichts.
|
|
56
|
+
*/
|
|
57
|
+
function inventoryShortfalls(error) {
|
|
58
|
+
if (inventoryErrorCode(error) !== 'insufficient_available')
|
|
59
|
+
return [];
|
|
60
|
+
return (0, lesen_js_1.fehlmengen)(error.details['details']);
|
|
61
|
+
}
|
|
62
|
+
const HINWEISE = new Set(vertrag_js_1.INVENTORY_WARNING_CODES);
|
|
63
|
+
/** `true` fuer einen Hinweis-Code einer Buchung (`warnings[].code`); Hinweise sind nie Fehler. */
|
|
64
|
+
function isInventoryWarningCode(value) {
|
|
65
|
+
return typeof value === 'string' && HINWEISE.has(value);
|
|
66
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `@kreiseck/kasseneck-api/inventory` – die Lager-API: Artikel, Standorte,
|
|
3
3
|
* Bestand und Lagerprotokoll lesen, Konto-Webhooks verwalten und eingehende
|
|
4
|
-
* Zustellungen pruefen (Backend Stufe 5a)
|
|
4
|
+
* Zustellungen pruefen (Backend Stufe 5a); Artikel anlegen und aendern,
|
|
5
|
+
* Bestand buchen und Ware reservieren (Stufe 5b, seit 1.5.0).
|
|
5
6
|
*
|
|
6
7
|
* Ein eigener Unterpfad wie `invoice`: der `api_key` eines Kontos gehoert auf
|
|
7
8
|
* einen **Server** (etwa das Backend eines Online-Shops) und soll nicht
|
|
@@ -12,8 +13,9 @@
|
|
|
12
13
|
*/
|
|
13
14
|
export { createInventoryClient, type InventoryClient, type InventoryClientOptions } from './api.js';
|
|
14
15
|
export { inventoryKeyAuth, type InventoryKeyAuthOptions } from './auth.js';
|
|
15
|
-
export { isInventoryError, isInventoryErrorCode, inventoryErrorCode, inventoryFieldErrors, inventoryRetryAfterSec, type InventoryApiErrorCode, type InventoryFieldError, } from './fehler.js';
|
|
16
|
+
export { isInventoryError, isInventoryErrorCode, inventoryErrorCode, inventoryFieldErrors, inventoryRetryAfterSec, inventoryShortfalls, isInventoryWarningCode, type InventoryApiErrorCode, type InventoryFieldError, } from './fehler.js';
|
|
16
17
|
export { createWebhook, deleteWebhook, getArticle, getStock, iterateArticles, iterateStock, iterateStockMovements, listArticles, listLocations, listStock, listStockMovements, listWebhookDeliveries, listWebhooks, lookupArticleByCode, rotateWebhookSecret, sendWebhookTest, updateWebhook, } from './endpunkte.js';
|
|
18
|
+
export { changeStockCondition, createArticle, createReservation, deactivateArticle, extendReservation, getReservation, iterateReservations, listReservations, previewGoodsReceipt, receiveGoods, recordStockLoss, releaseReservation, reverseStockMovement, transferStock, updateArticle, } from './schreiben.js';
|
|
17
19
|
export { verifyInventoryWebhookSignature, parseInventoryWebhookEvent, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_EVENT_HEADER, WEBHOOK_DELIVERY_HEADER, WEBHOOK_TOLERANCE_SEC, type VerifyInventoryWebhookOptions, } from './webhook.js';
|
|
18
|
-
export type { Article, ArticleListQuery, ArticleLookup, ArticlePage, CreateInventoryWebhookOptions, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookEnvelope, InventoryWebhookEvent, InventoryWebhookList, InventoryWebhookPatch, InventoryWebhookTestDelivery, InventoryWebhookTestResult, InventoryWebhookWithSecret, Location, LocationAddress, StockBelowMinimumEventData, StockChangedEventData, StockLevel, StockListQuery, StockMovement, StockMovementLot, StockMovementPage, StockMovementQuery, StockMovementSourceRef, StockPage, StockResult, StockValue, } from './typen.js';
|
|
19
|
-
export { INVENTORY_ENDPOINTS, INVENTORY_ERROR_CODES, INVENTORY_REQUEST_ERROR_CODES, INVENTORY_WEBHOOK_EVENTS, INVENTORY_WEBHOOK_ENVELOPE_FIELDS, INVENTORY_WEBHOOK_LIMIT, INVENTORY_LIST_LIMIT_MAX, LOCATION_TYPES, STOCK_MOVEMENT_TYPES, STOCK_MOVEMENT_SOURCES, STOCK_CONDITIONS, STOCK_CHANGE_CAUSES, WEBHOOK_DELIVERY_STATUSES, type InventoryEndpoint, type InventoryErrorCode, type InventoryRequestErrorCode, type InventoryWebhookEventType, type LocationType, type StockMovementType, type StockMovementSource, type StockCondition, type StockChangeCause, type WebhookDeliveryStatus, } from './vertrag.js';
|
|
20
|
+
export type { Article, ArticleInput, ArticleListQuery, ArticleLookup, ArticlePage, ChangeStockConditionRequest, CreateArticleRequest, CreateInventoryWebhookOptions, CreateReservationRequest, DeactivateArticleRequest, ExtendReservationRequest, GoodsReceiptItem, GoodsReceiptPreview, GoodsReceiptPreviewLine, GoodsReceiptPreviewRequest, InventoryShortfall, InventoryWarning, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookEnvelope, InventoryWebhookEvent, InventoryWebhookList, InventoryWebhookPatch, InventoryWebhookTestDelivery, InventoryWebhookTestResult, InventoryWebhookWithSecret, LandedCost, Location, LocationAddress, ReceiveGoodsRequest, RecordStockLossRequest, ReleaseReservationItem, ReleaseReservationRequest, Reservation, ReservationItem, ReservationItemInput, ReservationListQuery, ReservationPage, ReverseStockMovementRequest, StockBelowMinimumEventData, StockChangedEventData, StockItem, StockLevel, StockListQuery, StockMovement, StockMovementLot, StockMovementPage, StockMovementQuery, StockMovementSourceRef, StockOperation, StockPage, StockResult, StockValue, TransferStockRequest, UpdateArticleRequest, } from './typen.js';
|
|
21
|
+
export { INVENTORY_ENDPOINTS, INVENTORY_ERROR_CODES, INVENTORY_REQUEST_ERROR_CODES, INVENTORY_WEBHOOK_EVENTS, INVENTORY_WEBHOOK_ENVELOPE_FIELDS, INVENTORY_WEBHOOK_LIMIT, INVENTORY_LIST_LIMIT_MAX, LOCATION_TYPES, STOCK_MOVEMENT_TYPES, STOCK_MOVEMENT_SOURCES, STOCK_CONDITIONS, STOCK_CHANGE_CAUSES, WEBHOOK_DELIVERY_STATUSES, INVENTORY_WARNING_CODES, STOCK_KINDS, STOCK_LOSS_REASONS, WITHDRAWAL_TYPES, LANDED_COST_TYPES, LANDED_COST_ALLOCATIONS, RESERVATION_STATUSES, INVENTORY_IDEMPOTENCY_KEY_MAX, RESERVATION_MINUTES_MIN, RESERVATION_MINUTES_MAX, type InventoryEndpoint, type InventoryErrorCode, type InventoryRequestErrorCode, type InventoryWebhookEventType, type LocationType, type StockMovementType, type StockMovementSource, type StockCondition, type StockChangeCause, type WebhookDeliveryStatus, type InventoryWarningCode, type StockKind, type StockLossReason, type WithdrawalType, type LandedCostType, type LandedCostAllocation, type ReservationStatus, } from './vertrag.js';
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* `@kreiseck/kasseneck-api/inventory` – die Lager-API: Artikel, Standorte,
|
|
4
4
|
* Bestand und Lagerprotokoll lesen, Konto-Webhooks verwalten und eingehende
|
|
5
|
-
* Zustellungen pruefen (Backend Stufe 5a)
|
|
5
|
+
* Zustellungen pruefen (Backend Stufe 5a); Artikel anlegen und aendern,
|
|
6
|
+
* Bestand buchen und Ware reservieren (Stufe 5b, seit 1.5.0).
|
|
6
7
|
*
|
|
7
8
|
* Ein eigener Unterpfad wie `invoice`: der `api_key` eines Kontos gehoert auf
|
|
8
9
|
* einen **Server** (etwa das Backend eines Online-Shops) und soll nicht
|
|
@@ -12,7 +13,8 @@
|
|
|
12
13
|
* Mikro-Euro; alles Ganzzahlen.
|
|
13
14
|
*/
|
|
14
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.
|
|
16
|
+
exports.INVENTORY_REQUEST_ERROR_CODES = exports.INVENTORY_ERROR_CODES = exports.INVENTORY_ENDPOINTS = exports.WEBHOOK_TOLERANCE_SEC = exports.WEBHOOK_DELIVERY_HEADER = exports.WEBHOOK_EVENT_HEADER = exports.WEBHOOK_SIGNATURE_HEADER = exports.parseInventoryWebhookEvent = exports.verifyInventoryWebhookSignature = exports.updateArticle = exports.transferStock = exports.reverseStockMovement = exports.releaseReservation = exports.recordStockLoss = exports.receiveGoods = exports.previewGoodsReceipt = exports.listReservations = exports.iterateReservations = exports.getReservation = exports.extendReservation = exports.deactivateArticle = exports.createReservation = exports.createArticle = exports.changeStockCondition = exports.updateWebhook = exports.sendWebhookTest = exports.rotateWebhookSecret = exports.lookupArticleByCode = exports.listWebhooks = exports.listWebhookDeliveries = exports.listStockMovements = exports.listStock = exports.listLocations = exports.listArticles = exports.iterateStockMovements = exports.iterateStock = exports.iterateArticles = exports.getStock = exports.getArticle = exports.deleteWebhook = exports.createWebhook = exports.isInventoryWarningCode = exports.inventoryShortfalls = exports.inventoryRetryAfterSec = exports.inventoryFieldErrors = exports.inventoryErrorCode = exports.isInventoryErrorCode = exports.isInventoryError = exports.inventoryKeyAuth = exports.createInventoryClient = void 0;
|
|
17
|
+
exports.RESERVATION_MINUTES_MAX = exports.RESERVATION_MINUTES_MIN = exports.INVENTORY_IDEMPOTENCY_KEY_MAX = exports.RESERVATION_STATUSES = exports.LANDED_COST_ALLOCATIONS = exports.LANDED_COST_TYPES = exports.WITHDRAWAL_TYPES = exports.STOCK_LOSS_REASONS = exports.STOCK_KINDS = exports.INVENTORY_WARNING_CODES = exports.WEBHOOK_DELIVERY_STATUSES = exports.STOCK_CHANGE_CAUSES = exports.STOCK_CONDITIONS = exports.STOCK_MOVEMENT_SOURCES = exports.STOCK_MOVEMENT_TYPES = exports.LOCATION_TYPES = exports.INVENTORY_LIST_LIMIT_MAX = exports.INVENTORY_WEBHOOK_LIMIT = exports.INVENTORY_WEBHOOK_ENVELOPE_FIELDS = exports.INVENTORY_WEBHOOK_EVENTS = void 0;
|
|
16
18
|
var api_js_1 = require("./api.js");
|
|
17
19
|
Object.defineProperty(exports, "createInventoryClient", { enumerable: true, get: function () { return api_js_1.createInventoryClient; } });
|
|
18
20
|
var auth_js_1 = require("./auth.js");
|
|
@@ -23,6 +25,8 @@ Object.defineProperty(exports, "isInventoryErrorCode", { enumerable: true, get:
|
|
|
23
25
|
Object.defineProperty(exports, "inventoryErrorCode", { enumerable: true, get: function () { return fehler_js_1.inventoryErrorCode; } });
|
|
24
26
|
Object.defineProperty(exports, "inventoryFieldErrors", { enumerable: true, get: function () { return fehler_js_1.inventoryFieldErrors; } });
|
|
25
27
|
Object.defineProperty(exports, "inventoryRetryAfterSec", { enumerable: true, get: function () { return fehler_js_1.inventoryRetryAfterSec; } });
|
|
28
|
+
Object.defineProperty(exports, "inventoryShortfalls", { enumerable: true, get: function () { return fehler_js_1.inventoryShortfalls; } });
|
|
29
|
+
Object.defineProperty(exports, "isInventoryWarningCode", { enumerable: true, get: function () { return fehler_js_1.isInventoryWarningCode; } });
|
|
26
30
|
var endpunkte_js_1 = require("./endpunkte.js");
|
|
27
31
|
Object.defineProperty(exports, "createWebhook", { enumerable: true, get: function () { return endpunkte_js_1.createWebhook; } });
|
|
28
32
|
Object.defineProperty(exports, "deleteWebhook", { enumerable: true, get: function () { return endpunkte_js_1.deleteWebhook; } });
|
|
@@ -41,6 +45,22 @@ Object.defineProperty(exports, "lookupArticleByCode", { enumerable: true, get: f
|
|
|
41
45
|
Object.defineProperty(exports, "rotateWebhookSecret", { enumerable: true, get: function () { return endpunkte_js_1.rotateWebhookSecret; } });
|
|
42
46
|
Object.defineProperty(exports, "sendWebhookTest", { enumerable: true, get: function () { return endpunkte_js_1.sendWebhookTest; } });
|
|
43
47
|
Object.defineProperty(exports, "updateWebhook", { enumerable: true, get: function () { return endpunkte_js_1.updateWebhook; } });
|
|
48
|
+
var schreiben_js_1 = require("./schreiben.js");
|
|
49
|
+
Object.defineProperty(exports, "changeStockCondition", { enumerable: true, get: function () { return schreiben_js_1.changeStockCondition; } });
|
|
50
|
+
Object.defineProperty(exports, "createArticle", { enumerable: true, get: function () { return schreiben_js_1.createArticle; } });
|
|
51
|
+
Object.defineProperty(exports, "createReservation", { enumerable: true, get: function () { return schreiben_js_1.createReservation; } });
|
|
52
|
+
Object.defineProperty(exports, "deactivateArticle", { enumerable: true, get: function () { return schreiben_js_1.deactivateArticle; } });
|
|
53
|
+
Object.defineProperty(exports, "extendReservation", { enumerable: true, get: function () { return schreiben_js_1.extendReservation; } });
|
|
54
|
+
Object.defineProperty(exports, "getReservation", { enumerable: true, get: function () { return schreiben_js_1.getReservation; } });
|
|
55
|
+
Object.defineProperty(exports, "iterateReservations", { enumerable: true, get: function () { return schreiben_js_1.iterateReservations; } });
|
|
56
|
+
Object.defineProperty(exports, "listReservations", { enumerable: true, get: function () { return schreiben_js_1.listReservations; } });
|
|
57
|
+
Object.defineProperty(exports, "previewGoodsReceipt", { enumerable: true, get: function () { return schreiben_js_1.previewGoodsReceipt; } });
|
|
58
|
+
Object.defineProperty(exports, "receiveGoods", { enumerable: true, get: function () { return schreiben_js_1.receiveGoods; } });
|
|
59
|
+
Object.defineProperty(exports, "recordStockLoss", { enumerable: true, get: function () { return schreiben_js_1.recordStockLoss; } });
|
|
60
|
+
Object.defineProperty(exports, "releaseReservation", { enumerable: true, get: function () { return schreiben_js_1.releaseReservation; } });
|
|
61
|
+
Object.defineProperty(exports, "reverseStockMovement", { enumerable: true, get: function () { return schreiben_js_1.reverseStockMovement; } });
|
|
62
|
+
Object.defineProperty(exports, "transferStock", { enumerable: true, get: function () { return schreiben_js_1.transferStock; } });
|
|
63
|
+
Object.defineProperty(exports, "updateArticle", { enumerable: true, get: function () { return schreiben_js_1.updateArticle; } });
|
|
44
64
|
var webhook_js_1 = require("./webhook.js");
|
|
45
65
|
Object.defineProperty(exports, "verifyInventoryWebhookSignature", { enumerable: true, get: function () { return webhook_js_1.verifyInventoryWebhookSignature; } });
|
|
46
66
|
Object.defineProperty(exports, "parseInventoryWebhookEvent", { enumerable: true, get: function () { return webhook_js_1.parseInventoryWebhookEvent; } });
|
|
@@ -62,3 +82,13 @@ Object.defineProperty(exports, "STOCK_MOVEMENT_SOURCES", { enumerable: true, get
|
|
|
62
82
|
Object.defineProperty(exports, "STOCK_CONDITIONS", { enumerable: true, get: function () { return vertrag_js_1.STOCK_CONDITIONS; } });
|
|
63
83
|
Object.defineProperty(exports, "STOCK_CHANGE_CAUSES", { enumerable: true, get: function () { return vertrag_js_1.STOCK_CHANGE_CAUSES; } });
|
|
64
84
|
Object.defineProperty(exports, "WEBHOOK_DELIVERY_STATUSES", { enumerable: true, get: function () { return vertrag_js_1.WEBHOOK_DELIVERY_STATUSES; } });
|
|
85
|
+
Object.defineProperty(exports, "INVENTORY_WARNING_CODES", { enumerable: true, get: function () { return vertrag_js_1.INVENTORY_WARNING_CODES; } });
|
|
86
|
+
Object.defineProperty(exports, "STOCK_KINDS", { enumerable: true, get: function () { return vertrag_js_1.STOCK_KINDS; } });
|
|
87
|
+
Object.defineProperty(exports, "STOCK_LOSS_REASONS", { enumerable: true, get: function () { return vertrag_js_1.STOCK_LOSS_REASONS; } });
|
|
88
|
+
Object.defineProperty(exports, "WITHDRAWAL_TYPES", { enumerable: true, get: function () { return vertrag_js_1.WITHDRAWAL_TYPES; } });
|
|
89
|
+
Object.defineProperty(exports, "LANDED_COST_TYPES", { enumerable: true, get: function () { return vertrag_js_1.LANDED_COST_TYPES; } });
|
|
90
|
+
Object.defineProperty(exports, "LANDED_COST_ALLOCATIONS", { enumerable: true, get: function () { return vertrag_js_1.LANDED_COST_ALLOCATIONS; } });
|
|
91
|
+
Object.defineProperty(exports, "RESERVATION_STATUSES", { enumerable: true, get: function () { return vertrag_js_1.RESERVATION_STATUSES; } });
|
|
92
|
+
Object.defineProperty(exports, "INVENTORY_IDEMPOTENCY_KEY_MAX", { enumerable: true, get: function () { return vertrag_js_1.INVENTORY_IDEMPOTENCY_KEY_MAX; } });
|
|
93
|
+
Object.defineProperty(exports, "RESERVATION_MINUTES_MIN", { enumerable: true, get: function () { return vertrag_js_1.RESERVATION_MINUTES_MIN; } });
|
|
94
|
+
Object.defineProperty(exports, "RESERVATION_MINUTES_MAX", { enumerable: true, get: function () { return vertrag_js_1.RESERVATION_MINUTES_MAX; } });
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* wenn der Server sie sendet: „fehlt“ heisst dort „kein Recht“, nicht „leer“.
|
|
13
13
|
*/
|
|
14
14
|
import { KasseneckValidationError } from '../client/errors.js';
|
|
15
|
-
import type { Article, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookTestDelivery, Location, StockBelowMinimumEventData, StockChangedEventData, StockLevel, StockMovement, StockValue } from './typen.js';
|
|
15
|
+
import type { Article, GoodsReceiptPreviewLine, InventoryShortfall, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookTestDelivery, Location, Reservation, StockBelowMinimumEventData, StockChangedEventData, StockLevel, StockMovement, StockOperation, StockValue } from './typen.js';
|
|
16
16
|
type Roh = Record<string, unknown>;
|
|
17
17
|
/** Ein Leser bekommt den Vorgang (fuer die Meldung) und den Pfad im Rumpf. */
|
|
18
18
|
export interface Ort {
|
|
@@ -31,6 +31,13 @@ export declare function zustellung(ort: Ort, w: unknown): InventoryWebhookDelive
|
|
|
31
31
|
export declare function probeZustellung(ort: Ort, w: unknown, webhookId: string): InventoryWebhookTestDelivery;
|
|
32
32
|
export declare function bestandGeaendert(ort: Ort, w: unknown): StockChangedEventData;
|
|
33
33
|
export declare function unterMindestbestand(ort: Ort, w: unknown): StockBelowMinimumEventData;
|
|
34
|
+
/** Antwort einer Buchung; ohne `operationId` ist nicht belegt, dass gebucht wurde. */
|
|
35
|
+
export declare function vorgang(name: string, daten: unknown): StockOperation;
|
|
36
|
+
/** Eine Zeile der Wareneingangs-Vorschau; Werte nur, wenn der Server sie sendet (Recht `costs`). */
|
|
37
|
+
export declare function vorschauZeile(ort: Ort, w: unknown): GoodsReceiptPreviewLine;
|
|
38
|
+
export declare function reservierung(ort: Ort, w: unknown): Reservation;
|
|
39
|
+
/** Die fehlenden Positionen aus `insufficient_available` (`data.details[]`); ein kaputter Eintrag faellt weg. */
|
|
40
|
+
export declare function fehlmengen(roh: unknown): InventoryShortfall[];
|
|
34
41
|
/** Eine zugesagte Liste `data.<feld>`, Eintrag fuer Eintrag gelesen. */
|
|
35
42
|
export declare function liste<T>(name: string, daten: unknown, feld: string, lesen: (ort: Ort, e: unknown) => T): T[];
|
|
36
43
|
/** Der Cursor der naechsten Seite; `null` am Ende. Etwas anderes als Text oder `null` ist kaputt. */
|