diff --git a/.changeset/aao-endpoint-engineering.md b/.changeset/aao-endpoint-engineering.md deleted file mode 100644 index f6f46b611d7..00000000000 --- a/.changeset/aao-endpoint-engineering.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/sdk': patch ---- - -Point the production anti-abuse oracle endpoint at `https://anti-abuse-oracle.audius.engineering`, replacing the old `https://discoveryprovider.audius.co` host in the SDK services config and supporting clients/services. diff --git a/.changeset/fix-banner-clipping.md b/.changeset/fix-banner-clipping.md deleted file mode 100644 index 25e4cbaeaab..00000000000 --- a/.changeset/fix-banner-clipping.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/web': patch ---- - -Fix profile and track cover photo banners being clipped horizontally. An inline `position: relative` on the inner photo div was overriding the CSS module's `position: absolute`, which dropped the photo into the parent flex container alongside the edit button — both flex items competed for space, shrinking the banner below full width. diff --git a/.changeset/fix-bottom-bar-clipping.md b/.changeset/fix-bottom-bar-clipping.md deleted file mode 100644 index 4619f41fb9e..00000000000 --- a/.changeset/fix-bottom-bar-clipping.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Fix bottom tab bar color clipping after the comment drawer opens. The drawer rendered a white overlay over the bottom safe area to color the gap below its footer, but it was kept mounted after dismissal and covered the tab bar's surface1 padding, leaving a visible color seam at the bottom. The overlay now only renders while the drawer is visible. diff --git a/.changeset/fix-contest-host-tag-alignment.md b/.changeset/fix-contest-host-tag-alignment.md deleted file mode 100644 index 20308cc844c..00000000000 --- a/.changeset/fix-contest-host-tag-alignment.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/web': patch ---- - -Right-align the Host tag in contest comments to match the track-page `CommentBlock` layout. Previously the badge sat inline next to the username; now the header uses `justifyContent='space-between'` with user link + timestamp on the left and the Host badge in a `flexShrink: 0` wrapper on the right. Applies to both top-level contest comments and nested replies. diff --git a/.changeset/fix-contest-pull-refresh.md b/.changeset/fix-contest-pull-refresh.md deleted file mode 100644 index 7398f33aad5..00000000000 --- a/.changeset/fix-contest-pull-refresh.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Fix a thin white sliver appearing above the cover image when pulling to refresh on the mobile contest page. `ContestHero` was clipping its scaled cover image with `overflow: 'hidden'`, so the existing scale + translate over-scroll interpolation could only stretch within the 220px hero box and never bled upward into the over-scroll gap. The clip is removed (mirroring `ProfileCoverPhoto`), and the title/CTA/countdown section gets its own opaque background to cover the downward bleed — same sibling-with-bg pattern `ProfileHeader` uses below the cover photo. diff --git a/.changeset/fix-explore-album-sections-tab.md b/.changeset/fix-explore-album-sections-tab.md deleted file mode 100644 index 58c9adffc48..00000000000 --- a/.changeset/fix-explore-album-sections-tab.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Restrict the Top Albums This Month, New Album Releases, and Best Selling Albums sections on the Explore page to the Albums tab only, matching web behavior. diff --git a/.changeset/fix-fan-club-video-sizing.md b/.changeset/fix-fan-club-video-sizing.md deleted file mode 100644 index 74205ff5452..00000000000 --- a/.changeset/fix-fan-club-video-sizing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Fix video embed sizing in fan club post cards. The WebView's embedded HTML set `iframe { height: 100% }` but neither `` nor `` had an explicit height, so the iframe collapsed and left a visible gap inside the 16:9 container. Giving `html, body` an explicit `100%` height lets the iframe fill the card as intended. diff --git a/.changeset/fix-freeform-genre-adapter.md b/.changeset/fix-freeform-genre-adapter.md deleted file mode 100644 index b07ac3a7518..00000000000 --- a/.changeset/fix-freeform-genre-adapter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/common': patch ---- - -Fix freeform/custom track genres silently reverting to Electronic on save. `toSdkGenre` in the track adapter filtered out any value not in the canonical `Genre` enum and returned `undefined`, which then fell back to `DEFAULT_GENRE` (Electronic) before reaching the SDK. Now any non-empty genre string is passed through unchanged (the SDK upload schema already caps it at 100 chars), so custom genres entered by artists are preserved end-to-end. diff --git a/.changeset/fix-hover-card-blur-overflow.md b/.changeset/fix-hover-card-blur-overflow.md deleted file mode 100644 index a06c1f2d1ec..00000000000 --- a/.changeset/fix-hover-card-blur-overflow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/web': patch ---- - -Fix artist hover card blur overlay overflowing the card. The `.artistCoverPhoto` banner div lacked a positioning context, so the blur overlay's `position: absolute; inset: 0` escaped to the nearest positioned ancestor and bled outside the cover photo banner. Adding `position: relative` (and `overflow: hidden`) to the banner contains the blur to the intended 136px header. diff --git a/.changeset/fix-mobile-dark-mode-loading.md b/.changeset/fix-mobile-dark-mode-loading.md deleted file mode 100644 index 1ccc406ec6f..00000000000 --- a/.changeset/fix-mobile-dark-mode-loading.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Fix initial dark mode load on the mobile app: with theme set to Auto and the system in dark mode, the app launched in light and only flipped after backgrounding. Also fix SelectablePill components keeping the previous palette's colors after a theme flip. diff --git a/.changeset/fix-mobile-queue-drag.md b/.changeset/fix-mobile-queue-drag.md deleted file mode 100644 index acf996b193c..00000000000 --- a/.changeset/fix-mobile-queue-drag.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Fix the mobile play queue drag-to-reorder gesture: dragging a track row was being claimed by the queue drawer's swipe-to-dismiss pan responder, so reorder attempts dragged the drawer down instead. The drawer now suspends its pan responder while a row is being dragged. Also adds a grabber bar above the Queue title and a bit more breathing room in the header. diff --git a/.changeset/honor-request-desktop-site.md b/.changeset/honor-request-desktop-site.md deleted file mode 100644 index 8737549b8cc..00000000000 --- a/.changeset/honor-request-desktop-site.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/web': patch ---- - -Honor "Request Desktop Site" on mobile browsers: when a mobile browser flips its User-Agent to a desktop one (via the browser's "Request Desktop Site" toggle, or iPadOS Safari's default Mac UA), serve the desktop web app instead of the mobile experience. diff --git a/.changeset/improve-mobile-lineup-scroll.md b/.changeset/improve-mobile-lineup-scroll.md deleted file mode 100644 index 9a504114cfd..00000000000 --- a/.changeset/improve-mobile-lineup-scroll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Smooth out the infinite-scroll feel on Trending and Feed lineups. The mobile `TrackLineup` previously waited a 100ms debounce before dispatching `loadNextPage`, then waited again for the parent's `isFetching` to round-trip back through tanquery before any skeleton rows appeared — so users would scroll to the bottom, see nothing happen, then see late skeletons, then tracks. The threshold is now bumped from 0.5 to a full viewport ahead, the debounce and the duplicate `onScroll` handler are removed, and a synchronous local "load triggered" flag flips skeletons on in the same tick the scroll handler fires. diff --git a/.changeset/migrate-sagas-to-tan-query.md b/.changeset/migrate-sagas-to-tan-query.md deleted file mode 100644 index 4e2a154d2e6..00000000000 --- a/.changeset/migrate-sagas-to-tan-query.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/mobile': patch ---- - -Migrate seven legacy redux-saga packages to tan-query hooks (recovery-email, change-password, playlist-updates, search-users-modal, dashboard-page, cache/tracks, recommendation, and the dead search-ai-bar). Mobile-facing changes: AccountSettings now uses `useResendRecoveryEmail`, ChatUserListScreen uses `useSearchUsersModal` infinite query, track edit/delete flows go through `useUpdateTrack`/`useDeleteTrack` hooks instead of the saga + confirmer queue. diff --git a/.changeset/notifications-path-id-rename.md b/.changeset/notifications-path-id-rename.md deleted file mode 100644 index 877f8e70010..00000000000 --- a/.changeset/notifications-path-id-rename.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -'@audius/sdk': major ---- - -Rename the path field on `getNotifications` and `getPlaylistUpdates` from `userId` to `id`, matching the convention used by every `/users/{id}/…` method. Add an optional `userId` query field that carries the requester id for personalization of embedded `related.users` (e.g. `does_current_user_follow`). - -**Migration:** - -```ts -// Before -sdk.notifications.getNotifications({ userId: 'aE9MA' }) -sdk.notifications.getPlaylistUpdates({ userId: 'aE9MA' }) - -// After -sdk.notifications.getNotifications({ - id: 'aE9MA', // notifications owner (was `userId`) - userId: 'aE9MA' // requester id, for personalization of related.users -}) -sdk.notifications.getPlaylistUpdates({ id: 'aE9MA', userId: 'aE9MA' }) -``` - -The two ids differ only when a manager reads a managed user's notifications; in the normal flow they're the same value. The wire format and server URL are unchanged — only the request type shape was renamed to remove a collision between the path and the new query parameter. diff --git a/.changeset/ota-version-flag-attribute.md b/.changeset/ota-version-flag-attribute.md deleted file mode 100644 index d738738f164..00000000000 --- a/.changeset/ota-version-flag-attribute.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@audius/common': patch -'@audius/mobile': patch ---- - -Forward the running CodePush bundle label to Optimizely as an `otaVersion` attribute (or `"native"` when no OTA is applied), so feature flags can be gated on a specific OTA cut in addition to the native binary version. diff --git a/.changeset/persist-allowed-api-keys.md b/.changeset/persist-allowed-api-keys.md deleted file mode 100644 index 0384bb2f0c4..00000000000 --- a/.changeset/persist-allowed-api-keys.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/sdk': patch ---- - -Add `allowedApiKeys` to `UploadTrackMetadataSchema` so it's preserved when uploading or updating tracks. Previously the strict schema stripped the field, which prevented the "Disallow Streaming via the API" setting from being saved. diff --git a/.changeset/personalization-three-endpoints.md b/.changeset/personalization-three-endpoints.md deleted file mode 100644 index c9541b8079c..00000000000 --- a/.changeset/personalization-three-endpoints.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@audius/sdk': minor ---- - -Add an optional `userId?: string` query parameter to three endpoints so the backend can personalize embedded users in `related.users` / collection owners (`does_current_user_follow`, etc.): - -- `events.getRemixContests` -- `users.getContestsByUser` -- `playlists.getPlaylistsNewReleases` - -Without this, the endpoints' handlers (`app.getMyId(c)`) resolved the requester id from the missing `?user_id=` query and got `0`, so embedded user objects came back with `does_current_user_follow: false` for everyone. Clients that primed those into a shared cache (e.g. via `primeRelatedData` / `primeCollectionData`) silently poisoned follow state for the surfaced artists. - -Existing callers continue to work unchanged — the field is optional. Pass `Id.parse(currentUserId)` (or whichever id your app treats as "me") to opt in. diff --git a/.changeset/prefetch-track-comments.md b/.changeset/prefetch-track-comments.md deleted file mode 100644 index 4b22872d60b..00000000000 --- a/.changeset/prefetch-track-comments.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/common': patch ---- - -Add `usePrefetchTrackComments` and `usePrefetchTrackPageLineup`, hooks that warm a track's comment list and "more by / remixes / you might also like" lineup as early as possible (e.g. on track screen mount) so those sections render from cache instead of starting their own fetch only once they mount. Each keeps a live observer so the warmed data isn't evicted before the section mounts. `usePrefetchTrackComments` can fire from a bare trackId; `usePrefetchTrackPageLineup` still depends on the hero track + owner handle but starts the instant those resolve rather than waiting for the mobile screen-ready/animation gate. diff --git a/.changeset/profile-conditional-contests-tab.md b/.changeset/profile-conditional-contests-tab.md deleted file mode 100644 index 59246f94e66..00000000000 --- a/.changeset/profile-conditional-contests-tab.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@audius/common': patch -'@audius/mobile': patch -'@audius/web': patch ---- - -Hide the profile Contests tab unless the `CONTESTS` feature flag is enabled and the artist hosts at least one remix contest. Previously the desktop and mobile-web profiles always rendered the tab for any artist (ignoring the flag entirely), and the React Native side respected the flag but still showed the tab for artists who don't run any contest — both led to an empty/unreachable destination. Adds a shared `useUserHasRemixContest` hook that paginates the global remix-contest list (matching `ContestsTab`'s page cap) and matches `event.userId` against the host. Direct visits to `/:handle/contests` on a non-qualifying profile fall back to the default tab so the body stays in sync with the (now hidden) tab list. diff --git a/.changeset/remove-fingerprintjs.md b/.changeset/remove-fingerprintjs.md deleted file mode 100644 index 4aad5102436..00000000000 --- a/.changeset/remove-fingerprintjs.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@audius/common': patch -'@audius/sdk-legacy': patch -'@audius/web': patch -'@audius/mobile': patch ---- - -Remove FingerprintJS from all clients and services. Sign-in no longer collects a `visitorId`, the identity service's fingerprint-based OTP bypass is gone (new devices always require OTP), and the anti-abuse-oracle drops the per-fingerprint device-count scoring and UI section. diff --git a/.changeset/remove-legacy-creatornodes.md b/.changeset/remove-legacy-creatornodes.md deleted file mode 100644 index 6b85040d1d6..00000000000 --- a/.changeset/remove-legacy-creatornodes.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/sdk': patch ---- - -Generate the production SDK storage-node defaults from the canonical Audius storage-node hostname, removing `creatornode2.audius.co` and `creatornode3.audius.co`. diff --git a/.changeset/remove-legacy-lineup-scaffolding.md b/.changeset/remove-legacy-lineup-scaffolding.md deleted file mode 100644 index 816d8ce4c18..00000000000 --- a/.changeset/remove-legacy-lineup-scaffolding.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/common': patch ---- - -Remove the unused legacy lineup store module (`store/lineup`: `lineupActions`, `lineupReducer`, `lineupSelectors`, `LineupBaseActions`, `lineupRegistry`) from `@audius/common`. The lineup engine has been fully migrated to tan-query hooks plus the playback slice; these exports had no remaining consumers and were not wired into any store. diff --git a/.changeset/rename-chronological-feed-to-latest.md b/.changeset/rename-chronological-feed-to-latest.md deleted file mode 100644 index 0f80cd3cea6..00000000000 --- a/.changeset/rename-chronological-feed-to-latest.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@audius/web': patch -'@audius/mobile': patch -'@audius/common': patch ---- - -Rename the Feed page's "Chronological" tab to "Latest" on web and mobile. The persisted `feed-page:tab` localStorage value is migrated transparently so existing users land on the same tab they had selected. diff --git a/.changeset/smooth-web-lineup-scroll.md b/.changeset/smooth-web-lineup-scroll.md deleted file mode 100644 index 63eb1b332b4..00000000000 --- a/.changeset/smooth-web-lineup-scroll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@audius/web': patch ---- - -Smooth out lineup infinite-scroll on Trending, Feed, and other tanquery-driven track lists. The scroll-to-bottom "chunk" had three causes stacked: a small fixed 500px threshold, skeletons that gated on tanquery's `isFetching` (so they only painted after a multi-tick state round-trip), and a per-page skeleton count of just `pageSize` (4 on Trending, ~480px tall on desktop) that didn't fill the loading window. The threshold is now ~2× the scroll parent's viewport, a synchronous trigger flag renders skeletons on the next frame, and the skeleton count is sized to fill the threshold area so the bottom stays populated even when the user scrolls in faster than the next page can return. diff --git a/package-lock.json b/package-lock.json index 2fc6770d852..3d7ce09945b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1191,10 +1191,6 @@ "resolved": "packages/common", "link": true }, - "node_modules/@audius/compose": { - "resolved": "packages/compose", - "link": true - }, "node_modules/@audius/distro": { "resolved": "packages/distro", "link": true @@ -106443,7 +106439,7 @@ }, "packages/common": { "name": "@audius/common", - "version": "1.5.78", + "version": "1.5.79", "dependencies": { "@audius/fetch-nft": "0.2.8", "@audius/fixed-decimal": "*", @@ -106577,6 +106573,7 @@ "packages/compose": { "name": "@audius/compose", "version": "1.0.31", + "extraneous": true, "license": "ISC", "dependencies": { "@audius/commands": "*", @@ -115363,12 +115360,12 @@ }, "packages/libs": { "name": "@audius/sdk-legacy", - "version": "6.0.28", + "version": "6.0.29", "license": "Apache-2.0", "dependencies": { "@audius/fixed-decimal": "0.2.1", "@audius/hedgehog": "3.0.0-alpha.1", - "@audius/sdk": "15.3.1", + "@audius/sdk": "16.0.0", "@audius/spl": "2.1.0", "@babel/core": "^7.23.7", "@babel/plugin-proposal-class-static-block": "7.21.0", @@ -117110,7 +117107,7 @@ }, "packages/mobile": { "name": "@audius/mobile", - "version": "1.5.183", + "version": "1.5.186", "dependencies": { "@amplitude/analytics-react-native": "1.4.11", "@audius/common": "*", @@ -119763,13 +119760,13 @@ }, "packages/protocol-dashboard": { "name": "@audius/protocol-dashboard", - "version": "0.1.18", + "version": "0.1.19", "dependencies": { "@apollo/client": "3.3.7", "@audius/common": "*", "@audius/harmony": "*", - "@audius/sdk": "15.3.1", - "@audius/sdk-legacy": "6.0.28", + "@audius/sdk": "16.0.0", + "@audius/sdk-legacy": "6.0.29", "@audius/stems": "0.3.10", "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", @@ -122477,7 +122474,7 @@ }, "packages/sdk": { "name": "@audius/sdk", - "version": "15.3.1", + "version": "16.0.0", "license": "Apache-2.0", "dependencies": { "@audius/eth": "1.0.0", @@ -124625,10 +124622,10 @@ }, "packages/sp-actions": { "name": "@audius/sp-actions", - "version": "1.0.32", + "version": "1.0.33", "license": "Apache-2.0", "dependencies": { - "@audius/sdk-legacy": "6.0.28", + "@audius/sdk-legacy": "6.0.29", "@truffle/hdwallet-provider": "^1.2.2", "axios": "^0.21.0", "commander": "^6.2.1", @@ -125877,7 +125874,7 @@ }, "packages/web": { "name": "@audius/web", - "version": "1.5.179", + "version": "1.5.180", "hasInstallScript": true, "dependencies": { "@amplitude/analytics-browser": "2.11.9", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index c00e206a65d..9f8abd6594a 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,23 @@ # @audius/common +## 1.5.79 + +### Patch Changes + +- 272b8db: Fix freeform/custom track genres silently reverting to Electronic on save. `toSdkGenre` in the track adapter filtered out any value not in the canonical `Genre` enum and returned `undefined`, which then fell back to `DEFAULT_GENRE` (Electronic) before reaching the SDK. Now any non-empty genre string is passed through unchanged (the SDK upload schema already caps it at 100 chars), so custom genres entered by artists are preserved end-to-end. +- 98ad217: Forward the running CodePush bundle label to Optimizely as an `otaVersion` attribute (or `"native"` when no OTA is applied), so feature flags can be gated on a specific OTA cut in addition to the native binary version. +- 5d9d4e4: Add `usePrefetchTrackComments` and `usePrefetchTrackPageLineup`, hooks that warm a track's comment list and "more by / remixes / you might also like" lineup as early as possible (e.g. on track screen mount) so those sections render from cache instead of starting their own fetch only once they mount. Each keeps a live observer so the warmed data isn't evicted before the section mounts. `usePrefetchTrackComments` can fire from a bare trackId; `usePrefetchTrackPageLineup` still depends on the hero track + owner handle but starts the instant those resolve rather than waiting for the mobile screen-ready/animation gate. +- 791b612: Hide the profile Contests tab unless the `CONTESTS` feature flag is enabled and the artist hosts at least one remix contest. Previously the desktop and mobile-web profiles always rendered the tab for any artist (ignoring the flag entirely), and the React Native side respected the flag but still showed the tab for artists who don't run any contest — both led to an empty/unreachable destination. Adds a shared `useUserHasRemixContest` hook that paginates the global remix-contest list (matching `ContestsTab`'s page cap) and matches `event.userId` against the host. Direct visits to `/:handle/contests` on a non-qualifying profile fall back to the default tab so the body stays in sync with the (now hidden) tab list. +- f3d55fa: Remove FingerprintJS from all clients and services. Sign-in no longer collects a `visitorId`, the identity service's fingerprint-based OTP bypass is gone (new devices always require OTP), and the anti-abuse-oracle drops the per-fingerprint device-count scoring and UI section. +- f97f1ac: Remove the unused legacy lineup store module (`store/lineup`: `lineupActions`, `lineupReducer`, `lineupSelectors`, `LineupBaseActions`, `lineupRegistry`) from `@audius/common`. The lineup engine has been fully migrated to tan-query hooks plus the playback slice; these exports had no remaining consumers and were not wired into any store. +- b52d005: Rename the Feed page's "Chronological" tab to "Latest" on web and mobile. The persisted `feed-page:tab` localStorage value is migrated transparently so existing users land on the same tab they had selected. +- Updated dependencies [b803e5e] +- Updated dependencies [6bd5c27] +- Updated dependencies [da6c724] +- Updated dependencies [be0537f] +- Updated dependencies [8662a56] + - @audius/sdk@16.0.0 + ## 1.5.78 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index 02e9851fb96..28e7ec600c5 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@audius/common", - "version": "1.5.78", + "version": "1.5.79", "description": "Common utilities and store for web and mobile.", "private": true, "author": "Audius", diff --git a/packages/libs/CHANGELOG.md b/packages/libs/CHANGELOG.md index 0883624706c..7f8ea842be1 100644 --- a/packages/libs/CHANGELOG.md +++ b/packages/libs/CHANGELOG.md @@ -1,5 +1,17 @@ # @audius/sdk +## 6.0.29 + +### Patch Changes + +- f3d55fa: Remove FingerprintJS from all clients and services. Sign-in no longer collects a `visitorId`, the identity service's fingerprint-based OTP bypass is gone (new devices always require OTP), and the anti-abuse-oracle drops the per-fingerprint device-count scoring and UI section. +- Updated dependencies [b803e5e] +- Updated dependencies [6bd5c27] +- Updated dependencies [da6c724] +- Updated dependencies [be0537f] +- Updated dependencies [8662a56] + - @audius/sdk@16.0.0 + ## 6.0.28 ### Patch Changes diff --git a/packages/libs/package.json b/packages/libs/package.json index 4cdcf86d706..3643756ddd0 100644 --- a/packages/libs/package.json +++ b/packages/libs/package.json @@ -1,6 +1,6 @@ { "name": "@audius/sdk-legacy", - "version": "6.0.28", + "version": "6.0.29", "audius": { "releaseSHA": "f1d70a2a0643c5c84d8ab053f70c1e0a2ec3ad49" }, @@ -44,7 +44,7 @@ "dependencies": { "@audius/fixed-decimal": "0.2.1", "@audius/hedgehog": "3.0.0-alpha.1", - "@audius/sdk": "15.3.1", + "@audius/sdk": "16.0.0", "@audius/spl": "2.1.0", "@babel/core": "^7.23.7", "@babel/plugin-proposal-class-static-block": "7.21.0", diff --git a/packages/mobile/CHANGELOG.md b/packages/mobile/CHANGELOG.md index fc5ecd45dd0..28382511f04 100644 --- a/packages/mobile/CHANGELOG.md +++ b/packages/mobile/CHANGELOG.md @@ -1,5 +1,36 @@ # @audius/mobile +## 1.5.186 + +### Patch Changes + +- 5a20b85: Fix bottom tab bar color clipping after the comment drawer opens. The drawer rendered a white overlay over the bottom safe area to color the gap below its footer, but it was kept mounted after dismissal and covered the tab bar's surface1 padding, leaving a visible color seam at the bottom. The overlay now only renders while the drawer is visible. +- ea2ca22: Fix a thin white sliver appearing above the cover image when pulling to refresh on the mobile contest page. `ContestHero` was clipping its scaled cover image with `overflow: 'hidden'`, so the existing scale + translate over-scroll interpolation could only stretch within the 220px hero box and never bled upward into the over-scroll gap. The clip is removed (mirroring `ProfileCoverPhoto`), and the title/CTA/countdown section gets its own opaque background to cover the downward bleed — same sibling-with-bg pattern `ProfileHeader` uses below the cover photo. +- 76ef0bb: Restrict the Top Albums This Month, New Album Releases, and Best Selling Albums sections on the Explore page to the Albums tab only, matching web behavior. +- 1259682: Fix video embed sizing in fan club post cards. The WebView's embedded HTML set `iframe { height: 100% }` but neither `` nor `` had an explicit height, so the iframe collapsed and left a visible gap inside the 16:9 container. Giving `html, body` an explicit `100%` height lets the iframe fill the card as intended. +- af63712: Fix initial dark mode load on the mobile app: with theme set to Auto and the system in dark mode, the app launched in light and only flipped after backgrounding. Also fix SelectablePill components keeping the previous palette's colors after a theme flip. +- c917fd6: Fix the mobile play queue drag-to-reorder gesture: dragging a track row was being claimed by the queue drawer's swipe-to-dismiss pan responder, so reorder attempts dragged the drawer down instead. The drawer now suspends its pan responder while a row is being dragged. Also adds a grabber bar above the Queue title and a bit more breathing room in the header. +- 5a5a93f: Smooth out the infinite-scroll feel on Trending and Feed lineups. The mobile `TrackLineup` previously waited a 100ms debounce before dispatching `loadNextPage`, then waited again for the parent's `isFetching` to round-trip back through tanquery before any skeleton rows appeared — so users would scroll to the bottom, see nothing happen, then see late skeletons, then tracks. The threshold is now bumped from 0.5 to a full viewport ahead, the debounce and the duplicate `onScroll` handler are removed, and a synchronous local "load triggered" flag flips skeletons on in the same tick the scroll handler fires. +- 432167f: Migrate seven legacy redux-saga packages to tan-query hooks (recovery-email, change-password, playlist-updates, search-users-modal, dashboard-page, cache/tracks, recommendation, and the dead search-ai-bar). Mobile-facing changes: AccountSettings now uses `useResendRecoveryEmail`, ChatUserListScreen uses `useSearchUsersModal` infinite query, track edit/delete flows go through `useUpdateTrack`/`useDeleteTrack` hooks instead of the saga + confirmer queue. +- 98ad217: Forward the running CodePush bundle label to Optimizely as an `otaVersion` attribute (or `"native"` when no OTA is applied), so feature flags can be gated on a specific OTA cut in addition to the native binary version. +- 791b612: Hide the profile Contests tab unless the `CONTESTS` feature flag is enabled and the artist hosts at least one remix contest. Previously the desktop and mobile-web profiles always rendered the tab for any artist (ignoring the flag entirely), and the React Native side respected the flag but still showed the tab for artists who don't run any contest — both led to an empty/unreachable destination. Adds a shared `useUserHasRemixContest` hook that paginates the global remix-contest list (matching `ContestsTab`'s page cap) and matches `event.userId` against the host. Direct visits to `/:handle/contests` on a non-qualifying profile fall back to the default tab so the body stays in sync with the (now hidden) tab list. +- f3d55fa: Remove FingerprintJS from all clients and services. Sign-in no longer collects a `visitorId`, the identity service's fingerprint-based OTP bypass is gone (new devices always require OTP), and the anti-abuse-oracle drops the per-fingerprint device-count scoring and UI section. +- b52d005: Rename the Feed page's "Chronological" tab to "Latest" on web and mobile. The persisted `feed-page:tab` localStorage value is migrated transparently so existing users land on the same tab they had selected. +- Updated dependencies [b803e5e] +- Updated dependencies [272b8db] +- Updated dependencies [6bd5c27] +- Updated dependencies [98ad217] +- Updated dependencies [da6c724] +- Updated dependencies [be0537f] +- Updated dependencies [5d9d4e4] +- Updated dependencies [791b612] +- Updated dependencies [f3d55fa] +- Updated dependencies [8662a56] +- Updated dependencies [f97f1ac] +- Updated dependencies [b52d005] + - @audius/sdk@16.0.0 + - @audius/common@1.5.79 + ## 1.5.180 ### Patch Changes diff --git a/packages/mobile/package.json b/packages/mobile/package.json index 529c38de4e1..a2d5b3c5a2e 100644 --- a/packages/mobile/package.json +++ b/packages/mobile/package.json @@ -1,6 +1,6 @@ { "name": "@audius/mobile", - "version": "1.5.185", + "version": "1.5.186", "private": true, "scripts": { "android:dev": "ENVFILE=.env.dev turbo run android -- --mode=prodDebug", diff --git a/packages/protocol-dashboard/CHANGELOG.md b/packages/protocol-dashboard/CHANGELOG.md index d87e24ddf1d..2f13480acf3 100644 --- a/packages/protocol-dashboard/CHANGELOG.md +++ b/packages/protocol-dashboard/CHANGELOG.md @@ -1,5 +1,25 @@ # @audius/protocol-dashboard +## 0.1.19 + +### Patch Changes + +- Updated dependencies [b803e5e] +- Updated dependencies [272b8db] +- Updated dependencies [6bd5c27] +- Updated dependencies [98ad217] +- Updated dependencies [da6c724] +- Updated dependencies [be0537f] +- Updated dependencies [5d9d4e4] +- Updated dependencies [791b612] +- Updated dependencies [f3d55fa] +- Updated dependencies [8662a56] +- Updated dependencies [f97f1ac] +- Updated dependencies [b52d005] + - @audius/sdk@16.0.0 + - @audius/common@1.5.79 + - @audius/sdk-legacy@6.0.29 + ## 0.1.18 ### Patch Changes diff --git a/packages/protocol-dashboard/package.json b/packages/protocol-dashboard/package.json index 31f23e9540f..4dc624838b4 100644 --- a/packages/protocol-dashboard/package.json +++ b/packages/protocol-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@audius/protocol-dashboard", - "version": "0.1.18", + "version": "0.1.19", "private": true, "type": "module", "homepage": "./", @@ -39,8 +39,8 @@ "@apollo/client": "3.3.7", "@audius/common": "*", "@audius/harmony": "*", - "@audius/sdk": "15.3.1", - "@audius/sdk-legacy": "6.0.28", + "@audius/sdk": "16.0.0", + "@audius/sdk-legacy": "6.0.29", "@audius/stems": "0.3.10", "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", diff --git a/packages/sdk/CHANGELOG.md b/packages/sdk/CHANGELOG.md index 49390d5d511..5fee16ecef3 100644 --- a/packages/sdk/CHANGELOG.md +++ b/packages/sdk/CHANGELOG.md @@ -1,5 +1,46 @@ # @audius/sdk +## 16.0.0 + +### Major Changes + +- 6bd5c27: Rename the path field on `getNotifications` and `getPlaylistUpdates` from `userId` to `id`, matching the convention used by every `/users/{id}/…` method. Add an optional `userId` query field that carries the requester id for personalization of embedded `related.users` (e.g. `does_current_user_follow`). + + **Migration:** + + ```ts + // Before + sdk.notifications.getNotifications({ userId: "aE9MA" }); + sdk.notifications.getPlaylistUpdates({ userId: "aE9MA" }); + + // After + sdk.notifications.getNotifications({ + id: "aE9MA", // notifications owner (was `userId`) + userId: "aE9MA", // requester id, for personalization of related.users + }); + sdk.notifications.getPlaylistUpdates({ id: "aE9MA", userId: "aE9MA" }); + ``` + + The two ids differ only when a manager reads a managed user's notifications; in the normal flow they're the same value. The wire format and server URL are unchanged — only the request type shape was renamed to remove a collision between the path and the new query parameter. + +### Minor Changes + +- be0537f: Add an optional `userId?: string` query parameter to three endpoints so the backend can personalize embedded users in `related.users` / collection owners (`does_current_user_follow`, etc.): + + - `events.getRemixContests` + - `users.getContestsByUser` + - `playlists.getPlaylistsNewReleases` + + Without this, the endpoints' handlers (`app.getMyId(c)`) resolved the requester id from the missing `?user_id=` query and got `0`, so embedded user objects came back with `does_current_user_follow: false` for everyone. Clients that primed those into a shared cache (e.g. via `primeRelatedData` / `primeCollectionData`) silently poisoned follow state for the surfaced artists. + + Existing callers continue to work unchanged — the field is optional. Pass `Id.parse(currentUserId)` (or whichever id your app treats as "me") to opt in. + +### Patch Changes + +- b803e5e: Point the production anti-abuse oracle endpoint at `https://anti-abuse-oracle.audius.engineering`, replacing the old `https://discoveryprovider.audius.co` host in the SDK services config and supporting clients/services. +- da6c724: Add `allowedApiKeys` to `UploadTrackMetadataSchema` so it's preserved when uploading or updating tracks. Previously the strict schema stripped the field, which prevented the "Disallow Streaming via the API" setting from being saved. +- 8662a56: Generate the production SDK storage-node defaults from the canonical Audius storage-node hostname, removing `creatornode2.audius.co` and `creatornode3.audius.co`. + ## 15.3.1 ### Patch Changes diff --git a/packages/sdk/package.json b/packages/sdk/package.json index ee53c07fdcd..4bacd99b9fa 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@audius/sdk", - "version": "15.3.1", + "version": "16.0.0", "type": "module", "audius": { "releaseSHA": "f1d70a2a0643c5c84d8ab053f70c1e0a2ec3ad49" diff --git a/packages/sp-actions/CHANGELOG.md b/packages/sp-actions/CHANGELOG.md index 895eec06950..3cc04dfad4b 100644 --- a/packages/sp-actions/CHANGELOG.md +++ b/packages/sp-actions/CHANGELOG.md @@ -1,5 +1,12 @@ # @audius/sp-actions +## 1.0.33 + +### Patch Changes + +- Updated dependencies [f3d55fa] + - @audius/sdk-legacy@6.0.29 + ## 1.0.32 ### Patch Changes diff --git a/packages/sp-actions/package.json b/packages/sp-actions/package.json index 2c53b05604a..0093ed454dc 100644 --- a/packages/sp-actions/package.json +++ b/packages/sp-actions/package.json @@ -1,6 +1,6 @@ { "name": "@audius/sp-actions", - "version": "1.0.32", + "version": "1.0.33", "description": "A utility for audius service providers to claim token rewards.", "bin": { "claim": "claim.js" @@ -8,7 +8,7 @@ "author": "Audius", "license": "Apache-2.0", "dependencies": { - "@audius/sdk-legacy": "6.0.28", + "@audius/sdk-legacy": "6.0.29", "@truffle/hdwallet-provider": "^1.2.2", "axios": "^0.21.0", "commander": "^6.2.1", diff --git a/packages/web/CHANGELOG.md b/packages/web/CHANGELOG.md index a122ed043e4..686ba6c61fc 100644 --- a/packages/web/CHANGELOG.md +++ b/packages/web/CHANGELOG.md @@ -1,5 +1,32 @@ # @audius/web +## 1.5.180 + +### Patch Changes + +- 64740af: Fix profile and track cover photo banners being clipped horizontally. An inline `position: relative` on the inner photo div was overriding the CSS module's `position: absolute`, which dropped the photo into the parent flex container alongside the edit button — both flex items competed for space, shrinking the banner below full width. +- 8359c3f: Right-align the Host tag in contest comments to match the track-page `CommentBlock` layout. Previously the badge sat inline next to the username; now the header uses `justifyContent='space-between'` with user link + timestamp on the left and the Host badge in a `flexShrink: 0` wrapper on the right. Applies to both top-level contest comments and nested replies. +- 0bc145f: Fix artist hover card blur overlay overflowing the card. The `.artistCoverPhoto` banner div lacked a positioning context, so the blur overlay's `position: absolute; inset: 0` escaped to the nearest positioned ancestor and bled outside the cover photo banner. Adding `position: relative` (and `overflow: hidden`) to the banner contains the blur to the intended 136px header. +- 4cf2bee: Honor "Request Desktop Site" on mobile browsers: when a mobile browser flips its User-Agent to a desktop one (via the browser's "Request Desktop Site" toggle, or iPadOS Safari's default Mac UA), serve the desktop web app instead of the mobile experience. +- 791b612: Hide the profile Contests tab unless the `CONTESTS` feature flag is enabled and the artist hosts at least one remix contest. Previously the desktop and mobile-web profiles always rendered the tab for any artist (ignoring the flag entirely), and the React Native side respected the flag but still showed the tab for artists who don't run any contest — both led to an empty/unreachable destination. Adds a shared `useUserHasRemixContest` hook that paginates the global remix-contest list (matching `ContestsTab`'s page cap) and matches `event.userId` against the host. Direct visits to `/:handle/contests` on a non-qualifying profile fall back to the default tab so the body stays in sync with the (now hidden) tab list. +- f3d55fa: Remove FingerprintJS from all clients and services. Sign-in no longer collects a `visitorId`, the identity service's fingerprint-based OTP bypass is gone (new devices always require OTP), and the anti-abuse-oracle drops the per-fingerprint device-count scoring and UI section. +- b52d005: Rename the Feed page's "Chronological" tab to "Latest" on web and mobile. The persisted `feed-page:tab` localStorage value is migrated transparently so existing users land on the same tab they had selected. +- 519da44: Smooth out lineup infinite-scroll on Trending, Feed, and other tanquery-driven track lists. The scroll-to-bottom "chunk" had three causes stacked: a small fixed 500px threshold, skeletons that gated on tanquery's `isFetching` (so they only painted after a multi-tick state round-trip), and a per-page skeleton count of just `pageSize` (4 on Trending, ~480px tall on desktop) that didn't fill the loading window. The threshold is now ~2× the scroll parent's viewport, a synchronous trigger flag renders skeletons on the next frame, and the skeleton count is sized to fill the threshold area so the bottom stays populated even when the user scrolls in faster than the next page can return. +- Updated dependencies [b803e5e] +- Updated dependencies [272b8db] +- Updated dependencies [6bd5c27] +- Updated dependencies [98ad217] +- Updated dependencies [da6c724] +- Updated dependencies [be0537f] +- Updated dependencies [5d9d4e4] +- Updated dependencies [791b612] +- Updated dependencies [f3d55fa] +- Updated dependencies [8662a56] +- Updated dependencies [f97f1ac] +- Updated dependencies [b52d005] + - @audius/sdk@16.0.0 + - @audius/common@1.5.79 + ## 1.5.170 ### Patch Changes diff --git a/packages/web/package.json b/packages/web/package.json index ff5ade839ff..864a968315a 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -3,7 +3,7 @@ "productName": "Audius", "description": "The Audius web client reference implementation", "author": "Audius", - "version": "1.5.179", + "version": "1.5.180", "private": true, "scripts": { "DEV & BUILD========================================": "",