@sixtyninecommerce/admin 0.10.0 → 0.12.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.
Files changed (302) hide show
  1. package/README.md +5772 -118
  2. package/dist/auth/index.d.ts +7 -1
  3. package/dist/auth/index.js +8 -1
  4. package/dist/catalog/assets.d.ts +120 -8
  5. package/dist/catalog/assets.js +98 -12
  6. package/dist/catalog/collections.d.ts +279 -14
  7. package/dist/catalog/collections.js +246 -15
  8. package/dist/catalog/documents.d.ts +142 -0
  9. package/dist/catalog/documents.js +114 -0
  10. package/dist/catalog/index.d.ts +54 -6
  11. package/dist/catalog/index.js +10 -1
  12. package/dist/catalog/metadata.d.ts +244 -0
  13. package/dist/catalog/metadata.js +220 -0
  14. package/dist/catalog/products.d.ts +159 -19
  15. package/dist/catalog/products.js +88 -13
  16. package/dist/catalog/properties.d.ts +140 -14
  17. package/dist/catalog/properties.js +65 -1
  18. package/dist/catalog/recommendations.d.ts +288 -0
  19. package/dist/catalog/recommendations.js +237 -0
  20. package/dist/catalog/reviews.d.ts +381 -0
  21. package/dist/catalog/reviews.js +325 -0
  22. package/dist/catalog/types.d.ts +17 -1
  23. package/dist/catalog/types.js +10 -0
  24. package/dist/catalog/variant-find.d.ts +136 -0
  25. package/dist/catalog/variant-find.js +239 -0
  26. package/dist/catalog/variants.d.ts +293 -26
  27. package/dist/catalog/variants.js +164 -7
  28. package/dist/catalog/visibility.d.ts +38 -7
  29. package/dist/catalog/visibility.js +19 -1
  30. package/dist/client.d.ts +121 -9
  31. package/dist/client.js +53 -14
  32. package/dist/content/assets.d.ts +285 -0
  33. package/dist/content/assets.js +181 -0
  34. package/dist/content/forms.d.ts +332 -1
  35. package/dist/content/forms.js +140 -4
  36. package/dist/content/items.d.ts +292 -0
  37. package/dist/content/items.js +170 -0
  38. package/dist/content/menus.d.ts +254 -0
  39. package/dist/content/menus.js +70 -0
  40. package/dist/content/strings.d.ts +137 -0
  41. package/dist/content/strings.js +82 -0
  42. package/dist/content/types.d.ts +282 -0
  43. package/dist/content/types.js +100 -0
  44. package/dist/customers/age-verification.d.ts +66 -0
  45. package/dist/customers/age-verification.js +79 -0
  46. package/dist/customers/credit.d.ts +263 -0
  47. package/dist/customers/credit.js +244 -0
  48. package/dist/customers/delivery-preferences.d.ts +120 -0
  49. package/dist/customers/delivery-preferences.js +97 -0
  50. package/dist/customers/delivery-terms.d.ts +44 -0
  51. package/dist/customers/delivery-terms.js +32 -0
  52. package/dist/customers/groups.d.ts +207 -0
  53. package/dist/customers/groups.js +438 -0
  54. package/dist/customers/index.d.ts +462 -37
  55. package/dist/customers/index.js +317 -40
  56. package/dist/customers/invitation-status.d.ts +57 -0
  57. package/dist/customers/invitation-status.js +21 -0
  58. package/dist/customers/notes.d.ts +67 -0
  59. package/dist/customers/notes.js +51 -0
  60. package/dist/customers/notification-recipients.d.ts +97 -0
  61. package/dist/customers/notification-recipients.js +84 -0
  62. package/dist/customers/saved-lists.d.ts +42 -0
  63. package/dist/customers/saved-lists.js +61 -0
  64. package/dist/customers/vat.d.ts +83 -0
  65. package/dist/customers/vat.js +46 -0
  66. package/dist/customers/wire.d.ts +20 -0
  67. package/dist/customers/wire.js +35 -0
  68. package/dist/documents/ar.d.ts +307 -0
  69. package/dist/documents/ar.js +254 -0
  70. package/dist/documents/emails.d.ts +150 -0
  71. package/dist/documents/emails.js +220 -0
  72. package/dist/documents/index.d.ts +744 -21
  73. package/dist/documents/index.js +438 -24
  74. package/dist/documents/pdf.d.ts +2 -0
  75. package/dist/documents/pdf.js +11 -0
  76. package/dist/fulfillments/create.d.ts +167 -0
  77. package/dist/fulfillments/create.js +216 -0
  78. package/dist/fulfillments/index.d.ts +163 -11
  79. package/dist/fulfillments/index.js +135 -6
  80. package/dist/fulfillments/payment-policy.d.ts +64 -0
  81. package/dist/fulfillments/payment-policy.js +140 -0
  82. package/dist/fulfillments/warehouse.d.ts +724 -0
  83. package/dist/fulfillments/warehouse.js +914 -0
  84. package/dist/geo/index.d.ts +119 -0
  85. package/dist/geo/index.js +107 -0
  86. package/dist/index.d.ts +147 -39
  87. package/dist/index.js +51 -12
  88. package/dist/integrations/afas-actions.d.ts +234 -0
  89. package/dist/integrations/afas-actions.js +310 -0
  90. package/dist/integrations/afas-types.d.ts +483 -0
  91. package/dist/integrations/afas-types.js +5 -0
  92. package/dist/integrations/afas.d.ts +234 -0
  93. package/dist/integrations/afas.js +290 -0
  94. package/dist/integrations/connections.d.ts +103 -0
  95. package/dist/integrations/connections.js +55 -0
  96. package/dist/integrations/esp.d.ts +313 -0
  97. package/dist/integrations/esp.js +169 -0
  98. package/dist/integrations/exact-online-types.d.ts +965 -0
  99. package/dist/integrations/exact-online-types.js +6 -0
  100. package/dist/integrations/exact-online.d.ts +784 -0
  101. package/dist/integrations/exact-online.js +1089 -0
  102. package/dist/integrations/index.d.ts +44 -3
  103. package/dist/integrations/index.js +23 -3
  104. package/dist/integrations/pipeline-discoveries.d.ts +65 -0
  105. package/dist/integrations/pipeline-discoveries.js +65 -0
  106. package/dist/integrations/pipeline-keys.d.ts +13 -0
  107. package/dist/integrations/pipeline-keys.js +22 -0
  108. package/dist/integrations/pipeline-runs.d.ts +119 -0
  109. package/dist/integrations/pipeline-runs.js +87 -0
  110. package/dist/integrations/pipelines.d.ts +87 -15
  111. package/dist/integrations/pipelines.js +41 -22
  112. package/dist/integrations/price-import.d.ts +223 -0
  113. package/dist/integrations/price-import.js +124 -0
  114. package/dist/integrations/types.d.ts +367 -3
  115. package/dist/integrations/types.js +4 -3
  116. package/dist/locations/index.d.ts +66 -0
  117. package/dist/locations/index.js +31 -0
  118. package/dist/meta/index.d.ts +172 -0
  119. package/dist/metafields/index.d.ts +8 -1
  120. package/dist/metafields/index.js +10 -0
  121. package/dist/orders/cancel-with-money.d.ts +237 -0
  122. package/dist/orders/cancel-with-money.js +155 -0
  123. package/dist/orders/commit-edit.d.ts +23 -1
  124. package/dist/orders/commit-edit.js +19 -2
  125. package/dist/orders/deposit-policy.d.ts +3 -1
  126. package/dist/orders/drafts.d.ts +800 -0
  127. package/dist/orders/drafts.js +771 -0
  128. package/dist/orders/fields.d.ts +245 -0
  129. package/dist/orders/fields.js +188 -0
  130. package/dist/orders/get.d.ts +29 -19
  131. package/dist/orders/get.js +17 -8
  132. package/dist/orders/index.d.ts +66 -15
  133. package/dist/orders/index.js +25 -2
  134. package/dist/orders/lifecycle.d.ts +128 -0
  135. package/dist/orders/lifecycle.js +158 -0
  136. package/dist/orders/line-price-preview.d.ts +7 -2
  137. package/dist/orders/list.d.ts +243 -0
  138. package/dist/orders/list.js +487 -0
  139. package/dist/orders/manual-discounts.d.ts +13 -5
  140. package/dist/orders/manual-pricing.d.ts +5 -0
  141. package/dist/orders/money-view.d.ts +149 -0
  142. package/dist/orders/money-view.js +99 -0
  143. package/dist/orders/order-entry.d.ts +20 -7
  144. package/dist/orders/plan-edit.d.ts +34 -2
  145. package/dist/orders/plan-edit.js +112 -11
  146. package/dist/orders/settings.d.ts +201 -0
  147. package/dist/orders/settings.js +325 -0
  148. package/dist/orders/status.d.ts +159 -13
  149. package/dist/orders/status.js +21 -0
  150. package/dist/orders/surcharges.d.ts +20 -1
  151. package/dist/orders/surcharges.js +37 -11
  152. package/dist/payments/account-credit.d.ts +46 -0
  153. package/dist/payments/account-credit.js +42 -0
  154. package/dist/payments/ar.d.ts +292 -0
  155. package/dist/payments/ar.js +223 -0
  156. package/dist/payments/connected-account.d.ts +47 -0
  157. package/dist/payments/connected-account.js +61 -0
  158. package/dist/payments/credit-noted-fields.d.ts +19 -0
  159. package/dist/payments/credit-noted-fields.js +69 -0
  160. package/dist/payments/customer-consent.d.ts +30 -0
  161. package/dist/payments/customer-consent.js +49 -0
  162. package/dist/payments/index.d.ts +340 -19
  163. package/dist/payments/index.js +151 -1
  164. package/dist/payments/methods.d.ts +303 -8
  165. package/dist/payments/methods.js +337 -7
  166. package/dist/payments/mollie-methods.d.ts +159 -0
  167. package/dist/payments/mollie-methods.js +141 -0
  168. package/dist/payments/payment-links.d.ts +180 -0
  169. package/dist/payments/payment-links.js +97 -0
  170. package/dist/payments/provider-keys.d.ts +150 -0
  171. package/dist/payments/provider-keys.js +118 -0
  172. package/dist/payments/providers.d.ts +86 -11
  173. package/dist/payments/providers.js +29 -0
  174. package/dist/payments/requests.d.ts +147 -0
  175. package/dist/payments/requests.js +93 -0
  176. package/dist/payments/store-credit-fields.d.ts +15 -0
  177. package/dist/payments/store-credit-fields.js +51 -0
  178. package/dist/pickups/index.d.ts +106 -0
  179. package/dist/pickups/index.js +108 -0
  180. package/dist/platform/channels.d.ts +132 -0
  181. package/dist/platform/channels.js +128 -0
  182. package/dist/platform/email-gateways.d.ts +165 -0
  183. package/dist/platform/email-gateways.js +78 -0
  184. package/dist/platform/geo.d.ts +123 -0
  185. package/dist/platform/geo.js +144 -0
  186. package/dist/platform/tax.d.ts +162 -0
  187. package/dist/platform/tax.js +169 -0
  188. package/dist/pos/anomalies.d.ts +158 -0
  189. package/dist/pos/anomalies.js +64 -0
  190. package/dist/pos/assisted-selling.d.ts +79 -0
  191. package/dist/pos/assisted-selling.js +38 -0
  192. package/dist/pos/exchanges.d.ts +108 -0
  193. package/dist/pos/exchanges.js +22 -0
  194. package/dist/pos/gift-cards.d.ts +135 -0
  195. package/dist/pos/gift-cards.js +47 -0
  196. package/dist/pos/index.d.ts +2370 -58
  197. package/dist/pos/index.js +854 -7
  198. package/dist/pos/no-receipt.d.ts +94 -0
  199. package/dist/pos/no-receipt.js +25 -0
  200. package/dist/pos/offline-sales.d.ts +228 -0
  201. package/dist/pos/offline-sales.js +170 -0
  202. package/dist/pos/pay-by-link.d.ts +143 -0
  203. package/dist/pos/pay-by-link.js +57 -0
  204. package/dist/pos/quick-keys.d.ts +103 -0
  205. package/dist/pos/quick-keys.js +45 -0
  206. package/dist/pos/reports.d.ts +360 -0
  207. package/dist/pos/reports.js +62 -0
  208. package/dist/pos/returns.d.ts +244 -0
  209. package/dist/pos/returns.js +83 -0
  210. package/dist/pricing/bulk-coupons.d.ts +139 -0
  211. package/dist/pricing/bulk-coupons.js +112 -0
  212. package/dist/pricing/index.d.ts +174 -4
  213. package/dist/pricing/index.js +174 -1
  214. package/dist/pricing/price-lists.d.ts +606 -0
  215. package/dist/pricing/price-lists.js +600 -0
  216. package/dist/purchasing/alerts.d.ts +104 -0
  217. package/dist/purchasing/alerts.js +88 -0
  218. package/dist/purchasing/backorders.d.ts +61 -0
  219. package/dist/purchasing/backorders.js +92 -0
  220. package/dist/purchasing/cost.d.ts +110 -0
  221. package/dist/purchasing/cost.js +86 -0
  222. package/dist/purchasing/index.d.ts +54 -0
  223. package/dist/purchasing/index.js +24 -0
  224. package/dist/purchasing/links.d.ts +263 -0
  225. package/dist/purchasing/links.js +192 -0
  226. package/dist/purchasing/purchase-orders.d.ts +551 -0
  227. package/dist/purchasing/purchase-orders.js +491 -0
  228. package/dist/purchasing/receipts.d.ts +396 -0
  229. package/dist/purchasing/receipts.js +287 -0
  230. package/dist/purchasing/replenishment.d.ts +281 -0
  231. package/dist/purchasing/replenishment.js +240 -0
  232. package/dist/purchasing/returns.d.ts +273 -0
  233. package/dist/purchasing/returns.js +229 -0
  234. package/dist/purchasing/settings.d.ts +152 -0
  235. package/dist/purchasing/settings.js +181 -0
  236. package/dist/purchasing/suppliers.d.ts +476 -0
  237. package/dist/purchasing/suppliers.js +438 -0
  238. package/dist/quotes/index.d.ts +518 -0
  239. package/dist/quotes/index.js +439 -0
  240. package/dist/reports/index.d.ts +71 -8
  241. package/dist/reports/index.js +74 -11
  242. package/dist/returns/index.d.ts +675 -21
  243. package/dist/returns/index.js +756 -11
  244. package/dist/search/index.d.ts +76 -1
  245. package/dist/search/index.js +63 -0
  246. package/dist/seo/config.d.ts +128 -0
  247. package/dist/seo/config.js +95 -0
  248. package/dist/seo/redirects.d.ts +125 -0
  249. package/dist/seo/redirects.js +60 -1
  250. package/dist/seo/settings.d.ts +147 -0
  251. package/dist/seo/settings.js +209 -0
  252. package/dist/shipping/definitions.d.ts +29 -0
  253. package/dist/shipping/definitions.js +47 -0
  254. package/dist/shipping/fulfillment-profiles.d.ts +174 -0
  255. package/dist/shipping/fulfillment-profiles.js +104 -0
  256. package/dist/shipping/hendriks.d.ts +97 -0
  257. package/dist/shipping/hendriks.js +50 -0
  258. package/dist/shipping/index.d.ts +54 -0
  259. package/dist/shipping/index.js +27 -0
  260. package/dist/shipping/methods.d.ts +205 -0
  261. package/dist/shipping/methods.js +240 -0
  262. package/dist/shipping/myparcel.d.ts +668 -0
  263. package/dist/shipping/myparcel.js +466 -0
  264. package/dist/shipping/parcel-count-suggestion.d.ts +2 -0
  265. package/dist/shipping/parcel-rule.d.ts +6 -5
  266. package/dist/shipping/parcel-rule.js +21 -23
  267. package/dist/shipping/rate-tables.d.ts +324 -0
  268. package/dist/shipping/rate-tables.js +390 -0
  269. package/dist/shipping/ship-to-countries.d.ts +75 -0
  270. package/dist/shipping/ship-to-countries.js +47 -0
  271. package/dist/stock/by-location.d.ts +86 -0
  272. package/dist/stock/by-location.js +94 -0
  273. package/dist/stock/index.d.ts +18 -4
  274. package/dist/stock/index.js +7 -0
  275. package/dist/stock/locations.d.ts +144 -0
  276. package/dist/stock/locations.js +168 -0
  277. package/dist/stock/settings.d.ts +106 -0
  278. package/dist/stock/settings.js +103 -0
  279. package/dist/stock/transfers.d.ts +386 -52
  280. package/dist/stock/transfers.js +222 -17
  281. package/dist/stored-value/index.d.ts +312 -11
  282. package/dist/stored-value/index.js +223 -4
  283. package/dist/subscriptions/index.d.ts +682 -0
  284. package/dist/subscriptions/index.js +815 -0
  285. package/dist/tax/display-policy.d.ts +105 -0
  286. package/dist/tax/display-policy.js +84 -0
  287. package/dist/tax/index.d.ts +79 -1
  288. package/dist/tax/index.js +52 -0
  289. package/dist/tenant/email-style.d.ts +102 -0
  290. package/dist/tenant/email-style.js +72 -0
  291. package/dist/tenant/email-templates.d.ts +287 -0
  292. package/dist/tenant/email-templates.js +271 -0
  293. package/dist/tenant/notifications.d.ts +23 -17
  294. package/dist/tenant/settings-sources.d.ts +1 -1
  295. package/dist/tenant/time-zone.d.ts +17 -0
  296. package/dist/tenant/time-zone.js +11 -0
  297. package/dist/types.d.ts +50 -3
  298. package/dist/users/index.d.ts +3 -0
  299. package/dist/users/index.js +2 -0
  300. package/dist/users/warehouses.d.ts +50 -0
  301. package/dist/users/warehouses.js +51 -0
  302. package/package.json +2 -2
@@ -1,6 +1,7 @@
1
1
  import { type Page, type Transport } from '@sixtyninecommerce/core';
2
2
  import type { Call, ListOptions } from '../types.js';
3
- import { type AssetRef, type Availability, type AvailabilityInput, type FacetValueRef, type LanguageCode, type PriceBasis, type TranslationInput, type VariantAvailabilityState } from './types.js';
3
+ import { type AssetRef, type Availability, type AvailabilityInput, type FacetValueRef, type LanguageCode, type PriceBasis, type TranslationInput, type VariantAvailabilityState, type WireAssetRef } from './types.js';
4
+ import { type FindVariantsInput, type FoundVariants } from './variant-find.js';
4
5
  export interface StockLevel {
5
6
  stockLocationId: string;
6
7
  stockOnHand: number;
@@ -31,16 +32,32 @@ export interface VariantPriceInput {
31
32
  price: number;
32
33
  }
33
34
  /**
34
- * A product variant — the thing that has a SKU, a price and stock.
35
+ * A variant's price in the active store, in the currency of the request (the store's default,
36
+ * unless the call names another with `tenant.currency`). Integer minor units of `currencyCode`.
35
37
  *
36
- * Money is integer minor units of `currencyCode`. On READ, `price` is ALWAYS
37
- * net and `priceWithTax` ALWAYS gross, whatever the store's basis — core
38
- * derives whichever side it does not store, at the rate of the store's default
39
- * tax zone. On WRITE, `price` is in the STORE's basis (`priceBasis`). So a
40
- * read-modify-write on a gross store (`pricesIncludeTax: true`) must start
41
- * from `priceWithTax`: writing back the `price` it read would drop the shelf
42
- * price by the whole VAT amount.
38
+ * `price` is ALWAYS net and `priceWithTax` ALWAYS gross, whatever the store's basis — core
39
+ * derives whichever side it does not store, at the rate of the store's default tax zone. A write
40
+ * states `price` in the STORE's basis (`priceBasis`), so a read-modify-write on a gross store
41
+ * (`pricesIncludeTax: true`) must start from `priceWithTax`: writing back the `price` it read
42
+ * would drop the shelf price by the whole VAT amount.
43
43
  */
44
+ export interface VariantStorePrice {
45
+ /** Net, always — never the figure to write back on a gross store. */
46
+ price: number;
47
+ /** Gross, always, at the store's default tax zone. */
48
+ priceWithTax: number;
49
+ currencyCode: string;
50
+ }
51
+ /**
52
+ * One price the store STORES for a variant, in one currency: integer minor units on the store's
53
+ * basis (gross on a store with `pricesIncludeTax`, net otherwise), exactly what a write takes. A
54
+ * currency the store converts from another has no entry; see {@link ProductVariant.storePrice}.
55
+ */
56
+ export interface VariantStoredPrice {
57
+ currencyCode: string;
58
+ price: number;
59
+ }
60
+ /** A product variant — the thing that has a SKU, a price and stock. */
44
61
  export interface ProductVariant extends Availability<VariantAvailabilityState> {
45
62
  id: string;
46
63
  productId: string;
@@ -50,11 +67,23 @@ export interface ProductVariant extends Availability<VariantAvailabilityState> {
50
67
  name: string;
51
68
  sku: string;
52
69
  enabled: boolean;
53
- /** Net, always — never the figure to write back on a gross store. */
54
- price: number;
55
- /** Gross, always, at the store's default tax zone. */
56
- priceWithTax: number;
57
- currencyCode: string;
70
+ /**
71
+ * The prices the active store stores for the variant, one per currency (see
72
+ * {@link VariantStoredPrice}); `[]` when it stores none.
73
+ */
74
+ prices: VariantStoredPrice[];
75
+ /**
76
+ * The engine's on-hand total for the variant in the active store (core's `stockOnHand`, which
77
+ * per-location out-of-stock thresholds can adjust); `stockLevels` has the count at each location.
78
+ */
79
+ stockOnHand: number;
80
+ /**
81
+ * The variant's price in the active store, or null when the store has no price for it in the
82
+ * request's currency: none stored there and none it converts from. Never 0 for a missing price;
83
+ * a 0 here is a price of 0. Needs an engine with `ProductVariant.storePrice` (vendure-server
84
+ * at or after #1504).
85
+ */
86
+ storePrice: VariantStorePrice | null;
58
87
  taxCategory: {
59
88
  id: string;
60
89
  name: string;
@@ -80,6 +109,36 @@ export interface ProductVariant extends Availability<VariantAvailabilityState> {
80
109
  parcelCapacity: number | null;
81
110
  /** Never null on read: an unset packing is `shared`, the engine's default. */
82
111
  parcelPacking: ParcelPacking;
112
+ /** The fewest units one order line may carry; null for no minimum. */
113
+ minOrderQuantity: number | null;
114
+ /** The units a line's quantity moves in (6: 6, 12, 18 …); null for one. */
115
+ salesUnit: number | null;
116
+ /**
117
+ * Where the variant sits in its product's order (the dashboard's "Reorder"); null for a variant
118
+ * nobody placed, which {@link VariantsModule.list} puts after the placed ones.
119
+ */
120
+ position: number | null;
121
+ /**
122
+ * What one unit costs the store: NET, whatever the store's price basis (`prices` may be gross),
123
+ * integer minor units of its default currency; null when unset. Informational: no price or tax
124
+ * reads it.
125
+ */
126
+ cost: number | null;
127
+ packageWeightGrams: number | null;
128
+ packageLengthCm: number | null;
129
+ packageWidthCm: number | null;
130
+ packageHeightCm: number | null;
131
+ /**
132
+ * The variant's backorder rule; null follows the store's (`inherit`). A string on the wire: a
133
+ * newer engine may add a policy.
134
+ */
135
+ backorderPolicy: VariantBackorderPolicy | (string & {}) | null;
136
+ /** The units a `limited` variant may sell below zero; null when unset. */
137
+ backorderLimit: number | null;
138
+ /** GS1 barcode (the product-feeds plugin's identifier); null when unset. */
139
+ gtin: string | null;
140
+ /** Manufacturer part number; null when unset. */
141
+ mpn: string | null;
83
142
  stockLevels: StockLevel[];
84
143
  options: Array<{
85
144
  id: string;
@@ -143,7 +202,10 @@ interface VariantFields extends AvailabilityInput<VariantAvailabilityState> {
143
202
  minOrderQuantity?: number | null;
144
203
  /** The units a line's quantity moves in (6: 6, 12, 18 …); null for one. */
145
204
  salesUnit?: number | null;
146
- /** What one unit costs the store, integer minor units of its default currency; null clears it. */
205
+ /**
206
+ * What one unit costs the store: NET, whatever the store's price basis, integer minor units of
207
+ * its default currency; null clears it.
208
+ */
147
209
  cost?: number | null;
148
210
  packageWeightGrams?: number | null;
149
211
  packageLengthCm?: number | null;
@@ -185,7 +247,7 @@ export interface VariantPriceSource {
185
247
  /**
186
248
  * What the store charges in this currency, in minor units, on the STORE's basis: gross on a
187
249
  * store with `pricesIncludeTax`, net otherwise — the basis a variant write takes, unlike
188
- * {@link ProductVariant.price}, which reads net everywhere. Null when nothing prices it: no
250
+ * {@link VariantStorePrice.price}, which reads net everywhere. Null when nothing prices it: no
189
251
  * stored price and no EUR price or exchange rate to convert from, or a currency the store
190
252
  * marked not for sale.
191
253
  */
@@ -200,6 +262,68 @@ export interface VariantPriceSource {
200
262
  /** The organization that shares the variant with the store; null for the store's own variant. */
201
263
  organizationName: string | null;
202
264
  }
265
+ /** A field {@link VariantsModule.list} can order a product's variants by. */
266
+ /**
267
+ * Where a variant's pre-order date (`availableFrom`) comes from (purchase-orders spec §8.12.3):
268
+ * `manual`, the date staff set, or `incoming`, kept equal to the earliest confirmed delivery of an
269
+ * open purchase order into the store's storefront warehouses.
270
+ */
271
+ export type AvailableFromSource = 'manual' | 'incoming';
272
+ /** The sources {@link VariantsModule.setAvailableFromSource} sends. */
273
+ export declare const AVAILABLE_FROM_SOURCES: readonly AvailableFromSource[];
274
+ /** A variant's pre-order date source in the active store, and what `incoming` follows. */
275
+ export interface VariantAvailableFromSource {
276
+ productVariantId: string;
277
+ /** A string on the wire: a newer engine may add a source. */
278
+ source: AvailableFromSource | (string & {});
279
+ /** The stored availability date, ISO-8601 UTC, whoever set it; null when unset. */
280
+ availableFrom: string | null;
281
+ /**
282
+ * The earliest future day (`YYYY-MM-DD`) a supplier confirmed for an open purchase order of the
283
+ * variant, the day `incoming` follows; null for "no confirmed purchase order" (the date then
284
+ * keeps its last value).
285
+ */
286
+ confirmedIncomingOn: string | null;
287
+ /**
288
+ * Stores of more than one legal entity hold the variant, or an organization does: it cannot
289
+ * follow the purchase orders (`incoming` is refused `AVAILABLE_FROM_SOURCE_SHARED_VARIANT`).
290
+ */
291
+ sharedAcrossLegalEntities: boolean;
292
+ }
293
+ export type VariantSortField = 'position' | 'name' | 'sku' | 'createdAt' | 'updatedAt';
294
+ /** Options of {@link VariantsModule.list}. */
295
+ export interface VariantListOptions extends ListOptions {
296
+ /**
297
+ * Only the variants whose SKU OR name (in the request's language) contains this text, case
298
+ * insensitively. Blank or omitted: every variant.
299
+ */
300
+ term?: string;
301
+ /**
302
+ * The order of the pages. Default `{ field: 'position', direction: 'ASC' }`: the order a
303
+ * merchant arranged the variants in, the ones never placed after the placed ones. The engine
304
+ * completes every sort with the variant id, so a page boundary never repeats or skips a row.
305
+ */
306
+ sort?: {
307
+ field: VariantSortField;
308
+ direction: 'ASC' | 'DESC';
309
+ };
310
+ }
311
+ /** The variants {@link VariantsModule.optionSets} reads at most by default. */
312
+ export declare const DEFAULT_OPTION_SET_LIMIT = 1000;
313
+ /** The most variants one {@link VariantsModule.optionSets} call reads. */
314
+ export declare const MAX_OPTION_SET_LIMIT = 100000;
315
+ /** The option combinations a product's variants already have, as far as they were read. */
316
+ export interface VariantOptionSets {
317
+ /**
318
+ * One entry per variant read, in variant-id order: the ids of its options, sorted. A variant
319
+ * without options (a product's one default variant) reads `[]`.
320
+ */
321
+ combinations: string[][];
322
+ /** How many variants the product has in the store. */
323
+ totalItems: number;
324
+ /** The product has more variants than were read (`limit`): a combination absent here may exist. */
325
+ truncated: boolean;
326
+ }
203
327
  /** The engine's bound on one `revertPrice` call (`MAX_REVERT_VARIANTS`). */
204
328
  export declare const MAX_REVERT_PRICE_VARIANTS = 500;
205
329
  export interface CreateProductVariantInput extends VariantFields {
@@ -240,11 +364,99 @@ export interface UpdateProductVariantInput extends VariantFields {
240
364
  * refuses".
241
365
  */
242
366
  export interface VariantsModule {
243
- list(productId: string, options?: ListOptions): Promise<Page<ProductVariant>>;
367
+ /**
368
+ * One page of a product's variants (`limit` 1 to 1,000, default 25), in the order `sort` names
369
+ * and filtered by `term`; `page.total` is how many match. `for await` walks every page. Needs
370
+ * `ReadCatalog` or `ReadProduct`. An id this store does not hold answers an empty page.
371
+ *
372
+ * Refused before sending: `INVALID_PAGE_SIZE` (`ValidationError`, 400) for a `limit` outside
373
+ * 1 to 1,000; `INVALID_VARIANT_SORT` (`ValidationError`, 400) for a sort field or direction
374
+ * this method does not name.
375
+ *
376
+ * @effect read
377
+ */
378
+ list(productId: string, options?: VariantListOptions): Promise<Page<ProductVariant>>;
379
+ /** @effect read */
244
380
  get(id: string, options?: Call): Promise<ProductVariant | null>;
245
- /** All or nothing: the engine creates the batch in one transaction. */
381
+ /**
382
+ * The option combinations a product's variants already have, for a "create variants" form that
383
+ * must not offer a combination twice (the engine refuses one: "A ProductVariant with the
384
+ * selected options already exists"). Reads the variants in pages of up to 1,000, in id order, up
385
+ * to `limit` (default {@link DEFAULT_OPTION_SET_LIMIT}, at most {@link MAX_OPTION_SET_LIMIT});
386
+ * `truncated` says the product has more. Each page is one request: a high `limit` on a product
387
+ * with 100,000 variants is 100 of them. Needs `ReadCatalog` or `ReadProduct`; an id this store
388
+ * does not hold answers no combinations.
389
+ *
390
+ * Refused before sending: `INVALID_OPTION_SET_LIMIT` (`ValidationError`, 400) for a `limit`
391
+ * that is not a whole number from 1 to {@link MAX_OPTION_SET_LIMIT}.
392
+ *
393
+ * @effect read
394
+ */
395
+ optionSets(productId: string, options?: Call & {
396
+ limit?: number;
397
+ }): Promise<VariantOptionSets>;
398
+ /**
399
+ * The variants a picker offers, each with its store price, its stock and its product: by id
400
+ * (`ids`), by a full-text search (`term`) or by the start of a SKU (`skuPrefix`). Exactly one
401
+ * of the three.
402
+ *
403
+ * - **`ids`** answers exactly those variants, in the order asked. An id the store does not
404
+ * hold is left out.
405
+ * - **A search reads products first**: the best `take / perProduct` products (rounded up) of
406
+ * the store's product index, then at most `perProduct` variants of each, in a stable order
407
+ * (by id; not the order a merchant arranged a product's variants in). `products` says per product how many of its variants match and how many `items` holds, so
408
+ * a caller can tell a short product from a cut-off one. The index is updated by a job after
409
+ * each change: a product created seconds ago may be missing.
410
+ * - **A hidden carrier variant is never answered**, by id or by search: the platform's own
411
+ * variant behind externally priced order lines is not catalogue.
412
+ * - **A disabled or unpriced variant IS answered** (`enabled`, `storePrice: null`): the engine
413
+ * refuses to add either to an order (`ORDER_LINE_VARIANT_UNPRICED` for the second).
414
+ *
415
+ * Needs `ReadCatalog` or `ReadProduct`. Refused before anything is sent
416
+ * (`VARIANT_FIND_INPUT_INVALID`, a `ValidationError`): none or several of `ids`, `term` and
417
+ * `skuPrefix`; a blank `term` or `skuPrefix`; `take` outside 1 to
418
+ * {@link MAX_VARIANT_FIND_TAKE}; `perProduct` outside 1 to `take`, or given with `ids`; more
419
+ * than {@link MAX_VARIANT_FIND_PRODUCTS} products; more distinct ids than `take`. By the
420
+ * engine: an id that is not an id at all (`ENTITY_NOT_FOUND`, a `NotFoundError`), a currency
421
+ * the store does not sell, and `SERVICE_UNAVAILABLE` (retryable) when the search service did
422
+ * not answer a search.
423
+ *
424
+ * @effect read
425
+ */
426
+ find(input: FindVariantsInput, options?: Call): Promise<FoundVariants>;
427
+ /**
428
+ * Create variants, all or nothing: the engine creates the batch in one transaction. Needs
429
+ * `CreateCatalog` or `CreateProduct`. A `price` travels with `priceBasis` (see
430
+ * {@link PriceBasis}); its other currencies are converted until a write stores them.
431
+ *
432
+ * Refusals (nothing is written), besides the option-combination and basis refusals above:
433
+ * - `TRANSLATION_INPUT_INVALID` → `ValidationError` (400): a translation without a name
434
+ * (multi-region decision 106). One `details` entry per refused field, its message naming the
435
+ * language; the entries carry no `field` pointer.
436
+ * - `TRANSLATION_LANGUAGE_NOT_OFFERED` → `BusinessRuleError` (422): a translation in a
437
+ * language the store does not offer; `details[].field` points at the translation entry
438
+ * (`/input/<n>/translations/<i>`).
439
+ * - `FEED_IDENTIFIER_INVALID` → `ValidationError` (400): a GTIN that is not 8, 12, 13 or 14
440
+ * digits.
441
+ *
442
+ * @effect write
443
+ */
246
444
  create(inputs: CreateProductVariantInput[], options?: Call): Promise<ProductVariant[]>;
445
+ /** @effect write */
247
446
  update(inputs: UpdateProductVariantInput[], options?: Call): Promise<ProductVariant[]>;
447
+ /**
448
+ * Soft-delete variants: they are no longer listed, and orders keep the lines that name them.
449
+ * Nothing in this SDK restores one. Needs `DeleteCatalog` or `DeleteProduct`.
450
+ *
451
+ * Refused before anything is deleted: `ENTITY_NOT_FOUND` (`NotFoundError`, 404) for a variant
452
+ * this store does not hold; `SHARED_PRODUCT_VARIANT_NOT_ALLOWED` (`PermissionDeniedError`, 403)
453
+ * for one another store also holds that you may not change there; `FIELD_GROUP_LOCKED`
454
+ * (`BusinessRuleError`, 422) while an app or API token owns one of its field groups;
455
+ * `EXTERNAL_LINE_CARRIER_PROTECTED` (422) for the platform's carrier. A variant the engine
456
+ * declines is `VARIANT_NOT_DELETED` (`ConflictError`, 409) with its reasons.
457
+ *
458
+ * @effect destructive
459
+ */
248
460
  delete(ids: string[], options?: Call): Promise<void>;
249
461
  /**
250
462
  * Set stock on hand per stock location — absolute values, one update. A
@@ -285,29 +497,84 @@ export interface VariantsModule {
285
497
  revertPrice(variantIds: string[], options?: Call & {
286
498
  currencyCodes?: readonly string[];
287
499
  }): Promise<ProductVariant[]>;
500
+ /**
501
+ * Where the variant's pre-order date comes from in the active store, the day a supplier
502
+ * confirmed that `incoming` would follow, and whether the variant may follow it at all
503
+ * (purchase-orders spec §8.12.3). Needs `ReadCatalog` or `ReadProduct` and the Purchasing
504
+ * plugin on the store (`PLUGIN_ACCESS_DENIED`, 403). A variant this store does not have is a
505
+ * `NotFoundError` (`PURCHASING_VARIANT_NOT_FOUND`).
506
+ *
507
+ * A document of its own, never a field of the variant reads: those keep working against an
508
+ * engine older than the field. Needs an engine with purchase orders step 5.3.
509
+ *
510
+ * @effect read
511
+ */
512
+ availableFromSource(variantId: string, options?: Call): Promise<VariantAvailableFromSource>;
513
+ /**
514
+ * Switches the variant's pre-order date between the date staff set (`manual`) and the earliest
515
+ * confirmed purchase-order delivery (`incoming`, recomputed at once and whenever a purchase
516
+ * order of the variant is confirmed, revised, received or cancelled). The date only takes effect
517
+ * under a variant availability state that is not `inherit`. Needs `UpdateCatalog` or
518
+ * `UpdateProduct` on every store holding the variant, and the Purchasing plugin. Answers the
519
+ * variant's source as {@link availableFromSource} reads it. Refusals:
520
+ * - `AVAILABLE_FROM_SOURCE_INVALID` → `ValidationError` (400): a source other than `manual` or
521
+ * `incoming`; refused before sending too.
522
+ * - `PURCHASING_NOT_ENABLED` → `BusinessRuleError` (422): `incoming` while purchasing is off.
523
+ * - `AVAILABLE_FROM_SOURCE_SHARED_VARIANT` → `BusinessRuleError` (422): `incoming` for a
524
+ * variant stores of several legal entities, or an organization, hold.
525
+ * - `ENTITY_NOT_FOUND` → `NotFoundError` (404): a variant this store does not have.
526
+ *
527
+ * @effect write
528
+ */
529
+ setAvailableFromSource(variantId: string, source: AvailableFromSource, options?: Call): Promise<VariantAvailableFromSource>;
288
530
  }
289
- export declare const VARIANT_FIELDS = "\n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n price\n priceWithTax\n currencyCode\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n }\n assets { \n id\n name\n preview\n source\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n }\n";
290
- export declare const VARIANTS_QUERY = "\n query CatalogVariants($productId: ID!, $options: ProductVariantListOptions) {\n productVariants(productId: $productId, options: $options) {\n items { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n price\n priceWithTax\n currencyCode\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n }\n assets { \n id\n name\n preview\n source\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n }\n }\n totalItems\n }\n }\n";
291
- export declare const VARIANT_QUERY = "\n query CatalogVariant($id: ID!) {\n productVariant(id: $id) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n price\n priceWithTax\n currencyCode\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n }\n assets { \n id\n name\n preview\n source\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n }\n }\n }\n";
292
- export declare const CREATE_VARIANTS_MUTATION = "\n mutation CatalogCreateVariants($input: [CreateProductVariantInput!]!) {\n createProductVariants(input: $input) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n price\n priceWithTax\n currencyCode\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n }\n assets { \n id\n name\n preview\n source\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n }\n }\n }\n";
293
- export declare const UPDATE_VARIANTS_MUTATION = "\n mutation CatalogUpdateVariants($input: [UpdateProductVariantInput!]!) {\n updateProductVariants(input: $input) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n price\n priceWithTax\n currencyCode\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n }\n assets { \n id\n name\n preview\n source\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n }\n }\n }\n";
531
+ export declare const VARIANT_FIELDS = "\n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n storePrice {\n price\n priceWithTax\n currencyCode\n }\n prices {\n currencyCode\n price\n }\n stockOnHand\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n assets { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n minOrderQuantity\n salesUnit\n position\n cost\n packageWeightGrams\n packageLengthCm\n packageWidthCm\n packageHeightCm\n backorderPolicy\n backorderLimit\n gtin\n mpn\n }\n";
532
+ export declare const VARIANTS_QUERY = "\n query CatalogVariants($productId: ID!, $options: ProductVariantListOptions) {\n productVariants(productId: $productId, options: $options) {\n items { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n storePrice {\n price\n priceWithTax\n currencyCode\n }\n prices {\n currencyCode\n price\n }\n stockOnHand\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n assets { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n minOrderQuantity\n salesUnit\n position\n cost\n packageWeightGrams\n packageLengthCm\n packageWidthCm\n packageHeightCm\n backorderPolicy\n backorderLimit\n gtin\n mpn\n }\n }\n totalItems\n }\n }\n";
533
+ /** Two fields a row, for {@link VariantsModule.optionSets}: the id and its options' ids. */
534
+ export declare const VARIANT_OPTION_SETS_QUERY = "\n query CatalogVariantOptionSets($productId: ID!, $options: ProductVariantListOptions) {\n productVariants(productId: $productId, options: $options) {\n items {\n id\n options {\n id\n }\n }\n totalItems\n }\n }\n";
535
+ export declare const VARIANT_QUERY = "\n query CatalogVariant($id: ID!) {\n productVariant(id: $id) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n storePrice {\n price\n priceWithTax\n currencyCode\n }\n prices {\n currencyCode\n price\n }\n stockOnHand\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n assets { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n minOrderQuantity\n salesUnit\n position\n cost\n packageWeightGrams\n packageLengthCm\n packageWidthCm\n packageHeightCm\n backorderPolicy\n backorderLimit\n gtin\n mpn\n }\n }\n }\n";
536
+ export declare const CREATE_VARIANTS_MUTATION = "\n mutation CatalogCreateVariants($input: [CreateProductVariantInput!]!) {\n createProductVariants(input: $input) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n storePrice {\n price\n priceWithTax\n currencyCode\n }\n prices {\n currencyCode\n price\n }\n stockOnHand\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n assets { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n minOrderQuantity\n salesUnit\n position\n cost\n packageWeightGrams\n packageLengthCm\n packageWidthCm\n packageHeightCm\n backorderPolicy\n backorderLimit\n gtin\n mpn\n }\n }\n }\n";
537
+ export declare const UPDATE_VARIANTS_MUTATION = "\n mutation CatalogUpdateVariants($input: [UpdateProductVariantInput!]!) {\n updateProductVariants(input: $input) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n storePrice {\n price\n priceWithTax\n currencyCode\n }\n prices {\n currencyCode\n price\n }\n stockOnHand\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n assets { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n minOrderQuantity\n salesUnit\n position\n cost\n packageWeightGrams\n packageLengthCm\n packageWidthCm\n packageHeightCm\n backorderPolicy\n backorderLimit\n gtin\n mpn\n }\n }\n }\n";
294
538
  export declare const DELETE_VARIANTS_MUTATION = "\n mutation CatalogDeleteVariants($ids: [ID!]!) {\n deleteProductVariants(ids: $ids) { \n result\n message\n }\n }\n";
295
539
  /**
296
540
  * A document of its own, never a field of `VARIANT_FIELDS`: every other variant read keeps
297
541
  * working against an engine older than the field, and pays nothing for it.
298
542
  */
299
543
  export declare const VARIANT_PRICE_SOURCES_QUERY = "\n query CatalogVariantPriceSources($id: ID!) {\n productVariant(id: $id) {\n id\n priceSources {\n currencyCode\n price\n source\n organizationPrice\n organizationName\n }\n }\n }\n";
300
- export declare const REVERT_TO_ORGANIZATION_PRICE_MUTATION = "\n mutation CatalogRevertToOrganizationPrice($variantIds: [ID!]!, $currencyCodes: [CurrencyCode!]) {\n revertToOrganizationPrice(variantIds: $variantIds, currencyCodes: $currencyCodes) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n price\n priceWithTax\n currencyCode\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n }\n assets { \n id\n name\n preview\n source\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n }\n }\n }\n";
544
+ export declare const REVERT_TO_ORGANIZATION_PRICE_MUTATION = "\n mutation CatalogRevertToOrganizationPrice($variantIds: [ID!]!, $currencyCodes: [CurrencyCode!]) {\n revertToOrganizationPrice(variantIds: $variantIds, currencyCodes: $currencyCodes) { \n id\n productId\n createdAt\n updatedAt\n languageCode\n name\n sku\n enabled\n storePrice {\n price\n priceWithTax\n currencyCode\n }\n prices {\n currencyCode\n price\n }\n stockOnHand\n taxCategory {\n id\n name\n }\n trackInventory\n outOfStockThreshold\n useGlobalOutOfStockThreshold\n stockLevels {\n stockLocationId\n stockOnHand\n stockAllocated\n }\n options {\n id\n code\n name\n groupId\n }\n featuredAsset { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n assets { \n id\n name\n preview\n source\n type\n mimeType\n customFields {\n altText\n }\n }\n facetValues { \n id\n code\n name\n facet {\n id\n code\n name\n }\n }\n translations {\n id\n languageCode\n name\n }\n customFields {\n taxClassKey\n availabilityState\n availableFrom\n preorderLimit\n parcelCapacity\n parcelPacking\n minOrderQuantity\n salesUnit\n position\n cost\n packageWeightGrams\n packageLengthCm\n packageWidthCm\n packageHeightCm\n backorderPolicy\n backorderLimit\n gtin\n mpn\n }\n }\n }\n";
545
+ /** Its own document: see {@link VariantsModule.availableFromSource}. */
546
+ export declare const VARIANT_AVAILABLE_FROM_SOURCE_QUERY = "\n query CatalogVariantAvailableFromSource($productVariantId: ID!) {\n variantAvailableFromSource(productVariantId: $productVariantId) {\n \n productVariantId\n source\n availableFrom\n confirmedIncomingOn\n sharedAcrossLegalEntities\n\n }\n }\n";
547
+ export declare const SET_VARIANT_AVAILABLE_FROM_SOURCE_MUTATION = "\n mutation CatalogSetVariantAvailableFromSource(\n $input: SetVariantAvailableFromSourceInput!\n $idempotencyKey: String\n ) {\n setVariantAvailableFromSource(input: $input, idempotencyKey: $idempotencyKey) {\n \n productVariantId\n source\n availableFrom\n confirmedIncomingOn\n sharedAcrossLegalEntities\n\n }\n }\n";
301
548
  /** The price basis the store stores, read on the SAME tenant as the write. */
302
549
  export declare const PRICE_BASIS_QUERY = "\n query CatalogPriceBasis {\n activeChannel {\n pricesIncludeTax\n }\n }\n";
303
- interface WireVariant extends Omit<ProductVariant, keyof Availability<string> | 'taxClassKey' | 'parcelCapacity' | 'parcelPacking'> {
304
- customFields: (Partial<Availability<VariantAvailabilityState>> & {
550
+ /** The variant fields read out of `customFields` as they are, null for an unset one. */
551
+ export declare const LIFTED_CUSTOM_FIELDS: readonly ["minOrderQuantity", "salesUnit", "position", "cost", "packageWeightGrams", "packageLengthCm", "packageWidthCm", "packageHeightCm", "backorderPolicy", "backorderLimit", "gtin", "mpn"];
552
+ type LiftedCustomField = (typeof LIFTED_CUSTOM_FIELDS)[number];
553
+ interface WireVariant extends Omit<ProductVariant, keyof Availability<string> | 'taxClassKey' | 'parcelCapacity' | 'parcelPacking' | LiftedCustomField | 'featuredAsset' | 'assets'> {
554
+ featuredAsset: WireAssetRef | null;
555
+ assets: WireAssetRef[];
556
+ customFields: (Partial<Availability<VariantAvailabilityState>> & Partial<Pick<ProductVariant, LiftedCustomField>> & {
305
557
  taxClassKey?: string | null;
306
558
  parcelCapacity?: number | null;
307
559
  parcelPacking?: string | null;
308
560
  }) | null;
309
561
  }
562
+ /** Lift the custom fields to first-class fields. */
310
563
  export declare function toVariant(wire: WireVariant): ProductVariant;
564
+ /**
565
+ * The engine's `ProductVariantListOptions` for {@link VariantListOptions}, without the page
566
+ * window. ONE sort key, never a tie-breaker beside it: graphql-js coerces an input object in the
567
+ * order its TYPE declares the fields, and `ProductVariantSortParameter` declares `id` before every
568
+ * field named here, so `{ position, id }` reaches the engine as `{ id, position }` and sorts by id
569
+ * alone (W10-113 finding). The engine completes the order itself: `productVariants(productId:)`
570
+ * (core's `getVariantsByProductId`) appends `id ASC` after the caller's key, which makes it total,
571
+ * so offset pages neither repeat nor skip a row even where `position` is null.
572
+ */
573
+ export declare function variantListOptions(options: VariantListOptions | undefined): {
574
+ sort: Record<string, 'ASC' | 'DESC'>;
575
+ filter?: Record<string, unknown>;
576
+ filterOperator?: 'OR';
577
+ };
311
578
  /** A write's prices and the basis it states them on. */
312
579
  export interface PricedInput {
313
580
  price?: number;