Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .changeset/swift-badgers-clear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@shared/feature-flags": patch
"@ledgerhq/live-common": patch
"@features/flow-analytics-consent": patch
"ledger-live-desktop": patch
"live-mobile": patch
---

Remove analytics consentValidityDays and the unused live-common consent expiry helpers
1 change: 0 additions & 1 deletion CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,6 @@ libs/live-engagement/

## Common
libs/ledger-live-common/src/braze/ @ledgerhq/engagement
libs/ledger-live-common/src/analyticsConsent/ @ledgerhq/engagement
libs/ledger-live-common/src/analytics/ @ledgerhq/engagement
libs/ledger-live-common/src/genericAwarenessModal/ @ledgerhq/engagement
libs/ledger-live-common/src/onboarding/ @ledgerhq/engagement
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -658,8 +658,6 @@ describe("AnalyticsConsentDialog on portfolio route", () => {
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "1.1",
consentValidityDays:
FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params?.consentValidityDays ?? 365,
},
},
},
Expand All @@ -671,8 +669,6 @@ describe("AnalyticsConsentDialog on portfolio route", () => {
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "1.1",
consentValidityDays:
FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params?.consentValidityDays ?? 365,
},
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,25 +53,21 @@ const featureFlagsWithMinorBump = {
...analyticsOptInOverrides,
analyticsOptIn: {
...analyticsOptInOverrides.analyticsOptIn,
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "1.1",
consentValidityDays:
FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params?.consentValidityDays ?? 365,
},
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "1.1",
},
},
},
resolved: {
...FEATURE_FLAGS_DEFAULTS,
...analyticsOptInOverrides,
analyticsOptIn: {
...analyticsOptInOverrides.analyticsOptIn,
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "1.1",
consentValidityDays:
FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params?.consentValidityDays ?? 365,
},
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "1.1",
},
},
},
};
Expand Down Expand Up @@ -179,8 +175,6 @@ describe("useAnalyticsConsentDialogViewModel", () => {
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "2.0",
consentValidityDays:
FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params?.consentValidityDays ?? 365,
},
},
},
Expand All @@ -192,8 +186,6 @@ describe("useAnalyticsConsentDialogViewModel", () => {
params: {
...FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params,
policyVersion: "2.0",
consentValidityDays:
FEATURE_FLAGS_DEFAULTS.analyticsOptIn.params?.consentValidityDays ?? 365,
},
},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -682,7 +682,7 @@ describe("trackingEnabledSelector", () => {
lastAnalyticsConsentDate: FIXED_NOW.toISOString(),
privacyPolicyVersion: "1.0",
},
{ params: { policyVersion: "2.0", consentValidityDays: 365 } },
{ params: { policyVersion: "2.0" } },
),
),
).toBe(false);
Expand All @@ -698,7 +698,7 @@ describe("trackingEnabledSelector", () => {
lastAnalyticsConsentDate: FIXED_NOW.toISOString(),
privacyPolicyVersion: "1.0",
},
{ params: { policyVersion: "1.1", consentValidityDays: 365 } },
{ params: { policyVersion: "1.1" } },
),
),
).toBe(true);
Expand All @@ -714,7 +714,7 @@ describe("trackingEnabledSelector", () => {
lastAnalyticsConsentDate: FIXED_NOW.toISOString(),
privacyPolicyVersion: "1.0",
},
{ params: { policyVersion: "not-a-version", consentValidityDays: 365 } },
{ params: { policyVersion: "not-a-version" } },
),
),
).toBe(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ const COPY = {
title: "Analytics opt-in consent — QA",
readSection: "Current settings (read-only)",
currentPrivacyVersion: (version: string) => `App current privacy policy version: ${version}`,
currentConsentValidityDays: (days: string) => `App current consent validity (days): ${days}`,
storedPrivacyVersion: (version: string) => `Stored privacy policy version: ${version}`,
consentDate: (value: string) => `Consent date (raw): ${value}`,
decision: (value: string) => `Shared decision: ${value}`,
Expand Down Expand Up @@ -55,13 +54,6 @@ const formatConsentDate = (value: string | null) => {
return value;
};

function readConsentValidityDays(feature: { params?: unknown } | null | undefined): string {
const params = feature?.params;
if (!params || typeof params !== "object") return "n/a";
const days = (params as { consentValidityDays?: unknown }).consentValidityDays;
return days == null ? "n/a" : String(days);
}

export function AnalyticsConsentOptInDevScreen() {
const navigate = useNavigate();
const dispatch = useDispatch();
Expand All @@ -71,7 +63,6 @@ export function AnalyticsConsentOptInDevScreen() {
const analyticsOptInFeature = useFeature("analyticsOptIn");
const { currentPolicyVersion } = resolveAnalyticsOptInParams(analyticsOptInFeature);
const decision = getAnalyticsConsentDecision(consentInfo, { currentPolicyVersion });
const consentValidityDays = readConsentValidityDays(analyticsOptInFeature);

const shouldOfferModal =
Boolean(analyticsOptInFeature?.enabled) && hasCompletedOnboarding && decision.kind !== "none";
Expand Down Expand Up @@ -147,9 +138,6 @@ export function AnalyticsConsentOptInDevScreen() {
<p className="body-2 leading-relaxed text-muted">
{COPY.currentPrivacyVersion(currentPolicyVersion?.normalized ?? "null")}
</p>
<p className="body-2 leading-relaxed text-muted">
{COPY.currentConsentValidityDays(consentValidityDays)}
</p>
<p className="body-2 leading-relaxed text-muted">
{COPY.decision(`${decision.kind} (${decision.reason})`)}
</p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
} from "../hooks/useAnalyticsConsentDrawerViewModel";
import { withConsentDrawerOpeningFresh, withConsentDrawerState } from "./helpers";

/** Fixed clock so `needsConsentRenewal` / consent ISO strings are deterministic. */
/** Fixed clock so consent ISO strings are deterministic. */
const FIXED_NOW = new Date("2024-01-15T12:00:00.000Z");

const drawerEventPayload = {
Expand Down
4 changes: 1 addition & 3 deletions features/flow/analytics-consent/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ acknowledge a new privacy policy, or stay silent. Implements
[ADR: Analytics Consent Renewal](https://ledgerhq.atlassian.net/wiki/spaces/Engagement/pages/7249592355):
`analyticsOptIn.params.policyVersion` carries major/minor semantics.

Renewal is version-driven only. A stored consent never expires on a timer, so
`analyticsOptIn.params.consentValidityDays` is not read here — it remains for desktop, which
still runs its own rolling window through `libs/ledger-live-common`.
Renewal is version-driven only. A stored consent never expires on a timer.

One verdict drives both the consent drawer and the tracking gate, so optional analytics is
disabled exactly while a fresh choice is pending.
Expand Down
2 changes: 1 addition & 1 deletion features/flow/analytics-consent/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@features/flow-analytics-consent",
"version": "0.1.0",
"private": true,
"description": "Analytics consent decision engine: policy version major/minor semantics plus rolling consent expiry",
"description": "Analytics consent decision engine: policy version major/minor semantics",
"main": "src/index.ts",
"types": "src/index.ts",
"exports": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ describe("resolveAnalyticsOptInParams", () => {
});
});

it("ignores params the mobile decision no longer reads", () => {
it("ignores unknown params (e.g. legacy consentValidityDays)", () => {
expect(
resolveAnalyticsOptInParams({ params: { policyVersion: 2, consentValidityDays: 730 } }),
).toEqual({ currentPolicyVersion: { major: 2, minor: 0, normalized: "2.0" } });
Expand Down
1 change: 0 additions & 1 deletion libs/ledger-live-common/.unimportedrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
"src/analytics/featureFlagHelpers/onboardingCounterfeitWarning.ts",
"src/analytics/featureFlagHelpers/wallet40.ts",
"src/analytics/fundsReceived.ts",
"src/analyticsConsent/index.ts",
"src/apps/filtering.ts",
"src/apps/formatting.ts",
"src/apps/hw.ts",
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 0 additions & 2 deletions libs/ledger-live-common/src/analyticsConsent/index.ts

This file was deleted.

Loading
Loading