AppbrewDevelopers
Changelog

0.30.0

Brewmeter, the observability SDK that owns the Sentry surface and shows every HTTP call the app makes, one Shopify fetch transport that does its own measuring, analytics v2 event forwarding, and a sign-out that only fires on a confirmed token rejection.

No native changes to the platform

Every platform change here is JavaScript. No native module was added or altered, so apps pick this up with a build at 0.30.0 — no store release is required for the platform itself.

The two new integrations are the exception, and only if you adopt one: @gauntlet/location-capture peers on @react-native-community/geolocation and react-native-permissions, so adding it to an app is a native change for that app.

Breaking

None. No public export was removed and no exported interface gained a required member. Two things that look breaking in the diff are not:

  • createEnhancedFetch now returns EnhancedFetch rather than typeof fetch. EnhancedInit extends RequestInit with optional fields only, so the result is still assignable to typeof fetch and existing call sites compile unchanged.
  • meteredFetch was deleted from @gauntlet/shopify. It was never exported from the package barrel and had no consumers outside its own package.

New

@gauntlet/brewmeter — the SDK that owns the Sentry surface. Observability moves out of the apps and into one package. It reports every HTTP call the app makes, with query-string secrets stripped before anything is logged, and labels each request with its queue wait, attempt and transaction name so a slow screen can be traced to the call that caused it. Launch instrumentation was reworked at the same time, and two read-side numbers that had been wrong were corrected. There is an HTTP endpoint view per app and across the fleet.

Two new integrations. @gauntlet/location-capture (geolocation capture with its own permission flow) and @gauntlet/ola-maps. Both are published for the first time in this release, alongside brewmeter — see the native-changes note above before adopting location-capture.

Analytics v2 forwards an event log to Appbrew analytics. Trackers gain a paramsWhitelist and a paramsMapper so a tracker decides which event parameters it forwards and under what names. Both have defaults on AnalyticsTrackerV2, so existing trackers need no change.

Webview URL on the route. The current webview URL is exposed on the route, so a visibility rule can key off it.

Changed

One Shopify fetch transport. Two wrappers were doing one job at two layers — in shopify-auth they were literally nested. Measurement now lives in the transport: all six Shopify clients construct a createEnhancedFetch directly, and the GraphQL operation naming stays in the Shopify package as operationNamer, since 11 of enhanced-fetch's other consumers are not GraphQL and have no business parsing an operation name. EnhancedInit picks up brewName and brewService so a call site can name a request that a URL cannot distinguish — searchtap POSTs six different operations to one URL.

Fixed

  • Sign-out only fires on a confirmed token rejection. A failed refresh, a network error or an ambiguous response no longer logs the shopper out; only a response that actually rejects the token does.

  • PLP no longer freezes on iOS via Branch, and the unresolved-collection cache key that went with it is fixed.

  • Shopify search sends buyer country context on every query, so prices and availability match the shopper's market, and search terms are sanitized so invalid input returns no results instead of an error.

  • Cart fixes. A product with a zero compare-at price is treated as having no compare-at price rather than showing a fake discount. In cart-list-v2, pressing minus at quantity 1 removes the line. Flits receives the cart subtotal rather than the list total.

  • PDP product video plays and pauses on tap.

  • PayPal falls back to its modal on iOS in payment-web-view-v4.

  • Colour swatch labels match with surrounding whitespace trimmed, so a variant whose label carries a stray space still resolves.

  • Gokwik rolls back the kwikpass session when the sign-in handoff fails, instead of leaving a half-established session behind.

  • Nector reviews uses the app's configured sign-in screen.

  • The no-internet screen renders on a grid-enabled PLP.

  • Release sourcemaps land where the crash worker looks for them.

Upgrading

Move every @gauntlet/* entry to 0.30.0 together with the Appbrew-published @app-brew/* packages, which version with the platform, then rebuild. No pod install or Gradle change is needed for this release unless you are adding @gauntlet/location-capture. Full workflow: Upgrading @gauntlet packages.

On this page