@doswiftly/storefront-operations 6.1.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +183 -0
- package/CHANGELOG.md +230 -0
- package/README.md +673 -134
- package/fragments.graphql +137 -53
- package/llms-full.txt +4994 -0
- package/mutations.graphql +47 -3
- package/operations.json +3149 -0
- package/package.json +9 -2
- package/queries.graphql +55 -16
- package/schema.graphql +194 -25
package/fragments.graphql
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
# ============================================
|
|
5
5
|
|
|
6
6
|
# ============================================
|
|
7
|
-
# Common
|
|
7
|
+
# Common
|
|
8
8
|
# ============================================
|
|
9
9
|
|
|
10
|
+
# Standard Relay Connection page metadata. Spread on every paginated query's `pageInfo`.
|
|
10
11
|
fragment PageInfo on PageInfo {
|
|
11
12
|
hasNextPage
|
|
12
13
|
hasPreviousPage
|
|
@@ -14,19 +15,21 @@ fragment PageInfo on PageInfo {
|
|
|
14
15
|
endCursor
|
|
15
16
|
}
|
|
16
17
|
|
|
18
|
+
# Generic mutation error envelope — included in every mutation's `userErrors[]` field. Always check before consuming the happy-path payload.
|
|
17
19
|
fragment UserError on UserError {
|
|
18
20
|
message
|
|
19
21
|
code
|
|
20
22
|
field
|
|
21
23
|
}
|
|
22
24
|
|
|
25
|
+
# Non-blocking cart warning (e.g. low stock, partial availability). Cart mutations succeed but surface these for UI hints.
|
|
23
26
|
fragment CartWarning on CartWarning {
|
|
24
27
|
message
|
|
25
28
|
code
|
|
26
29
|
target
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
# Base
|
|
32
|
+
# Base image — original size, no transform. Use for logos, favicons, branding assets that are already sized correctly. ~few KB.
|
|
30
33
|
fragment Image on Image {
|
|
31
34
|
id
|
|
32
35
|
url
|
|
@@ -35,8 +38,7 @@ fragment Image on Image {
|
|
|
35
38
|
height
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
# Thumbnail — cart items, variant swatches, author avatars (rendered
|
|
39
|
-
# No preferredContentType — imgproxy auto-negotiates AVIF/WEBP from Accept header
|
|
41
|
+
# Thumbnail — cart line items, variant swatches, author avatars (rendered ~96px on screen, transform delivers up to 300px for 3x DPI). Includes `thumbhash` for blurred placeholder. Format auto-negotiated from the `Accept` header.
|
|
40
42
|
fragment ImageThumbnail on Image {
|
|
41
43
|
id
|
|
42
44
|
url(transform: { maxWidth: 300 })
|
|
@@ -46,7 +48,7 @@ fragment ImageThumbnail on Image {
|
|
|
46
48
|
thumbhash
|
|
47
49
|
}
|
|
48
50
|
|
|
49
|
-
# Card — product cards, collection/category
|
|
51
|
+
# Card — product cards, collection / category tiles, blog post previews (rendered ~400px, transform delivers up to 800px for 2x DPI). Includes `thumbhash` placeholder.
|
|
50
52
|
fragment ImageCard on Image {
|
|
51
53
|
id
|
|
52
54
|
url(transform: { maxWidth: 800 })
|
|
@@ -56,7 +58,7 @@ fragment ImageCard on Image {
|
|
|
56
58
|
thumbhash
|
|
57
59
|
}
|
|
58
60
|
|
|
59
|
-
# Full — product detail gallery, hero
|
|
61
|
+
# Full — product detail gallery, hero banners (rendered ~800px, transform delivers up to 1600px for 2x DPI). Includes `thumbhash` placeholder.
|
|
60
62
|
fragment ImageFull on Image {
|
|
61
63
|
id
|
|
62
64
|
url(transform: { maxWidth: 1600 })
|
|
@@ -66,19 +68,19 @@ fragment ImageFull on Image {
|
|
|
66
68
|
thumbhash
|
|
67
69
|
}
|
|
68
70
|
|
|
69
|
-
#
|
|
71
|
+
# Plain `{ amount, currencyCode }` price. Use for `compareAtPrice`, totals, and any field where currency conversion transparency is not needed. `amount` is a String.
|
|
70
72
|
fragment Money on Money {
|
|
71
73
|
amount
|
|
72
74
|
currencyCode
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
# Lightweight price for listing views (cards, grids, search results)
|
|
77
|
+
# Lightweight price for listing views (cards, grids, search results) — same shape as `Money`. Spread when full conversion metadata is overkill.
|
|
76
78
|
fragment Price on PriceMoney {
|
|
77
79
|
amount
|
|
78
80
|
currencyCode
|
|
79
81
|
}
|
|
80
82
|
|
|
81
|
-
# Full price with conversion transparency
|
|
83
|
+
# Full price with currency-conversion transparency — adds `baseAmount`, `baseCurrencyCode`, `exchangeRate`, `marginApplied`, `rateTimestamp`, `isConverted`. Spread on PDP / cart / checkout where the customer needs to see the original price + applied conversion.
|
|
82
84
|
fragment PriceMoney on PriceMoney {
|
|
83
85
|
...Price
|
|
84
86
|
baseAmount
|
|
@@ -89,15 +91,17 @@ fragment PriceMoney on PriceMoney {
|
|
|
89
91
|
isConverted
|
|
90
92
|
}
|
|
91
93
|
|
|
94
|
+
# Selected variant option (e.g. `{ name: "Color", value: "Red" }`) on a `ProductVariant`. Use to render variant labels in cart / order summaries.
|
|
92
95
|
fragment SelectedOption on SelectedOption {
|
|
93
96
|
name
|
|
94
97
|
value
|
|
95
98
|
}
|
|
96
99
|
|
|
97
100
|
# ============================================
|
|
98
|
-
#
|
|
101
|
+
# Products
|
|
99
102
|
# ============================================
|
|
100
103
|
|
|
104
|
+
# Single variant of a product — price, compare-at, stock flags, sort, image, selected options. Spread on cart line items, PDP variant selectors, search result rows that need price.
|
|
101
105
|
fragment ProductVariant on ProductVariant {
|
|
102
106
|
id
|
|
103
107
|
title
|
|
@@ -124,8 +128,7 @@ fragment ProductVariant on ProductVariant {
|
|
|
124
128
|
sortOrder
|
|
125
129
|
}
|
|
126
130
|
|
|
127
|
-
# Minimal product
|
|
128
|
-
# Matches template-local ProductCardFields for consistent typing.
|
|
131
|
+
# Minimal product shape for listing views (collection grids, search results, "you may also like"). Includes price range, featured image (card size), rating + review count, vendor, tags. Use for any list of products where you don't need variants/description.
|
|
129
132
|
fragment ProductCard on Product {
|
|
130
133
|
id
|
|
131
134
|
handle
|
|
@@ -157,7 +160,7 @@ fragment ProductCard on Product {
|
|
|
157
160
|
}
|
|
158
161
|
}
|
|
159
162
|
|
|
160
|
-
#
|
|
163
|
+
# `ProductCard` plus textual content (description, descriptionHtml), stock total, type, visibility flags, and timestamps. Use when you need full product copy but not the heavy variants/images lists. Sweet spot for blog post embeds, related-product cards with description.
|
|
161
164
|
fragment ProductBase on Product {
|
|
162
165
|
...ProductCard
|
|
163
166
|
description
|
|
@@ -165,13 +168,13 @@ fragment ProductBase on Product {
|
|
|
165
168
|
stockTotal
|
|
166
169
|
type
|
|
167
170
|
requiresRecipientInfo
|
|
168
|
-
# Faza 1.5 (Decision D-A v3 + D-B)
|
|
169
171
|
visibility
|
|
170
172
|
attributeSetId
|
|
171
173
|
createdAt
|
|
172
174
|
updatedAt
|
|
173
175
|
}
|
|
174
176
|
|
|
177
|
+
# Full product shape for the PDP — `ProductBase` plus the full image gallery (up to 20, full-size) and all variants (up to 100) with their pricing/stock. Spread on the product detail page.
|
|
175
178
|
fragment ProductFull on Product {
|
|
176
179
|
...ProductBase
|
|
177
180
|
images(first: 20) {
|
|
@@ -211,9 +214,10 @@ fragment ProductFull on Product {
|
|
|
211
214
|
}
|
|
212
215
|
|
|
213
216
|
# ============================================
|
|
214
|
-
#
|
|
217
|
+
# Collections
|
|
215
218
|
# ============================================
|
|
216
219
|
|
|
220
|
+
# Collection (manual or rule-based product grouping) — title, description, hero image, SEO. Spread on collection landing pages and collection cards. Does NOT include products — query `collection(id, handle).products` separately for those.
|
|
217
221
|
fragment Collection on Collection {
|
|
218
222
|
id
|
|
219
223
|
handle
|
|
@@ -232,9 +236,10 @@ fragment Collection on Collection {
|
|
|
232
236
|
}
|
|
233
237
|
|
|
234
238
|
# ============================================
|
|
235
|
-
#
|
|
239
|
+
# Categories
|
|
236
240
|
# ============================================
|
|
237
241
|
|
|
242
|
+
# Category node in the shop's taxonomy — name, slug, hero image, depth `level`, materialized `path`, product count, sort order. Spread on category cards and breadcrumb segments. Does NOT include parent / children — query those fields separately and let the server batch them.
|
|
238
243
|
fragment Category on Category {
|
|
239
244
|
id
|
|
240
245
|
name
|
|
@@ -250,9 +255,10 @@ fragment Category on Category {
|
|
|
250
255
|
}
|
|
251
256
|
|
|
252
257
|
# ============================================
|
|
253
|
-
# Customer
|
|
258
|
+
# Customer
|
|
254
259
|
# ============================================
|
|
255
260
|
|
|
261
|
+
# Customer mailing address — full street/city/state/country/postal code with names and phone. `isDefault` flips when this address is the default for shipping. Spread on the address book UI and order summaries.
|
|
256
262
|
fragment MailingAddress on MailingAddress {
|
|
257
263
|
id
|
|
258
264
|
streetLine1
|
|
@@ -270,11 +276,13 @@ fragment MailingAddress on MailingAddress {
|
|
|
270
276
|
isDefault
|
|
271
277
|
}
|
|
272
278
|
|
|
279
|
+
# Customer access token returned by `customerLogin` / `customerSignup` / `customerActivate` / `customerResetPassword` / `customerRefreshToken`. The token's JWT TTL is 24h; cookie max-age is 30d.
|
|
273
280
|
fragment CustomerAccessToken on CustomerAccessToken {
|
|
274
281
|
accessToken
|
|
275
282
|
expiresAt
|
|
276
283
|
}
|
|
277
284
|
|
|
285
|
+
# Customer profile — basic info plus B2B fields (`taxId`, `vatNumber`, `regon`, `companyName`), default address, lifetime stats (`orderCount`, `totalSpent`), marketing preferences. Use on profile / settings pages.
|
|
278
286
|
fragment Customer on Customer {
|
|
279
287
|
id
|
|
280
288
|
email
|
|
@@ -301,6 +309,7 @@ fragment Customer on Customer {
|
|
|
301
309
|
updatedAt
|
|
302
310
|
}
|
|
303
311
|
|
|
312
|
+
# Order summary — number, totals (cost / tax / shipping), payment + fulfillment status, shipping address, item count, lifecycle timestamps. Spread on the order list and order detail pages. Line items are not included here.
|
|
304
313
|
fragment Order on Order {
|
|
305
314
|
id
|
|
306
315
|
orderNumber
|
|
@@ -332,9 +341,10 @@ fragment Order on Order {
|
|
|
332
341
|
}
|
|
333
342
|
|
|
334
343
|
# ============================================
|
|
335
|
-
# Cart
|
|
344
|
+
# Cart
|
|
336
345
|
# ============================================
|
|
337
346
|
|
|
347
|
+
# Cart-level totals — subtotal, total, tax, duty, checkout charge. Spread inside the `Cart` fragment.
|
|
338
348
|
fragment CartCost on CartCost {
|
|
339
349
|
total {
|
|
340
350
|
...Money
|
|
@@ -353,6 +363,7 @@ fragment CartCost on CartCost {
|
|
|
353
363
|
}
|
|
354
364
|
}
|
|
355
365
|
|
|
366
|
+
# Per-line cost breakdown — unit price, line subtotal/total, compare-at unit price (for showing strikethroughs). Spread inside `CartLine`.
|
|
356
367
|
fragment CartLineCost on CartLineCost {
|
|
357
368
|
pricePerUnit {
|
|
358
369
|
...Money
|
|
@@ -368,8 +379,7 @@ fragment CartLineCost on CartLineCost {
|
|
|
368
379
|
}
|
|
369
380
|
}
|
|
370
381
|
|
|
371
|
-
# Typed customer-filled attribute
|
|
372
|
-
# Distinct from CartLine.attributes (raw KV line item properties).
|
|
382
|
+
# Typed snapshot of a customer-filled product attribute (configurator selection) on a cart line. Includes the chosen option / text value, fillingMode, billingMode, surcharge, tax class, and any linked variant. Distinct from `CartLine.attributes` which holds raw key-value line item properties (free-form, untyped).
|
|
373
383
|
fragment AttributeSelection on AttributeSelection {
|
|
374
384
|
attributeDefinitionId
|
|
375
385
|
attributeName
|
|
@@ -386,6 +396,7 @@ fragment AttributeSelection on AttributeSelection {
|
|
|
386
396
|
linkedVariantId
|
|
387
397
|
}
|
|
388
398
|
|
|
399
|
+
# A single line in the cart — variant + quantity + per-line cost, plus dual attribute storage: `attributes[]` for free-form key-value properties (gift wrap, engraving notes), `attributeSelections[]` for typed configurator answers.
|
|
389
400
|
fragment CartLine on CartLine {
|
|
390
401
|
id
|
|
391
402
|
quantity
|
|
@@ -408,17 +419,20 @@ fragment CartLine on CartLine {
|
|
|
408
419
|
productType
|
|
409
420
|
}
|
|
410
421
|
|
|
422
|
+
# Buyer identity associated with the cart. Note: only `customerId` is currently persisted server-side; `email`, `phone`, `countryCode` are accepted in the input but ignored.
|
|
411
423
|
fragment CartBuyerIdentity on CartBuyerIdentity {
|
|
412
424
|
email
|
|
413
425
|
phone
|
|
414
426
|
countryCode
|
|
415
427
|
}
|
|
416
428
|
|
|
429
|
+
# Discount code applied to the cart with its `isApplicable` flag — false means the code was kept on the cart but does not currently qualify (e.g. minimum spend not reached).
|
|
417
430
|
fragment CartDiscountCode on CartDiscountCode {
|
|
418
431
|
code
|
|
419
432
|
isApplicable
|
|
420
433
|
}
|
|
421
434
|
|
|
435
|
+
# Allocation of a discount code to the cart total — pairs the code with the actual money discounted. Use to show "saved X with code Y" in cart UI.
|
|
422
436
|
fragment CartDiscountAllocation on CartDiscountAllocation {
|
|
423
437
|
discountCode
|
|
424
438
|
amount {
|
|
@@ -426,6 +440,7 @@ fragment CartDiscountAllocation on CartDiscountAllocation {
|
|
|
426
440
|
}
|
|
427
441
|
}
|
|
428
442
|
|
|
443
|
+
# Full cart shape — totals, line items (paginated up to 100), buyer identity, applied discount codes + allocations, note, custom attributes. Spread on the cart drawer / cart page; refetch after every cart mutation.
|
|
429
444
|
fragment Cart on Cart {
|
|
430
445
|
id
|
|
431
446
|
checkoutUrl
|
|
@@ -471,9 +486,10 @@ fragment Cart on Cart {
|
|
|
471
486
|
}
|
|
472
487
|
|
|
473
488
|
# ============================================
|
|
474
|
-
# Shop
|
|
489
|
+
# Shop
|
|
475
490
|
# ============================================
|
|
476
491
|
|
|
492
|
+
# Shop branding colors — primary, secondary, accent, background, text. Use to theme the storefront from server-side config.
|
|
477
493
|
fragment ShopColors on ShopColors {
|
|
478
494
|
primary
|
|
479
495
|
secondary
|
|
@@ -482,11 +498,13 @@ fragment ShopColors on ShopColors {
|
|
|
482
498
|
text
|
|
483
499
|
}
|
|
484
500
|
|
|
501
|
+
# Shop branding fonts — body (`primary`) and `heading` font families.
|
|
485
502
|
fragment ShopFonts on ShopFonts {
|
|
486
503
|
primary
|
|
487
504
|
heading
|
|
488
505
|
}
|
|
489
506
|
|
|
507
|
+
# Social media links configured for the shop. Spread on the footer.
|
|
490
508
|
fragment SocialLinks on SocialLinks {
|
|
491
509
|
facebook
|
|
492
510
|
instagram
|
|
@@ -497,6 +515,7 @@ fragment SocialLinks on SocialLinks {
|
|
|
497
515
|
pinterest
|
|
498
516
|
}
|
|
499
517
|
|
|
518
|
+
# Shop's physical / business address. Use on the contact page and footer.
|
|
500
519
|
fragment ShopAddress on ShopAddress {
|
|
501
520
|
streetLine1
|
|
502
521
|
streetLine2
|
|
@@ -506,6 +525,7 @@ fragment ShopAddress on ShopAddress {
|
|
|
506
525
|
country
|
|
507
526
|
}
|
|
508
527
|
|
|
528
|
+
# One day's business hours window. Spread inside `Shop.businessHours[]`.
|
|
509
529
|
fragment BusinessHour on BusinessHour {
|
|
510
530
|
day
|
|
511
531
|
openTime
|
|
@@ -513,6 +533,7 @@ fragment BusinessHour on BusinessHour {
|
|
|
513
533
|
isClosed
|
|
514
534
|
}
|
|
515
535
|
|
|
536
|
+
# Full shop branding bundle — logo + favicon + colors + fonts + social links. Spread inside the `Shop` fragment.
|
|
516
537
|
fragment ShopBranding on ShopBranding {
|
|
517
538
|
logo {
|
|
518
539
|
...Image
|
|
@@ -531,12 +552,14 @@ fragment ShopBranding on ShopBranding {
|
|
|
531
552
|
}
|
|
532
553
|
}
|
|
533
554
|
|
|
555
|
+
# Bot-protection provider config (provider name, site key, script URL) for storefront-side challenge widgets.
|
|
534
556
|
fragment BotProtectionProvider on BotProtectionProviderInfo {
|
|
535
557
|
provider
|
|
536
558
|
siteKey
|
|
537
559
|
scriptUrl
|
|
538
560
|
}
|
|
539
561
|
|
|
562
|
+
# Bot-protection setup for the shop — primary + fallback provider, and the list of `protectedOperations` (mutation names that require a challenge token). Spread inside `Shop`.
|
|
540
563
|
fragment BotProtection on BotProtectionInfo {
|
|
541
564
|
primary {
|
|
542
565
|
...BotProtectionProvider
|
|
@@ -547,6 +570,7 @@ fragment BotProtection on BotProtectionInfo {
|
|
|
547
570
|
protectedOperations
|
|
548
571
|
}
|
|
549
572
|
|
|
573
|
+
# The shop itself — name, primary domain, currencies + locales, branding, contact info, business hours, bot-protection config. Spread on the root `shop` query; cache for the session.
|
|
550
574
|
fragment Shop on Shop {
|
|
551
575
|
id
|
|
552
576
|
name
|
|
@@ -581,9 +605,10 @@ fragment Shop on Shop {
|
|
|
581
605
|
}
|
|
582
606
|
|
|
583
607
|
# ============================================
|
|
584
|
-
# Payment
|
|
608
|
+
# Payment Methods
|
|
585
609
|
# ============================================
|
|
586
610
|
|
|
611
|
+
# Single payment method enabled for the shop — type (CARD / BANK_TRANSFER / BLIK / PAYPAL / APPLE_PAY / GOOGLE_PAY / CASH_ON_DELIVERY / OTHER), provider, icon, supported currencies, default flag, sort position. Spread on the checkout payment step.
|
|
587
612
|
fragment PaymentMethod on PaymentMethod {
|
|
588
613
|
id
|
|
589
614
|
name
|
|
@@ -596,6 +621,7 @@ fragment PaymentMethod on PaymentMethod {
|
|
|
596
621
|
position
|
|
597
622
|
}
|
|
598
623
|
|
|
624
|
+
# Active payment methods list with the merchant's `defaultMethod`. Returned by the `availablePaymentMethods` query.
|
|
599
625
|
fragment AvailablePaymentMethods on AvailablePaymentMethods {
|
|
600
626
|
methods {
|
|
601
627
|
...PaymentMethod
|
|
@@ -606,9 +632,10 @@ fragment AvailablePaymentMethods on AvailablePaymentMethods {
|
|
|
606
632
|
}
|
|
607
633
|
|
|
608
634
|
# ============================================
|
|
609
|
-
# Checkout
|
|
635
|
+
# Checkout
|
|
610
636
|
# ============================================
|
|
611
637
|
|
|
638
|
+
# Single shipping rate option — `handle` is the stable id you pass to `checkoutShippingLineUpdate`, plus title and price.
|
|
612
639
|
fragment ShippingRate on ShippingRate {
|
|
613
640
|
handle
|
|
614
641
|
title
|
|
@@ -617,6 +644,7 @@ fragment ShippingRate on ShippingRate {
|
|
|
617
644
|
}
|
|
618
645
|
}
|
|
619
646
|
|
|
647
|
+
# One tax line on the checkout — title, rate (decimal, e.g. 0.23 for 23%), computed amount. Spread on the order summary.
|
|
620
648
|
fragment TaxLine on TaxLine {
|
|
621
649
|
title
|
|
622
650
|
rate
|
|
@@ -625,6 +653,7 @@ fragment TaxLine on TaxLine {
|
|
|
625
653
|
}
|
|
626
654
|
}
|
|
627
655
|
|
|
656
|
+
# Item affected by a discount — the discounted product/variant with original + discounted prices and savings. Used on Buy-X-Get-Y promotions to highlight which items the discount applies to.
|
|
628
657
|
fragment DiscountAffectedItem on DiscountAffectedItem {
|
|
629
658
|
productId
|
|
630
659
|
variantId
|
|
@@ -642,6 +671,7 @@ fragment DiscountAffectedItem on DiscountAffectedItem {
|
|
|
642
671
|
isFreeItem
|
|
643
672
|
}
|
|
644
673
|
|
|
674
|
+
# A discount currently applied to the checkout — code, type, value, plus BXGY (Buy X Get Y) metadata when applicable (`buyQuantity`, `getQuantity`, `getDiscountPercent`, `affectedItems`). Use to render a "Discounts applied" panel.
|
|
645
675
|
fragment DiscountApplication on DiscountApplication {
|
|
646
676
|
code
|
|
647
677
|
isApplicable
|
|
@@ -650,7 +680,6 @@ fragment DiscountApplication on DiscountApplication {
|
|
|
650
680
|
...Money
|
|
651
681
|
}
|
|
652
682
|
title
|
|
653
|
-
# BXGY (Buy X Get Y) specific fields
|
|
654
683
|
affectedItems {
|
|
655
684
|
...DiscountAffectedItem
|
|
656
685
|
}
|
|
@@ -659,11 +688,13 @@ fragment DiscountApplication on DiscountApplication {
|
|
|
659
688
|
getDiscountPercent
|
|
660
689
|
}
|
|
661
690
|
|
|
691
|
+
# Lightweight discount code entry on the checkout — code + applicability flag.
|
|
662
692
|
fragment DiscountCode on DiscountCode {
|
|
663
693
|
code
|
|
664
694
|
isApplicable
|
|
665
695
|
}
|
|
666
696
|
|
|
697
|
+
# Single line item in the checkout — variant snapshot, quantity, unit + total prices, image. Use on the order summary panel.
|
|
667
698
|
fragment CheckoutLineItem on CheckoutLineItem {
|
|
668
699
|
id
|
|
669
700
|
title
|
|
@@ -683,7 +714,7 @@ fragment CheckoutLineItem on CheckoutLineItem {
|
|
|
683
714
|
}
|
|
684
715
|
}
|
|
685
716
|
|
|
686
|
-
#
|
|
717
|
+
# Gift card applied to the checkout — `maskedCode` (first + last 4 chars), `lastCharacters` (for display matching), the amount applied to this checkout, and remaining balance after this order would complete.
|
|
687
718
|
fragment AppliedGiftCard on AppliedGiftCard {
|
|
688
719
|
maskedCode
|
|
689
720
|
lastCharacters
|
|
@@ -695,6 +726,7 @@ fragment AppliedGiftCard on AppliedGiftCard {
|
|
|
695
726
|
}
|
|
696
727
|
}
|
|
697
728
|
|
|
729
|
+
# Full checkout shape — line items, shipping + billing addresses, selected + available shipping rates, available payment methods, applied discounts + gift cards, tax lines, totals (`cost`, `paymentDue`, `totalGiftCardAmount`). Spread on the checkout flow; refetch after every checkout mutation. `isReady` flips to true when the checkout has all required fields to call `checkoutComplete`.
|
|
698
730
|
fragment Checkout on Checkout {
|
|
699
731
|
id
|
|
700
732
|
isReady
|
|
@@ -741,7 +773,6 @@ fragment Checkout on Checkout {
|
|
|
741
773
|
taxLines {
|
|
742
774
|
...TaxLine
|
|
743
775
|
}
|
|
744
|
-
# GAP-001: Gift Card Checkout Integration
|
|
745
776
|
appliedGiftCards {
|
|
746
777
|
...AppliedGiftCard
|
|
747
778
|
}
|
|
@@ -758,9 +789,10 @@ fragment Checkout on Checkout {
|
|
|
758
789
|
}
|
|
759
790
|
|
|
760
791
|
# ============================================
|
|
761
|
-
#
|
|
792
|
+
# Shipments / Tracking
|
|
762
793
|
# ============================================
|
|
763
794
|
|
|
795
|
+
# One tracking event in the shipment timeline — status, description, location, timestamp. Spread on the tracking page timeline.
|
|
764
796
|
fragment ShipmentEvent on ShipmentEvent {
|
|
765
797
|
id
|
|
766
798
|
status
|
|
@@ -770,6 +802,7 @@ fragment ShipmentEvent on ShipmentEvent {
|
|
|
770
802
|
providerEventCode
|
|
771
803
|
}
|
|
772
804
|
|
|
805
|
+
# Physical package metadata (weight + dimensions). Used in the merchant's label generation; storefronts rarely render this directly.
|
|
773
806
|
fragment ShipmentPackage on ShipmentPackage {
|
|
774
807
|
weight
|
|
775
808
|
length
|
|
@@ -777,6 +810,7 @@ fragment ShipmentPackage on ShipmentPackage {
|
|
|
777
810
|
height
|
|
778
811
|
}
|
|
779
812
|
|
|
813
|
+
# One item in a shipment — title, variant, sku, quantity, image URL. Spread inside `Shipment.items[]` for the tracking page item list.
|
|
780
814
|
fragment ShipmentItem on ShipmentItem {
|
|
781
815
|
id
|
|
782
816
|
title
|
|
@@ -786,6 +820,7 @@ fragment ShipmentItem on ShipmentItem {
|
|
|
786
820
|
imageUrl
|
|
787
821
|
}
|
|
788
822
|
|
|
823
|
+
# Full shipment shape — provider, tracking number + URL, label URL, status, ETA, recipient address, packages, items, full event timeline. Spread on the tracking page.
|
|
789
824
|
fragment Shipment on Shipment {
|
|
790
825
|
id
|
|
791
826
|
orderId
|
|
@@ -814,6 +849,7 @@ fragment Shipment on Shipment {
|
|
|
814
849
|
updatedAt
|
|
815
850
|
}
|
|
816
851
|
|
|
852
|
+
# Lightweight shipment shape — id, tracking number + URL, status, dates. No items / events / address. Use for order summary cards or on the public `shipmentByTrackingNumber` query.
|
|
817
853
|
fragment ShipmentBasic on Shipment {
|
|
818
854
|
id
|
|
819
855
|
orderId
|
|
@@ -828,9 +864,10 @@ fragment ShipmentBasic on Shipment {
|
|
|
828
864
|
}
|
|
829
865
|
|
|
830
866
|
# ============================================
|
|
831
|
-
#
|
|
867
|
+
# Returns / RMA
|
|
832
868
|
# ============================================
|
|
833
869
|
|
|
870
|
+
# Return shipping label generated by the carrier — URL to download, carrier name, tracking number, expiry. Spread on the return detail page.
|
|
834
871
|
fragment ReturnShippingLabel on ReturnShippingLabel {
|
|
835
872
|
url
|
|
836
873
|
carrier
|
|
@@ -838,6 +875,7 @@ fragment ReturnShippingLabel on ReturnShippingLabel {
|
|
|
838
875
|
expiresAt
|
|
839
876
|
}
|
|
840
877
|
|
|
878
|
+
# Photo evidence attached to a return item (e.g. damage photo). Spread inside `ReturnItem.photos[]`.
|
|
841
879
|
fragment ReturnItemPhoto on ReturnItemPhoto {
|
|
842
880
|
id
|
|
843
881
|
url
|
|
@@ -846,6 +884,7 @@ fragment ReturnItemPhoto on ReturnItemPhoto {
|
|
|
846
884
|
createdAt
|
|
847
885
|
}
|
|
848
886
|
|
|
887
|
+
# Single line in a return request — variant identity, quantity requested, reason, condition, photos, status, approved quantity (set by merchant after review). Spread inside `Return.items[]`.
|
|
849
888
|
fragment ReturnItem on ReturnItem {
|
|
850
889
|
id
|
|
851
890
|
variantId
|
|
@@ -866,6 +905,7 @@ fragment ReturnItem on ReturnItem {
|
|
|
866
905
|
approvedQuantity
|
|
867
906
|
}
|
|
868
907
|
|
|
908
|
+
# Full return shape — number, parent order, status, reason, customer note, compensation type (`REFUND` / `STORE_CREDIT`), items, refund amount, shipping label, lifecycle timestamps. Spread on the return detail page.
|
|
869
909
|
fragment Return on Return {
|
|
870
910
|
id
|
|
871
911
|
returnNumber
|
|
@@ -893,6 +933,7 @@ fragment Return on Return {
|
|
|
893
933
|
updatedAt
|
|
894
934
|
}
|
|
895
935
|
|
|
936
|
+
# Single option in the return reasons dropdown — `value` enum, human-readable `label`, optional `description`. Returned by `returnReasons` query.
|
|
896
937
|
fragment ReturnReasonOption on ReturnReasonOption {
|
|
897
938
|
value
|
|
898
939
|
label
|
|
@@ -900,9 +941,10 @@ fragment ReturnReasonOption on ReturnReasonOption {
|
|
|
900
941
|
}
|
|
901
942
|
|
|
902
943
|
# ============================================
|
|
903
|
-
# Gift
|
|
944
|
+
# Gift Cards
|
|
904
945
|
# ============================================
|
|
905
946
|
|
|
947
|
+
# Gift card detail — masked code (first + last 4 chars), status, initial + remaining balance, expiry, recipient/message. Returned by `giftCard($code)` query.
|
|
906
948
|
fragment GiftCard on GiftCard {
|
|
907
949
|
id
|
|
908
950
|
maskedCode
|
|
@@ -919,11 +961,13 @@ fragment GiftCard on GiftCard {
|
|
|
919
961
|
createdAt
|
|
920
962
|
}
|
|
921
963
|
|
|
964
|
+
# Validation error on a gift card check — code (`NOT_FOUND` / `DISABLED` / `ALREADY_USED` / `EXPIRED` / `INSUFFICIENT_BALANCE`) + human message.
|
|
922
965
|
fragment GiftCardError on GiftCardError {
|
|
923
966
|
code
|
|
924
967
|
message
|
|
925
968
|
}
|
|
926
969
|
|
|
970
|
+
# Result of `giftCardValidate($code, $amount)` — `isValid` flag, available balance, optional `error` (when invalid), and the matched gift card (when found). Use to inline-validate gift card inputs before applying.
|
|
927
971
|
fragment GiftCardValidation on GiftCardValidation {
|
|
928
972
|
isValid
|
|
929
973
|
availableBalance {
|
|
@@ -938,9 +982,10 @@ fragment GiftCardValidation on GiftCardValidation {
|
|
|
938
982
|
}
|
|
939
983
|
|
|
940
984
|
# ============================================
|
|
941
|
-
# Shipping
|
|
985
|
+
# Shipping Methods
|
|
942
986
|
# ============================================
|
|
943
987
|
|
|
988
|
+
# Carrier offering the shipping method — id, display name, logo URL, internal service code.
|
|
944
989
|
fragment ShippingCarrier on ShippingCarrier {
|
|
945
990
|
id
|
|
946
991
|
name
|
|
@@ -948,12 +993,14 @@ fragment ShippingCarrier on ShippingCarrier {
|
|
|
948
993
|
serviceCode
|
|
949
994
|
}
|
|
950
995
|
|
|
996
|
+
# Estimated delivery window — `minDays` to `maxDays` plus a human-readable description (e.g. "2-4 business days").
|
|
951
997
|
fragment DeliveryEstimate on DeliveryEstimate {
|
|
952
998
|
minDays
|
|
953
999
|
maxDays
|
|
954
1000
|
description
|
|
955
1001
|
}
|
|
956
1002
|
|
|
1003
|
+
# Free-shipping progress info — `qualifies` flag, current cart amount, threshold, remaining to qualify, percent progress, and a localized message ("Add 20 PLN more for free shipping"). Use to render a free-shipping progress bar in the cart drawer.
|
|
957
1004
|
fragment FreeShippingProgress on FreeShippingProgress {
|
|
958
1005
|
qualifies
|
|
959
1006
|
currentAmount {
|
|
@@ -969,6 +1016,7 @@ fragment FreeShippingProgress on FreeShippingProgress {
|
|
|
969
1016
|
message
|
|
970
1017
|
}
|
|
971
1018
|
|
|
1019
|
+
# One shipping method offered for the destination + cart — id, name, carrier, price, free-shipping progress, estimated delivery, sort order. Spread on the checkout shipping step.
|
|
972
1020
|
fragment AvailableShippingMethod on AvailableShippingMethod {
|
|
973
1021
|
id
|
|
974
1022
|
name
|
|
@@ -990,20 +1038,23 @@ fragment AvailableShippingMethod on AvailableShippingMethod {
|
|
|
990
1038
|
}
|
|
991
1039
|
|
|
992
1040
|
# ============================================
|
|
993
|
-
# Attribute
|
|
1041
|
+
# Attribute Filters
|
|
994
1042
|
# ============================================
|
|
995
1043
|
|
|
1044
|
+
# Visual swatch for an attribute filter value — color hex (for color filters) or image URL (for pattern/material swatches).
|
|
996
1045
|
fragment AttributeSwatch on AttributeSwatch {
|
|
997
1046
|
colorHex
|
|
998
1047
|
imageUrl
|
|
999
1048
|
}
|
|
1000
1049
|
|
|
1050
|
+
# Numeric range bounds for slider-style filters — min, max, currency code (when relevant).
|
|
1001
1051
|
fragment AttributeRangeBounds on AttributeRangeBounds {
|
|
1002
1052
|
min
|
|
1003
1053
|
max
|
|
1004
1054
|
currencyCode
|
|
1005
1055
|
}
|
|
1006
1056
|
|
|
1057
|
+
# One discrete value in a filterable attribute (e.g. "Red" for the Color filter). Includes `productCount` in the current listing context (for "(12)" badges next to filter values), optional swatch and price modifier.
|
|
1007
1058
|
fragment AttributeFilterValue on AttributeFilterValue {
|
|
1008
1059
|
id
|
|
1009
1060
|
value
|
|
@@ -1018,6 +1069,7 @@ fragment AttributeFilterValue on AttributeFilterValue {
|
|
|
1018
1069
|
sortOrder
|
|
1019
1070
|
}
|
|
1020
1071
|
|
|
1072
|
+
# Filterable attribute exposed on the storefront — name, type (SELECT / CHECKBOX / SLIDER / etc.), filterability flags, display order, and either discrete `filterValues[]` or numeric `rangeBounds`. Spread inside `availableFilters.attributes[]`.
|
|
1021
1073
|
fragment AttributeDefinition on AttributeDefinition {
|
|
1022
1074
|
id
|
|
1023
1075
|
name
|
|
@@ -1034,6 +1086,7 @@ fragment AttributeDefinition on AttributeDefinition {
|
|
|
1034
1086
|
}
|
|
1035
1087
|
}
|
|
1036
1088
|
|
|
1089
|
+
# Min / max price range across products in the current listing context. Use to bound the price slider.
|
|
1037
1090
|
fragment PriceRangeFilter on PriceRange {
|
|
1038
1091
|
min {
|
|
1039
1092
|
...Money
|
|
@@ -1043,6 +1096,7 @@ fragment PriceRangeFilter on PriceRange {
|
|
|
1043
1096
|
}
|
|
1044
1097
|
}
|
|
1045
1098
|
|
|
1099
|
+
# One category option in the categories filter — id, name, slug, count of products in this category within the current listing context, level + parentId for tree rendering.
|
|
1046
1100
|
fragment CategoryFilterOption on CategoryFilterOption {
|
|
1047
1101
|
id
|
|
1048
1102
|
name
|
|
@@ -1052,6 +1106,7 @@ fragment CategoryFilterOption on CategoryFilterOption {
|
|
|
1052
1106
|
parentId
|
|
1053
1107
|
}
|
|
1054
1108
|
|
|
1109
|
+
# Full result of the `availableFilters($input)` query — attribute filters, price range, category filters, count of currently active filters, total products matching the context. Spread on listing pages to render filter sidebars.
|
|
1055
1110
|
fragment AvailableFilters on AvailableFilters {
|
|
1056
1111
|
attributes {
|
|
1057
1112
|
...AttributeDefinition
|
|
@@ -1067,9 +1122,10 @@ fragment AvailableFilters on AvailableFilters {
|
|
|
1067
1122
|
}
|
|
1068
1123
|
|
|
1069
1124
|
# ============================================
|
|
1070
|
-
# Loyalty Program
|
|
1125
|
+
# Loyalty Program
|
|
1071
1126
|
# ============================================
|
|
1072
1127
|
|
|
1128
|
+
# Page metadata for the loyalty transactions connection (separate type from generic `PageInfo` for legacy reasons; identical shape).
|
|
1073
1129
|
fragment LoyaltyPageInfo on LoyaltyPageInfo {
|
|
1074
1130
|
hasNextPage
|
|
1075
1131
|
hasPreviousPage
|
|
@@ -1077,6 +1133,7 @@ fragment LoyaltyPageInfo on LoyaltyPageInfo {
|
|
|
1077
1133
|
endCursor
|
|
1078
1134
|
}
|
|
1079
1135
|
|
|
1136
|
+
# Loyalty tier definition — name, type enum (`BRONZE` / `SILVER` / `GOLD` / `PLATINUM` / `DIAMOND`), entry threshold (`minPoints` and/or `minAnnualSpend`), points multiplier, custom benefits list. Returned by `loyaltyTiers` and embedded in member tier data.
|
|
1080
1137
|
fragment LoyaltyTier on LoyaltyTier {
|
|
1081
1138
|
id
|
|
1082
1139
|
name
|
|
@@ -1093,6 +1150,7 @@ fragment LoyaltyTier on LoyaltyTier {
|
|
|
1093
1150
|
}
|
|
1094
1151
|
}
|
|
1095
1152
|
|
|
1153
|
+
# Customer's points breakdown — total earned, currently spendable, pending (not yet vested), redeemed lifetime, expired lifetime, expiring soon, and the next expiry date. Spread inside `LoyaltyMember`.
|
|
1096
1154
|
fragment LoyaltyPointsSummary on LoyaltyPointsSummary {
|
|
1097
1155
|
totalPoints
|
|
1098
1156
|
currentPoints
|
|
@@ -1103,6 +1161,7 @@ fragment LoyaltyPointsSummary on LoyaltyPointsSummary {
|
|
|
1103
1161
|
nextExpiryDate
|
|
1104
1162
|
}
|
|
1105
1163
|
|
|
1164
|
+
# Customer's progress toward the next tier — current tier, next tier, points + spend remaining, percent progress. Use to render the "X points to GOLD" tracker.
|
|
1106
1165
|
fragment TierProgress on TierProgress {
|
|
1107
1166
|
currentTier {
|
|
1108
1167
|
...LoyaltyTier
|
|
@@ -1117,6 +1176,7 @@ fragment TierProgress on TierProgress {
|
|
|
1117
1176
|
}
|
|
1118
1177
|
}
|
|
1119
1178
|
|
|
1179
|
+
# Customer's loyalty membership — points summary, current tier, tier progress, annual spend, last activity. Returned by `loyaltyMember` (null if not enrolled).
|
|
1120
1180
|
fragment LoyaltyMember on LoyaltyMember {
|
|
1121
1181
|
id
|
|
1122
1182
|
customerId
|
|
@@ -1136,6 +1196,7 @@ fragment LoyaltyMember on LoyaltyMember {
|
|
|
1136
1196
|
enrolledAt
|
|
1137
1197
|
}
|
|
1138
1198
|
|
|
1199
|
+
# One row in the loyalty points history — type (`EARN_PURCHASE` / `EARN_SIGNUP` / `EARN_REFERRAL` / `EARN_REVIEW` / `EARN_BIRTHDAY` / `EARN_BONUS` / `REDEEM` / `EXPIRE` / `ADJUST` / `REFUND_REVERSAL`), points delta, balance after, source order, expiry. Spread on the loyalty dashboard transaction list.
|
|
1139
1200
|
fragment LoyaltyTransaction on LoyaltyTransaction {
|
|
1140
1201
|
id
|
|
1141
1202
|
type
|
|
@@ -1147,6 +1208,7 @@ fragment LoyaltyTransaction on LoyaltyTransaction {
|
|
|
1147
1208
|
createdAt
|
|
1148
1209
|
}
|
|
1149
1210
|
|
|
1211
|
+
# Reward customers can redeem — name, type, points cost, discount value (% or fixed), tier requirement, availability flag, remaining redemptions. Spread on the rewards page.
|
|
1150
1212
|
fragment LoyaltyReward on LoyaltyReward {
|
|
1151
1213
|
id
|
|
1152
1214
|
name
|
|
@@ -1168,6 +1230,7 @@ fragment LoyaltyReward on LoyaltyReward {
|
|
|
1168
1230
|
redemptionsRemaining
|
|
1169
1231
|
}
|
|
1170
1232
|
|
|
1233
|
+
# Estimated points for an order — base points, bonus points (tier multiplier applied), total, multiplier used. Returned by `estimatePoints($orderTotal)` for "Earn X points" UI on cart/checkout.
|
|
1171
1234
|
fragment PointsEstimate on PointsEstimate {
|
|
1172
1235
|
basePoints
|
|
1173
1236
|
bonusPoints
|
|
@@ -1175,12 +1238,14 @@ fragment PointsEstimate on PointsEstimate {
|
|
|
1175
1238
|
multiplier
|
|
1176
1239
|
}
|
|
1177
1240
|
|
|
1241
|
+
# One earn action configured in the loyalty program — type (`PURCHASE` / `SIGNUP` / `REFERRAL` / `REVIEW` / `BIRTHDAY`), enabled flag, points granted.
|
|
1178
1242
|
fragment LoyaltyAction on LoyaltyAction {
|
|
1179
1243
|
type
|
|
1180
1244
|
isEnabled
|
|
1181
1245
|
points
|
|
1182
1246
|
}
|
|
1183
1247
|
|
|
1248
|
+
# Loyalty program configuration — `isEnabled` (use to gate UI rendering), points name (e.g. "stars"), earn rate, expiry policy, available actions, referral settings. Returned by `loyaltySettings`.
|
|
1184
1249
|
fragment LoyaltySettings on LoyaltySettings {
|
|
1185
1250
|
isEnabled
|
|
1186
1251
|
pointsName
|
|
@@ -1194,6 +1259,7 @@ fragment LoyaltySettings on LoyaltySettings {
|
|
|
1194
1259
|
referralBonusPoints
|
|
1195
1260
|
}
|
|
1196
1261
|
|
|
1262
|
+
# Customer referral statistics — code, share URL, counts of referred / completed / pending, lifetime points earned. Returned by `referralStats`.
|
|
1197
1263
|
fragment ReferralStats on ReferralStats {
|
|
1198
1264
|
referralCode
|
|
1199
1265
|
shareUrl
|
|
@@ -1203,7 +1269,7 @@ fragment ReferralStats on ReferralStats {
|
|
|
1203
1269
|
totalPointsEarned
|
|
1204
1270
|
}
|
|
1205
1271
|
|
|
1206
|
-
#
|
|
1272
|
+
# Result of `redeemLoyaltyReward` — depending on the reward type, exactly one of `discountCode`, `productDiscountCode`, `giftCardCode` is populated. Apply the returned code on cart/checkout.
|
|
1207
1273
|
fragment RedeemRewardPayload on RedeemRewardPayload {
|
|
1208
1274
|
success
|
|
1209
1275
|
discountCode
|
|
@@ -1212,6 +1278,7 @@ fragment RedeemRewardPayload on RedeemRewardPayload {
|
|
|
1212
1278
|
userErrors
|
|
1213
1279
|
}
|
|
1214
1280
|
|
|
1281
|
+
# Result of `generateReferralCode` — the customer's referral code and shareable URL.
|
|
1215
1282
|
fragment GenerateReferralCodePayload on GenerateReferralCodePayload {
|
|
1216
1283
|
success
|
|
1217
1284
|
referralCode
|
|
@@ -1220,9 +1287,10 @@ fragment GenerateReferralCodePayload on GenerateReferralCodePayload {
|
|
|
1220
1287
|
}
|
|
1221
1288
|
|
|
1222
1289
|
# ============================================
|
|
1223
|
-
#
|
|
1290
|
+
# Reviews
|
|
1224
1291
|
# ============================================
|
|
1225
1292
|
|
|
1293
|
+
# Single product review — rating, title, body, optional pros/cons, image attachments, author, verified-purchase flag, helpful/unhelpful counts, optional merchant response. Only `APPROVED` reviews are exposed to the storefront.
|
|
1226
1294
|
fragment ProductReview on ProductReview {
|
|
1227
1295
|
id
|
|
1228
1296
|
productId
|
|
@@ -1241,6 +1309,7 @@ fragment ProductReview on ProductReview {
|
|
|
1241
1309
|
createdAt
|
|
1242
1310
|
}
|
|
1243
1311
|
|
|
1312
|
+
# Aggregate review stats for a product — average rating, total count, distribution per star (1-5). Returned by `reviewStats($productId)`.
|
|
1244
1313
|
fragment ReviewStats on ReviewStats {
|
|
1245
1314
|
averageRating
|
|
1246
1315
|
totalCount
|
|
@@ -1252,9 +1321,10 @@ fragment ReviewStats on ReviewStats {
|
|
|
1252
1321
|
}
|
|
1253
1322
|
|
|
1254
1323
|
# ============================================
|
|
1255
|
-
#
|
|
1324
|
+
# Wishlists
|
|
1256
1325
|
# ============================================
|
|
1257
1326
|
|
|
1327
|
+
# One item in a wishlist — references the product and (optionally) a specific variant, snapshots the price at the time it was added, plus notification preferences (`notifyOnSale`, `notifyOnRestock`).
|
|
1258
1328
|
fragment WishlistItem on WishlistItem {
|
|
1259
1329
|
id
|
|
1260
1330
|
productId
|
|
@@ -1270,6 +1340,7 @@ fragment WishlistItem on WishlistItem {
|
|
|
1270
1340
|
addedAt
|
|
1271
1341
|
}
|
|
1272
1342
|
|
|
1343
|
+
# A customer's wishlist — name, public/private flag, share token (when public), items, item count. Spread on the wishlists page.
|
|
1273
1344
|
fragment Wishlist on Wishlist {
|
|
1274
1345
|
id
|
|
1275
1346
|
name
|
|
@@ -1284,9 +1355,10 @@ fragment Wishlist on Wishlist {
|
|
|
1284
1355
|
}
|
|
1285
1356
|
|
|
1286
1357
|
# ============================================
|
|
1287
|
-
# Blog
|
|
1358
|
+
# Blog
|
|
1288
1359
|
# ============================================
|
|
1289
1360
|
|
|
1361
|
+
# Blog category — name, slug, description, post count. Spread on category navigation and post category labels.
|
|
1290
1362
|
fragment BlogCategory on BlogCategory {
|
|
1291
1363
|
id
|
|
1292
1364
|
name
|
|
@@ -1295,6 +1367,7 @@ fragment BlogCategory on BlogCategory {
|
|
|
1295
1367
|
postCount
|
|
1296
1368
|
}
|
|
1297
1369
|
|
|
1370
|
+
# Blog tag — name, slug, post count. Spread on tag clouds and post tag labels.
|
|
1298
1371
|
fragment BlogTag on BlogTag {
|
|
1299
1372
|
id
|
|
1300
1373
|
name
|
|
@@ -1302,6 +1375,7 @@ fragment BlogTag on BlogTag {
|
|
|
1302
1375
|
postCount
|
|
1303
1376
|
}
|
|
1304
1377
|
|
|
1378
|
+
# Full blog post — title, slug, excerpt, content (with `contentFormat` indicating HTML/Markdown), featured image, author, category, tags, publish date, reading time, view + comment counts, SEO metadata. Spread on the post detail page.
|
|
1305
1379
|
fragment BlogPost on BlogPost {
|
|
1306
1380
|
id
|
|
1307
1381
|
title
|
|
@@ -1342,9 +1416,10 @@ fragment BlogPost on BlogPost {
|
|
|
1342
1416
|
}
|
|
1343
1417
|
|
|
1344
1418
|
# ============================================
|
|
1345
|
-
#
|
|
1419
|
+
# Recommendations
|
|
1346
1420
|
# ============================================
|
|
1347
1421
|
|
|
1422
|
+
# One recommended product — the product itself (card-level), recommendation type (e.g. SIMILAR / FREQUENTLY_BOUGHT_TOGETHER), score (0-100), human reason text. Spread on PDP "You may also like" sections.
|
|
1348
1423
|
fragment ProductRecommendation on ProductRecommendation {
|
|
1349
1424
|
product {
|
|
1350
1425
|
...ProductCard
|
|
@@ -1354,6 +1429,7 @@ fragment ProductRecommendation on ProductRecommendation {
|
|
|
1354
1429
|
reason
|
|
1355
1430
|
}
|
|
1356
1431
|
|
|
1432
|
+
# Recommendations bundle for the cart drawer — `frequentlyBoughtTogether` (cross-sell) and `youMayAlsoLike` (related). Each entry has the same shape as `ProductRecommendation`.
|
|
1357
1433
|
fragment CartRecommendation on CartRecommendations {
|
|
1358
1434
|
frequentlyBoughtTogether {
|
|
1359
1435
|
product {
|
|
@@ -1374,14 +1450,15 @@ fragment CartRecommendation on CartRecommendations {
|
|
|
1374
1450
|
}
|
|
1375
1451
|
|
|
1376
1452
|
# ============================================
|
|
1377
|
-
# Store Availability
|
|
1453
|
+
# Store Availability (BOPIS / multi-location)
|
|
1378
1454
|
# ============================================
|
|
1379
|
-
# Field
|
|
1380
|
-
# - `
|
|
1381
|
-
# - `pickupTime
|
|
1382
|
-
# - `
|
|
1383
|
-
# - `location
|
|
1455
|
+
# Field-access notes:
|
|
1456
|
+
# - `isAvailable` — always public.
|
|
1457
|
+
# - `pickupTime` — public, localized merchant-configured string.
|
|
1458
|
+
# - `availableStock` — token-gated (null for anonymous, integer for authenticated customers).
|
|
1459
|
+
# - `location` — public, includes coords + business hours when configured.
|
|
1384
1460
|
|
|
1461
|
+
# Physical location address — street, city, country, state, postal code, phone, lat/lng, formatted single-line representation. Spread inside `Location.address`.
|
|
1385
1462
|
fragment LocationAddress on LocationAddress {
|
|
1386
1463
|
streetLine1
|
|
1387
1464
|
streetLine2
|
|
@@ -1397,11 +1474,13 @@ fragment LocationAddress on LocationAddress {
|
|
|
1397
1474
|
formatted
|
|
1398
1475
|
}
|
|
1399
1476
|
|
|
1477
|
+
# One day's open/close window inside `BusinessHours` (24h clock).
|
|
1400
1478
|
fragment BusinessHoursWindow on BusinessHoursWindow {
|
|
1401
1479
|
openHour
|
|
1402
1480
|
closeHour
|
|
1403
1481
|
}
|
|
1404
1482
|
|
|
1483
|
+
# Weekly business hours — one window per day. Spread inside `Location.businessHours`.
|
|
1405
1484
|
fragment BusinessHours on BusinessHours {
|
|
1406
1485
|
monday { ...BusinessHoursWindow }
|
|
1407
1486
|
tuesday { ...BusinessHoursWindow }
|
|
@@ -1412,6 +1491,7 @@ fragment BusinessHours on BusinessHours {
|
|
|
1412
1491
|
sunday { ...BusinessHoursWindow }
|
|
1413
1492
|
}
|
|
1414
1493
|
|
|
1494
|
+
# Physical store / pickup location — name, type (RETAIL / WAREHOUSE / PICKUP_POINT), address, business hours, pickup support flag + instructions, timezone. Spread on the store picker and location detail pages.
|
|
1415
1495
|
fragment Location on Location {
|
|
1416
1496
|
id
|
|
1417
1497
|
name
|
|
@@ -1427,6 +1507,7 @@ fragment Location on Location {
|
|
|
1427
1507
|
}
|
|
1428
1508
|
}
|
|
1429
1509
|
|
|
1510
|
+
# Per-location stock entry for one variant — availability flag, stock quantity (token-gated), pickup time, full location detail. Spread inside `StoreAvailabilityConnection.edges[].node`.
|
|
1430
1511
|
fragment StoreAvailability on StoreAvailability {
|
|
1431
1512
|
isAvailable
|
|
1432
1513
|
availableStock
|
|
@@ -1436,6 +1517,7 @@ fragment StoreAvailability on StoreAvailability {
|
|
|
1436
1517
|
}
|
|
1437
1518
|
}
|
|
1438
1519
|
|
|
1520
|
+
# Relay connection of `StoreAvailability` entries for a variant — used inside the `VariantStoreAvailability` fragment. Pre-paginated to 10 by default.
|
|
1439
1521
|
fragment StoreAvailabilityConnection on StoreAvailabilityConnection {
|
|
1440
1522
|
totalCount
|
|
1441
1523
|
pageInfo {
|
|
@@ -1449,6 +1531,7 @@ fragment StoreAvailabilityConnection on StoreAvailabilityConnection {
|
|
|
1449
1531
|
}
|
|
1450
1532
|
}
|
|
1451
1533
|
|
|
1534
|
+
# Slim variant projection optimized for the store-picker UI — id, title, sku, isAvailable, total `availableStock` plus per-location `storeAvailability` connection. Use in `productStoreAvailability` query.
|
|
1452
1535
|
fragment VariantStoreAvailability on ProductVariant {
|
|
1453
1536
|
id
|
|
1454
1537
|
title
|
|
@@ -1461,9 +1544,10 @@ fragment VariantStoreAvailability on ProductVariant {
|
|
|
1461
1544
|
}
|
|
1462
1545
|
|
|
1463
1546
|
# ============================================
|
|
1464
|
-
#
|
|
1547
|
+
# Pages
|
|
1465
1548
|
# ============================================
|
|
1466
1549
|
|
|
1550
|
+
# CMS page — handle (URL slug), title, body (HTML), excerpt, SEO metadata, publish date. Spread on About / Privacy / Terms / Returns Policy pages.
|
|
1467
1551
|
fragment ShopPage on ShopPage {
|
|
1468
1552
|
id
|
|
1469
1553
|
handle
|
|
@@ -1480,9 +1564,10 @@ fragment ShopPage on ShopPage {
|
|
|
1480
1564
|
}
|
|
1481
1565
|
|
|
1482
1566
|
# ============================================
|
|
1483
|
-
#
|
|
1567
|
+
# Navigation Menus
|
|
1484
1568
|
# ============================================
|
|
1485
1569
|
|
|
1570
|
+
# One menu item with up to 3 levels of nested children — title, URL, type (`HTTP` / `FRONTPAGE` / `SEARCH` / `CATALOG` / `BLOG` / `PRODUCT` / `COLLECTION` / `CATEGORY` / `PAGE`), `resourceId` for typed items, optional image. Switch on `type` to render the right link target.
|
|
1486
1571
|
fragment MenuItem on MenuItem {
|
|
1487
1572
|
id
|
|
1488
1573
|
title
|
|
@@ -1508,6 +1593,7 @@ fragment MenuItem on MenuItem {
|
|
|
1508
1593
|
}
|
|
1509
1594
|
}
|
|
1510
1595
|
|
|
1596
|
+
# Navigation menu — handle (e.g. "main-menu", "footer", "mobile"), title, nested item tree. Returned by `menu($handle)` query.
|
|
1511
1597
|
fragment Menu on Menu {
|
|
1512
1598
|
id
|
|
1513
1599
|
handle
|
|
@@ -1518,24 +1604,20 @@ fragment Menu on Menu {
|
|
|
1518
1604
|
}
|
|
1519
1605
|
|
|
1520
1606
|
# ============================================
|
|
1521
|
-
#
|
|
1607
|
+
# URL Redirects
|
|
1522
1608
|
# ============================================
|
|
1523
1609
|
|
|
1610
|
+
# Single legacy `path` → new `target` redirect entry. Use on the server / edge to issue 301 redirects for migrated routes.
|
|
1524
1611
|
fragment UrlRedirect on UrlRedirect {
|
|
1525
1612
|
path
|
|
1526
1613
|
target
|
|
1527
1614
|
}
|
|
1528
1615
|
|
|
1529
1616
|
# ============================================
|
|
1530
|
-
#
|
|
1617
|
+
# Product Configurator (per-product attributes)
|
|
1531
1618
|
# ============================================
|
|
1532
|
-
# Hybrid AttributeSet binding:
|
|
1533
|
-
# - Product.attributes returns UNION of set definitions (via Product.attributeSetId)
|
|
1534
|
-
# and per-product scoped definitions (AttributeDefinition.scopeProductId = product.id)
|
|
1535
|
-
# - CUSTOMER fillingMode → rendered in storefront configurator UX
|
|
1536
|
-
# - MERCHANT fillingMode → product metadata (filtering, display)
|
|
1537
|
-
# - BOTH fillingMode → admin default + customer override in cart
|
|
1538
1619
|
|
|
1620
|
+
# Slim variant snapshot linked from a configurator option — when an attribute option (e.g. "256 GB" storage) maps to a specific variant, this fragment exposes that variant's id, title, sku, stock flags. Spread inside `ProductAttributeOption.linkedVariant`.
|
|
1539
1621
|
fragment LinkedVariantSummary on LinkedVariantSummary {
|
|
1540
1622
|
id
|
|
1541
1623
|
productId
|
|
@@ -1546,6 +1628,7 @@ fragment LinkedVariantSummary on LinkedVariantSummary {
|
|
|
1546
1628
|
trackQuantity
|
|
1547
1629
|
}
|
|
1548
1630
|
|
|
1631
|
+
# One option (choice) within a configurator attribute — value, label, sort order, optional color hex, surcharge (amount + type), default flag, optional linked variant for variant-mapped options.
|
|
1549
1632
|
fragment ProductAttributeOption on ProductAttributeOption {
|
|
1550
1633
|
id
|
|
1551
1634
|
value
|
|
@@ -1561,6 +1644,7 @@ fragment ProductAttributeOption on ProductAttributeOption {
|
|
|
1561
1644
|
}
|
|
1562
1645
|
}
|
|
1563
1646
|
|
|
1647
|
+
# Configurator attribute definition — name, type, fillingMode (CUSTOMER / MERCHANT / BOTH), billingMode, tax class, validation bounds, options (for choice-type attributes), required + visibility flags. Returned by `product.attributes(filter)` for the configurator UI.
|
|
1564
1648
|
fragment ProductAttributeDefinition on ProductAttributeDefinition {
|
|
1565
1649
|
id
|
|
1566
1650
|
name
|