Help us improve
Share bugs, ideas, or general feedback.
From saleor-commerce
Writes GraphQL queries, mutations, subscriptions for Saleor—fragments, TypeScript code generation, TypedDocumentNode, variables, error handling, client setup.
npx claudepluginhub orcaqubits/agentic-commerce-skills-plugins --plugin saleor-commerceHow this skill is triggered — by the user, by Claude, or both
Slash command
/saleor-commerce:graphql-devThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Fetch live docs**:
Works with Saleor GraphQL API: queries, mutations, subscriptions, cursor pagination, filters, JWT auth, errors, Playground, code gen. Use for Saleor e-commerce integrations.
Executes direct GraphQL queries and mutations on Shopify Storefront API for custom storefront data fetching and cart operations when full UI control is needed, not for web components.
Use Shopify GraphQL Admin API for server CRUD on products/orders and Storefront API for client queries on products/cart, with versioning, rate limits, bulk ops, pagination.
Share bugs, ideas, or general feedback.
Fetch live docs:
site:docs.saleor.io api-reference for the current Saleor GraphQL schema and API referencesite:the-guild.dev graphql-codegen for GraphQL Code Generator configuration and pluginssite:graphql.org learn for GraphQL specification fundamentalssaleor GraphQL TypedDocumentNode urql for typed client patternshttps://docs.saleor.io/docs/developer/api-conventions for Saleor-specific GraphQL conventions| Operation | Purpose | Saleor Example |
|---|---|---|
| Query | Read data | Fetch products, orders, categories |
| Mutation | Write data | Create checkout, update product, complete order |
| Subscription | Real-time events | Webhook subscription payloads |
/graphql/ endpointerrors arraychannel argument or HTTP header| Fragment Use Case | Benefit |
|---|---|
| Product fields | Reuse across product list, detail, and search queries |
| Address fields | Share between checkout, order, and customer queries |
| Money fields | Consistent currency/amount selection |
| Error fields | Uniform error handling across mutations |
| Image fields | Consistent image URL and alt text selection |
{TypeName}Fragment (e.g., ProductFragment, AddressFragment)| Concept | Description | Example |
|---|---|---|
| Variable | Dynamic value passed to operation | $id: ID!, $channel: String! |
| Input type | Structured input for mutations | ProductCreateInput, CheckoutCreateInput |
| Required | Non-null variable | $id: ID! (with !) |
| Optional | Nullable variable | $filter: ProductFilterInput |
| Default | Variable with default value | $first: Int = 10 |
| Package | Purpose |
|---|---|
@graphql-codegen/cli | Code generation CLI |
@graphql-codegen/typescript | Generate TypeScript types from schema |
@graphql-codegen/typescript-operations | Generate types for operations |
@graphql-codegen/typed-document-node | Generate TypedDocumentNode objects |
| Setting | Value | Description |
|---|---|---|
schema | Saleor GraphQL endpoint URL | Source of truth for types |
documents | "src/**/*.graphql" or "src/**/*.ts" | Location of operations |
generates | Output file paths | Where to write generated code |
plugins | Array of codegen plugins | Which code to generate |
graphql-codegen after schema changes or when adding new operations| Aspect | Benefit |
|---|---|
| Query result | Fully typed response data |
| Variables | Type-checked at compile time |
| Fragments | Types flow through fragment composition |
| IDE support | Autocomplete for fields and variables |
| Refactoring | Rename detection across operations |
@graphql-codegen/typed-document-node| Error Type | Location | Cause |
|---|---|---|
| GraphQL errors | response.data.mutation.errors[] | Validation, permission, business logic |
| Network errors | Caught by client | Connection failure, timeout, 5xx |
| Schema errors | Build-time (codegen) | Operation doesn't match schema |
| Field | Type | Description |
|---|---|---|
field | String | Which input field caused the error |
message | String | Human-readable error message |
code | Enum | Machine-readable error code |
data.mutation.errors after every mutation| Client | Package | SSR Support | Caching | Best For |
|---|---|---|---|---|
| urql | @urql/core, @urql/next | Yes (via @urql/next) | Document cache, Graphcache | Saleor recommended |
| Apollo Client | @apollo/client | Yes | Normalized cache | Complex caching needs |
| graphql-request | graphql-request | N/A (no cache) | None | Simple scripts, server-side |
| gql (Python) | gql | N/A | None | Python scripts and tests |
Authorization: Bearer <token> header for authenticated operationssaleor-channel: <slug> header for channel-scoped queries| Convention | Example | Benefit |
|---|---|---|
| Prefix with verb | GetProducts, CreateCheckout | Clear intent |
| Suffix queries | ProductListQuery, OrderDetailQuery | Distinguish from mutations |
| Suffix mutations | CheckoutCreateMutation | Distinguish from queries |
| Unique names | No duplicates across codebase | Required by codegen |
Saleor uses Relay-style cursor-based pagination:
| Parameter | Type | Description |
|---|---|---|
first | Int | Number of items from the start |
after | String | Cursor after which to fetch |
last | Int | Number of items from the end |
before | String | Cursor before which to fetch |
| Field | Path | Description |
|---|---|---|
| edges | connection.edges[] | Array of edge objects |
| node | edge.node | The actual entity |
| cursor | edge.cursor | Opaque cursor string |
| pageInfo.hasNextPage | connection.pageInfo | More items forward |
| totalCount | connection.totalCount | Total items matching filter |
first + after for forward pagination (most common)totalCount for large datasets (can be slow)| Method | Tool | Use Case |
|---|---|---|
| Introspection query | Built-in GraphQL client | Development exploration |
| GraphQL Playground | /graphql/ in browser | Interactive schema browser |
| Schema download | graphql-codegen | CI/CD and type generation |
| SDL export | rover graph introspect <url> | Save schema as .graphql file |
| Test Type | Tool | What to Test |
|---|---|---|
| Unit | Vitest, Jest | Operation result parsing, error mapping |
| Integration | Saleor test instance | Full round-trip query/mutation |
| Type check | tsc --noEmit | Generated types match operations |
| Linting | @graphql-eslint/eslint-plugin | Operation naming, fragment usage |
data.mutation.errors after every mutation callfirst/after for list queriessaleor-channel header for channel-scoped operationsgraphql-codegen in CI to catch schema mismatchesFetch the GraphQL documentation for current Saleor schema, code generation setup, and client library configuration before implementing.