Skip to main content
@itemshop/sdk to referencyjne SDK ItemShop: zero zależności runtime, ESM + CJS, działa w przeglądarce, Node.js 20+, Bun, Deno i Cloudflare Workers (poza CLI używa tylko fetch). W pakiecie jest też CLI. @itemshop/sdk re-eksportuje oba wejścia: storefront i klienta.

Instalacja

Storefront (bez klucza)

Na stronie hostowanej przez ItemShop window.__ITEMSHOP__ = { shopId, apiBase, locale } jest wstrzykiwane automatycznie, więc konfiguracja nie jest potrzebna:
Strona nigdy nie dotyka danych płatniczych — checkout.create zwraca redirectUrl do bramki. Gdy pominiesz consents.legalVersion, SDK wyśle bieżącą shop.legal.version; podaj wersję, którą pokazałeś kupującemu, żeby nieaktualna strona dostała LEGAL_DOCUMENTS_CHANGED. Po CAPTCHA_REQUIRED powtórz kasę z captchaToken. Typy (StorefrontShop, StorefrontProduct, CheckoutResult…) są generowane ze specyfikacji Storefront API.

React

  • Hooki współdzielą jedną pamięć podręczną na providera. Podczas SSR nic nie jest pobierane, a koszyk renderuje się pusty na serwerze i w hydracji.
  • useCart() zwraca items, count, subtotal, isEmpty, add(product, qty, variant), remove(productId, variant?) i clear(). Koszyk mieści do 20 pozycji, a checkout() wysyła je wszystkie jako jedną grupę płatności.
  • useCheckout() bierze linie koszyka, wysyła jeden Idempotency-Key na próbę (podwójne kliknięcie nie utworzy dwóch zamówień), przekierowuje do bramki (redirect: false wyłącza) i udostępnia validateDiscount(code).
  • Dodatkowo: useRedeemVoucher(), useProduct(slug), usePaymentMethods(), useOrderStatusByNumber({ number, key }), useRecentPurchases(), useTopSpenders(), useMonthlyGoal(), useOnlinePlayers(), useStorefront() (surowy klient) i useStorefrontQuery(key, fn).
  • initialData przyjmuje migawkę z buildu (await sf.snapshot() czyta /itemshop.data.json).

Klient API (z kluczem)

Tylko po stronie serwera — createClient odmawia startu w przeglądarce (klucz byłby publiczny), chyba że podasz dangerouslyAllowBrowser: true. Uprawnienia klucza: API z kluczem.
Klient obejmuje m.in. products, orders, stats, apiKeys, templates, site (files, draft, revisions, upload, builds, deployments, ai), workspace, agents, skills, scopes.

Błędy, ponowienia, anulowanie

Każda porażka to ItemShopError:
  • Ponowienia: GET/HEAD i żądania z Idempotency-Key ponawiają błędy sieci, timeouty oraz 408/425/429/5xx (2 ponowienia, wykładniczy backoff z jitterem, Retry-After do 5 s). Pozostałe żądania ponawiają tylko 429. Konfiguracja: retry: { retries, baseDelayMs, maxDelayMs } lub retry: false.
  • Idempotencja: checkout.create wysyła świeży klucz automatycznie; własny podasz w idempotencyKey.
  • Timeouty: 30 s na próbę (timeoutMs), upload 5 min.
  • Anulowanie: każda metoda przyjmuje { signal } jako ostatni argument.
Wspólne opcje obu fabryk: apiBase (domyślnie https://itemshop.dev/api/v2), fetch, headers, timeoutMs, retry. Kody błędów i limity: Błędy i limity.

Webhooki

ItemShop nie wysyła podpisanych webhooków — zob. Webhooki (Discord) oraz protokół pluginu dla realizacji zamówień w czasie rzeczywistym.

CLI

Pełny opis: CLI. Masz własny Vite? Dodaj wtyczkę zamiast itemshop dev:
vite.config.ts

CLI

init, dev, deploy, pull.

Storefront API

Endpointy pod spodem SDK.