From edd6abb74ca768ea119a7b1a27b47eb376010b36 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 31 Mar 2026 20:58:00 +0000 Subject: [PATCH] Fix collection uploads to mark child tracks as playlist uploads Co-authored-by: Ray Jacobson --- packages/common/src/adapters/track.ts | 1 + .../common/src/api/tan-query/upload/usePublishCollection.ts | 2 ++ packages/sdk/src/sdk/api/tracks/types.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/packages/common/src/adapters/track.ts b/packages/common/src/adapters/track.ts index 67f3268f7ca..c75dded68be 100644 --- a/packages/common/src/adapters/track.ts +++ b/packages/common/src/adapters/track.ts @@ -280,6 +280,7 @@ export const trackMetadataForUploadToSdk = ( 'is_download_gated', 'is_downloadable', 'is_original_available', + 'is_playlist_upload', 'is_scheduled_release', 'bpm', 'is_custom_bpm', diff --git a/packages/common/src/api/tan-query/upload/usePublishCollection.ts b/packages/common/src/api/tan-query/upload/usePublishCollection.ts index fd1a86d3130..36113085b1b 100644 --- a/packages/common/src/api/tan-query/upload/usePublishCollection.ts +++ b/packages/common/src/api/tan-query/upload/usePublishCollection.ts @@ -239,6 +239,8 @@ function combineMetadata( // Set download & hidden status metadata.is_downloadable = !!collectionMetadata.is_downloadable + // Marks child tracks so backend suppresses per-track follower create notifications. + metadata.is_playlist_upload = true metadata.is_unlisted = !!collectionMetadata.is_private if (collectionMetadata.is_private && collectionMetadata.field_visibility) { // Convert any undefined values to booleans diff --git a/packages/sdk/src/sdk/api/tracks/types.ts b/packages/sdk/src/sdk/api/tracks/types.ts index fd06c2c1423..c28e4d2d0ff 100644 --- a/packages/sdk/src/sdk/api/tracks/types.ts +++ b/packages/sdk/src/sdk/api/tracks/types.ts @@ -194,6 +194,7 @@ export const UploadTrackMetadataSchema = z.object({ coverArtSizes: z.optional(z.string()), isDownloadable: z.optional(z.boolean()), isOriginalAvailable: z.optional(z.boolean()), + isPlaylistUpload: z.optional(z.boolean()), ddexReleaseIds: z.optional(z.record(z.string()).nullable()), ddexApp: z.optional(z.string()).nullable(), artists: z.optional(z.array(DDEXResourceContributor)).nullable(),