Teal.fm frontend powered by slices.network tealfm-slices.wisp.place
tealfm slices

fix artists field query to include subfields

The artists field changed from a scalar to an object type (FmTealAlphaFeedDefsArtist) requiring subfield selection. Updated TrackItem and TopTracks queries to properly request artistName and artistMbId.

+449 -33
schema.graphql
···
}
type AppBskyActorProfile {
+
id: ID!
uri: String!
cid: String!
did: String!
···
joinedViaStarterPack: JSON
labels: JSON
pinnedPost: JSON
-
appBskyActorProfile: AppBskyActorProfile
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
appBskyFeedPostgatesCount: Int!
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
···
interval: DateInterval
}
+
input AppBskyActorProfileInput {
+
avatar: JSON
+
banner: JSON
+
createdAt: String
+
description: String
+
displayName: String
+
joinedViaStarterPack: JSON
+
labels: JSON
+
pinnedPost: JSON
+
}
+
input AppBskyActorProfileSortFieldInput {
field: AppBskyActorProfileGroupByField!
direction: SortDirection
···
joinedViaStarterPack: StringFilter
labels: StringFilter
pinnedPost: StringFilter
+
json: StringFilter
+
and: [AppBskyActorProfileWhereInput]
+
or: [AppBskyActorProfileWhereInput]
+
}
+
+
type AppBskyEmbedDefsAspectRatio {
+
height: Int
+
width: Int
}
type AppBskyEmbedExternal {
+
id: ID!
uri: String!
cid: String!
did: String!
indexedAt: String!
actorHandle: String
-
external: JSON!
+
external: AppBskyEmbedExternalExternal!
appBskyActorProfile: AppBskyActorProfile
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
appBskyFeedPostgatesCount: Int!
···
type AppBskyEmbedExternalEdge {
node: AppBskyEmbedExternal!
cursor: String!
+
}
+
+
type AppBskyEmbedExternalExternal {
+
description: String
+
thumb: Blob
+
title: String
+
uri: String
}
enum AppBskyEmbedExternalGroupByField {
···
interval: DateInterval
}
+
input AppBskyEmbedExternalInput {
+
external: JSON!
+
}
+
input AppBskyEmbedExternalSortFieldInput {
field: AppBskyEmbedExternalGroupByField!
direction: SortDirection
···
collection: StringFilter
actorHandle: StringFilter
external: StringFilter
+
json: StringFilter
+
and: [AppBskyEmbedExternalWhereInput]
+
or: [AppBskyEmbedExternalWhereInput]
}
type AppBskyEmbedImages {
+
id: ID!
uri: String!
cid: String!
did: String!
indexedAt: String!
actorHandle: String
-
images: JSON!
+
images: [AppBskyEmbedImagesImage!]
appBskyActorProfile: AppBskyActorProfile
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
appBskyFeedPostgatesCount: Int!
···
interval: DateInterval
}
+
type AppBskyEmbedImagesImage {
+
alt: String
+
aspectRatio: JSON
+
image: Blob
+
}
+
+
input AppBskyEmbedImagesInput {
+
images: JSON!
+
}
+
input AppBskyEmbedImagesSortFieldInput {
field: AppBskyEmbedImagesGroupByField!
direction: SortDirection
···
collection: StringFilter
actorHandle: StringFilter
images: StringFilter
+
json: StringFilter
+
and: [AppBskyEmbedImagesWhereInput]
+
or: [AppBskyEmbedImagesWhereInput]
}
type AppBskyEmbedRecord {
-
uri: String!
-
cid: String!
-
did: String!
-
indexedAt: String!
-
actorHandle: String
-
record: JSON!
-
appBskyActorProfile: AppBskyActorProfile
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
-
appBskyFeedPostgatesCount: Int!
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
-
appBskyFeedThreadgatesCount: Int!
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
-
appBskyActorProfilesCount: Int!
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
-
fmTealAlphaFeedPlaysCount: Int!
+
record: JSON
}
type AppBskyEmbedRecordAggregated {
···
interval: DateInterval
}
+
input AppBskyEmbedRecordInput {
+
record: JSON!
+
}
+
input AppBskyEmbedRecordSortFieldInput {
field: AppBskyEmbedRecordGroupByField!
direction: SortDirection
···
collection: StringFilter
actorHandle: StringFilter
record: StringFilter
+
json: StringFilter
+
and: [AppBskyEmbedRecordWhereInput]
+
or: [AppBskyEmbedRecordWhereInput]
}
type AppBskyEmbedRecordWithMedia {
+
id: ID!
uri: String!
cid: String!
did: String!
indexedAt: String!
actorHandle: String
media: JSON!
-
record: JSON!
+
record: AppBskyEmbedRecord!
appBskyActorProfile: AppBskyActorProfile
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
appBskyFeedPostgatesCount: Int!
···
interval: DateInterval
}
+
input AppBskyEmbedRecordWithMediaInput {
+
media: JSON!
+
record: JSON!
+
}
+
input AppBskyEmbedRecordWithMediaSortFieldInput {
field: AppBskyEmbedRecordWithMediaGroupByField!
direction: SortDirection
···
actorHandle: StringFilter
media: StringFilter
record: StringFilter
+
json: StringFilter
+
and: [AppBskyEmbedRecordWithMediaWhereInput]
+
or: [AppBskyEmbedRecordWithMediaWhereInput]
}
type AppBskyEmbedVideo {
+
id: ID!
uri: String!
cid: String!
did: String!
indexedAt: String!
actorHandle: String
alt: String
-
aspectRatio: JSON
-
captions: JSON
+
aspectRatio: AppBskyEmbedDefsAspectRatio
+
captions: [AppBskyEmbedVideoCaption]
video: Blob
appBskyActorProfile: AppBskyActorProfile
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
···
captions: JSON
video: JSON
count: Int!
+
}
+
+
type AppBskyEmbedVideoCaption {
+
file: Blob
+
lang: String
}
type AppBskyEmbedVideoConnection {
···
interval: DateInterval
}
+
input AppBskyEmbedVideoInput {
+
alt: String
+
aspectRatio: JSON
+
captions: JSON
+
video: JSON!
+
}
+
input AppBskyEmbedVideoSortFieldInput {
field: AppBskyEmbedVideoGroupByField!
direction: SortDirection
···
aspectRatio: StringFilter
captions: StringFilter
video: StringFilter
+
json: StringFilter
+
and: [AppBskyEmbedVideoWhereInput]
+
or: [AppBskyEmbedVideoWhereInput]
}
type AppBskyFeedPostgate {
+
id: ID!
uri: String!
cid: String!
did: String!
···
detachedEmbeddingUris: [String]
embeddingRules: JSON
post: String!
-
appBskyFeedPostgate: AppBskyFeedPostgate
appBskyFeedThreadgate: AppBskyFeedThreadgate
appBskyActorProfile: AppBskyActorProfile
fmTealAlphaFeedPlay: FmTealAlphaFeedPlay
···
interval: DateInterval
}
+
input AppBskyFeedPostgateInput {
+
createdAt: String!
+
detachedEmbeddingUris: [String]
+
embeddingRules: JSON
+
post: String!
+
}
+
input AppBskyFeedPostgateSortFieldInput {
field: AppBskyFeedPostgateGroupByField!
direction: SortDirection
···
detachedEmbeddingUris: StringFilter
embeddingRules: StringFilter
post: StringFilter
+
json: StringFilter
+
and: [AppBskyFeedPostgateWhereInput]
+
or: [AppBskyFeedPostgateWhereInput]
}
type AppBskyFeedThreadgate {
+
id: ID!
uri: String!
cid: String!
did: String!
···
hiddenReplies: [String]
post: String!
appBskyFeedPostgate: AppBskyFeedPostgate
-
appBskyFeedThreadgate: AppBskyFeedThreadgate
appBskyActorProfile: AppBskyActorProfile
fmTealAlphaFeedPlay: FmTealAlphaFeedPlay
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
···
input AppBskyFeedThreadgateGroupByFieldInput {
field: AppBskyFeedThreadgateGroupByField!
interval: DateInterval
+
}
+
+
input AppBskyFeedThreadgateInput {
+
allow: JSON
+
createdAt: String!
+
hiddenReplies: [String]
+
post: String!
}
input AppBskyFeedThreadgateSortFieldInput {
···
createdAt: StringFilter
hiddenReplies: StringFilter
post: StringFilter
+
json: StringFilter
+
and: [AppBskyFeedThreadgateWhereInput]
+
or: [AppBskyFeedThreadgateWhereInput]
}
type AppBskyRichtextFacet {
+
id: ID!
uri: String!
cid: String!
did: String!
indexedAt: String!
actorHandle: String
features: JSON!
-
index: JSON!
+
index: AppBskyRichtextFacetByteSlice!
appBskyActorProfile: AppBskyActorProfile
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
appBskyFeedPostgatesCount: Int!
···
count: Int!
}
+
type AppBskyRichtextFacetByteSlice {
+
byteEnd: Int
+
byteStart: Int
+
}
+
type AppBskyRichtextFacetConnection {
totalCount: Int!
pageInfo: PageInfo!
···
interval: DateInterval
}
+
input AppBskyRichtextFacetInput {
+
features: JSON!
+
index: JSON!
+
}
+
input AppBskyRichtextFacetSortFieldInput {
field: AppBskyRichtextFacetGroupByField!
direction: SortDirection
···
actorHandle: StringFilter
features: StringFilter
index: StringFilter
+
json: StringFilter
+
and: [AppBskyRichtextFacetWhereInput]
+
or: [AppBskyRichtextFacetWhereInput]
}
type Blob {
···
url(preset: String): String!
}
+
type BlobUploadResponse {
+
blob: Blob!
+
}
+
+
type CollectionSummary {
+
collection: String!
+
estimatedRepos: Int!
+
isExternal: Boolean!
+
}
+
type ComAtprotoRepoStrongRef {
+
id: ID!
did: String!
indexedAt: String!
actorHandle: String
···
interval: DateInterval
}
+
input ComAtprotoRepoStrongRefInput {
+
cid: String!
+
uri: String!
+
}
+
input ComAtprotoRepoStrongRefSortFieldInput {
field: ComAtprotoRepoStrongRefGroupByField!
direction: SortDirection
···
actorHandle: StringFilter
cid: StringFilter
uri: StringFilter
+
json: StringFilter
+
and: [ComAtprotoRepoStrongRefWhereInput]
+
or: [ComAtprotoRepoStrongRefWhereInput]
}
enum DateInterval {
···
lte: String
}
+
type DeleteSliceRecordsOutput {
+
message: String!
+
recordsDeleted: Int!
+
actorsDeleted: Int!
+
}
+
+
type FmTealAlphaFeedDefsArtist {
+
artistMbId: String
+
artistName: String
+
}
+
type FmTealAlphaFeedPlay {
+
id: ID!
uri: String!
cid: String!
did: String!
···
actorHandle: String
artistMbIds: [String]
artistNames: [String]
-
artists: JSON
+
artists: [FmTealAlphaFeedDefsArtist]
duration: Int
isrc: String
musicServiceBaseDomain: String
···
interval: DateInterval
}
+
input FmTealAlphaFeedPlayInput {
+
artistMbIds: [String]
+
artistNames: [String]
+
artists: JSON
+
duration: Int
+
isrc: String
+
musicServiceBaseDomain: String
+
originUrl: String
+
playedTime: String
+
recordingMbId: String
+
releaseMbId: String
+
releaseName: String
+
submissionClientAgent: String
+
trackMbId: String
+
trackName: String!
+
}
+
input FmTealAlphaFeedPlaySortFieldInput {
field: FmTealAlphaFeedPlayGroupByField!
direction: SortDirection
···
submissionClientAgent: StringFilter
trackMbId: StringFilter
trackName: StringFilter
+
json: StringFilter
+
and: [FmTealAlphaFeedPlayWhereInput]
+
or: [FmTealAlphaFeedPlayWhereInput]
}
input IntFilter {
···
lte: Int
}
+
type JetstreamLogEntry {
+
id: String!
+
createdAt: String!
+
logType: String!
+
jobId: String
+
userDid: String
+
sliceUri: String
+
level: String!
+
message: String!
+
metadata: JSON
+
}
+
scalar JSON
type Mutation {
"""Sync user collections for a given DID"""
syncUserCollections(did: String!): SyncResult!
+
+
"""Create a new app.bsky.embed.record record"""
+
createAppBskyEmbedRecord(input: AppBskyEmbedRecordInput!, rkey: String): AppBskyEmbedRecord!
+
+
"""Update a app.bsky.embed.record record"""
+
updateAppBskyEmbedRecord(rkey: String!, input: AppBskyEmbedRecordInput!): AppBskyEmbedRecord!
+
+
"""Delete a app.bsky.embed.record record"""
+
deleteAppBskyEmbedRecord(rkey: String!): AppBskyEmbedRecord!
+
+
"""Create a new app.bsky.embed.images record"""
+
createAppBskyEmbedImages(input: AppBskyEmbedImagesInput!, rkey: String): AppBskyEmbedImages!
+
+
"""Update a app.bsky.embed.images record"""
+
updateAppBskyEmbedImages(rkey: String!, input: AppBskyEmbedImagesInput!): AppBskyEmbedImages!
+
+
"""Delete a app.bsky.embed.images record"""
+
deleteAppBskyEmbedImages(rkey: String!): AppBskyEmbedImages!
+
+
"""Create a new app.bsky.embed.recordWithMedia record"""
+
createAppBskyEmbedRecordWithMedia(input: AppBskyEmbedRecordWithMediaInput!, rkey: String): AppBskyEmbedRecordWithMedia!
+
+
"""Update a app.bsky.embed.recordWithMedia record"""
+
updateAppBskyEmbedRecordWithMedia(rkey: String!, input: AppBskyEmbedRecordWithMediaInput!): AppBskyEmbedRecordWithMedia!
+
+
"""Delete a app.bsky.embed.recordWithMedia record"""
+
deleteAppBskyEmbedRecordWithMedia(rkey: String!): AppBskyEmbedRecordWithMedia!
+
+
"""Create a new app.bsky.embed.video record"""
+
createAppBskyEmbedVideo(input: AppBskyEmbedVideoInput!, rkey: String): AppBskyEmbedVideo!
+
+
"""Update a app.bsky.embed.video record"""
+
updateAppBskyEmbedVideo(rkey: String!, input: AppBskyEmbedVideoInput!): AppBskyEmbedVideo!
+
+
"""Delete a app.bsky.embed.video record"""
+
deleteAppBskyEmbedVideo(rkey: String!): AppBskyEmbedVideo!
+
+
"""Create a new app.bsky.embed.external record"""
+
createAppBskyEmbedExternal(input: AppBskyEmbedExternalInput!, rkey: String): AppBskyEmbedExternal!
+
+
"""Update a app.bsky.embed.external record"""
+
updateAppBskyEmbedExternal(rkey: String!, input: AppBskyEmbedExternalInput!): AppBskyEmbedExternal!
+
+
"""Delete a app.bsky.embed.external record"""
+
deleteAppBskyEmbedExternal(rkey: String!): AppBskyEmbedExternal!
+
+
"""Create a new app.bsky.feed.postgate record"""
+
createAppBskyFeedPostgate(input: AppBskyFeedPostgateInput!, rkey: String): AppBskyFeedPostgate!
+
+
"""Update a app.bsky.feed.postgate record"""
+
updateAppBskyFeedPostgate(rkey: String!, input: AppBskyFeedPostgateInput!): AppBskyFeedPostgate!
+
+
"""Delete a app.bsky.feed.postgate record"""
+
deleteAppBskyFeedPostgate(rkey: String!): AppBskyFeedPostgate!
+
+
"""Create a new app.bsky.feed.threadgate record"""
+
createAppBskyFeedThreadgate(input: AppBskyFeedThreadgateInput!, rkey: String): AppBskyFeedThreadgate!
+
+
"""Update a app.bsky.feed.threadgate record"""
+
updateAppBskyFeedThreadgate(rkey: String!, input: AppBskyFeedThreadgateInput!): AppBskyFeedThreadgate!
+
+
"""Delete a app.bsky.feed.threadgate record"""
+
deleteAppBskyFeedThreadgate(rkey: String!): AppBskyFeedThreadgate!
+
+
"""Create a new app.bsky.richtext.facet record"""
+
createAppBskyRichtextFacet(input: AppBskyRichtextFacetInput!, rkey: String): AppBskyRichtextFacet!
+
+
"""Update a app.bsky.richtext.facet record"""
+
updateAppBskyRichtextFacet(rkey: String!, input: AppBskyRichtextFacetInput!): AppBskyRichtextFacet!
+
+
"""Delete a app.bsky.richtext.facet record"""
+
deleteAppBskyRichtextFacet(rkey: String!): AppBskyRichtextFacet!
+
+
"""Create a new app.bsky.actor.profile record"""
+
createAppBskyActorProfile(input: AppBskyActorProfileInput!, rkey: String): AppBskyActorProfile!
+
+
"""Update a app.bsky.actor.profile record"""
+
updateAppBskyActorProfile(rkey: String!, input: AppBskyActorProfileInput!): AppBskyActorProfile!
+
+
"""Delete a app.bsky.actor.profile record"""
+
deleteAppBskyActorProfile(rkey: String!): AppBskyActorProfile!
+
+
"""Create a new com.atproto.repo.strongRef record"""
+
createComAtprotoRepoStrongRef(input: ComAtprotoRepoStrongRefInput!, rkey: String): ComAtprotoRepoStrongRef!
+
+
"""Update a com.atproto.repo.strongRef record"""
+
updateComAtprotoRepoStrongRef(rkey: String!, input: ComAtprotoRepoStrongRefInput!): ComAtprotoRepoStrongRef!
+
+
"""Delete a com.atproto.repo.strongRef record"""
+
deleteComAtprotoRepoStrongRef(rkey: String!): ComAtprotoRepoStrongRef!
+
+
"""Create a new fm.teal.alpha.feed.play record"""
+
createFmTealAlphaFeedPlay(input: FmTealAlphaFeedPlayInput!, rkey: String): FmTealAlphaFeedPlay!
+
+
"""Update a fm.teal.alpha.feed.play record"""
+
updateFmTealAlphaFeedPlay(rkey: String!, input: FmTealAlphaFeedPlayInput!): FmTealAlphaFeedPlay!
+
+
"""Delete a fm.teal.alpha.feed.play record"""
+
deleteFmTealAlphaFeedPlay(rkey: String!): FmTealAlphaFeedPlay!
+
+
"""Start a sync job to backfill collections from the ATProto relay"""
+
startSync(slice: String, collections: [String], externalCollections: [String], repos: [String], limitPerRepo: Int, skipValidation: Boolean, maxRepos: Int): StartSyncOutput!
+
+
"""Cancel a pending or running sync job"""
+
cancelJob(jobId: String!): Boolean!
+
+
"""Delete a sync job from the database"""
+
deleteJob(id: ID!): ID
+
+
"""Upload a blob to the user's AT Protocol repository"""
+
uploadBlob(data: String!, mimeType: String!): BlobUploadResponse!
+
+
"""Register a new OAuth client for a slice"""
+
createOAuthClient(sliceUri: String!, clientName: String!, redirectUris: [String!]!, scope: String!, clientUri: String, logoUri: String, tosUri: String, policyUri: String): OAuthClient!
+
+
"""Update an OAuth client"""
+
updateOAuthClient(clientId: String!, clientName: String, redirectUris: [String], scope: String, clientUri: String, logoUri: String, tosUri: String, policyUri: String): OAuthClient!
+
+
"""Delete an OAuth client"""
+
deleteOAuthClient(clientId: String!): Boolean!
+
+
"""
+
Delete all records and actors from a slice index. Requires authentication and slice ownership.
+
"""
+
deleteSliceRecords(slice: String): DeleteSliceRecordsOutput!
+
}
+
+
type OAuthClient {
+
clientId: String!
+
clientSecret: String
+
clientName: String!
+
redirectUris: [String!]!
+
grantTypes: [String!]!
+
responseTypes: [String!]!
+
scope: String
+
clientUri: String
+
logoUri: String
+
tosUri: String
+
policyUri: String
+
createdAt: String!
+
createdByDid: String!
}
type PageInfo {
···
Aggregated query for app.bsky.embed.images records with GROUP BY support
"""
appBskyEmbedImagesesAggregated(groupBy: [AppBskyEmbedImagesGroupByFieldInput!], where: AppBskyEmbedImagesWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedImagesAggregated!]!
+
+
"""Query app.bsky.embed.recordWithMedia records"""
+
appBskyEmbedRecordWithMedias(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedRecordWithMediaSortFieldInput], where: AppBskyEmbedRecordWithMediaWhereInput): AppBskyEmbedRecordWithMediaConnection!
+
+
"""
+
Aggregated query for app.bsky.embed.recordWithMedia records with GROUP BY support
+
"""
+
appBskyEmbedRecordWithMediasAggregated(groupBy: [AppBskyEmbedRecordWithMediaGroupByFieldInput!], where: AppBskyEmbedRecordWithMediaWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedRecordWithMediaAggregated!]!
"""Query app.bsky.embed.video records"""
appBskyEmbedVideos(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedVideoSortFieldInput], where: AppBskyEmbedVideoWhereInput): AppBskyEmbedVideoConnection!
···
"""
appBskyEmbedVideosAggregated(groupBy: [AppBskyEmbedVideoGroupByFieldInput!], where: AppBskyEmbedVideoWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedVideoAggregated!]!
-
"""Query app.bsky.embed.recordWithMedia records"""
-
appBskyEmbedRecordWithMedias(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedRecordWithMediaSortFieldInput], where: AppBskyEmbedRecordWithMediaWhereInput): AppBskyEmbedRecordWithMediaConnection!
-
-
"""
-
Aggregated query for app.bsky.embed.recordWithMedia records with GROUP BY support
-
"""
-
appBskyEmbedRecordWithMediasAggregated(groupBy: [AppBskyEmbedRecordWithMediaGroupByFieldInput!], where: AppBskyEmbedRecordWithMediaWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedRecordWithMediaAggregated!]!
-
"""Query app.bsky.embed.external records"""
appBskyEmbedExternals(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedExternalSortFieldInput], where: AppBskyEmbedExternalWhereInput): AppBskyEmbedExternalConnection!
···
Aggregated query for fm.teal.alpha.feed.play records with GROUP BY support
"""
fmTealAlphaFeedPlaysAggregated(groupBy: [FmTealAlphaFeedPlayGroupByFieldInput!], where: FmTealAlphaFeedPlayWhereInput, orderBy: AggregationOrderBy, limit: Int): [FmTealAlphaFeedPlayAggregated!]!
+
+
"""
+
Get logs from the Jetstream real-time indexing service, optionally filtered by slice
+
"""
+
jetstreamLogs(slice: String, limit: Int): [JetstreamLogEntry!]!
+
+
"""Get status of a specific sync job"""
+
syncJob(jobId: String!): SyncJob
+
+
"""Get sync job history for a slice"""
+
syncJobs(slice: String, limit: Int): [SyncJob!]!
+
+
"""Get logs for a specific sync job"""
+
syncJobLogs(jobId: String!, limit: Int): [JetstreamLogEntry!]!
+
+
"""Get summary of repos that would be synced based on collection filters"""
+
getSyncSummary(slice: String!, collections: [String], externalCollections: [String], repos: [String]): SyncSummary!
+
+
"""
+
Get sparkline data for multiple slices showing record indexing activity over time
+
"""
+
sparklines(slices: [String!]!, interval: String, duration: String): [SliceSparkline!]!
+
+
"""
+
Query records across all collections in a slice with filtering and pagination.
+
Provide either sliceUri or both actorHandle and rkey.
+
"""
+
sliceRecords(sliceUri: String, actorHandle: String, rkey: String, first: Int, after: String, where: SliceRecordsWhereInput): SliceRecordsConnection!
+
+
"""Get all OAuth clients for a slice"""
+
oauthClients(slice: String): [OAuthClient!]!
+
}
+
+
type SliceRecord {
+
uri: String!
+
cid: String!
+
did: String!
+
collection: String!
+
value: String!
+
indexedAt: String!
+
}
+
+
type SliceRecordEdge {
+
node: SliceRecord!
+
cursor: String!
+
}
+
+
type SliceRecordsConnection {
+
totalCount: Int!
+
edges: [SliceRecordEdge!]!
+
pageInfo: PageInfo!
+
}
+
+
input SliceRecordsWhereInput {
+
collection: StringFilter
+
did: StringFilter
+
uri: StringFilter
+
cid: StringFilter
+
indexedAt: DateTimeFilter
+
json: StringFilter
+
or: [SliceRecordsWhereInput]
+
}
+
+
type SliceSparkline {
+
sliceUri: String!
+
points: [SparklinePoint!]!
}
enum SortDirection {
···
desc
}
+
type SparklinePoint {
+
timestamp: String!
+
count: Int!
+
}
+
+
type StartSyncOutput {
+
jobId: String!
+
message: String!
+
}
+
input StringFilter {
eq: String
in: [String]
contains: String
+
fuzzy: String
gt: String
gte: String
lt: String
···
Subscribe to fm.teal.alpha.feed.play record deletion events. Returns the URI of deleted records.
"""
fmTealAlphaFeedPlayDeleted: String!
+
+
"""Subscribe to new Jetstream log entries, optionally filtered by slice"""
+
jetstreamLogsCreated(slice: String): JetstreamLogEntry!
+
+
"""Subscribe to sync job status updates"""
+
syncJobUpdated(jobId: String, slice: String): SyncJob!
+
}
+
+
type SyncJob {
+
id: ID!
+
jobId: String!
+
sliceUri: String!
+
status: String!
+
createdAt: String!
+
startedAt: String
+
completedAt: String
+
result: SyncJobResult
+
error: String
+
retryCount: Int!
+
}
+
+
type SyncJobResult {
+
success: Boolean!
+
totalRecords: Int!
+
collectionsSynced: [String!]!
+
reposProcessed: Int!
+
message: String!
type SyncResult {
···
message: String!
+
type SyncSummary {
+
totalRepos: Int!
+
cappedRepos: Int!
+
wouldBeCapped: Boolean!
+
appliedLimit: Int!
+
collectionsSummary: [CollectionSummary!]!
+
}
+
+1 -1
src/TopTracks.tsx
···
}
`,
queryVariables,
-
{ fetchKey: period || "all", fetchPolicy: "store-or-network" }
+
{ fetchKey: period || "all", fetchPolicy: "store-or-network" },
);
const tracks = data.fmTealAlphaFeedPlaysAggregated || [];
+4 -1
src/TrackItem.tsx
···
fragment TrackItem_play on FmTealAlphaFeedPlay {
trackName
playedTime
-
artists
+
artists {
+
artistName
+
artistMbId
+
}
releaseName
releaseMbId
actorHandle
+33 -6
src/__generated__/AppPaginationQuery.graphql.ts
···
/**
-
* @generated SignedSource<<38f32c1e1448eb48251113a07e781789>>
+
* @generated SignedSource<<4144e88e9b03430408917b25e498a033>>
* @lightSyntaxTransform
* @nogrep
*/
···
}
]
}
-
];
+
],
+
v2 = {
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "id",
+
"storageKey": null
+
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
···
{
"alias": null,
"args": null,
-
"kind": "ScalarField",
+
"concreteType": "FmTealAlphaFeedDefsArtist",
+
"kind": "LinkedField",
"name": "artists",
+
"plural": true,
+
"selections": [
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistName",
+
"storageKey": null
+
},
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistMbId",
+
"storageKey": null
+
}
+
],
"storageKey": null
},
{
···
"kind": "ScalarField",
"name": "displayName",
"storageKey": null
-
}
+
},
+
(v2/*: any*/)
],
"storageKey": null
},
+
(v2/*: any*/),
{
"alias": null,
"args": null,
···
]
},
"params": {
-
"cacheID": "cb24b99f8b849bdfc642275cfd4df3fe",
+
"cacheID": "d41913a8ba0cde3255c03b34e36f4baf",
"id": null,
"metadata": {},
"name": "AppPaginationQuery",
"operationKind": "query",
-
"text": "query AppPaginationQuery(\n $count: Int = 20\n $cursor: String\n) {\n ...App_plays_1G22uz\n}\n\nfragment App_plays_1G22uz on Query {\n fmTealAlphaFeedPlays(first: $count, after: $cursor, sortBy: [{field: playedTime, direction: desc}]) {\n totalCount\n edges {\n node {\n playedTime\n ...TrackItem_play\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n }\n}\n"
+
"text": "query AppPaginationQuery(\n $count: Int = 20\n $cursor: String\n) {\n ...App_plays_1G22uz\n}\n\nfragment App_plays_1G22uz on Query {\n fmTealAlphaFeedPlays(first: $count, after: $cursor, sortBy: [{field: playedTime, direction: desc}]) {\n totalCount\n edges {\n node {\n playedTime\n ...TrackItem_play\n id\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists {\n artistName\n artistMbId\n }\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n id\n }\n}\n"
}
};
})();
+36 -5
src/__generated__/AppQuery.graphql.ts
···
/**
-
* @generated SignedSource<<bd4d57eff6a192efe2535389231fe37e>>
+
* @generated SignedSource<<4eadb1b67651fecb72943df792f91938>>
* @lightSyntaxTransform
* @nogrep
*/
···
import { FragmentRefs } from "relay-runtime";
export type FmTealAlphaFeedPlayWhereInput = {
actorHandle?: StringFilter | null | undefined;
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
artistMbIds?: StringFilter | null | undefined;
artistNames?: StringFilter | null | undefined;
artists?: StringFilter | null | undefined;
···
duration?: IntFilter | null | undefined;
indexedAt?: DateTimeFilter | null | undefined;
isrc?: StringFilter | null | undefined;
+
json?: StringFilter | null | undefined;
musicServiceBaseDomain?: StringFilter | null | undefined;
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
originUrl?: StringFilter | null | undefined;
playedTime?: StringFilter | null | undefined;
recordingMbId?: StringFilter | null | undefined;
···
export type StringFilter = {
contains?: string | null | undefined;
eq?: string | null | undefined;
+
fuzzy?: string | null | undefined;
gt?: string | null | undefined;
gte?: string | null | undefined;
in?: ReadonlyArray<string | null | undefined> | null | undefined;
···
"kind": "ScalarField",
"name": "playedTime",
"storageKey": null
+
},
+
v3 = {
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "id",
+
"storageKey": null
};
return {
"fragment": {
···
{
"alias": null,
"args": null,
-
"kind": "ScalarField",
+
"concreteType": "FmTealAlphaFeedDefsArtist",
+
"kind": "LinkedField",
"name": "artists",
+
"plural": true,
+
"selections": [
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistName",
+
"storageKey": null
+
},
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistMbId",
+
"storageKey": null
+
}
+
],
"storageKey": null
},
{
···
"kind": "ScalarField",
"name": "displayName",
"storageKey": null
-
}
+
},
+
(v3/*: any*/)
],
"storageKey": null
},
+
(v3/*: any*/),
{
"alias": null,
"args": null,
···
]
},
"params": {
-
"cacheID": "038b79e3af13c34df9bfca055c5f7829",
+
"cacheID": "ab3827e5716f65074a802ddb36f66d2b",
"id": null,
"metadata": {},
"name": "AppQuery",
"operationKind": "query",
-
"text": "query AppQuery(\n $chartWhere: FmTealAlphaFeedPlayWhereInput!\n) {\n ...App_plays\n ...ScrobbleChart_data\n}\n\nfragment App_plays on Query {\n fmTealAlphaFeedPlays(first: 20, sortBy: [{field: playedTime, direction: desc}]) {\n totalCount\n edges {\n node {\n playedTime\n ...TrackItem_play\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment ScrobbleChart_data on Query {\n chartData: fmTealAlphaFeedPlaysAggregated(groupBy: [{field: playedTime, interval: day}], where: $chartWhere, limit: 90) {\n playedTime\n count\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n }\n}\n"
+
"text": "query AppQuery(\n $chartWhere: FmTealAlphaFeedPlayWhereInput!\n) {\n ...App_plays\n ...ScrobbleChart_data\n}\n\nfragment App_plays on Query {\n fmTealAlphaFeedPlays(first: 20, sortBy: [{field: playedTime, direction: desc}]) {\n totalCount\n edges {\n node {\n playedTime\n ...TrackItem_play\n id\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment ScrobbleChart_data on Query {\n chartData: fmTealAlphaFeedPlaysAggregated(groupBy: [{field: playedTime, interval: day}], where: $chartWhere, limit: 90) {\n playedTime\n count\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists {\n artistName\n artistMbId\n }\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n id\n }\n}\n"
}
};
})();
+33 -6
src/__generated__/AppSubscription.graphql.ts
···
/**
-
* @generated SignedSource<<0e4c25e0e4257b2c7042e374f3568241>>
+
* @generated SignedSource<<f0666e46fa4693a3d7869f9de0266bab>>
* @lightSyntaxTransform
* @nogrep
*/
···
"args": null,
"kind": "ScalarField",
"name": "playedTime",
+
"storageKey": null
+
},
+
v2 = {
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "id",
"storageKey": null
};
return {
···
{
"alias": null,
"args": null,
-
"kind": "ScalarField",
+
"concreteType": "FmTealAlphaFeedDefsArtist",
+
"kind": "LinkedField",
"name": "artists",
+
"plural": true,
+
"selections": [
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistName",
+
"storageKey": null
+
},
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistMbId",
+
"storageKey": null
+
}
+
],
"storageKey": null
},
{
···
"kind": "ScalarField",
"name": "displayName",
"storageKey": null
-
}
+
},
+
(v2/*: any*/)
],
"storageKey": null
-
}
+
},
+
(v2/*: any*/)
],
"storageKey": null
}
]
},
"params": {
-
"cacheID": "d2419c5bef1474c19f75ee5b97062013",
+
"cacheID": "f547109f04ecd8d1a8679dbf0b7f98b4",
"id": null,
"metadata": {},
"name": "AppSubscription",
"operationKind": "subscription",
-
"text": "subscription AppSubscription {\n fmTealAlphaFeedPlayCreated {\n uri\n playedTime\n ...TrackItem_play\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n }\n}\n"
+
"text": "subscription AppSubscription {\n fmTealAlphaFeedPlayCreated {\n uri\n playedTime\n ...TrackItem_play\n id\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists {\n artistName\n artistMbId\n }\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n id\n }\n}\n"
}
};
})();
+36 -5
src/__generated__/ProfilePaginationQuery.graphql.ts
···
/**
-
* @generated SignedSource<<05e7a8d8804cbbe062ff7dce37522623>>
+
* @generated SignedSource<<ebf74750639e18cbf2425bae6cf23f69>>
* @lightSyntaxTransform
* @nogrep
*/
···
import { FragmentRefs } from "relay-runtime";
export type FmTealAlphaFeedPlayWhereInput = {
actorHandle?: StringFilter | null | undefined;
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
artistMbIds?: StringFilter | null | undefined;
artistNames?: StringFilter | null | undefined;
artists?: StringFilter | null | undefined;
···
duration?: IntFilter | null | undefined;
indexedAt?: DateTimeFilter | null | undefined;
isrc?: StringFilter | null | undefined;
+
json?: StringFilter | null | undefined;
musicServiceBaseDomain?: StringFilter | null | undefined;
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
originUrl?: StringFilter | null | undefined;
playedTime?: StringFilter | null | undefined;
recordingMbId?: StringFilter | null | undefined;
···
export type StringFilter = {
contains?: string | null | undefined;
eq?: string | null | undefined;
+
fuzzy?: string | null | undefined;
gt?: string | null | undefined;
gte?: string | null | undefined;
in?: ReadonlyArray<string | null | undefined> | null | undefined;
···
]
},
(v1/*: any*/)
-
];
+
],
+
v3 = {
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "id",
+
"storageKey": null
+
};
return {
"fragment": {
"argumentDefinitions": (v0/*: any*/),
···
{
"alias": null,
"args": null,
-
"kind": "ScalarField",
+
"concreteType": "FmTealAlphaFeedDefsArtist",
+
"kind": "LinkedField",
"name": "artists",
+
"plural": true,
+
"selections": [
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistName",
+
"storageKey": null
+
},
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistMbId",
+
"storageKey": null
+
}
+
],
"storageKey": null
},
{
···
"name": "displayName",
"storageKey": null
},
+
(v3/*: any*/),
{
"alias": null,
"args": null,
···
],
"storageKey": null
},
+
(v3/*: any*/),
{
"alias": null,
"args": null,
···
]
},
"params": {
-
"cacheID": "72ce84bf8cc8ac016e19ca462a2f7b70",
+
"cacheID": "776562076929c2efa168256be3868659",
"id": null,
"metadata": {},
"name": "ProfilePaginationQuery",
"operationKind": "query",
-
"text": "query ProfilePaginationQuery(\n $count: Int = 20\n $cursor: String\n $where: FmTealAlphaFeedPlayWhereInput!\n) {\n ...Profile_plays_mjR8k\n}\n\nfragment Profile_plays_mjR8k on Query {\n fmTealAlphaFeedPlays(first: $count, after: $cursor, sortBy: [{field: playedTime, direction: desc}], where: $where) {\n totalCount\n edges {\n node {\n ...TrackItem_play\n actorHandle\n appBskyActorProfile {\n displayName\n description\n avatar {\n url(preset: \"avatar\")\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n }\n}\n"
+
"text": "query ProfilePaginationQuery(\n $count: Int = 20\n $cursor: String\n $where: FmTealAlphaFeedPlayWhereInput!\n) {\n ...Profile_plays_mjR8k\n}\n\nfragment Profile_plays_mjR8k on Query {\n fmTealAlphaFeedPlays(first: $count, after: $cursor, sortBy: [{field: playedTime, direction: desc}], where: $where) {\n totalCount\n edges {\n node {\n ...TrackItem_play\n actorHandle\n appBskyActorProfile {\n displayName\n description\n avatar {\n url(preset: \"avatar\")\n }\n id\n }\n id\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists {\n artistName\n artistMbId\n }\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n id\n }\n}\n"
}
};
})();
+35 -4
src/__generated__/ProfileQuery.graphql.ts
···
/**
-
* @generated SignedSource<<8d62f515b7652094345304e43124aa72>>
+
* @generated SignedSource<<0e53ec9fb8aaac689644785adae05957>>
* @lightSyntaxTransform
* @nogrep
*/
···
import { FragmentRefs } from "relay-runtime";
export type FmTealAlphaFeedPlayWhereInput = {
actorHandle?: StringFilter | null | undefined;
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
artistMbIds?: StringFilter | null | undefined;
artistNames?: StringFilter | null | undefined;
artists?: StringFilter | null | undefined;
···
duration?: IntFilter | null | undefined;
indexedAt?: DateTimeFilter | null | undefined;
isrc?: StringFilter | null | undefined;
+
json?: StringFilter | null | undefined;
musicServiceBaseDomain?: StringFilter | null | undefined;
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
originUrl?: StringFilter | null | undefined;
playedTime?: StringFilter | null | undefined;
recordingMbId?: StringFilter | null | undefined;
···
export type StringFilter = {
contains?: string | null | undefined;
eq?: string | null | undefined;
+
fuzzy?: string | null | undefined;
gt?: string | null | undefined;
gte?: string | null | undefined;
in?: ReadonlyArray<string | null | undefined> | null | undefined;
···
"kind": "ScalarField",
"name": "playedTime",
"storageKey": null
+
},
+
v5 = {
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "id",
+
"storageKey": null
};
return {
"fragment": {
···
{
"alias": null,
"args": null,
-
"kind": "ScalarField",
+
"concreteType": "FmTealAlphaFeedDefsArtist",
+
"kind": "LinkedField",
"name": "artists",
+
"plural": true,
+
"selections": [
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistName",
+
"storageKey": null
+
},
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistMbId",
+
"storageKey": null
+
}
+
],
"storageKey": null
},
{
···
"name": "displayName",
"storageKey": null
},
+
(v5/*: any*/),
{
"alias": null,
"args": null,
···
],
"storageKey": null
},
+
(v5/*: any*/),
{
"alias": null,
"args": null,
···
]
},
"params": {
-
"cacheID": "083f03714f183a8e68ff0a6d15f0d757",
+
"cacheID": "6555ddce48917a1e1a522f5b4800192b",
"id": null,
"metadata": {},
"name": "ProfileQuery",
"operationKind": "query",
-
"text": "query ProfileQuery(\n $where: FmTealAlphaFeedPlayWhereInput!\n $chartWhere: FmTealAlphaFeedPlayWhereInput!\n) {\n ...Profile_plays_3FC4Qo\n ...ScrobbleChart_data\n}\n\nfragment Profile_plays_3FC4Qo on Query {\n fmTealAlphaFeedPlays(first: 20, sortBy: [{field: playedTime, direction: desc}], where: $where) {\n totalCount\n edges {\n node {\n ...TrackItem_play\n actorHandle\n appBskyActorProfile {\n displayName\n description\n avatar {\n url(preset: \"avatar\")\n }\n }\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment ScrobbleChart_data on Query {\n chartData: fmTealAlphaFeedPlaysAggregated(groupBy: [{field: playedTime, interval: day}], where: $chartWhere, limit: 90) {\n playedTime\n count\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n }\n}\n"
+
"text": "query ProfileQuery(\n $where: FmTealAlphaFeedPlayWhereInput!\n $chartWhere: FmTealAlphaFeedPlayWhereInput!\n) {\n ...Profile_plays_3FC4Qo\n ...ScrobbleChart_data\n}\n\nfragment Profile_plays_3FC4Qo on Query {\n fmTealAlphaFeedPlays(first: 20, sortBy: [{field: playedTime, direction: desc}], where: $where) {\n totalCount\n edges {\n node {\n ...TrackItem_play\n actorHandle\n appBskyActorProfile {\n displayName\n description\n avatar {\n url(preset: \"avatar\")\n }\n id\n }\n id\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n}\n\nfragment ScrobbleChart_data on Query {\n chartData: fmTealAlphaFeedPlaysAggregated(groupBy: [{field: playedTime, interval: day}], where: $chartWhere, limit: 90) {\n playedTime\n count\n }\n}\n\nfragment TrackItem_play on FmTealAlphaFeedPlay {\n trackName\n playedTime\n artists {\n artistName\n artistMbId\n }\n releaseName\n releaseMbId\n actorHandle\n musicServiceBaseDomain\n appBskyActorProfile {\n displayName\n id\n }\n}\n"
}
};
})();
+5 -1
src/__generated__/TopAlbumsQuery.graphql.ts
···
/**
-
* @generated SignedSource<<ba0a977fd251b8099185f84ffca5fe7f>>
+
* @generated SignedSource<<5b4069c82e72c33b75aaff1d16f1421f>>
* @lightSyntaxTransform
* @nogrep
*/
···
import { ConcreteRequest } from 'relay-runtime';
export type FmTealAlphaFeedPlayWhereInput = {
actorHandle?: StringFilter | null | undefined;
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
artistMbIds?: StringFilter | null | undefined;
artistNames?: StringFilter | null | undefined;
artists?: StringFilter | null | undefined;
···
duration?: IntFilter | null | undefined;
indexedAt?: DateTimeFilter | null | undefined;
isrc?: StringFilter | null | undefined;
+
json?: StringFilter | null | undefined;
musicServiceBaseDomain?: StringFilter | null | undefined;
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
originUrl?: StringFilter | null | undefined;
playedTime?: StringFilter | null | undefined;
recordingMbId?: StringFilter | null | undefined;
···
export type StringFilter = {
contains?: string | null | undefined;
eq?: string | null | undefined;
+
fuzzy?: string | null | undefined;
gt?: string | null | undefined;
gte?: string | null | undefined;
in?: ReadonlyArray<string | null | undefined> | null | undefined;
+5 -1
src/__generated__/TopTracksQuery.graphql.ts
···
/**
-
* @generated SignedSource<<d82ad2bc23a12ef33ba6bce1df9620f3>>
+
* @generated SignedSource<<28bfcfbaf324e20bbfc524afcc9ed549>>
* @lightSyntaxTransform
* @nogrep
*/
···
import { ConcreteRequest } from 'relay-runtime';
export type FmTealAlphaFeedPlayWhereInput = {
actorHandle?: StringFilter | null | undefined;
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
artistMbIds?: StringFilter | null | undefined;
artistNames?: StringFilter | null | undefined;
artists?: StringFilter | null | undefined;
···
duration?: IntFilter | null | undefined;
indexedAt?: DateTimeFilter | null | undefined;
isrc?: StringFilter | null | undefined;
+
json?: StringFilter | null | undefined;
musicServiceBaseDomain?: StringFilter | null | undefined;
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
originUrl?: StringFilter | null | undefined;
playedTime?: StringFilter | null | undefined;
recordingMbId?: StringFilter | null | undefined;
···
export type StringFilter = {
contains?: string | null | undefined;
eq?: string | null | undefined;
+
fuzzy?: string | null | undefined;
gt?: string | null | undefined;
gte?: string | null | undefined;
in?: ReadonlyArray<string | null | undefined> | null | undefined;
+25 -4
src/__generated__/TrackItem_play.graphql.ts
···
/**
-
* @generated SignedSource<<8d4b2dad137cc86578e0230225cde09f>>
+
* @generated SignedSource<<b5b4d3bdca427eb13381e978bf98d7b9>>
* @lightSyntaxTransform
* @nogrep
*/
···
readonly appBskyActorProfile: {
readonly displayName: string | null | undefined;
} | null | undefined;
-
readonly artists: any | null | undefined;
+
readonly artists: ReadonlyArray<{
+
readonly artistMbId: string | null | undefined;
+
readonly artistName: string | null | undefined;
+
} | null | undefined> | null | undefined;
readonly musicServiceBaseDomain: string | null | undefined;
readonly playedTime: string | null | undefined;
readonly releaseMbId: string | null | undefined;
···
{
"alias": null,
"args": null,
-
"kind": "ScalarField",
+
"concreteType": "FmTealAlphaFeedDefsArtist",
+
"kind": "LinkedField",
"name": "artists",
+
"plural": true,
+
"selections": [
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistName",
+
"storageKey": null
+
},
+
{
+
"alias": null,
+
"args": null,
+
"kind": "ScalarField",
+
"name": "artistMbId",
+
"storageKey": null
+
}
+
],
"storageKey": null
},
{
···
"abstractKey": null
};
-
(node as any).hash = "ff1bb5f1d370a2aa9ee45a6db4320f83";
+
(node as any).hash = "9a70dada54e50e27bdd19183f1b16e35";
export default node;