/** * Fassade ueber den Aufrufen der Lager-API (lesen, Webhooks, schreiben, * reservieren, Varianten, Inventur): Schluessel einmal binden, dann rufen. Wie [createInvoiceApi] bewusst keine Klasse; die Aufrufe sind freie * Funktionen (endpunkte.ts) und bleiben einzeln importierbar. */ import { type FetchLike } from '../client/transport.js'; import type { CancelStocktakeRequest, CloseStocktakeRequest, CloseStocktakeResult, CreateStocktakeRequest, RecordStocktakeCountRequest, RecountStocktakeRequest, ReviewStocktakeRequest, Stocktake, StocktakeCount, StocktakeCountListQuery, StocktakeCountPage, StocktakeCountResult, StocktakeItem, StocktakeItemListQuery, StocktakeItemPage, StocktakeListQuery, StocktakePage, StocktakePdf, VoidStocktakeCountRequest, AddVariantRequest, CreateVariantGroupRequest, UpdateVariantGroupRequest, VariantGroup, VariantGroupListQuery, VariantGroupPage, 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'; import type { InventoryWebhookEventType } from './vertrag.js'; export interface InventoryClientOptions { /** `api_key` des Kontos (`kr_live_…` / `kr_test_…`). Gehoert auf einen Server. */ apiKey: string; /** Abweichende Basis-URL (eigener Proxy); muss auf `/v3` enden. Vorgabe `https://api.kasseneck.at/v3`. */ baseUrl?: string; /** Zeitlimit je Aufruf in Millisekunden. */ timeoutMs?: number; /** Eigene `fetch`-Umsetzung (Tests, Proxys). */ fetch?: FetchLike; } export interface InventoryClient { getArticle(articleId: string): Promise
; listArticles(query?: ArticleListQuery): Promise; /** Alle Artikel der Abfrage ueber `nextCursor`: `for await (const a of client.iterateArticles())`. */ iterateArticles(query?: ArticleListQuery): AsyncGenerator; lookupArticleByCode(lookup: ArticleLookup): Promise
; listLocations(): Promise; getStock(articleId: string): Promise; listStock(query?: StockListQuery): Promise; iterateStock(query?: StockListQuery): AsyncGenerator; listStockMovements(query?: StockMovementQuery): Promise; iterateStockMovements(query?: StockMovementQuery): AsyncGenerator; createWebhook(options: CreateInventoryWebhookOptions): Promise; updateWebhook(webhookId: string, patch: InventoryWebhookPatch): Promise; deleteWebhook(webhookId: string): Promise<{ webhookId: string; deleted: boolean; }>; listWebhooks(): Promise; sendWebhookTest(webhookId: string, event: InventoryWebhookEventType | (string & {})): Promise; rotateWebhookSecret(webhookId: string): Promise; listWebhookDeliveries(options?: { webhookId?: string; limit?: number; }): Promise; createArticle(request: CreateArticleRequest): Promise
; updateArticle(request: UpdateArticleRequest): Promise
; deactivateArticle(request: DeactivateArticleRequest): Promise
; receiveGoods(request: ReceiveGoodsRequest): Promise; /** `receiveGoods` mit `dryRun: true`: rechnet, schreibt nichts, Schluessel freigestellt. */ previewGoodsReceipt(request: GoodsReceiptPreviewRequest): Promise; transferStock(request: TransferStockRequest): Promise; recordStockLoss(request: RecordStockLossRequest): Promise; changeStockCondition(request: ChangeStockConditionRequest): Promise; reverseStockMovement(request: ReverseStockMovementRequest): Promise; createReservation(request: CreateReservationRequest): Promise; extendReservation(request: ExtendReservationRequest): Promise; releaseReservation(request: ReleaseReservationRequest): Promise; getReservation(reservationId: string): Promise; listReservations(query?: ReservationListQuery): Promise; iterateReservations(query?: ReservationListQuery): AsyncGenerator; createVariantGroup(request: CreateVariantGroupRequest): Promise; /** Name, Vorgaben, neue Werte; oder `active: false` (Gruppe und alle Varianten stilllegen, endgueltig). */ updateVariantGroup(request: UpdateVariantGroupRequest): Promise; /** Eine Variante mehr; Antwort: der Artikel wie `createArticle`. */ addVariant(request: AddVariantRequest): Promise
; getVariantGroup(variantGroupId: string): Promise; listVariantGroups(query?: VariantGroupListQuery): Promise; iterateVariantGroups(query?: VariantGroupListQuery): AsyncGenerator; createStocktake(request: CreateStocktakeRequest): Promise; /** Ohne `updatedSince` zuletzt geaenderte zuerst, mit `updatedSince` aufsteigend und inklusive. */ listStocktakes(query?: StocktakeListQuery): Promise; iterateStocktakes(query?: StocktakeListQuery): AsyncGenerator; getStocktake(stocktakeId: string): Promise; listStocktakeItems(query: StocktakeItemListQuery): Promise; iterateStocktakeItems(query: StocktakeItemListQuery): AsyncGenerator; recordStocktakeCount(request: RecordStocktakeCountRequest): Promise; voidStocktakeCount(request: VoidStocktakeCountRequest): Promise; listStocktakeCounts(query: StocktakeCountListQuery): Promise; iterateStocktakeCounts(query: StocktakeCountListQuery): AsyncGenerator; /** Pruefen; die Antwort kommt mit `review.complete: false`, gerechnet wird im Hintergrund. */ reviewStocktake(request: ReviewStocktakeRequest): Promise; recountStocktake(request: RecountStocktakeRequest): Promise; /** Abschliessen; der Server bucht in Teilen weiter (`status: 'closing'`). */ closeStocktake(request: CloseStocktakeRequest): Promise; cancelStocktake(request: CancelStocktakeRequest): Promise; /** Das Inventurprotokoll: die Datei (`kind: 'pdf'`) oder, ueber 9 MiB, ein Lese-Link (`kind: 'download'`). */ getStocktakePdf(stocktakeId: string): Promise; } export declare function createInventoryClient(options: InventoryClientOptions): InventoryClient;