* Use server time for remote config refreshes
* Assert production remote config request dates
* Clarify remote config refresh timestamps
* Test production refresh time round trip
* feat(remote-config): add RemoteConfigManager
* fix(remote-config): adapt RemoteConfigManager to struct-based fetch result
Update the manager and its tests for the struct RemoteConfigFetchResult and
the relocated per-topic blob-ref derivation, and drop the misleading
topicBlobRefs comment.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(remote-config): update refresh timestamp on no content
---------
Co-authored-by: Antonio Pallares <antonio.pallares@revenuecat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(remote-config): add network scaffolding for GET /v2/config endpoint
Adds RemoteConfigResponse model, GetRemoteConfigOperation, RemoteConfigAPI,
and wires everything into Backend. Unknown topic keys in the manifest are
silently dropped for forward compatibility. Mirrors Android PR #3435.
* fix(remote-config): use lowercase "default" variant key in test fixtures
Aligns with Android convention (DEFAULT_ENTRY_ID = "default") established
in purchases-android PR #3437.
* test(remote-config): add snapshot files for all CI OS versions
BackendGetRemoteConfigTests was only recording snapshots for iOS 26.
CI also runs tests on iOS 14/15/16/17/18, tvOS 18, macOS, and watchOS,
each of which requires its own snapshot file.
Derived from existing snapshot patterns in BackendGetRewardVerificationStatusTests.
* fix(remote-config): log warning when unknown topic key is received
Follows the codebase convention of logging unknown backend values
(e.g. WorkflowsResponse unknown_workflow_trigger_type) rather than
silently dropping them.
* refactor(remote-config): rename wireKey to rawValue, add WIP comment for signature verification
Aligns Topic with Swift's RawRepresentable convention and matches the
Android SDK's comment indicating signature verification will be enabled
once the remote config endpoint is finalized.
* refactor(remote-config): enable etag and simplify HTTPRequestPath cases