import {z} from 'zod' export type GetApiNotificationsIdArgs = {id: string, user_id?: string | undefined, timestamp?: number | undefined, group_id?: string | undefined, limit?: number | undefined, types?: (Array<'announcement' | 'follow' | 'repost' | 'save' | 'remix' | 'cosign' | 'create' | 'tip_receive' | 'tip_send' | 'challenge_reward' | 'repost_of_repost' | 'save_of_repost' | 'tastemaker' | 'reaction' | 'supporter_dethroned' | 'supporter_rank_up' | 'supporting_rank_up' | 'milestone' | 'track_milestone' | 'track_added_to_playlist' | 'playlist_milestone' | 'tier_change' | 'trending' | 'trending_playlist' | 'trending_underground' | 'usdc_purchase_buyer' | 'usdc_purchase_seller' | 'track_added_to_purchased_album' | 'request_manager' | 'approve_manager_request' | 'track_collaborator_invite' | 'track_collaborator_accept' | 'claimable_reward' | 'comment' | 'comment_thread' | 'comment_mention' | 'comment_reaction' | 'listen_streak_reminder' | 'weekly_rotation' | 'weekly_rotation_featured' | 'weekly_artist_recap' | 'trending_genre' | 'fan_remix_contest_started' | 'fan_remix_contest_ended' | 'fan_remix_contest_ending_soon' | 'fan_remix_contest_winners_selected' | 'fan_remix_contest_submission' | 'artist_remix_contest_ended' | 'artist_remix_contest_ending_soon' | 'artist_remix_contest_submissions' | 'fan_club_text_post' | 'remix_contest_update'>) | undefined}; export type GetApiNotificationsIdOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const versionMetadata = z.object({service: z.string(), version: z.string()}); export const followNotificationActionData = z.object({follower_user_id: z.string(), followee_user_id: z.string()}); export const followNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: followNotificationActionData}); export const followNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(followNotificationAction)}); export const saveNotificationActionData = z.object({type: z.enum(["track", "playlist", "album"]), user_id: z.string(), save_item_id: z.string()}); export const saveNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: saveNotificationActionData}); export const saveNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(saveNotificationAction)}); export const repostNotificationActionData = z.object({type: z.enum(["track", "playlist", "album"]), user_id: z.string(), repost_item_id: z.string()}); export const repostNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: repostNotificationActionData}); export const repostNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(repostNotificationAction)}); export const repostOfRepostNotificationActionData = z.object({type: z.enum(["track", "playlist", "album"]), user_id: z.string(), repost_of_repost_item_id: z.string()}); export const repostOfRepostNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: repostOfRepostNotificationActionData}); export const repostOfRepostNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(repostOfRepostNotificationAction)}); export const saveOfRepostNotificationActionData = z.object({type: z.enum(["track", "playlist", "album"]), user_id: z.string(), save_of_repost_item_id: z.string()}); export const saveOfRepostNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: saveOfRepostNotificationActionData}); export const saveOfRepostNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(saveOfRepostNotificationAction)}); export const tastemakerNotificationActionData = z.object({tastemaker_item_owner_id: z.string(), tastemaker_item_id: z.string(), action: z.string(), tastemaker_item_type: z.string(), tastemaker_user_id: z.string()}); export const tastemakerNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: tastemakerNotificationActionData}); export const tastemakerNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(tastemakerNotificationAction)}); export const remixNotificationActionData = z.object({parent_track_id: z.string(), track_id: z.string()}); export const remixNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: remixNotificationActionData}); export const remixNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(remixNotificationAction)}); export const cosignNotificationActionData = z.object({parent_track_id: z.string(), track_id: z.string(), track_owner_id: z.string()}); export const cosignNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: cosignNotificationActionData}); export const cosignNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(cosignNotificationAction)}); export const createPlaylistNotificationActionData = z.object({is_album: z.boolean(), playlist_id: z.string()}); export const createTrackNotificationActionData = z.object({track_id: z.string()}); export const createNotificationActionData = z.union([createPlaylistNotificationActionData, createTrackNotificationActionData]); export const createNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: createNotificationActionData}); export const createNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(createNotificationAction)}); export const sendTipNotificationActionData = z.object({amount: z.string(), sender_user_id: z.string(), receiver_user_id: z.string(), tip_tx_signature: z.string()}); export const sendTipNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: sendTipNotificationActionData}); export const sendTipNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(sendTipNotificationAction)}); export const receiveTipNotificationActionData = z.object({amount: z.string(), sender_user_id: z.string(), receiver_user_id: z.string(), tip_tx_signature: z.string(), reaction_value: z.number().int()}); export const receiveTipNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: receiveTipNotificationActionData}); export const receiveTipNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(receiveTipNotificationAction)}); export const supporterDethronedNotificationActionData = z.object({dethroned_user_id: z.string(), sender_user_id: z.string(), receiver_user_id: z.string()}); export const supporterDethronedNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: supporterDethronedNotificationActionData}); export const supporterDethronedNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(supporterDethronedNotificationAction)}); export const supporterRankUpNotificationActionData = z.object({rank: z.number().int(), sender_user_id: z.string(), receiver_user_id: z.string()}); export const supporterRankUpNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: supporterRankUpNotificationActionData}); export const supporterRankUpNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(supporterRankUpNotificationAction)}); export const challengeRewardNotificationActionData = z.object({amount: z.string(), specifier: z.string(), challenge_id: z.string(), listen_streak: z.number().int().optional()}); export const challengeRewardNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: challengeRewardNotificationActionData}); export const challengeRewardNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(challengeRewardNotificationAction)}); export const claimableRewardNotificationActionData = z.object({amount: z.string(), specifier: z.string(), challenge_id: z.string()}); export const claimableRewardNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: claimableRewardNotificationActionData}); export const claimableRewardNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(claimableRewardNotificationAction)}); export const reactionNotificationActionData = z.object({reacted_to: z.string(), reaction_type: z.string(), reaction_value: z.number().int(), receiver_user_id: z.string(), sender_user_id: z.string(), sender_wallet: z.string(), tip_amount: z.string()}); export const reactionNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: reactionNotificationActionData}); export const reactionNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(reactionNotificationAction)}); export const userMilestoneNotificationActionData = z.object({type: z.string(), threshold: z.number().int(), user_id: z.string()}); export const trackMilestoneNotificationActionData = z.object({type: z.string(), threshold: z.number().int(), track_id: z.string()}); export const playlistMilestoneNotificationActionData = z.object({type: z.string(), threshold: z.number().int(), playlist_id: z.string(), is_album: z.boolean()}); export const milestoneNotificationActionData = z.union([userMilestoneNotificationActionData, trackMilestoneNotificationActionData, playlistMilestoneNotificationActionData]); export const milestoneNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: milestoneNotificationActionData}); export const milestoneNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(milestoneNotificationAction)}); export const tierChangeNotificationActionData = z.object({new_tier: z.string(), current_value: z.string(), new_tier_value: z.number().int()}); export const tierChangeNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: tierChangeNotificationActionData}); export const tierChangeNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(tierChangeNotificationAction)}); export const trackAddedToPlaylistNotificationActionData = z.object({track_id: z.string(), playlist_id: z.string(), playlist_owner_id: z.string()}); export const trackAddedToPlaylistNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: trackAddedToPlaylistNotificationActionData}); export const trackAddedToPlaylistNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(trackAddedToPlaylistNotificationAction)}); export const trackAddedToPurchasedAlbumNotificationActionData = z.object({track_id: z.string(), playlist_id: z.string(), playlist_owner_id: z.string()}); export const trackAddedToPurchasedAlbumNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: trackAddedToPurchasedAlbumNotificationActionData}); export const trackAddedToPurchasedAlbumNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(trackAddedToPurchasedAlbumNotificationAction)}); export const usdcPurchaseSellerNotificationActionData = z.object({content_type: z.string(), buyer_user_id: z.string(), seller_user_id: z.string(), amount: z.string(), extra_amount: z.string(), content_id: z.string()}); export const usdcPurchaseSellerNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: usdcPurchaseSellerNotificationActionData}); export const usdcPurchaseSellerNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(usdcPurchaseSellerNotificationAction)}); export const usdcPurchaseBuyerNotificationActionData = z.object({content_type: z.string(), buyer_user_id: z.string(), seller_user_id: z.string(), amount: z.string(), extra_amount: z.string(), content_id: z.string()}); export const usdcPurchaseBuyerNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: usdcPurchaseBuyerNotificationActionData}); export const usdcPurchaseBuyerNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(usdcPurchaseBuyerNotificationAction)}); export const requestManagerNotificationActionData = z.object({user_id: z.string(), grantee_user_id: z.string(), grantee_address: z.string()}); export const requestManagerNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: requestManagerNotificationActionData}); export const requestManagerNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(requestManagerNotificationAction)}); export const approveManagerRequestNotificationActionData = z.object({user_id: z.string(), grantee_user_id: z.string(), grantee_address: z.string()}); export const approveManagerRequestNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: approveManagerRequestNotificationActionData}); export const approveManagerRequestNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(approveManagerRequestNotificationAction)}); export const trackCollaboratorNotificationActionData = z.object({track_id: z.string(), inviter_user_id: z.string(), collaborator_user_id: z.string(), status: z.enum(["pending", "accepted", "rejected"]).optional()}); export const trackCollaboratorNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: trackCollaboratorNotificationActionData}); export const trackCollaboratorNotification = z.object({type: z.enum(["track_collaborator_invite", "track_collaborator_accept"]), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(trackCollaboratorNotificationAction)}); export const trendingNotificationActionData = z.object({rank: z.number().int(), genre: z.string(), track_id: z.string(), time_range: z.enum(["week", "month", "year"])}); export const trendingNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: trendingNotificationActionData}); export const trendingNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(trendingNotificationAction)}); export const trendingPlaylistNotificationActionData = z.object({rank: z.number().int(), genre: z.string(), playlist_id: z.string(), time_range: z.enum(["week", "month", "year"])}); export const trendingPlaylistNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: trendingPlaylistNotificationActionData}); export const trendingPlaylistNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(trendingPlaylistNotificationAction)}); export const trendingUndergroundNotificationActionData = z.object({rank: z.number().int(), genre: z.string(), track_id: z.string(), time_range: z.enum(["week", "month", "year"])}); export const trendingUndergroundNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: trendingUndergroundNotificationActionData}); export const trendingUndergroundNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(trendingUndergroundNotificationAction)}); export const announcementNotificationActionData = z.object({title: z.string(), push_body: z.string(), short_description: z.string(), long_description: z.string(), route: z.string(), notification_campaign_id: z.string().nullable().optional()}); export const announcementNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: announcementNotificationActionData}); export const announcementNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(announcementNotificationAction)}); export const commentNotificationActionData = z.object({type: z.enum(["Track", "Playlist", "Album"]), entity_id: z.string(), comment_user_id: z.string(), comment_id: z.string().optional()}); export const commentNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: commentNotificationActionData}); export const commentNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(commentNotificationAction)}); export const commentThreadNotificationActionData = z.object({type: z.enum(["Track", "Playlist", "Album"]), entity_id: z.string(), entity_user_id: z.string(), comment_user_id: z.string(), comment_id: z.string().optional()}); export const commentThreadNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: commentThreadNotificationActionData}); export const commentThreadNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(commentThreadNotificationAction)}); export const commentMentionNotificationActionData = z.object({type: z.enum(["Track", "Playlist", "Album"]), entity_id: z.string(), entity_user_id: z.string(), comment_user_id: z.string(), comment_id: z.string().optional()}); export const commentMentionNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: commentMentionNotificationActionData}); export const commentMentionNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(commentMentionNotificationAction)}); export const commentReactionNotificationActionData = z.object({type: z.enum(["Track", "Playlist", "Album"]), entity_id: z.string(), entity_user_id: z.string(), reacter_user_id: z.string(), comment_id: z.string().optional()}); export const commentReactionNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: commentReactionNotificationActionData}); export const commentReactionNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(commentReactionNotificationAction)}); export const listenStreakReminderNotificationActionData = z.object({streak: z.number().int()}); export const listenStreakReminderNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: listenStreakReminderNotificationActionData}); export const listenStreakReminderNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(listenStreakReminderNotificationAction)}); export const weeklyRotationNotificationActionData = z.object({year: z.number().int(), week: z.number().int()}); export const weeklyRotationNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: weeklyRotationNotificationActionData}); export const weeklyRotationNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(weeklyRotationNotificationAction)}); export const weeklyRotationFeaturedNotificationActionData = z.object({year: z.number().int(), week: z.number().int(), track_id: z.number().int(), track_count: z.number().int(), rotation_count: z.number().int()}); export const weeklyRotationFeaturedNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: weeklyRotationFeaturedNotificationActionData}); export const weeklyRotationFeaturedNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(weeklyRotationFeaturedNotificationAction)}); export const weeklyArtistRecapNotificationActionData = z.object({year: z.number().int(), week: z.number().int(), play_count: z.number().int(), follower_count: z.number().int(), save_count: z.number().int(), rotation_save_count: z.number().int()}); export const weeklyArtistRecapNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: weeklyArtistRecapNotificationActionData}); export const weeklyArtistRecapNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(weeklyArtistRecapNotificationAction)}); export const trendingGenreNotificationActionData = z.object({track_id: z.string(), genre: z.string(), rank: z.number().int(), week: z.string()}); export const trendingGenreNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: trendingGenreNotificationActionData}); export const trendingGenreNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(trendingGenreNotificationAction)}); export const fanRemixContestStartedNotificationActionData = z.object({entity_user_id: z.string(), entity_id: z.string()}); export const fanRemixContestStartedNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: fanRemixContestStartedNotificationActionData}); export const fanRemixContestStartedNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(fanRemixContestStartedNotificationAction)}); export const fanRemixContestEndedNotificationActionData = z.object({entity_user_id: z.string(), entity_id: z.string()}); export const fanRemixContestEndedNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: fanRemixContestEndedNotificationActionData}); export const fanRemixContestEndedNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(fanRemixContestEndedNotificationAction)}); export const fanRemixContestEndingSoonNotificationActionData = z.object({entity_user_id: z.string(), entity_id: z.string()}); export const fanRemixContestEndingSoonNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: fanRemixContestEndingSoonNotificationActionData}); export const fanRemixContestEndingSoonNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(fanRemixContestEndingSoonNotificationAction)}); export const artistRemixContestEndedNotificationActionData = z.object({entity_id: z.string()}); export const artistRemixContestEndedNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: artistRemixContestEndedNotificationActionData}); export const artistRemixContestEndedNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(artistRemixContestEndedNotificationAction)}); export const artistRemixContestEndingSoonNotificationActionData = z.object({entity_user_id: z.string(), entity_id: z.string()}); export const artistRemixContestEndingSoonNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: artistRemixContestEndingSoonNotificationActionData}); export const artistRemixContestEndingSoonNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(artistRemixContestEndingSoonNotificationAction)}); export const artistRemixContestSubmissionsNotificationActionData = z.object({event_id: z.string(), milestone: z.number().int(), entity_id: z.string()}); export const artistRemixContestSubmissionsNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: artistRemixContestSubmissionsNotificationActionData}); export const artistRemixContestSubmissionsNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(artistRemixContestSubmissionsNotificationAction)}); export const fanRemixContestWinnersSelectedNotificationActionData = z.object({entity_user_id: z.string(), entity_id: z.string()}); export const fanRemixContestWinnersSelectedNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: fanRemixContestWinnersSelectedNotificationActionData}); export const fanRemixContestWinnersSelectedNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(fanRemixContestWinnersSelectedNotificationAction)}); export const remixContestUpdateNotificationActionData = z.object({event_id: z.string(), entity_id: z.string(), entity_user_id: z.string(), comment_id: z.string()}); export const remixContestUpdateNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: remixContestUpdateNotificationActionData}); export const remixContestUpdateNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(remixContestUpdateNotificationAction)}); export const fanRemixContestSubmissionNotificationActionData = z.object({event_id: z.string(), entity_id: z.string(), entity_user_id: z.string(), submission_track_id: z.string(), submitter_user_id: z.string()}); export const fanRemixContestSubmissionNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: fanRemixContestSubmissionNotificationActionData}); export const fanRemixContestSubmissionNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(fanRemixContestSubmissionNotificationAction)}); export const fanClubTextPostNotificationActionData = z.object({entity_user_id: z.string(), comment_id: z.string()}); export const fanClubTextPostNotificationAction = z.object({specifier: z.string(), type: z.string(), timestamp: z.number().int(), data: fanClubTextPostNotificationActionData}); export const fanClubTextPostNotification = z.object({type: z.string(), group_id: z.string(), is_seen: z.boolean(), seen_at: z.number().int().optional(), actions: z.array(fanClubTextPostNotificationAction)}); export const notification = z.discriminatedUnion("type", [followNotification, saveNotification, repostNotification, repostOfRepostNotification, saveOfRepostNotification, tastemakerNotification, remixNotification, cosignNotification, createNotification, sendTipNotification, receiveTipNotification, supporterDethronedNotification, supporterRankUpNotification, supporterRankUpNotification, challengeRewardNotification, claimableRewardNotification, reactionNotification, milestoneNotification, tierChangeNotification, trackAddedToPlaylistNotification, trackAddedToPurchasedAlbumNotification, usdcPurchaseSellerNotification, usdcPurchaseBuyerNotification, requestManagerNotification, approveManagerRequestNotification, trackCollaboratorNotification, trendingNotification, trendingPlaylistNotification, trendingUndergroundNotification, announcementNotification, commentNotification, commentThreadNotification, commentMentionNotification, commentReactionNotification, listenStreakReminderNotification, weeklyRotationNotification, weeklyRotationFeaturedNotification, weeklyArtistRecapNotification, trendingGenreNotification, fanRemixContestStartedNotification, fanRemixContestEndedNotification, fanRemixContestEndingSoonNotification, artistRemixContestEndedNotification, artistRemixContestEndingSoonNotification, artistRemixContestSubmissionsNotification, fanRemixContestWinnersSelectedNotification, remixContestUpdateNotification, fanRemixContestSubmissionNotification, fanClubTextPostNotification]); export const notifications = z.object({notifications: z.array(notification).optional(), unread_count: z.number().int()}); export const coverPhoto = z.object({"640x": z.string().optional(), "2000x": z.string().optional(), mirrors: z.array(z.string()).optional()}); export const profilePicture = z.object({"150x150": z.string().optional(), "480x480": z.string().optional(), "1000x1000": z.string().optional(), mirrors: z.array(z.string()).optional()}); export const playlistLibrary = z.object({contents: z.array(z.object({})).optional()}); export const user = z.object({album_count: z.number().int(), artist_pick_track_id: z.string().optional(), artist_coin_badge: z.object({mint: z.string().optional(), logo_uri: z.string().optional(), banner_image_url: z.string().optional(), ticker: z.string().optional()}), coin_flair_mint: z.string().optional(), bio: z.string().optional(), cover_photo: coverPhoto.optional(), followee_count: z.number().int(), follower_count: z.number().int(), handle: z.string(), id: z.string(), is_verified: z.boolean(), twitter_handle: z.string().optional(), instagram_handle: z.string().optional(), tiktok_handle: z.string().optional(), verified_with_twitter: z.boolean(), verified_with_instagram: z.boolean(), verified_with_tiktok: z.boolean(), website: z.string().optional(), donation: z.string().optional(), location: z.string().optional(), name: z.string(), playlist_count: z.number().int(), profile_picture: profilePicture.optional(), repost_count: z.number().int(), track_count: z.number().int(), is_deactivated: z.boolean(), is_available: z.boolean(), erc_wallet: z.string(), spl_wallet: z.string(), spl_usdc_wallet: z.string(), spl_usdc_payout_wallet: z.string().optional(), supporter_count: z.number().int(), supporting_count: z.number().int(), total_audio_balance: z.number().int(), wallet: z.string(), balance: z.string(), associated_wallets_balance: z.string(), total_balance: z.string(), waudio_balance: z.string(), associated_sol_wallets_balance: z.string(), blocknumber: z.number().int(), created_at: z.string(), is_storage_v2: z.boolean(), creator_node_endpoint: z.string().optional(), current_user_followee_follow_count: z.number().int(), does_current_user_follow: z.boolean(), does_current_user_subscribe: z.boolean(), does_follow_current_user: z.boolean(), handle_lc: z.string(), updated_at: z.string(), cover_photo_sizes: z.string().optional(), cover_photo_cids: coverPhoto.optional(), cover_photo_legacy: z.string().optional(), profile_picture_sizes: z.string().optional(), profile_picture_cids: profilePicture.optional(), profile_picture_legacy: z.string().optional(), has_collectibles: z.boolean(), playlist_library: playlistLibrary.optional(), allow_ai_attribution: z.boolean(), profile_type: z.string().optional()}); export const trackArtwork = z.object({"150x150": z.string().optional(), "480x480": z.string().optional(), "1000x1000": z.string().optional(), mirrors: z.array(z.string()).optional()}); export const remix = z.object({parent_track_id: z.string(), user: user, has_remix_author_reposted: z.boolean(), has_remix_author_saved: z.boolean()}); export const remixParent = z.object({tracks: z.array(remix).optional()}); export const albumBacklink = z.object({playlist_id: z.number().int(), playlist_name: z.string(), permalink: z.string()}); export const access = z.object({stream: z.boolean(), download: z.boolean()}); export const coverArt = z.object({"150x150": z.string().optional(), "480x480": z.string().optional(), "1000x1000": z.string().optional(), mirrors: z.array(z.string()).optional()}); export const fieldVisibility = z.object({mood: z.boolean(), tags: z.boolean(), genre: z.boolean(), share: z.boolean(), play_count: z.boolean(), remixes: z.boolean()}); export const repost = z.object({repost_item_id: z.string(), repost_type: z.string(), user_id: z.string()}); export const favorite = z.object({favorite_item_id: z.string(), favorite_type: z.string(), user_id: z.string(), created_at: z.string()}); export const stemParent = z.object({category: z.string(), parent_track_id: z.number().int()}); export const trackSegment = z.object({duration: z.number(), multihash: z.string()}); export const ddexResourceContributor = z.object({name: z.string().min(1), roles: z.array(z.string().min(1)), sequence_number: z.number().int().gte(0).optional()}); export const ddexRightsController = z.object({name: z.string().min(1), roles: z.array(z.string().min(1)), rights_share_unknown: z.string().optional()}); export const ddexCopyright = z.object({year: z.string().min(4).max(4), text: z.string().min(1)}); export const tipGate = z.object({tip_user_id: z.number().int()}); export const followGate = z.object({follow_user_id: z.number().int()}); export const paymentSplit = z.object({user_id: z.number().int(), percentage: z.number()}); export const usdcGate = z.object({price: z.number().int(), splits: z.array(paymentSplit)}); export const purchaseGate = z.object({usdc_purchase: usdcGate}); export const extendedTokenGate = z.object({token_mint: z.string(), token_amount: z.number().int()}); export const tokenGate = z.object({token_gate: extendedTokenGate}); export const accessGate = z.union([tipGate, followGate, purchaseGate, tokenGate]); export const urlWithMirrors = z.object({url: z.string().optional(), mirrors: z.array(z.string())}); export const track = z.object({artwork: trackArtwork, description: z.string().optional(), genre: z.string(), id: z.string(), track_cid: z.string().optional(), preview_cid: z.string().optional(), orig_file_cid: z.string().optional(), orig_filename: z.string().optional(), is_original_available: z.boolean(), mood: z.string().optional(), release_date: z.string().optional(), remix_of: remixParent, repost_count: z.number().int(), favorite_count: z.number().int(), comment_count: z.number().int(), tags: z.string().optional(), title: z.string(), user: user, collaborators: z.array(user).optional(), pending_collaborators: z.array(user).optional(), duration: z.number().int(), is_downloadable: z.boolean(), play_count: z.number().int(), permalink: z.string(), is_streamable: z.boolean().optional(), ddex_app: z.string().optional(), playlists_containing_track: z.array(z.number().int()).optional(), pinned_comment_id: z.number().int().optional(), album_backlink: albumBacklink.optional(), access: access, blocknumber: z.number().int(), create_date: z.string().optional(), cover_art_sizes: z.string(), cover_art_cids: coverArt.optional(), created_at: z.string(), credits_splits: z.string().optional(), isrc: z.string().optional(), license: z.string().optional(), iswc: z.string().optional(), field_visibility: fieldVisibility, followee_reposts: z.array(repost), has_current_user_reposted: z.boolean(), is_scheduled_release: z.boolean(), is_unlisted: z.boolean(), has_current_user_saved: z.boolean(), followee_favorites: z.array(favorite), route_id: z.string(), stem_of: stemParent.optional(), track_segments: z.array(trackSegment), updated_at: z.string(), user_id: z.string(), is_delete: z.boolean(), cover_art: z.string().optional(), is_available: z.boolean(), ai_attribution_user_id: z.number().int().optional(), allowed_api_keys: z.array(z.string()).optional(), audio_upload_id: z.string().optional(), preview_start_seconds: z.number().optional(), bpm: z.number().optional(), is_custom_bpm: z.boolean().optional(), musical_key: z.string().optional(), is_custom_musical_key: z.boolean().optional(), audio_analysis_error_count: z.number().int().optional(), comments_disabled: z.boolean().optional(), ddex_release_ids: z.object({}).optional(), artists: z.array(z.object({})).optional(), resource_contributors: z.array(ddexResourceContributor).nullable().optional(), indirect_resource_contributors: z.array(ddexResourceContributor).nullable().optional(), rights_controller: ddexRightsController.optional(), copyright_line: ddexCopyright.nullable().optional(), producer_copyright_line: ddexCopyright.nullable().optional(), parental_warning_type: z.string().nullable().optional(), is_stream_gated: z.boolean(), access_authorities: z.array(z.string()).nullable().optional(), feedback_requested: z.boolean().optional(), feedback_requested_at: z.string().nullable().optional(), stream_conditions: accessGate.optional(), is_download_gated: z.boolean(), download_conditions: accessGate.optional(), cover_original_song_title: z.string().optional(), cover_original_artist: z.string().optional(), is_owned_by_user: z.boolean(), stream: urlWithMirrors, download: urlWithMirrors, preview: urlWithMirrors}); export const playlistArtwork = z.object({"150x150": z.string().optional(), "480x480": z.string().optional(), "1000x1000": z.string().optional(), mirrors: z.array(z.string()).optional()}); export const playlistAddedTimestamp = z.object({metadata_timestamp: z.number().int().optional(), timestamp: z.number().int(), track_id: z.string()}); export const playlist = z.object({artwork: playlistArtwork.optional(), description: z.string().optional(), permalink: z.string(), id: z.string(), is_album: z.boolean(), is_image_autogenerated: z.boolean(), playlist_name: z.string(), playlist_contents: z.array(playlistAddedTimestamp), repost_count: z.number().int(), favorite_count: z.number().int(), total_play_count: z.number().int(), user: user, ddex_app: z.string().optional(), access: access, upc: z.string().optional(), track_count: z.number().int(), blocknumber: z.number().int(), created_at: z.string(), followee_reposts: z.array(repost), followee_favorites: z.array(favorite), has_current_user_reposted: z.boolean(), has_current_user_saved: z.boolean(), is_delete: z.boolean(), is_private: z.boolean(), updated_at: z.string(), added_timestamps: z.array(playlistAddedTimestamp), user_id: z.string(), tracks: z.array(track).optional(), cover_art: z.string().optional(), cover_art_sizes: z.string().optional(), cover_art_cids: playlistArtwork.optional(), is_stream_gated: z.boolean(), stream_conditions: accessGate.optional(), is_scheduled_release: z.boolean(), release_date: z.string().optional(), ddex_release_ids: z.object({}).optional(), artists: z.array(z.object({})).optional(), copyright_line: z.object({}).optional(), producer_copyright_line: z.object({}).optional(), parental_warning_type: z.string().nullable().optional()}); export const related = z.object({users: z.array(user).optional(), tracks: z.array(track).optional(), playlists: z.array(playlist).optional()}); export const notificationsResponse = z.object({latest_chain_block: z.number().int(), latest_indexed_block: z.number().int(), latest_chain_slot_plays: z.number().int(), latest_indexed_slot_plays: z.number().int(), signature: z.string(), timestamp: z.string(), version: versionMetadata, data: notifications.optional(), related: related.optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get notifications for user ID * * GET /notifications/{id} */ export const getApiNotificationsId = async (args: GetApiNotificationsIdArgs, options: GetApiNotificationsIdOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.user_id != null) query.append("user_id", String(args.user_id)) if (args.timestamp != null) query.append("timestamp", String(args.timestamp)) if (args.group_id != null) query.append("group_id", String(args.group_id)) if (args.limit != null) query.append("limit", String(args.limit)) for (const item of args.types ?? []) query.append("types", String(item)) const url = `${baseUrl.replace(/\/+$/, '')}/notifications/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(notificationsResponse, await res.json()) };