@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 ItemShopwindow.__ITEMSHOP__ = { shopId, apiBase, locale } jest wstrzykiwane automatycznie, więc konfiguracja nie jest potrzebna:
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()zwracaitems,count,subtotal,isEmpty,add(product, qty, variant),remove(productId, variant?)iclear(). Koszyk mieści do 20 pozycji, acheckout()wysyła je wszystkie jako jedną grupę płatności.useCheckout()bierze linie koszyka, wysyła jedenIdempotency-Keyna próbę (podwójne kliknięcie nie utworzy dwóch zamówień), przekierowuje do bramki (redirect: falsewyłącza) i udostępniavalidateDiscount(code).- Dodatkowo:
useRedeemVoucher(),useProduct(slug),usePaymentMethods(),useOrderStatusByNumber({ number, key }),useRecentPurchases(),useTopSpenders(),useMonthlyGoal(),useOnlinePlayers(),useStorefront()(surowy klient) iuseStorefrontQuery(key, fn). initialDataprzyjmuje 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.
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 toItemShopError:
- Ponowienia: GET/HEAD i żądania z
Idempotency-Keyponawiają błędy sieci, timeouty oraz 408/425/429/5xx (2 ponowienia, wykładniczy backoff z jitterem,Retry-Afterdo 5 s). Pozostałe żądania ponawiają tylko 429. Konfiguracja:retry: { retries, baseDelayMs, maxDelayMs }lubretry: false. - Idempotencja:
checkout.createwysyła świeży klucz automatycznie; własny podasz widempotencyKey. - Timeouty: 30 s na próbę (
timeoutMs), upload 5 min. - Anulowanie: każda metoda przyjmuje
{ signal }jako ostatni argument.
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
itemshop dev:
vite.config.ts
CLI
init, dev, deploy, pull.Storefront API
Endpointy pod spodem SDK.