@kreiseck/kasseneck-api 1.5.0 → 1.6.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +124 -0
  2. package/README.md +181 -27
  3. package/dist/cjs/client/aufrufe.d.ts +58 -4
  4. package/dist/cjs/client/aufrufe.js +185 -1
  5. package/dist/cjs/client/errors.d.ts +32 -19
  6. package/dist/cjs/client/errors.js +28 -17
  7. package/dist/cjs/client/index.d.ts +2 -2
  8. package/dist/cjs/client/index.js +2 -1
  9. package/dist/cjs/client/transport.d.ts +27 -1
  10. package/dist/cjs/client/transport.js +25 -27
  11. package/dist/cjs/index.d.ts +1 -1
  12. package/dist/cjs/index.js +3 -2
  13. package/dist/cjs/inventory/api.d.ts +10 -2
  14. package/dist/cjs/inventory/api.js +8 -1
  15. package/dist/cjs/inventory/endpunkte.d.ts +2 -1
  16. package/dist/cjs/inventory/endpunkte.js +2 -1
  17. package/dist/cjs/inventory/index.d.ts +5 -3
  18. package/dist/cjs/inventory/index.js +15 -3
  19. package/dist/cjs/inventory/lesen.d.ts +7 -1
  20. package/dist/cjs/inventory/lesen.js +75 -0
  21. package/dist/cjs/inventory/schreiben.d.ts +26 -1
  22. package/dist/cjs/inventory/schreiben.js +24 -10
  23. package/dist/cjs/inventory/typen.d.ts +156 -2
  24. package/dist/cjs/inventory/varianten.d.ts +67 -0
  25. package/dist/cjs/inventory/varianten.js +150 -0
  26. package/dist/cjs/inventory/vertrag.d.ts +40 -5
  27. package/dist/cjs/inventory/vertrag.js +51 -3
  28. package/dist/cjs/inventory/webhook.d.ts +5 -2
  29. package/dist/cjs/inventory/webhook.js +8 -2
  30. package/dist/cjs/invoice/endpunkte.d.ts +6 -0
  31. package/dist/cjs/invoice/endpunkte.js +13 -2
  32. package/dist/cjs/pos/texte.d.ts +11 -6
  33. package/dist/cjs/pos/texte.js +11 -6
  34. package/dist/cjs/stored/vokabular.d.ts +1 -1
  35. package/dist/cjs/stored/vokabular.js +1 -1
  36. package/dist/cjs/version.d.ts +1 -1
  37. package/dist/cjs/version.js +1 -1
  38. package/dist/esm/client/aufrufe.d.ts +58 -4
  39. package/dist/esm/client/aufrufe.js +183 -0
  40. package/dist/esm/client/errors.d.ts +32 -19
  41. package/dist/esm/client/errors.js +28 -17
  42. package/dist/esm/client/index.d.ts +2 -2
  43. package/dist/esm/client/index.js +1 -1
  44. package/dist/esm/client/transport.d.ts +27 -1
  45. package/dist/esm/client/transport.js +26 -28
  46. package/dist/esm/index.d.ts +1 -1
  47. package/dist/esm/index.js +1 -1
  48. package/dist/esm/inventory/api.d.ts +10 -2
  49. package/dist/esm/inventory/api.js +8 -1
  50. package/dist/esm/inventory/endpunkte.d.ts +2 -1
  51. package/dist/esm/inventory/endpunkte.js +2 -1
  52. package/dist/esm/inventory/index.d.ts +5 -3
  53. package/dist/esm/inventory/index.js +4 -2
  54. package/dist/esm/inventory/lesen.d.ts +7 -1
  55. package/dist/esm/inventory/lesen.js +74 -0
  56. package/dist/esm/inventory/schreiben.d.ts +26 -1
  57. package/dist/esm/inventory/schreiben.js +19 -11
  58. package/dist/esm/inventory/typen.d.ts +156 -2
  59. package/dist/esm/inventory/varianten.d.ts +67 -0
  60. package/dist/esm/inventory/varianten.js +142 -0
  61. package/dist/esm/inventory/vertrag.d.ts +40 -5
  62. package/dist/esm/inventory/vertrag.js +50 -2
  63. package/dist/esm/inventory/webhook.d.ts +5 -2
  64. package/dist/esm/inventory/webhook.js +9 -3
  65. package/dist/esm/invoice/endpunkte.d.ts +6 -0
  66. package/dist/esm/invoice/endpunkte.js +13 -2
  67. package/dist/esm/pos/texte.d.ts +11 -6
  68. package/dist/esm/pos/texte.js +11 -6
  69. package/dist/esm/stored/vokabular.d.ts +1 -1
  70. package/dist/esm/stored/vokabular.js +1 -1
  71. package/dist/esm/version.d.ts +1 -1
  72. package/dist/esm/version.js +1 -1
  73. package/fixtures/hobex-hps-codes.json +1 -1
  74. package/fixtures/invoice-api.schema.json +1 -1
  75. package/fixtures/invoice-texts.json +1 -1
  76. package/fixtures/pos-texts.json +1 -1
  77. package/fixtures/surface.json +85 -6
  78. package/fixtures/v3/antworten/belege.json +1 -1
  79. package/fixtures/v3/antworten/belegmail.json +1 -1
  80. package/fixtures/v3/antworten/kasse-belege.json +1 -1
  81. package/fixtures/v3/antworten/kasse.json +2 -2
  82. package/fixtures/v3/antworten/lager.json +2396 -4
  83. package/fixtures/v3/antworten/rechnungen.json +1 -1
  84. package/fixtures/v3/antworten/storno.json +1 -1
  85. package/fixtures/v3/stored/belege.json +1 -1
  86. package/fixtures/v3/stored/kasse.json +2 -2
  87. package/fixtures/v3/stored/rechnungen.json +1 -1
  88. package/fixtures/v3/v3-vokabular.json +151 -6
  89. package/fixtures/v3/zahlbetrag-faelle.json +1 -1
  90. package/package.json +1 -1
@@ -12,6 +12,12 @@
12
12
  * **Nicht automatisch wiederholen.** Wer nach einem Zeitlimit erneut
13
13
  * ausstellt, tut das mit **demselben** `idempotencyKey`: dann kommt die schon
14
14
  * ausgestellte Rechnung zurueck (`replayed: true`) statt einer zweiten.
15
+ * Jeder Aufruf mit Wirkung (ausstellen, stornieren, gutschreiben, Zahlung
16
+ * nachtragen, Kunde anlegen oder aendern) meldet nach Zeitlimit, Netzfehler,
17
+ * HTTP 5xx oder unlesbarer Antwort `outcome: 'unknown'`: er kann gewirkt
18
+ * haben. Mit Schluessel denselben Schluessel erneut senden, ohne Schluessel
19
+ * (`updateCustomer`, `createCustomer` ohne) erst nachlesen. Lesen und der
20
+ * Probelauf (`previewInvoice`) bleiben `'rejected'`.
15
21
  *
16
22
  * Nach dem Senden wird nichts hart gecastet: fehlt ein zugesagtes Feld, wirft
17
23
  * der Aufruf `KasseneckValidationError` mit `scope:'response'`.
@@ -93,7 +99,10 @@ export async function searchCustomers(transport, search) {
93
99
  }
94
100
  // ---- Rechnungen -------------------------------------------------------------
95
101
  export async function issueInvoice(transport, request) {
96
- const daten = await transport('issueInvoice', nutzlast(request));
102
+ const params = nutzlast(request);
103
+ // Ohne Typen kann `dryRun: true` hier ankommen: dann ist es ein Probelauf
104
+ // ohne Wirkung (sonst: `previewInvoice`).
105
+ const daten = await transport('issueInvoice', params, undefined, undefined, { hasEffect: params['dryRun'] !== true });
97
106
  const ergebnis = {
98
107
  invoice: pflichtObjekt('issueInvoice', daten, 'invoice'),
99
108
  replayed: objekt(daten)['replayed'] === true,
@@ -114,7 +123,9 @@ export async function issueInvoice(transport, request) {
114
123
  * Probelauf und Ausstellen kann sich der Kunde oder das Konto aendern.
115
124
  */
116
125
  export async function previewInvoice(transport, request) {
117
- const daten = await transport('issueInvoice', { ...nutzlast(request), dryRun: true });
126
+ // Ein Probelauf schreibt nichts: nach einem Zeitlimit bleibt er `rejected`,
127
+ // obwohl `issueInvoice` sonst Wirkung hat.
128
+ const daten = await transport('issueInvoice', { ...nutzlast(request), dryRun: true }, undefined, undefined, { hasEffect: false });
118
129
  const ergebnis = { preview: pflichtObjekt('issueInvoice', daten, 'preview') };
119
130
  const notice = hinweise(daten);
120
131
  if (notice)
@@ -661,12 +661,17 @@ export interface ErrorRuleDetail {
661
661
  export declare function findErrorRule(kind: ErrorKind, detail?: ErrorRuleDetail): ErrorRule;
662
662
  /**
663
663
  * Kassen-Aufrufe mit Wirkung, die sich nach einem Netzfehler nicht gefahrlos
664
- * wiederholen lassen: die sechs, deren Ausgang das Paket selbst als unklar
665
- * fuehrt (Beleg, auch Null- und Startbeleg ueber `createReceipt`, Storno,
666
- * FinanzOnline, die drei Geldwege), dazu der Druckjob (zweiter Bon) und die
667
- * Belegmail (zweite Mail). Ob die Anfrage vor dem Abriss schon draussen war,
668
- * sieht das Paket nicht (fetch wirft in beiden Faellen gleich); darum gilt
669
- * hier immer der vorsichtige Satz.
664
+ * wiederholen lassen: Beleg (auch Null- und Startbeleg ueber
665
+ * `createReceipt`), Storno, FinanzOnline, die drei Geldwege, der Druckjob
666
+ * (zweiter Bon) und die Belegmail (zweite Mail). Ob die Anfrage vor dem
667
+ * Abriss schon draussen war, sieht das Paket nicht (fetch wirft in beiden
668
+ * Faellen gleich); darum gilt hier immer der vorsichtige Satz, auch fuer
669
+ * einen Fehler, der vor dem Senden entstand.
670
+ *
671
+ * Seit 1.5.1 fuehrt der Transport jeden Aufruf mit Wirkung als unklar
672
+ * (`UNKNOWN_OUTCOME_CALLS`, eine Obermenge dieser Liste), und
673
+ * [messageOutcome] folgt zuerst ihm. Die Liste bleibt als Vertrag der
674
+ * Kassentexte (`callsWithEffect` in `fixtures/pos-texts.json`) unveraendert.
670
675
  */
671
676
  export declare const CALLS_WITH_EFFECT: readonly ["createReceipt", "cancelReceipt", "financeWebService", "hobexPayApi", "hobexRefundApi", "stripeCaptureIntent", "createPrintJob", "sendReceiptEmail"];
672
677
  /**
@@ -368,12 +368,17 @@ export function findErrorRule(kind, detail = {}) {
368
368
  }
369
369
  /**
370
370
  * Kassen-Aufrufe mit Wirkung, die sich nach einem Netzfehler nicht gefahrlos
371
- * wiederholen lassen: die sechs, deren Ausgang das Paket selbst als unklar
372
- * fuehrt (Beleg, auch Null- und Startbeleg ueber `createReceipt`, Storno,
373
- * FinanzOnline, die drei Geldwege), dazu der Druckjob (zweiter Bon) und die
374
- * Belegmail (zweite Mail). Ob die Anfrage vor dem Abriss schon draussen war,
375
- * sieht das Paket nicht (fetch wirft in beiden Faellen gleich); darum gilt
376
- * hier immer der vorsichtige Satz.
371
+ * wiederholen lassen: Beleg (auch Null- und Startbeleg ueber
372
+ * `createReceipt`), Storno, FinanzOnline, die drei Geldwege, der Druckjob
373
+ * (zweiter Bon) und die Belegmail (zweite Mail). Ob die Anfrage vor dem
374
+ * Abriss schon draussen war, sieht das Paket nicht (fetch wirft in beiden
375
+ * Faellen gleich); darum gilt hier immer der vorsichtige Satz, auch fuer
376
+ * einen Fehler, der vor dem Senden entstand.
377
+ *
378
+ * Seit 1.5.1 fuehrt der Transport jeden Aufruf mit Wirkung als unklar
379
+ * (`UNKNOWN_OUTCOME_CALLS`, eine Obermenge dieser Liste), und
380
+ * [messageOutcome] folgt zuerst ihm. Die Liste bleibt als Vertrag der
381
+ * Kassentexte (`callsWithEffect` in `fixtures/pos-texts.json`) unveraendert.
377
382
  */
378
383
  export const CALLS_WITH_EFFECT = Object.freeze([
379
384
  'createReceipt',
@@ -1,5 +1,5 @@
1
1
  /** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
2
- export declare const VOKABULAR_QUELLE = "d351a778c02888291e325068f96156ad1346859f6ff97bae27f91089e9619e8c";
2
+ export declare const VOKABULAR_QUELLE = "6e6eae018f1e84116d3942cbfd35bc2d5d6f5c5e5551823c7ed88f15ed407744";
3
3
  /** Schema-Notation des Vertrags: Blatt 'aussen': 'innen', Objekt { __: 'innen', ... }, Liste [ { __: 'innen', ... } ]. */
4
4
  export type SchemaEintrag = string | SchemaObjekt | readonly [SchemaObjekt];
5
5
  export interface SchemaObjekt {
@@ -1,7 +1,7 @@
1
1
  // Erzeugt von scripts/stored-vokabular.mjs aus fixtures/v3/v3-vokabular.json.
2
2
  // Nicht von Hand aendern: test/stored.test.ts vergleicht mit dem Vertrag.
3
3
  /** Fingerabdruck des Vertrags-Exports, aus dem diese Datei stammt (`_quelle.sha256`). */
4
- export const VOKABULAR_QUELLE = "d351a778c02888291e325068f96156ad1346859f6ff97bae27f91089e9619e8c";
4
+ export const VOKABULAR_QUELLE = "6e6eae018f1e84116d3942cbfd35bc2d5d6f5c5e5551823c7ed88f15ed407744";
5
5
  /** Schema je Endpunkt (aussen -> innen) und Wertverweise auf die Kataloge. */
6
6
  export const SCHEMAS = {
7
7
  "getReceipt": {
@@ -4,4 +4,4 @@
4
4
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
5
5
  * beim Anheben der Version beide Stellen aendern.
6
6
  */
7
- export declare const PACKAGE_VERSION = "1.5.0";
7
+ export declare const PACKAGE_VERSION = "1.6.0";
@@ -4,4 +4,4 @@
4
4
  * Client-Version, Nachtrag §6). Ein Test haelt sie gleich mit `package.json`;
5
5
  * beim Anheben der Version beide Stellen aendern.
6
6
  */
7
- export const PACKAGE_VERSION = '1.5.0';
7
+ export const PACKAGE_VERSION = '1.6.0';
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.5.0",
2
+ "version": "1.6.0",
3
3
  "measuredOn": {
4
4
  "tid": "3600335",
5
5
  "hpsVersion": "1.10.0",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "title": "Kasseneck Rechnungs-API",
4
4
  "version": 2,
5
- "package": "1.5.0",
5
+ "package": "1.6.0",
6
6
  "endpoints": {
7
7
  "createCustomer": {
8
8
  "request": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.5.0",
2
+ "version": "1.6.0",
3
3
  "languages": [
4
4
  "de",
5
5
  "en"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.5.0",
2
+ "version": "1.6.0",
3
3
  "messages": {
4
4
  "network.no_connection": {
5
5
  "text": "Keine Verbindung zum Server. Bitte die Internetverbindung prüfen und erneut versuchen."
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.5.0",
2
+ "version": "1.6.0",
3
3
  "baseUrls": {
4
4
  "public": "https://api.kasseneck.at/v3",
5
5
  "pos": "https://kasse.kasseneck.at/api/v3"
@@ -81,7 +81,12 @@
81
81
  "extendReservation",
82
82
  "releaseReservation",
83
83
  "getReservation",
84
- "listReservations"
84
+ "listReservations",
85
+ "createVariantGroup",
86
+ "updateVariantGroup",
87
+ "getVariantGroup",
88
+ "listVariantGroups",
89
+ "addVariant"
85
90
  ],
86
91
  "pos": [
87
92
  "cancelReceipt",
@@ -202,7 +207,12 @@
202
207
  "extendReservation",
203
208
  "releaseReservation",
204
209
  "getReservation",
205
- "listReservations"
210
+ "listReservations",
211
+ "createVariantGroup",
212
+ "updateVariantGroup",
213
+ "getVariantGroup",
214
+ "listVariantGroups",
215
+ "addVariant"
206
216
  ],
207
217
  "pos": [
208
218
  "pairRegisterDevice",
@@ -235,6 +245,63 @@
235
245
  "setMyCashregisterStockLocation"
236
246
  ]
237
247
  },
248
+ "unknownOutcomeCalls": [
249
+ "activateCashregister",
250
+ "addVariant",
251
+ "cancelInvoice",
252
+ "cancelReceipt",
253
+ "changeStockCondition",
254
+ "createArticle",
255
+ "createCreditNote",
256
+ "createCustomer",
257
+ "createCustomerCashregister",
258
+ "createInvoiceItem",
259
+ "createPartnerCustomer",
260
+ "createPartnerWebhook",
261
+ "createPrintJob",
262
+ "createReceipt",
263
+ "createReservation",
264
+ "createVariantGroup",
265
+ "createWebhook",
266
+ "deactivateArticle",
267
+ "deletePartnerWebhook",
268
+ "deleteWebhook",
269
+ "extendReservation",
270
+ "financeWebService",
271
+ "hobexPayApi",
272
+ "hobexRefundApi",
273
+ "issueInvoice",
274
+ "pairRegisterDevice",
275
+ "receiveGoods",
276
+ "recordInvoicePayment",
277
+ "recordStockLoss",
278
+ "releaseReservation",
279
+ "reportCustomerContract",
280
+ "requestCustomerSignature",
281
+ "reverseStockMovement",
282
+ "revokeCustomerMandate",
283
+ "rotatePartnerWebhookSecret",
284
+ "rotateWebhookSecret",
285
+ "sendPartnerCustomerFonLink",
286
+ "sendPartnerWebhookTest",
287
+ "sendReceiptEmail",
288
+ "sendWebhookTest",
289
+ "setCustomerMandate",
290
+ "setMyCashregisterStockLocation",
291
+ "setMyKasseLogo",
292
+ "setMyKasseSettings",
293
+ "setMyRegisterDeviceSettings",
294
+ "stripeCaptureIntent",
295
+ "transferStock",
296
+ "unpairRegisterDevice",
297
+ "updateArticle",
298
+ "updateCustomer",
299
+ "updateInvoiceItem",
300
+ "updatePartnerWebhook",
301
+ "updateVariantGroup",
302
+ "updateWebhook",
303
+ "withdrawInvoiceItem"
304
+ ],
238
305
  "enums": {
239
306
  "autoLogoutMinutes": [
240
307
  0,
@@ -1016,7 +1083,12 @@
1016
1083
  "extendReservation",
1017
1084
  "releaseReservation",
1018
1085
  "getReservation",
1019
- "listReservations"
1086
+ "listReservations",
1087
+ "createVariantGroup",
1088
+ "updateVariantGroup",
1089
+ "getVariantGroup",
1090
+ "listVariantGroups",
1091
+ "addVariant"
1020
1092
  ],
1021
1093
  "inventoryErrorCodes": [
1022
1094
  "validation",
@@ -1079,7 +1151,12 @@
1079
1151
  "reason_required",
1080
1152
  "insufficient_available",
1081
1153
  "reservation_not_found",
1082
- "reservation_not_active"
1154
+ "reservation_not_active",
1155
+ "variant_group_not_found",
1156
+ "variant_already_exists",
1157
+ "invalid_variant_attributes",
1158
+ "variant_group_inactive",
1159
+ "variant_limit"
1083
1160
  ],
1084
1161
  "inventoryRequestErrorCodes": [
1085
1162
  "account_not_found",
@@ -1128,7 +1205,9 @@
1128
1205
  "article.deactivated",
1129
1206
  "reservation.expired",
1130
1207
  "reservation.released",
1131
- "reservation.redeemed"
1208
+ "reservation.redeemed",
1209
+ "variant_group.created",
1210
+ "variant_group.updated"
1132
1211
  ],
1133
1212
  "landedCostAllocations": [
1134
1213
  "value",
@@ -2,7 +2,7 @@
2
2
  "_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
3
3
  "_quelle": {
4
4
  "sha256": "61892b91e6a8a0f273dcfdeb63809d92d98fb837a3c0baa782f03b29dd3b8b7a",
5
- "inputsSha256": "b9dd3d819a4be22c35a201a788e7fcf947d90b6af7d9e41d3d74be3b48f8aa8e",
5
+ "inputsSha256": "8490315ac4059c3b26274649b8c3323295b26a6422a02da3a3cc241338cc797b",
6
6
  "backendPackage": "@kreiseck/kasseneck-api@0.33.0",
7
7
  "inputs": [
8
8
  "docs/api/fehlercodes.json",
@@ -2,7 +2,7 @@
2
2
  "_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
3
3
  "_quelle": {
4
4
  "sha256": "265bcf3e14cdea33ec3c4df399eb487d40c0d7793ee23d2ee12bcf664bcad550",
5
- "inputsSha256": "b9dd3d819a4be22c35a201a788e7fcf947d90b6af7d9e41d3d74be3b48f8aa8e",
5
+ "inputsSha256": "8490315ac4059c3b26274649b8c3323295b26a6422a02da3a3cc241338cc797b",
6
6
  "backendPackage": "@kreiseck/kasseneck-api@0.33.0",
7
7
  "inputs": [
8
8
  "docs/api/fehlercodes.json",
@@ -2,7 +2,7 @@
2
2
  "_hinweis": "Vertrags-Export /v3, erzeugt aus den echten Handlern (npm run vertrag:v3 in functions/ und functions-kasse/). Nicht von Hand pflegen.",
3
3
  "_quelle": {
4
4
  "sha256": "aad7147db385e4a6d88ba5fb59d24c04e7e1f01195778aa70ccdc68fb90adcd7",
5
- "inputsSha256": "b9dd3d819a4be22c35a201a788e7fcf947d90b6af7d9e41d3d74be3b48f8aa8e",
5
+ "inputsSha256": "8490315ac4059c3b26274649b8c3323295b26a6422a02da3a3cc241338cc797b",
6
6
  "backendPackage": "@kreiseck/kasseneck-api@0.33.0",
7
7
  "inputs": [
8
8
  "docs/api/fehlercodes.json",
@@ -4,7 +4,7 @@
4
4
  "default": {
5
5
  "sha256": "bf1e7c100e328517c72d5badf31904183efe22d1fddec308e2fe2722068854bc",
6
6
  "head": [],
7
- "inputsSha256": "3a500a9049bc0b7b3955d14e4df69e7c690270bdd6a31071c2ef50f08a9b30cb",
7
+ "inputsSha256": "10b8007647d9d9ba2a1c904b320f1ad5a97f66ab2ae3f4511ba18bfcbd616dea",
8
8
  "backendPackage": "@kreiseck/kasseneck-api@0.33.0",
9
9
  "inputs": [
10
10
  "functions-kasse/test/unit/fixtures/kassen-welt.js",
@@ -24,7 +24,7 @@
24
24
  "channel",
25
25
  "note"
26
26
  ],
27
- "inputsSha256": "d1a29138f9bfdb32a861df2bc101f5be672e182c1387aa4f8f1786ab8de8fcc1",
27
+ "inputsSha256": "35cb1bb7c33a3eb238dd7a4a38ef604df1170e108afb3a8800fbf17ea6d3a3cb",
28
28
  "backendPackage": "@kreiseck/kasseneck-api@0.14.0",
29
29
  "inputs": [
30
30
  "functions-kasse/gemeinsam/api-rand.js",