@itemshop/sdk z TypeScript.
Instalacja
Storefront (publiczne, bez sekretów)
Kasa
Strona nigdy nie dotyka danych płatniczych:checkout->create() zwraca redirectUrl (bramka albo strona statusu dla darmowego zamówienia). SDK dodaje losowy Idempotency-Key i ponawia błędy sieci z tym samym kluczem, więc zerwane połączenie nie utworzy dwóch zamówień. Koszyk ma 1–20 pozycji; dwie lub więcej tworzą jedną grupę płatności (->groupId, ->orderIds).
new StorefrontCheckoutDto(items: [new StorefrontCartItemDto(productId: …)], …)). Własny klucz (idempotencyKey:) trzymaj z koszykiem w sesji, by zachować idempotencję między żądaniami; Storefront::newIdempotencyKey() generuje poprawny.
Vouchery i widżety
Klient (klucz API, po stronie serwera)
Klucz utworzysz w panelu: Ustawienia → Klucze API — nadaj tylko potrzebne uprawnienia. Zobacz API z kluczem.shops, team, servers, products, paymentMethods, blacklist, discounts, vouchers, stats, uploads, orders, paymentErrors, site (files, draft, revisions, builds, deployments), templates, agents, skills. Ustawienia i tokeny AI Workspace są tylko dla panelu, więc nie ma ich w kliencie.
Strona: wdrożenie z CI
Błędy
Każdy wyjątek rozszerzaItemShop\Exception\ItemShopException i ma zawsze ustawione $errorCode (UPPER_SNAKE_CASE): kod z backendu, jeśli był, inaczej wyprowadzony ze statusu, inaczej kod SDK (NETWORK_ERROR, TIMEOUT, CONFIG_ERROR, VALIDATION_FAILED). $status wynosi 0, gdy nie było odpowiedzi.
Ponowienia, limity czasu, klient HTTP
GET oraz zapisy zIdempotency-Key (kasa) są ponawiane po błędach sieci i statusach 408/425/429/500/502/503/504; inne zapisy tylko po 429. Backoff wykładniczy od 300 ms, maks. 5 s, z jitterem, z poszanowaniem Retry-After.
Webhooki
Backend nie wysyła jeszcze podpisanych webhooków wychodzących (zamówienia trafiają na Discord i do pluginu) — zob. Webhooki.Webhook implementuje planowany schemat Standard Webhooks (webhook-id, webhook-timestamp, webhook-signature: v1,<base64 HMAC-SHA256>), więc możesz pisać odbiornik już dziś.
Modele
Modele są wItemShop\Model jako klasy final z polami public readonly, generowane z OpenAPI. Model::fromArray() buduje model z formatu camelCase, ->toArray() / json_encode($model) wraca. Pola nieznane SDK trafiają do $model->extra.
Storefront API
Endpointy pod spodem SDK.
Błędy i limity
Kody błędów i limity zapytań.