/** * Die Aufrufe der Lager-API: Artikel, Standorte, Bestand und Bewegungen * lesen, Konto-Webhooks verwalten (Backend Stufe 5a). Die schreibenden * Aufrufe (Stufe 5b) stehen in `schreiben.ts`, die Variantengruppen (Stufe 5c) * in `varianten.ts`; beide teilen die Helfer hier. * * Jede Funktion nimmt den Transport als ersten Parameter und ist einzeln * importierbar; die Fassade [createInventoryClient] bindet ihn nur einmal. * * **Geprueft wird hier nur, was ohne Netz sicher falsch ist** (leere Kennung, * `limit` ausserhalb 1–200, eine Aenderung ohne Feld). Alles Fachliche prueft * der Server und meldet es als `validation` mit `errors[]`; zwei Pruefungen * hiessen zwei Wahrheiten. * * Lesen hat keine Wirkung: nach einem Zeitlimit darf derselbe Aufruf * wiederholt werden. Bei `rate_limited` vorher `retryAfterSec` warten * ([inventoryRetryAfterSec]). */ import type { ApiCall, InternerTransport } from '../client/aufrufe.js'; import { KasseneckValidationError } from '../client/errors.js'; import type { Article, ArticleListQuery, ArticleLookup, ArticlePage, CreateInventoryWebhookOptions, InventoryWebhook, InventoryWebhookDelivery, InventoryWebhookList, InventoryWebhookPatch, InventoryWebhookTestResult, InventoryWebhookWithSecret, Location, StockLevel, StockListQuery, StockMovement, StockMovementPage, StockMovementQuery, StockPage, StockResult } from './typen.js'; type Params = Record; export declare function anfragefehler(name: ApiCall, grund: string): KasseneckValidationError; /** Eine Kennung, die gesendet werden muss: Text mit mindestens einem Zeichen ausser Leerraum. */ export declare function kennung(name: ApiCall, feld: string, wert: unknown): string; /** * Die Abfrage einer Liste als Parameter. Unbekannte Felder gehen unveraendert * hinaus (der Server weist sie mit `validation` ab), `undefined` faellt weg. */ export declare function abfrage(name: ApiCall, query: object | undefined): Params; /** * Blaettert ueber alle Seiten, Eintrag fuer Eintrag. Derselbe Cursor zweimal * waere eine Endlosschleife: dann endet die Schleife mit einem Antwortfehler. */ export declare function seitenweise(name: ApiCall, start: string | undefined, seite: (cursor: string | undefined) => Promise<{ eintraege: T[]; nextCursor: string | null; }>): AsyncGenerator; export declare function getArticle(transport: InternerTransport, articleId: string): Promise
; export declare function listArticles(transport: InternerTransport, query?: ArticleListQuery): Promise; /** Alle Artikel der Abfrage, Seite fuer Seite ueber `nextCursor`. */ export declare function iterateArticles(transport: InternerTransport, query?: ArticleListQuery): AsyncGenerator; /** * Ein aktiver Artikel per Code (`number`, `ean` oder `internalCode`) oder per * eigener Kennung aus `externalIds` (`{ externalSystem: 'shop', externalId: '4711' }`). * Ein stillgelegter Artikel gilt als nicht gefunden (`article_not_found`). */ export declare function lookupArticleByCode(transport: InternerTransport, lookup: ArticleLookup): Promise
; /** Alle Standorte des Kontos, samt aufgeloesten (`active: false`) und dem Hauptstandort. */ export declare function listLocations(transport: InternerTransport): Promise; /** Bestand eines Artikels je Standort. */ export declare function getStock(transport: InternerTransport, articleId: string): Promise; export declare function listStock(transport: InternerTransport, query?: StockListQuery): Promise; /** * Alle Bestandszeilen der Abfrage, Seite fuer Seite. Die Werte (`values`) * stehen je Seite in [listStock]; der Iterator liefert nur die Zeilen. */ export declare function iterateStock(transport: InternerTransport, query?: StockListQuery): AsyncGenerator; /** Das Lagerprotokoll, neueste zuerst. */ export declare function listStockMovements(transport: InternerTransport, query?: StockMovementQuery): Promise; export declare function iterateStockMovements(transport: InternerTransport, query?: StockMovementQuery): AsyncGenerator; /** * Legt einen Webhook an (hoechstens 5 je Konto, `webhook_limit`). * **Das Secret in der Antwort kommt nur dieses eine Mal**; sofort dorthin * schreiben, wo der Empfaenger es liest, nicht in ein Protokoll. */ export declare function createWebhook(transport: InternerTransport, options: CreateInventoryWebhookOptions): Promise; /** Aendert nur die genannten Felder; `description: null` loescht die Beschreibung. */ export declare function updateWebhook(transport: InternerTransport, webhookId: string, patch: InventoryWebhookPatch): Promise; export declare function deleteWebhook(transport: InternerTransport, webhookId: string): Promise<{ webhookId: string; deleted: boolean; }>; /** Die Webhooks des Kontos und die Ereignisse, die es abonnieren kann. */ export declare function listWebhooks(transport: InternerTransport): Promise; /** * Ein neues Secret fuer denselben Webhook. Ab der Antwort gilt nur noch das * neue (keine Uebergangsfrist): erst speichern, dann weiterarbeiten. */ export declare function rotateWebhookSecret(transport: InternerTransport, webhookId: string): Promise; /** * Eine Probe genau dieses Ereignisses an genau diesen Webhook, mit erfundener * Nutzlast und `test: true` in der Huelle. Der Webhook muss das Ereignis * abonnieren (`event_not_subscribed`) und aktiv sein (`webhook_inactive`). */ export declare function sendWebhookTest(transport: InternerTransport, webhookId: string, event: string): Promise; /** Die letzten Zustellungen, neueste zuerst; mit `webhookId` nur die eines Webhooks. */ export declare function listWebhookDeliveries(transport: InternerTransport, options?: { webhookId?: string; limit?: number; }): Promise; export {};