0.37.0
Faster start-up with zod schemas out of the app bundle, 23 unused blocks removed, products and collections that fail to load get a way back, AppsFlyer deep links on the V2 tracker, rectangle hotspots, and a Web SDK signout.
Native change for GoKwik apps only
@gauntlet/gokwik moves react-native-kwikpass from 0.1.72 to 0.1.80,
which ships native iOS and Android code. Apps using GoKwik need
pod install and a store release. Every other
change in this release is JavaScript only.
Breaking
Zod schemas are no longer exported as values from @gauntlet/types.
The package root now re-exports its schema files as types only, so an app
no longer builds every schema at launch just to infer types. Schema values
such as backgroundOptionsSchema are at @gauntlet/types/schemas. Code
that validates at runtime (Studio, a backend, a custom block form) must
import from there; from the root, the value is undefined. Types and the
quick-action and bottom-bar helpers are still exported from the root.
23 blocks are removed. No published app config placed any of them:
a1-accordion-image, a1-collection-banner,
a1-generic-metafield-accordion, a1-image-list, a1-product-grid,
a1-product-list, collection-list, collection-list-background,
color-image, empty-search-suggestions, follow-us, opinew-reviews,
payment-succes, pdp-description, pdp-description-native,
plp-content, product-card-v2, profile-edit, search-bar,
search-recommendations, shopify-customer-payment-webview, size_guide
and trending-products. A config that still names one renders nothing in
its place, and brewery reports the screen and block once per launch as a
Sentry warning. Their components are deleted from @gauntlet/components,
except ProductCardBlockV2, ProfileEdit and ColorImage, which other
code still uses. Four subpath exports go with them:
organisms/a1-collection-image-banner/index.web,
organisms/a1-generic-metafield-accordion/index.web,
organisms/opinew-reviews/utils and
organisms/pdp-description-native/index.web. @gauntlet/components no
longer depends on react-native-table-component.
AppsflyerTrackerV2 moves to analytics-v2. The file was
analyticsV2. Importing from @gauntlet/appsflyer is unaffected; a deep
import of the old path breaks.
New
AI chat screen for Purands. @gauntlet/purands registers a
purands-chat screen through registerPurandsScreens(screenRegistry). It
opens the chat in a webview and passes the page the shopper came from. The
integration config gains gatewayOrigin, clientId and tenant.
Rectangle hotspots. link-hotspot markers can be rectangle as well as
circle, sized by aspectRatio, and outlined to keep the artwork under
them visible. revealHotspotsOnPress briefly shows hidden markers when the
shopper taps elsewhere on the image, and animateHotspots: false turns off
the pulse. Marker styles now live under item.marker; configs that still
use item.circle keep working and render in the new style.
Web SDK signout(). A web page can call appbrewSDK.signout() to sign
the app out, the same as the native sign-out button. Before, a page's own
sign-out ended only the web session, and the app signed the customer
straight back in.
AppsFlyer deep links on AppsflyerTrackerV2. The V2 tracker now
handles OneLink deep links and first-launch deferred deep links the same
way as the V1 tracker. It also reports app opens from other links for
re-engagement attribution and registers customDomains for branded
OneLink domains. Debug logs are on in development builds only.
GoKwik webview debugging. Set integrations.gokwik.webviewDebuggingEnabled
to inspect the KwikPass checkout webview.
Fixed
Products and collections that fail to load show a way back. A handle
Shopify cannot find used to leave the page on skeletons for ever. The page
now says it couldn't open the product or collection and offers Go back. It
retries once and reports to Sentry if the retry fails. Restyle it with
theme.catalogUnavailable.
Meta collection ads with a pinned product open the collection. A link
like /collections/x?pinned=https://shop/products/y used to route to the
product page with a broken handle.
A product without variants no longer leaves its collection loading. Its price lookup threw after a successful fetch, and the entry stayed loading with no retry.
The Shopify customer token is refreshed only after the config loads. The check used to run while the config was still loading, before the auth module had the settings it needs.
Form inputs keep focus on the first invalid keystroke. An error style
with a shadowColor re-mounted the input on Fabric, closing the keyboard.
Webhook tracker events carry UTM attribution. Each event now sends the
session's utm_* values in an attribution field next to payload.
run-android, run-ios, clean-android and clean-ios work in apps in
their own repo. They started with zx, which picked up whatever zx was
on the PATH and read the script path as the app name. They now run with
node.
Performance
Faster JavaScript start-up. Taking the zod schemas out of the app bundle (see Breaking) removes about 500 ms of start-up JavaScript measured on an Android emulator.

