=== relaybell changelog ===

Changes in older versions of the relaybell plugin. The latest versions are
listed under Changelog in readme.txt.

= 1.2.3 =
* Fix: password-protected posts no longer send a push when they are published.
  Before, the push showed the start of the protected text to every subscriber.
* Fix: posts published from the block editor now show their featured image in
  the push. The push now goes out once WordPress has finished saving the post,
  with its image and categories, and still only once per post.
* Fix: deleting the plugin on a multisite network with more than 100 sites now
  removes relaybell's settings and API key from every site, not only the first
  100.

= 1.2.2 =
* Fix: push didn't work at all on hosts whose firewall (ModSecurity, Imunify360,
  Wordfence, LiteSpeed and similar) blocked the service worker's address, because
  it contained a web address. It no longer does, and the status panel now says
  when a firewall, a password or a missing file stops the service worker.
  **Subscribe this browser** avoids the same firewall rules, and now says so when
  it can't set your browser as a test device.
* Fix: relaybell could fail to start on sites where a speed plugin delays
  JavaScript until the visitor interacts with the page, or where a speed or
  cookie-consent plugin loads relaybell's script later or in a different order.
* Fix: after you connected, reconnected, disconnected or updated the plugin, a
  page cache could keep giving visitors older copies of your pages — without
  relaybell, with the previous connection, or with the old service worker
  address — for up to a week. relaybell now clears the caches of common caching
  plugins and hosts at those moments, and the status panel warns when visitors
  still get an older copy (clear your host's or CDN's cache then).
* New: the status panel shows when relaybell last ran on your public pages, and
  warns when it hasn't (a page cache, a cookie-consent plugin, a security policy
  or the theme can stop it).
* New: a red warning in the status panel and on the Plugins screen while your
  relaybell account email isn't verified — until it is, relaybell sends nothing
  to your visitors (test pushes still work). **Send test push** mentions it too.
* Fix: a Project ID entered by hand under Advanced is checked: spaces and
  invisible characters picked up by copying are removed, anything that isn't a
  Project ID is refused, and when it doesn't belong to your API key, relaybell
  switches to the API key's site and tells you (before, visitors subscribed to
  one relaybell site while your posts went to another).
* Fix: the service worker works when WordPress builds plugin addresses with
  http:// on an https site (behind a proxy) or without a host. When plugin files
  really are on another host — or an earlier version already put the worker at
  your site's root, where it stays so subscribers don't get every push twice —
  WordPress now serves the worker through index.php, which works with plain
  permalinks and on nginx; the status panel no longer says "reinstall the
  plugin" when the server can't find it.
* Fix: when a browser renews its push subscription by itself, the service worker
  passes the new one on to relaybell, so that subscriber keeps getting
  notifications. **Subscribe this browser** tells the service worker where your
  subscription belongs.
* Privacy: a site administrator's email and role are no longer written into
  your site's pages (a misconfigured page cache could have shown them to
  everyone and mixed visitors into the administrator's test device).
* New: **Send test push** says so when the push service didn't answer in time,
  or refused relaybell's own sign-in (a relaybell-side problem that subscribing
  again won't fix).
* Docs: **Category → topic** sends each post only to followers of the relaybell
  topic named like its category; the topics must exist in relaybell, and
  visitors choose them in the box opened by `RelayBell.showPreferences()`.
* Fix: a browser subscribed while the site was connected to an earlier relaybell
  project could never receive pushes, even after subscribing again. Those
  subscriptions now repair themselves the next time the browser visits your site;
  for your own browser, click **Subscribe this browser** (the status panel tells
  you when that's needed).
* Fix: if your browser was already subscribed (for example from your site's front
  end), the settings page now makes it your test device automatically, so
  **Send test push** reaches it.
* New: clearer **Send test push** results — whether the test reached this
  browser, whether its subscription had expired or came from an earlier
  connection, and what to check when it didn't show (Windows or macOS
  notification settings, Do not disturb / Focus, Brave's push setting).
* Fix: the WooCommerce integration never loaded (plugin load order), so no
  WooCommerce events were sent — they now are. Review your relaybell automations
  and the event switches under Settings → relaybell before updating.
* Fix: cash on delivery, bank transfer and cheque orders now count as a purchase
  when they're placed, so those buyers no longer get "you left something in your
  cart" reminders.
* Security: **Disconnect** now also cancels the API key that one-click Connect
  issued for this site (a key you entered by hand is left alone), and connecting
  again replaces the site's previous key instead of adding another one.
* Change: back-in-stock alerts go to everyone on the product's or variation's
  waitlist (shoppers who tapped "Notify me when back in stock"), who are then taken
  off it. They fire when the stock status changes to "In stock", so your "Out of
  stock threshold" is respected.
* Change: price-drop alerts go to subscribers who viewed the product in the last
  30 days, logged-in shoppers who added it to their cart, and its waitlist — at
  most one price-drop alert per product per 10 minutes. Prices are compared as
  stored in WooCommerce; variable products report drops per variation.
* Change: back-in-stock and price-drop alerts are never sent for draft, private,
  password-protected or catalog-hidden products, or for disabled variations.
* New: the "Notify me" button works on variable products — it appears when the
  shopper picks an out-of-stock option and puts them on that option's waitlist
  (or the product's, when stock is managed at product level). It is shown only
  while the Back in stock event is on and the site uses HTTPS.
* Fix: the "Notify me" button says "You're on the list" only once relaybell has
  saved it — not when the visitor blocks notifications or the request fails. On
  iPhone/iPad it explains that the site must be added to the Home Screen first.
* New: product views are recorded for subscribed visitors (only while price-drop
  events are on), so price-drop alerts reach interested shoppers.
* New: `checkout.started` is also sent from the Checkout block, and only once per
  order (a retried payment doesn't send it again).
* Change: WooCommerce events are sent at the end of the request (after the page
  has been delivered, on PHP-FPM and LiteSpeed servers) with a short timeout,
  instead of while the page is being built.
* Privacy: customer emails are sent with order, checkout, cart, sign-up and
  refund events only while "Link subscribers to their account email" is on, and
  they pass through the `relaybell_external_id` filter. Cart events are sent only
  for logged-in shoppers.

= 1.2.1 =
* Change: **Send test push** now goes only to your own browser (set by
  **Subscribe this browser**), never to your subscribers.
* New: the browser you subscribe from wp-admin becomes a relaybell test device,
  so "Send test to me" in the relaybell dashboard reaches it too.

= 1.2.0 =
* New: one-click **Connect to relaybell** — no more copying a Project ID and API
  key. Manual entry is still available under Advanced.
* New: status panel on the settings page — checks the connection, HTTPS, that the
  relaybell script loads, and that the service worker registers, with a fix for
  each problem.
* Fix: the service worker is now a static file in the plugin with its own scope,
  so push works regardless of permalink settings or web server, and no longer
  conflicts with PWA plugins. Sites set up with 1.1.x keep working.
* New: **Subscribe this browser** on the settings page, plus a "This browser"
  status row (subscribed / not yet / blocked, with how to unblock) — test the
  whole flow without leaving wp-admin.
* Fix: **Send test push** no longer reports success when there are no
  subscribers; it tells you how to get one.
* New: delivery receipts, so relaybell can show confirmed deliveries for your
  WordPress subscribers.
* Change: simpler settings page — essentials first, advanced options tucked away.

= 1.1.3 =
* Security/analytics: the service worker now reports clicks with a per-recipient
  token so the server can dedup replayed pings and derive the A/B variant itself,
  instead of trusting the value posted by the browser. Fully backward compatible —
  older notifications still report via the legacy token.

= 1.1.2 =
* Fix: the service worker is no longer redirected to a trailing-slash URL on
  sites using pretty permalinks. Browsers refuse to register a service worker
  that is served via a redirect, so on most sites push had been silently failing
  to start. Verified against WordPress 7.0.
* Change: dropped the manual `load_plugin_textdomain()` call and the Domain Path
  header — WordPress.org serves translations automatically.
* Change: internal cleanups so the plugin passes Plugin Check with no errors or
  warnings, and `uninstall.php` now flushes the object cache after cleaning up.

= 1.1.1 =
* Change: the browser SDK is now registered with `wp_enqueue_script()` and
  `wp_add_inline_script()` instead of being printed directly into the footer, so
  it respects script dependencies, versioning, and other plugins' filters.
* Docs: documented every relaybell endpoint the plugin contacts, and what is
  sent to each, under "External services".

= 1.1.0 =
* New: `price_drop`, `signup`, `checkout.started`, and `order.refunded`
  WooCommerce events.
* New: back-in-stock now also fires for status-only stock toggles (no managed
  quantity), guarded against double-firing.
* New: "Notify me when back in stock" waitlist button on out-of-stock products.
* New: identify logged-in users by email (with `relaybell_external_id` filter)
  and pass their role as a tag.
* New: richer publish push — featured image, selectable post types, optional
  category→topic routing, and a `relaybell_publish_payload` filter.
* New: redesigned settings screen with General / Post types / WooCommerce
  sections, per-event toggles, sanitized settings, a Settings shortcut link,
  a missing-key admin notice, a live subscriber count, and Test connection /
  Send test push buttons.
* New: HPOS (custom order tables) compatibility declaration.
* New: `uninstall.php` cleans up all options and meta on delete.
* i18n: user-facing strings are now translatable (text domain `relaybell`).

= 1.0.0 =
* Initial release: opt-in prompt, publish-time push, service worker, and the
  WooCommerce `purchase` / `cart.updated` / `back_in_stock` events.
