updateMergedCustomerInfo

Merges device and web CustomerInfo and updates the public CustomerInfo flow.

This method:

  1. Reads the latest device CustomerInfo from storage (built from Google Play receipts)

  2. Reads the latest web CustomerInfo from storage (fetched from backend)

  3. Merges them using priority rules (see CustomerInfo.merge())

  4. Persists the merged result to storage

  5. Updates the public flow so listeners get the latest merged state

When an external purchase controller is present:

  • Uses CustomerInfo.forExternalPurchaseController() instead of standard merge

  • This ensures external controller's entitlements are preserved as source of truth

The merge is performed asynchronously on the IO scope to avoid blocking the caller.