Skip to content

Remove FingerprintJS from all systems#14360

Merged
dylanjeffers merged 8 commits into
mainfrom
claude/sweet-galileo-e72726
May 21, 2026
Merged

Remove FingerprintJS from all systems#14360
dylanjeffers merged 8 commits into
mainfrom
claude/sweet-galileo-e72726

Conversation

@dylanjeffers
Copy link
Copy Markdown
Contributor

Summary

Fully removes FingerprintJS from the codebase — web, mobile, common, libs, identity service, and the anti-abuse-oracle.

  • Web/mobile clients: deleted services/fingerprint.ts, dropped fingerprintClient from the store context, and stopped collecting a visitorId during sign-in / OAuth login (FINGERPRINT_* env vars removed).
  • Common: deleted services/fingerprint/FingerprintClient, removed it from storeContext and services/index.ts, dropped visitorId from authService.signIn.
  • Identity service: removed fpClient.js, fpHelpers.js, the /fp route, the Fingerprints model (table left in place; can be dropped via a follow-up migration), and the fpServerApiKey config. requiresOtp no longer takes a visitorId — new devices always require OTP; the OTP_BYPASS_EMAILS list still bypasses. authentication.js and idSignals.js cleaned up accordingly. Updated test/lib/app.js and removed the obsolete "skips otp for recognized devices" test.
  • Anti-abuse-oracle: removed userFingerprints and useFingerprintDeviceCount from identity.ts, dropped the fingerprint device-count term from getUserNormalizedScore, and removed the Fingerprints table / column from the user-attestation UI in server.tsx.
  • Libs (sdk-legacy): dropped the now-unused visitorId parameter from Account.login and IdentityService.getFn.
  • Dependencies: removed @fingerprintjs/fingerprintjs-pro, @fingerprintjs/fingerprintjs-pro-react-native, and @fingerprintjs/fingerprintjs-pro-server-api from web/common/mobile/identity-service package.jsons; package-lock.json regenerated.

The Fingerprints Sequelize migration is left in place — the table can be dropped in a separate follow-up.

Test plan

  • Sign in with a new device → OTP is required (no fingerprint bypass).
  • Sign in with an OTP_BYPASS_EMAILS address → no OTP (bypass still works).
  • OAuth login flow still completes for an existing user.
  • Mobile sign-in and confirm-email screens still submit successfully.
  • Anti-abuse-oracle attestation UI loads for a user (no Fingerprint column / section).
  • CI: typecheck + lint pass across @audius/web, @audius/mobile, @audius/common, @audius/sdk-legacy, identity-service, and anti-abuse-oracle.

🤖 Generated with Claude Code

dylanjeffers and others added 5 commits May 8, 2026 14:42
Instruments three key contest interactions following the existing
'Remix Contest:' event prefix and {remixContestId, trackId} property
shape used by the host/pick-winners events:

  - REMIX_CONTEST_VIEW: contest page/screen first resolves trackId+eventId
  - REMIX_CONTEST_ENTER: user taps Enter Contest / Upload Remix
  - REMIX_CONTEST_VIEW_SUBMISSIONS: user opens the submissions tab

Mobile submissions-tab firing uses useFocusedTab from
react-native-collapsible-tab-view because the contest tabs mount
eagerly (lazy: false) — a plain mount effect would fire even for
users who only view the Details tab.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…t sections

Bug 1 (web): Align static explore section visibility with SearchResults render
condition — hide sections when inputValue is set (during debounce window) in
addition to when showSearchResults is true, so Premium and other filters applied
via the filter pills always suppress unfiltered curated sections.

Bug 2 (web): Guard empty-state tile behind !isPending in AlbumResultsPage and
PlaylistResultsPage so the NoResultsTile is not shown while the query is still
in its initial loading phase, preventing a spurious empty-state flash when
combining "Downloads Available" + "Electronic" genre filters.

Bug 3 (mobile): Include category !== 'all' in the showSearch guard on the
explore screen so tapping a content-type pill (Tracks, Albums, etc.) immediately
shows the filtered SearchResults without requiring a second filter to be added.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove the app from the list immediately on delete click rather than
waiting for the API response. Restores previous state on error.

Moves list update from onSuccess to onMutate (with cancelQueries to
avoid race conditions) and adds onError rollback.
Drop the `@fingerprintjs/fingerprintjs-pro*` packages and visitor-ID
plumbing from web, mobile, common, libs, identity service, and the
anti-abuse-oracle. Sign-in no longer collects a visitorId; the identity
service no longer offers the fingerprint-based OTP bypass (new devices
always require OTP, OTP_BYPASS_EMAILS still bypasses); and AAO drops the
per-fingerprint device-count scoring and the Fingerprints table/UI.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 20, 2026

🦋 Changeset detected

Latest commit: 8fc5327

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 6 packages
Name Type
@audius/common Patch
@audius/sdk-legacy Patch
@audius/web Patch
@audius/mobile Patch
@audius/protocol-dashboard Patch
@audius/sp-actions Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@dylanjeffers dylanjeffers merged commit f3d55fa into main May 21, 2026
9 checks passed
@dylanjeffers dylanjeffers deleted the claude/sweet-galileo-e72726 branch May 21, 2026 00:18
@github-actions
Copy link
Copy Markdown
Contributor

🌐 Web preview ready

Preview URL: https://audius-web-preview-pr-14360.audius.workers.dev

Unique preview for this PR (deployed from this branch).
Workflow run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant