A tool to scrobble tracks from your Apple Music data export to Teal.fm.
at main 6.4 kB view raw
1export type AppleMusicPlaybackEvent = { 2 "Age Bucket": string; 3 "Album Name": string; 4 "Apple ID Number": string; 5 "Apple Music Subscription": string; 6 "Auto Play": string; 7 "Build Version": string; 8 "Bundle Version": string; 9 "Camera Option": string; 10 "Carrier Name": string; 11 "Client Build Version": string; 12 "Client Device Name": string; 13 "Client IP Address": string; 14 "Client Platform": string; 15 "Container Album Name": string; 16 "Container Artist Name": string; 17 "Container Global Playlist ID": string; 18 "Container ID": string; 19 "Container iTunes Playlist ID": string; 20 "Container Library ID": string; 21 "Container Name": string; 22 "Container Origin Type": string; 23 "Container Personalized ID": string; 24 "Container Playlist Folder ID": string; 25 "Container Playlist ID": string; 26 "Container Radio Station ID": string; 27 "Container Radio Station Version": string; 28 "Container Season ID": string; 29 "Container Type": string; 30 "Contingency": string; 31 "Continuity Microphone Used": string; 32 "Device App Name": string; 33 "Device App Version": string; 34 "Device Identifier": string; 35 "Device OS Name": string; 36 "Device OS Version": string; 37 "Device Type": string; 38 "Display Count": string; 39 "Display Language": string; 40 "Display Type": string; 41 "End Position In Milliseconds": string; 42 "End Reason Type": string; 43 "Evaluation Variant": string; 44 "Event End Timestamp": string; 45 "Event ID": string; 46 "Event Post Date Time": string; 47 "Event Reason Hint Type": string; 48 "Event Received Timestamp": string; 49 "Event Start Timestamp": string; 50 "Event Timestamp": string; 51 "Event Type": string; 52 "Feature Name": string; 53 "Grace Period": string; 54 "Grouping": string; 55 "House ID": string; 56 "IP City": string; 57 "IP Country Code": string; 58 "IP Latitude": string; 59 "IP Longitude": string; 60 "IP Network": string; 61 "IP Network Type": string; 62 "IP Region Code": string; 63 "Is CMA Station": string; 64 "Is Collaborative": string; 65 "Is Delegated": string; 66 "Is Heatseeker Station": string; 67 "Is Heavy Rotation Station": string; 68 "Is Subscription Owner?": string; 69 "Is Vocal Attenuation": string; 70 "ISO Country": string; 71 "Item Type": string; 72 "Key Request": string; 73 "Lease Limit": string; 74 "Legacy Playback ID": string; 75 "Local Radio Station ID": string; 76 "Local Radio Station TuneIn ID": string; 77 "Managed ID": string; 78 "Matched Content": string; 79 "Media Bundle App Name": string; 80 "Media Bundle Type": string; 81 "Media Duration In Milliseconds": string; 82 "Media Type": string; 83 "Metrics Client ID": string; 84 "Milliseconds Since Play": string; 85 "Offline": string; 86 "Ownership Type": string; 87 "Personalized Name": string; 88 "Play Duration Milliseconds": string; 89 "Promotion Scenario ID": string; 90 "Pronunciation Displayed": string; 91 "Provided Audio Bit Depth": string; 92 "Provided Audio Channel": string; 93 "Provided Audio Sample Rate": string; 94 "Provided Bit Rate": string; 95 "Provided Codec": string; 96 "Provided Playback Format": string; 97 "Provider ID": string; 98 "Radio Format": string; 99 "Radio Seed ID": string; 100 "Radio Station Country": string; 101 "Radio Station ID": string; 102 "Radio Station Position": string; 103 "Radio Type": string; 104 "Radio User ID": string; 105 "Referral ID": string; 106 "Repeat Play": string; 107 "Report Type": string; 108 "Royalty Free": string; 109 "Sales Order Vendor ID": string; 110 "Session Is Shared": string; 111 "Shared Activity Devices-Current": string; 112 "Shared Activity Devices-Max": string; 113 "Shared Activity Type": string; 114 "Shelf Content Identifier": string; 115 "Shelf Content Position": string; 116 "Shelf Index": string; 117 "Shelf Type": string; 118 "Shelf Visible": string; 119 "Shuffle Play": string; 120 "Siri Request": string; 121 "Song Name": string; 122 "Source Model": string; 123 "Source Radio Name": string; 124 "Source Radio Type": string; 125 "Source Type": string; 126 "Start Position In Milliseconds": string; 127 "Store Front Name": string; 128 "Subscribed State": string; 129 "Subscription Bundle ID": string; 130 "Subscription Discovery Mode": string; 131 "Subscription Offer ID": string; 132 "Subscription Partner": string; 133 "Subscription Period": string; 134 "Subscription Pool Type": string; 135 "Subscription User ID": string; 136 "Transition Type": string; 137 "Translation Displayed": string; 138 "Use Listening History": string; 139 "User's Transition Type": string; 140 "User's Audio Quality": string; 141 "User's Playback Format": string; 142 "UTC Offset In Seconds": string; 143 "Vocal Attenuation Duration": string; 144 "Vocal Attenuation Model ID": string; 145}; 146 147export type AppleMusicContainer = { 148 "Container Description": string; 149 "Container Type": string; 150 "Origin": string; 151 "Date Created": string; 152 "Play Duration Milliseconds": string; 153 "Artist Name": string; 154 "Last Played": string; 155 "Play Count": string; 156 "Genres": string; 157 "Artists": string; 158}; 159 160export type AppleMusicTrackHistory = { 161 "Country": string; 162 "Track Identifier": string; 163 "Media type": string; 164 "Date Played": string; 165 "Hours": string; 166 "Play Duration Milliseconds": string; 167 "End Reason Type": string; 168 "Source Type": string; 169 "Play Count": string; 170 "Skip Count": string; 171 "Ignore For Recommendations": string; 172 "Track Reference": string; 173 "Track Description": string; 174}; 175 176export type TealfmPlayRecord = { 177 isrc?: string; 178 $type: "fm.teal.alpha.feed.play"; 179 //$type: "dev.indexx.teal.feed.play"; 180 artists: Array<{ 181 artistMbId: string; 182 artistName: string; 183 }>; 184 duration?: number; 185 originUrl?: string; 186 trackName: string; 187 playedTime: string; 188 releaseMbId: string; 189 releaseName: string; 190 recordingMbId: string; 191 submissionClientAgent: string; 192 musicServiceBaseDomain?: "music.apple.com"; 193}; 194 195export type XRPCError = { 196 error?: string; 197 message?: string; 198}; 199 200export type ResolveHandleSuccess = { 201 did: string; 202 error?: never; 203 message?: never; 204}; 205 206export type ResolveHandleFailure = XRPCError & { 207 did?: never; 208}; 209 210export type ResolveHandleRes = ResolveHandleSuccess | ResolveHandleFailure;