@wix/himalaya-cli 0.1373.0 → 0.1375.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.
@@ -78,6 +78,28 @@ The `ux_evidence_*` codes map to the existing typed `uxEvidence.state`; a succes
78
78
  `recorded` state has no refusal code. Successful pushes and warnings do not gain
79
79
  failure codes. A forced push still follows the existing override rules.
80
80
 
81
+ ## `himi store iap status` codes
82
+
83
+ Status adds these stable codes to incomplete JSON results. Existing result fields and exit
84
+ statuses are preserved: incomplete status is exit 1; a failed live Wix catalog read is exit 2.
85
+
86
+ | Code | Meaning |
87
+ |---|---|
88
+ | `price_drift` | Apple differs from the price source's resolved target. |
89
+ | `price_check_unavailable` | An item's price cannot be compared, such as a missing Wix item or changed currency. |
90
+ | `status_incomplete` | Other requested provisioning is incomplete. |
91
+ | `wix_catalog_unavailable` | `--refresh-wix` could not read the site catalog or obtain owner authentication; no manifest fallback occurred. |
92
+
93
+ Item-level unavailable checks take precedence over drift in the top-level code. Detailed
94
+ `priceSource`, `priceDrift` and `priceCheckIssue` fields live in each item's `provisioning` report.
95
+ Manifest parsing failures retain their legacy envelopes; this is not a whole-command migration.
96
+
97
+ IAP provisioning refusals from `plan`, `apply` and `status` also expose their existing typed
98
+ `reason` as a top-level `code`: `target` (wrong app, bundle, team or territory), `access`
99
+ (Apple authentication/authorization), `plan` (invalid reviewed plan), `account` (changed
100
+ credential profile or key), and `drift` (Apple changed since planning). Existing `reason` and
101
+ exit statuses remain intact. Manifest parsing failures still use their legacy envelope.
102
+
81
103
  ## `himi store iap connect` codes
82
104
 
83
105
  `connect` prints one envelope with the whole report. When the setup is not complete it is
@@ -164,7 +164,7 @@ himi store iap connect --manifest ./iap-products.json --profile fit-club-owner \
164
164
  | Decision | Meaning |
165
165
  |---|---|
166
166
  | `create` | absent in Apple; apply will create it and configure it |
167
- | `update` | an editable draft exists; apply will add only what is missing |
167
+ | `update` | fills missing draft configuration, or changes an eligible `atLeast` price with a reviewed `changePrice` operation |
168
168
  | `reuse` | already configured exactly as requested; nothing to do |
169
169
  | `conflict` | differs in a way this command will not change; nothing is written |
170
170
 
@@ -172,9 +172,14 @@ A **conflict** is any of:
172
172
 
173
173
  - the same product id with another type;
174
174
  - the reference name already used by another product id;
175
- - a live or in-review product whose metadata, price or availability differs;
176
- - an existing price or availability that differs;
177
- - no exact price point for an existing product.
175
+ - a live product whose metadata or availability differs, or an in-review product needing changes;
176
+ - an existing `exact` price or availability that differs;
177
+ - a price change with a different base territory, ambiguous price, custom territory prices, or a future/temporary schedule;
178
+ - no Apple point satisfying the requested price rule, or an unknown product/review state needing changes.
179
+
180
+ `changePrice` carries `from` and `to` amounts and prints both for review. It changes only
181
+ the price: approved-product metadata and availability remain locked. The command conservatively
182
+ holds in-review changes even though Apple documents price changes as available at any time.
178
183
 
179
184
  Resolve conflicts in App Store Connect or in the manifest, then plan again.
180
185
 
@@ -196,7 +201,9 @@ created. The plan marks this in the item's `notes`.
196
201
  write. Planned work that already happened is accepted as done.
197
202
  4. For each product, it creates the product, then a draft version, then its
198
203
  localizations. Then it sets the exact initial price and the explicit territories. Then
199
- it reads everything back.
204
+ it reads everything back. A `changePrice` instead writes an immediate base-territory price
205
+ through the same price-schedule API; Apple equalizes the other territories. A changed source
206
+ price, schedule, review state or resolved target stops apply before the first write.
200
207
  5. Writes the result file, even when the run is partial.
201
208
 
202
209
  **Large catalogs.** App Store Connect allows about 3,600 API requests an hour per key.
@@ -224,6 +231,34 @@ schedule, even without the local journal. Nothing is ever deleted or rolled back
224
231
  **`status` is read-only.** It reports what Apple has for each product. Add `--out <file>`
225
232
  to save it in the same shape as the result file.
226
233
 
234
+ ### When the Wix price changes
235
+
236
+ Price synchronization is explicit; there is no background writer. Refresh a per-item manifest,
237
+ review the new price, then apply:
238
+
239
+ ```bash
240
+ himi store iap draft --site <msid> --profile fit-club-owner --apple-app 6450000001 \
241
+ --bundle com.example.fitclub --base-territory USA --merge ./iap-products.json --out ./iap-products.json
242
+ himi store iap plan --manifest ./iap-products.json --profile fit-club-owner --out ./iap-plan.json
243
+ himi store iap apply --plan ./iap-plan.json --profile fit-club-owner --out ./iap-result.json
244
+ himi store iap status --manifest ./iap-products.json --profile fit-club-owner --refresh-wix --json
245
+ ```
246
+
247
+ `--merge` refreshes existing per-item `atLeast` amounts while preserving product ids, metadata,
248
+ territories and mappings. Explicit `exact` overrides and shared consumable tiers keep their prices.
249
+ Missing, hidden, free, unsupported or currency-changed Wix items retain their old entry and are
250
+ reported as retained. Review those reports before applying: retaining an entry does not disable it.
251
+
252
+ Status labels `provisioning.priceSource` as `manifest` by default. `--refresh-wix` requires Wix owner
253
+ authentication and reads the current site catalog without changing the manifest. It reports
254
+ `provisioning.priceDrift: { wix, apple, wouldBe, currency, baseTerritory, source }` when Apple's price
255
+ differs from the resolved target. Normal rounding is not drift. Missing or incomparable data is
256
+ reported as `priceCheckIssue`; a failed catalog read never falls back to the manifest. A live check
257
+ does not reprice shared tiers. Drift or unavailable checks make the overall status incomplete.
258
+
259
+ Only `atLeast` mismatches can plan a price edit. An `exact` mismatch remains a conflict even when
260
+ a live status check identifies it. Wix order and charge amounts are not changed by this workflow.
261
+
227
262
  ## Connecting the Wix site: `connect`
228
263
 
229
264
  `connect` makes the manifest's Wix site ready to sell those products, from the same manifest,
@@ -14,7 +14,7 @@ and generated templates. Historical receipts retain their recorded amounts.
14
14
  | `himi-branded-lite-plans` | Pricing Plan ID; `priceLine` | Shared Apple pricing and existing Join action through `pricingPlanOrders`; only one-time unlimited Plans can start Apple checkout |
15
15
  | `wix-spaces-plan-detail` | Pricing Plan ID; `price` | Shared pricing; remains read-only |
16
16
  | `createCheckoutService` / `checkoutScreen` | Pricing Plan ID; `priceLine` | Same shared Plans pricing and purchase; existing options, copy, login destination and factory shape retained |
17
- | `himi-store-product` | Stores product ID; `price` | Shared pricing; physical options/add/save retained. Digital checkout stays blocked while `STORES_ITEM_PAYMENT_ENABLED` is off; with it on, a digital product with no options sells through StartItemPayment ([checkout](iap-wix-checkout.md#wix-stores-items-through-startitempayment-off)) |
17
+ | `himi-store-product` | Stores product ID; `price` | Shared pricing; physical options/add/save retained. With Stores Apple sales enabled, a mapped digital product without options offers Buy through the app-owned eCom order; `STORES_ITEM_PAYMENT_ENABLED` selects StartItemPayment instead ([checkout](iap-wix-checkout.md#wix-stores-items-through-startitempayment-off)) |
18
18
  | `himi-store-shop` | Stores product ID; price in `subtitle` | Batched visible pricing, including paged results; saved/cache metadata retains the commerce price rather than an Apple offer |
19
19
  | `himi-store-saved` | Stored product ID; `price` | Reprices saved rows through the shared source when shown; no added purchase action |
20
20
  | `himi-branded-lite-home` | Stores product IDs; hero and rail prices | Shared pricing on visible product offers; navigation-only Program cards remain unchanged |
@@ -42,10 +42,12 @@ withdraw the shared checkout's access state; reading existing access never creat
42
42
 
43
43
  The existing Stores adapter reads `paymentStatus: PAID` as granted. That proves payment,
44
44
  not usable delivery of a download or course. It also lacks a verified member-scoped
45
- existing-ownership read. These screens therefore do **not** install `storesProductOrders`
46
- for sales while `STORES_ITEM_PAYMENT_ENABLED` is off, as shipped; only the product screen does,
47
- once it is on. No Apple charge, hosted checkout or optimistic cart mutation is used to work
48
- around missing fulfillment. A confirmed physical product retains its regular checkout.
45
+ existing-ownership read. Only the product screen installs `storesProductOrders` for sales, while
46
+ `storesAppleSalesEnabled()` is true. As shipped, `STORES_APPLE_SALES_ENABLED` is on and
47
+ `STORES_ITEM_PAYMENT_ENABLED` is off, so mapped digital products without options use the app-owned
48
+ eCom checkout and order before the Apple charge. Live digital fulfillment remains unverified.
49
+ The cart and list screens do not start Apple sales. A confirmed physical product retains its
50
+ regular checkout.
49
51
  Unknown product facts, unsupported catalog apps and missing routing fail closed.
50
52
 
51
53
  Stores fulfillment, post-success removal of the original digital cart line, and Atlas
@@ -1961,20 +1961,38 @@
1961
1961
  {
1962
1962
  "name": "STORES_ITEM_PAYMENT_ENABLED",
1963
1963
  "kind": "const",
1964
- "jsdoc": "/**\n * Whether Wix Stores items sell through the App Store, through wix-iap StartItemPayment\n * (catalyst-server #24496), which places the member's eCom order for one catalog item. OFF: that RPC\n * is not deployed, the member's identity across Serve → wix-iap → eCom is unproven, and a paid Stores\n * order is not yet proven to deliver the download. The one switch: it adds the Stores rule to\n * `APPLE_SALE_RULES`, which the mapping source and `himi store iap connect` read, and turns on the\n * checkout's path (`itemPaymentEnabled` in @himalaya/iap-checkout).\n */",
1964
+ "jsdoc": "/**\n * Whether Wix Stores items sell through the App Store, through wix-iap StartItemPayment\n * (catalyst-server #24496), which places the member's eCom order for one catalog item. OFF: that RPC\n * is not deployed, the member's identity across Serve → wix-iap → eCom is unproven, and a paid Stores\n * order is not yet proven to deliver the download. Enabling this also enables the Stores rule in\n * `APPLE_SALE_RULES` and selects `itemPaymentEnabled` in @himalaya/iap-checkout.\n */",
1965
1965
  "decl": "export const STORES_ITEM_PAYMENT_ENABLED = false;"
1966
1966
  },
1967
+ {
1968
+ "name": "STORES_APPLE_SALES_ENABLED",
1969
+ "kind": "const",
1970
+ "jsdoc": "/**\n * Whether Wix Stores items sell through the App Store at all: the Stores rule in `APPLE_SALE_RULES`\n * and the product screen's Buy. With StartItemPayment off, a sale uses the app's own order: an eCom\n * checkout and order, its `appleIAP` cashier charge, then StartPayment. ON for mapped digital\n * products. Member checkout, the eCom IAP flag, cashier item identity and digital fulfillment\n * remain unverified in Sandbox.\n */",
1971
+ "decl": "export const STORES_APPLE_SALES_ENABLED = true;"
1972
+ },
1967
1973
  {
1968
1974
  "name": "STORES_PRODUCT_SALE_RULE",
1969
1975
  "kind": "const",
1970
1976
  "jsdoc": "/** StartItemPayment's CatalogReference: the purchases catalog sells a Stores product under its product\n * id (eCom's `catalogItemId`). One-time unlocks only, whatever the backend also accepts. */",
1971
1977
  "decl": "export const STORES_PRODUCT_SALE_RULE: AppleSaleRule = { appProductId: (id) => id, productType: \"NON_CONSUMABLE\" };"
1972
1978
  },
1979
+ {
1980
+ "name": "PRICING_PLAN_APPLE_SALES_ENABLED",
1981
+ "kind": "const",
1982
+ "jsdoc": "/** Off until a member's plan order, its cashier item id and Sandbox fulfillment are proven live.\n * Recurring and time-limited plans stay outside this rule; their Billing lifecycle is unfinished. */",
1983
+ "decl": "export const PRICING_PLAN_APPLE_SALES_ENABLED = false;"
1984
+ },
1985
+ {
1986
+ "name": "appleSaleRules",
1987
+ "kind": "function",
1988
+ "jsdoc": "/**\n * The one definition `himi store iap connect` writes mappings by and the mapping source reads them by,\n * keyed by catalog kind. wix-iap StartPayment maps the cashier order's single item id, and Online\n * Programs builds that order with the program id as the item id; programs are one-time unlocks.\n * Wix Stores and one-time unlimited Pricing Plans join only with their independent switches.\n */",
1989
+ "decl": "export function appleSaleRules(options: { storesAppleSalesEnabled?: boolean; storesItemPaymentEnabled?: boolean; pricingPlanAppleSalesEnabled?: boolean } = {}): Readonly<Record<string, AppleSaleRule>>;"
1990
+ },
1973
1991
  {
1974
1992
  "name": "APPLE_SALE_RULES",
1975
1993
  "kind": "const",
1976
- "jsdoc": "/**\n * The one definition `himi store iap connect` writes mappings by and the mapping source reads them by,\n * keyed by catalog kind. wix-iap StartPayment maps the cashier order's single item id, and Online\n * Programs builds that order with the program id as the item id; programs are one-time unlocks.\n * Wix Stores joins only with `STORES_ITEM_PAYMENT_ENABLED`. Other verticals' order item ids are not\n * established yet, so their items keep their own commerce.\n */",
1977
- "decl": "export const APPLE_SALE_RULES: Readonly<Record<string, AppleSaleRule>> = STORES_ITEM_PAYMENT_ENABLED\n ? { onlineProgram: ONLINE_PROGRAM_SALE_RULE, storesProduct: STORES_PRODUCT_SALE_RULE }\n : { onlineProgram: ONLINE_PROGRAM_SALE_RULE };"
1994
+ "jsdoc": "",
1995
+ "decl": "export const APPLE_SALE_RULES = appleSaleRules();"
1978
1996
  },
1979
1997
  {
1980
1998
  "name": "HostCallExpectation",
@@ -2338,7 +2356,7 @@
2338
2356
  "name": "\"./checkout-source.js\"",
2339
2357
  "kind": "reexport",
2340
2358
  "jsdoc": "",
2341
- "decl": "export { itemPaymentEnabled } from \"./checkout-source.js\";"
2359
+ "decl": "export { itemPaymentEnabled, storesAppleSalesEnabled } from \"./checkout-source.js\";"
2342
2360
  },
2343
2361
  {
2344
2362
  "name": "\"./apple-iap-contract.js\"",
@@ -2379,9 +2397,15 @@
2379
2397
  {
2380
2398
  "name": "itemPaymentEnabled",
2381
2399
  "kind": "function",
2382
- "jsdoc": "/**\n * Whether an item whose adapter names it in eCom's catalog (a Wix Stores product) is paid through\n * wix-iap StartItemPayment, which places the member's eCom order server-side. The same switch as\n * the Stores sale rule (`STORES_ITEM_PAYMENT_ENABLED`, @himalaya/iap), so Stores items reach an App\n * Store route only when this path sells them. Turning it off again stops only new attempts: stored\n * ones are still held, completed and tracked ().\n */",
2400
+ "jsdoc": "/**\n * Whether an item whose adapter names it in eCom's catalog (a Wix Stores product) is paid through\n * wix-iap StartItemPayment, which places the member's eCom order server-side. The same switch as\n * `STORES_ITEM_PAYMENT_ENABLED` in @himalaya/iap; otherwise an enabled Stores sale uses the app's\n * own order. Turning it off again stops only new attempts: stored\n * ones are still held, completed and tracked ().\n */",
2383
2401
  "decl": "export function itemPaymentEnabled(): boolean;"
2384
2402
  },
2403
+ {
2404
+ "name": "storesAppleSalesEnabled",
2405
+ "kind": "function",
2406
+ "jsdoc": "/** Whether Wix Stores items sell through the App Store, by either path: StartItemPayment when\n * `itemPaymentEnabled`, otherwise the app's own eCom order (`STORES_APPLE_SALES_ENABLED`). */",
2407
+ "decl": "export function storesAppleSalesEnabled(): boolean;"
2408
+ },
2385
2409
  {
2386
2410
  "name": "WixBridge",
2387
2411
  "kind": "interface",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1373.0",
3
+ "version": "0.1375.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -71,5 +71,5 @@
71
71
  "artifactId": "himalaya-cli"
72
72
  }
73
73
  },
74
- "falconPackageHash": "23e039b5df6fd9eda7ff96ec6eeb2144ad5c953a89054218e1f1e2e7"
74
+ "falconPackageHash": "5204822d6f5b0a310f29038c968152ee74e8332ede68839d488c5949"
75
75
  }
@@ -1,6 +1,6 @@
1
1
  // Tier-5 bundle: himi-store — product detail.
2
2
  import { withIapPresentation } from "../_shared/iap-presentation.js";
3
- import { itemPaymentEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
3
+ import { storesAppleSalesEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
4
4
  import { iapPriceCopy, iapPurchaseCopy } from "../_shared/iap-worker.js";
5
5
  import { share as shareSheet } from "@himalaya/share";
6
6
  import { addToCurrentCart, getCurrentCart } from "@himalaya/wix-ecom";
@@ -317,10 +317,10 @@ function derive(s: S): S {
317
317
  // read answering late — must not replace the badge the add set (#3468 review).
318
318
  let cartBadgeEpoch = 0;
319
319
 
320
- // A digital product with no options sells through the App Store once the platform pays for Wix
321
- // Stores items with wix-iap StartItemPayment (`itemPaymentEnabled`). Until then, and for any other
322
- // product, an App Store route only blocks the regular checkout, as before.
323
- const SELLS_THROUGH_APPLE = itemPaymentEnabled();
320
+ // A digital product with no options sells through the App Store once the platform sells Wix Stores
321
+ // items there (`storesAppleSalesEnabled`), through StartItemPayment or the app's own eCom order.
322
+ // Until then, and for any other product, an App Store route only blocks the regular checkout.
323
+ const SELLS_THROUGH_APPLE = storesAppleSalesEnabled();
324
324
  const WIX_STORES_APP = "215238eb-22a5-4c36-9e7b-e7c08025e04e";
325
325
  const NOT_APPLE: IapPurchaseFields = { appleRoute: false, accessReady: false, buyLabel: "", buyDisabled: true, buyBusy: false, buyNote: "" };
326
326
 
@@ -1,6 +1,6 @@
1
1
  // Tier-5 bundle: himi-store — product detail.
2
2
  import { withIapPresentation } from "../_shared/iap-presentation.js";
3
- import { itemPaymentEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
3
+ import { storesAppleSalesEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
4
4
  import { iapPriceCopy, iapPurchaseCopy } from "../_shared/iap-worker.js";
5
5
  import { share as shareSheet } from "@himalaya/share";
6
6
  import { addToCurrentCart, getCurrentCart } from "@himalaya/wix-ecom";
@@ -317,10 +317,10 @@ function derive(s: S): S {
317
317
  // read answering late — must not replace the badge the add set (#3468 review).
318
318
  let cartBadgeEpoch = 0;
319
319
 
320
- // A digital product with no options sells through the App Store once the platform pays for Wix
321
- // Stores items with wix-iap StartItemPayment (`itemPaymentEnabled`). Until then, and for any other
322
- // product, an App Store route only blocks the regular checkout, as before.
323
- const SELLS_THROUGH_APPLE = itemPaymentEnabled();
320
+ // A digital product with no options sells through the App Store once the platform sells Wix Stores
321
+ // items there (`storesAppleSalesEnabled`), through StartItemPayment or the app's own eCom order.
322
+ // Until then, and for any other product, an App Store route only blocks the regular checkout.
323
+ const SELLS_THROUGH_APPLE = storesAppleSalesEnabled();
324
324
  const WIX_STORES_APP = "215238eb-22a5-4c36-9e7b-e7c08025e04e";
325
325
  const NOT_APPLE: IapPurchaseFields = { appleRoute: false, accessReady: false, buyLabel: "", buyDisabled: true, buyBusy: false, buyNote: "" };
326
326
 
@@ -1,6 +1,6 @@
1
1
  // Tier-5 bundle: himi-store — product detail.
2
2
  import { withIapPresentation } from "../_shared/iap-presentation.js";
3
- import { itemPaymentEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
3
+ import { storesAppleSalesEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
4
4
  import { iapPriceCopy, iapPurchaseCopy } from "../_shared/iap-worker.js";
5
5
  import { share as shareSheet } from "@himalaya/share";
6
6
  import { addToCurrentCart, getCurrentCart } from "@himalaya/wix-ecom";
@@ -317,10 +317,10 @@ function derive(s: S): S {
317
317
  // read answering late — must not replace the badge the add set (#3468 review).
318
318
  let cartBadgeEpoch = 0;
319
319
 
320
- // A digital product with no options sells through the App Store once the platform pays for Wix
321
- // Stores items with wix-iap StartItemPayment (`itemPaymentEnabled`). Until then, and for any other
322
- // product, an App Store route only blocks the regular checkout, as before.
323
- const SELLS_THROUGH_APPLE = itemPaymentEnabled();
320
+ // A digital product with no options sells through the App Store once the platform sells Wix Stores
321
+ // items there (`storesAppleSalesEnabled`), through StartItemPayment or the app's own eCom order.
322
+ // Until then, and for any other product, an App Store route only blocks the regular checkout.
323
+ const SELLS_THROUGH_APPLE = storesAppleSalesEnabled();
324
324
  const WIX_STORES_APP = "215238eb-22a5-4c36-9e7b-e7c08025e04e";
325
325
  const NOT_APPLE: IapPurchaseFields = { appleRoute: false, accessReady: false, buyLabel: "", buyDisabled: true, buyBusy: false, buyNote: "" };
326
326
 
@@ -1,6 +1,6 @@
1
1
  // Tier-5 bundle: himi-store — product detail.
2
2
  import { withIapPresentation } from "../_shared/iap-presentation.js";
3
- import { itemPaymentEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
3
+ import { storesAppleSalesEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
4
4
  import { iapPriceCopy, iapPurchaseCopy } from "../_shared/iap-worker.js";
5
5
  import { share as shareSheet } from "@himalaya/share";
6
6
  import { addToCurrentCart, getCurrentCart } from "@himalaya/wix-ecom";
@@ -317,10 +317,10 @@ function derive(s: S): S {
317
317
  // read answering late — must not replace the badge the add set (#3468 review).
318
318
  let cartBadgeEpoch = 0;
319
319
 
320
- // A digital product with no options sells through the App Store once the platform pays for Wix
321
- // Stores items with wix-iap StartItemPayment (`itemPaymentEnabled`). Until then, and for any other
322
- // product, an App Store route only blocks the regular checkout, as before.
323
- const SELLS_THROUGH_APPLE = itemPaymentEnabled();
320
+ // A digital product with no options sells through the App Store once the platform sells Wix Stores
321
+ // items there (`storesAppleSalesEnabled`), through StartItemPayment or the app's own eCom order.
322
+ // Until then, and for any other product, an App Store route only blocks the regular checkout.
323
+ const SELLS_THROUGH_APPLE = storesAppleSalesEnabled();
324
324
  const WIX_STORES_APP = "215238eb-22a5-4c36-9e7b-e7c08025e04e";
325
325
  const NOT_APPLE: IapPurchaseFields = { appleRoute: false, accessReady: false, buyLabel: "", buyDisabled: true, buyBusy: false, buyNote: "" };
326
326
 
@@ -1,6 +1,6 @@
1
1
  // Tier-5 bundle: himi-store — product detail.
2
2
  import { withIapPresentation } from "../_shared/iap-presentation.js";
3
- import { itemPaymentEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
3
+ import { storesAppleSalesEnabled, storesProductOrders, type IapCommerce, type IapPurchaseFields } from "@himalaya/iap-checkout";
4
4
  import { iapPriceCopy, iapPurchaseCopy } from "../_shared/iap-worker.js";
5
5
  import { share as shareSheet } from "@himalaya/share";
6
6
  import { addToCurrentCart, getCurrentCart } from "@himalaya/wix-ecom";
@@ -317,10 +317,10 @@ function derive(s: S): S {
317
317
  // read answering late — must not replace the badge the add set (#3468 review).
318
318
  let cartBadgeEpoch = 0;
319
319
 
320
- // A digital product with no options sells through the App Store once the platform pays for Wix
321
- // Stores items with wix-iap StartItemPayment (`itemPaymentEnabled`). Until then, and for any other
322
- // product, an App Store route only blocks the regular checkout, as before.
323
- const SELLS_THROUGH_APPLE = itemPaymentEnabled();
320
+ // A digital product with no options sells through the App Store once the platform sells Wix Stores
321
+ // items there (`storesAppleSalesEnabled`), through StartItemPayment or the app's own eCom order.
322
+ // Until then, and for any other product, an App Store route only blocks the regular checkout.
323
+ const SELLS_THROUGH_APPLE = storesAppleSalesEnabled();
324
324
  const WIX_STORES_APP = "215238eb-22a5-4c36-9e7b-e7c08025e04e";
325
325
  const NOT_APPLE: IapPurchaseFields = { appleRoute: false, accessReady: false, buyLabel: "", buyDisabled: true, buyBusy: false, buyNote: "" };
326
326