+2
-2
package.json
+2
-2
package.json
···
8
"build": "tsc -b && vite build",
9
"lint": "eslint .",
10
"preview": "vite preview",
11
-
"schema:dev": "npx get-graphql-schema 'http://localhost:3000/graphql?slice=at://did:plc:fpruhuo22xkm5o7ttr2ktxdo/network.slices.slice/3m257yljpbg2a' > schema.graphql",
12
-
"schema:prod": "npx get-graphql-schema 'https://api.slices.network/graphql?slice=at://did:plc:fpruhuo22xkm5o7ttr2ktxdo/network.slices.slice/3m257yljpbg2a' > schema.graphql"
13
},
14
"dependencies": {
15
"graphql-ws": "^6.0.6",
···
8
"build": "tsc -b && vite build",
9
"lint": "eslint .",
10
"preview": "vite preview",
11
+
"schema:dev": "npx get-graphql-schema 'http://localhost:8000/graphql' > schema.graphql",
12
+
"schema:prod": "npx get-graphql-schema 'https://quickslice-production-d668.up.railway.app/graphql' > schema.graphql"
13
},
14
"dependencies": {
15
"graphql-ws": "^6.0.6",
+760
-1139
schema.graphql
+760
-1139
schema.graphql
···
1
-
"""
2
-
Indicates that an Input Object is a OneOf Input Object (and thus requires exactly one of its field be provided)
3
-
"""
4
-
directive @oneOf on INPUT_OBJECT
5
-
6
-
"""
7
-
Provides a scalar specification URL for specifying the behavior of custom scalar types.
8
-
"""
9
-
directive @specifiedBy(
10
-
"""URL that specifies the behavior of this scalar."""
11
-
url: String!
12
-
) on SCALAR
13
-
14
input AggregationOrderBy {
15
count: SortDirection
16
}
17
18
type AppBskyActorProfile {
19
-
id: ID!
20
-
uri: String!
21
-
cid: String!
22
-
did: String!
23
-
indexedAt: String!
24
actorHandle: String
25
avatar: Blob
26
banner: Blob
27
createdAt: String
28
description: String
29
displayName: String
30
-
joinedViaStarterPack: JSON
31
-
labels: JSON
32
-
pinnedPost: JSON
33
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
34
-
appBskyFeedPostgatesCount: Int!
35
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
36
-
appBskyFeedThreadgatesCount: Int!
37
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
38
-
appBskyActorProfilesCount: Int!
39
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
40
-
fmTealAlphaFeedPlaysCount: Int!
41
}
42
43
type AppBskyActorProfileAggregated {
44
-
avatar: JSON
45
-
banner: JSON
46
-
createdAt: JSON
47
-
description: JSON
48
-
displayName: JSON
49
-
joinedViaStarterPack: JSON
50
-
labels: JSON
51
-
pinnedPost: JSON
52
count: Int!
53
}
54
55
type AppBskyActorProfileConnection {
56
-
totalCount: Int!
57
-
pageInfo: PageInfo!
58
edges: [AppBskyActorProfileEdge!]!
59
-
nodes: [AppBskyActorProfile!]!
60
}
61
62
type AppBskyActorProfileEdge {
63
node: AppBskyActorProfile!
64
cursor: String!
65
}
66
67
enum AppBskyActorProfileGroupByField {
68
indexedAt
69
-
avatar
70
-
banner
71
createdAt
72
description
73
displayName
74
-
joinedViaStarterPack
75
labels
76
-
pinnedPost
77
}
78
79
input AppBskyActorProfileGroupByFieldInput {
80
field: AppBskyActorProfileGroupByField!
81
interval: DateInterval
82
}
83
84
input AppBskyActorProfileInput {
85
-
avatar: JSON
86
-
banner: JSON
87
-
createdAt: String
88
-
description: String
89
-
displayName: String
90
-
joinedViaStarterPack: JSON
91
-
labels: JSON
92
-
pinnedPost: JSON
93
-
}
94
95
-
input AppBskyActorProfileSortFieldInput {
96
-
field: AppBskyActorProfileGroupByField!
97
-
direction: SortDirection
98
-
}
99
100
-
input AppBskyActorProfileWhereInput {
101
-
indexedAt: DateTimeFilter
102
-
uri: StringFilter
103
-
cid: StringFilter
104
-
did: StringFilter
105
-
collection: StringFilter
106
-
actorHandle: StringFilter
107
-
avatar: StringFilter
108
-
banner: StringFilter
109
-
createdAt: StringFilter
110
-
description: StringFilter
111
-
displayName: StringFilter
112
-
joinedViaStarterPack: StringFilter
113
-
labels: StringFilter
114
-
pinnedPost: StringFilter
115
-
json: StringFilter
116
-
and: [AppBskyActorProfileWhereInput]
117
-
or: [AppBskyActorProfileWhereInput]
118
-
}
119
120
-
type AppBskyEmbedDefsAspectRatio {
121
-
height: Int
122
-
width: Int
123
-
}
124
125
-
type AppBskyEmbedExternal {
126
-
id: ID!
127
-
uri: String!
128
-
cid: String!
129
-
did: String!
130
-
indexedAt: String!
131
-
actorHandle: String
132
-
external: AppBskyEmbedExternalExternal!
133
-
appBskyActorProfile: AppBskyActorProfile
134
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
135
-
appBskyFeedPostgatesCount: Int!
136
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
137
-
appBskyFeedThreadgatesCount: Int!
138
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
139
-
appBskyActorProfilesCount: Int!
140
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
141
-
fmTealAlphaFeedPlaysCount: Int!
142
-
}
143
144
-
type AppBskyEmbedExternalAggregated {
145
-
external: JSON
146
-
count: Int!
147
-
}
148
149
-
type AppBskyEmbedExternalConnection {
150
-
totalCount: Int!
151
-
pageInfo: PageInfo!
152
-
edges: [AppBskyEmbedExternalEdge!]!
153
-
nodes: [AppBskyEmbedExternal!]!
154
-
}
155
156
-
type AppBskyEmbedExternalEdge {
157
-
node: AppBskyEmbedExternal!
158
-
cursor: String!
159
-
}
160
161
-
type AppBskyEmbedExternalExternal {
162
-
description: String
163
-
thumb: Blob
164
-
title: String
165
-
uri: String
166
-
}
167
168
-
enum AppBskyEmbedExternalGroupByField {
169
-
indexedAt
170
-
external
171
}
172
173
-
input AppBskyEmbedExternalGroupByFieldInput {
174
-
field: AppBskyEmbedExternalGroupByField!
175
-
interval: DateInterval
176
-
}
177
178
-
input AppBskyEmbedExternalInput {
179
-
external: JSON!
180
-
}
181
182
-
input AppBskyEmbedExternalSortFieldInput {
183
-
field: AppBskyEmbedExternalGroupByField!
184
-
direction: SortDirection
185
-
}
186
187
-
input AppBskyEmbedExternalWhereInput {
188
-
indexedAt: DateTimeFilter
189
-
uri: StringFilter
190
-
cid: StringFilter
191
-
did: StringFilter
192
-
collection: StringFilter
193
-
actorHandle: StringFilter
194
-
external: StringFilter
195
-
json: StringFilter
196
-
and: [AppBskyEmbedExternalWhereInput]
197
-
or: [AppBskyEmbedExternalWhereInput]
198
-
}
199
200
-
type AppBskyEmbedImages {
201
-
id: ID!
202
-
uri: String!
203
-
cid: String!
204
-
did: String!
205
-
indexedAt: String!
206
-
actorHandle: String
207
-
images: [AppBskyEmbedImagesImage!]
208
-
appBskyActorProfile: AppBskyActorProfile
209
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
210
-
appBskyFeedPostgatesCount: Int!
211
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
212
-
appBskyFeedThreadgatesCount: Int!
213
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
214
-
appBskyActorProfilesCount: Int!
215
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
216
-
fmTealAlphaFeedPlaysCount: Int!
217
-
}
218
-
219
-
type AppBskyEmbedImagesAggregated {
220
-
images: JSON
221
-
count: Int!
222
-
}
223
-
224
-
type AppBskyEmbedImagesConnection {
225
-
totalCount: Int!
226
-
pageInfo: PageInfo!
227
-
edges: [AppBskyEmbedImagesEdge!]!
228
-
nodes: [AppBskyEmbedImages!]!
229
-
}
230
-
231
-
type AppBskyEmbedImagesEdge {
232
-
node: AppBskyEmbedImages!
233
-
cursor: String!
234
-
}
235
-
236
-
enum AppBskyEmbedImagesGroupByField {
237
indexedAt
238
-
images
239
-
}
240
241
-
input AppBskyEmbedImagesGroupByFieldInput {
242
-
field: AppBskyEmbedImagesGroupByField!
243
-
interval: DateInterval
244
-
}
245
246
-
type AppBskyEmbedImagesImage {
247
-
alt: String
248
-
aspectRatio: JSON
249
-
image: Blob
250
-
}
251
252
-
input AppBskyEmbedImagesInput {
253
-
images: JSON!
254
-
}
255
256
-
input AppBskyEmbedImagesSortFieldInput {
257
-
field: AppBskyEmbedImagesGroupByField!
258
-
direction: SortDirection
259
-
}
260
261
-
input AppBskyEmbedImagesWhereInput {
262
-
indexedAt: DateTimeFilter
263
-
uri: StringFilter
264
-
cid: StringFilter
265
-
did: StringFilter
266
-
collection: StringFilter
267
-
actorHandle: StringFilter
268
-
images: StringFilter
269
-
json: StringFilter
270
-
and: [AppBskyEmbedImagesWhereInput]
271
-
or: [AppBskyEmbedImagesWhereInput]
272
-
}
273
274
-
type AppBskyEmbedRecord {
275
-
record: JSON
276
}
277
278
-
type AppBskyEmbedRecordAggregated {
279
-
record: JSON
280
-
count: Int!
281
-
}
282
283
-
type AppBskyEmbedRecordConnection {
284
-
totalCount: Int!
285
-
pageInfo: PageInfo!
286
-
edges: [AppBskyEmbedRecordEdge!]!
287
-
nodes: [AppBskyEmbedRecord!]!
288
}
289
290
-
type AppBskyEmbedRecordEdge {
291
-
node: AppBskyEmbedRecord!
292
-
cursor: String!
293
-
}
294
295
-
enum AppBskyEmbedRecordGroupByField {
296
-
indexedAt
297
-
record
298
-
}
299
300
-
input AppBskyEmbedRecordGroupByFieldInput {
301
-
field: AppBskyEmbedRecordGroupByField!
302
-
interval: DateInterval
303
-
}
304
305
-
input AppBskyEmbedRecordInput {
306
-
record: JSON!
307
-
}
308
309
-
input AppBskyEmbedRecordSortFieldInput {
310
-
field: AppBskyEmbedRecordGroupByField!
311
-
direction: SortDirection
312
-
}
313
314
-
input AppBskyEmbedRecordWhereInput {
315
-
indexedAt: DateTimeFilter
316
-
uri: StringFilter
317
-
cid: StringFilter
318
-
did: StringFilter
319
-
collection: StringFilter
320
-
actorHandle: StringFilter
321
-
record: StringFilter
322
-
json: StringFilter
323
-
and: [AppBskyEmbedRecordWhereInput]
324
-
or: [AppBskyEmbedRecordWhereInput]
325
-
}
326
327
-
type AppBskyEmbedRecordWithMedia {
328
-
id: ID!
329
-
uri: String!
330
-
cid: String!
331
-
did: String!
332
-
indexedAt: String!
333
-
actorHandle: String
334
-
media: JSON!
335
-
record: AppBskyEmbedRecord!
336
-
appBskyActorProfile: AppBskyActorProfile
337
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
338
-
appBskyFeedPostgatesCount: Int!
339
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
340
-
appBskyFeedThreadgatesCount: Int!
341
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
342
-
appBskyActorProfilesCount: Int!
343
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
344
-
fmTealAlphaFeedPlaysCount: Int!
345
-
}
346
347
-
type AppBskyEmbedRecordWithMediaAggregated {
348
-
media: JSON
349
-
record: JSON
350
-
count: Int!
351
-
}
352
353
-
type AppBskyEmbedRecordWithMediaConnection {
354
-
totalCount: Int!
355
-
pageInfo: PageInfo!
356
-
edges: [AppBskyEmbedRecordWithMediaEdge!]!
357
-
nodes: [AppBskyEmbedRecordWithMedia!]!
358
-
}
359
360
-
type AppBskyEmbedRecordWithMediaEdge {
361
-
node: AppBskyEmbedRecordWithMedia!
362
-
cursor: String!
363
-
}
364
365
-
enum AppBskyEmbedRecordWithMediaGroupByField {
366
-
indexedAt
367
-
media
368
-
record
369
-
}
370
371
-
input AppBskyEmbedRecordWithMediaGroupByFieldInput {
372
-
field: AppBskyEmbedRecordWithMediaGroupByField!
373
-
interval: DateInterval
374
-
}
375
376
-
input AppBskyEmbedRecordWithMediaInput {
377
-
media: JSON!
378
-
record: JSON!
379
-
}
380
381
-
input AppBskyEmbedRecordWithMediaSortFieldInput {
382
-
field: AppBskyEmbedRecordWithMediaGroupByField!
383
-
direction: SortDirection
384
}
385
386
-
input AppBskyEmbedRecordWithMediaWhereInput {
387
-
indexedAt: DateTimeFilter
388
-
uri: StringFilter
389
-
cid: StringFilter
390
-
did: StringFilter
391
-
collection: StringFilter
392
-
actorHandle: StringFilter
393
-
media: StringFilter
394
-
record: StringFilter
395
-
json: StringFilter
396
-
and: [AppBskyEmbedRecordWithMediaWhereInput]
397
-
or: [AppBskyEmbedRecordWithMediaWhereInput]
398
-
}
399
400
-
type AppBskyEmbedVideo {
401
-
id: ID!
402
-
uri: String!
403
-
cid: String!
404
-
did: String!
405
-
indexedAt: String!
406
-
actorHandle: String
407
-
alt: String
408
-
aspectRatio: AppBskyEmbedDefsAspectRatio
409
-
captions: [AppBskyEmbedVideoCaption]
410
-
video: Blob
411
-
appBskyActorProfile: AppBskyActorProfile
412
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
413
-
appBskyFeedPostgatesCount: Int!
414
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
415
-
appBskyFeedThreadgatesCount: Int!
416
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
417
-
appBskyActorProfilesCount: Int!
418
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
419
-
fmTealAlphaFeedPlaysCount: Int!
420
-
}
421
422
-
type AppBskyEmbedVideoAggregated {
423
-
alt: JSON
424
-
aspectRatio: JSON
425
-
captions: JSON
426
-
video: JSON
427
-
count: Int!
428
-
}
429
430
-
type AppBskyEmbedVideoCaption {
431
-
file: Blob
432
-
lang: String
433
}
434
435
-
type AppBskyEmbedVideoConnection {
436
-
totalCount: Int!
437
-
pageInfo: PageInfo!
438
-
edges: [AppBskyEmbedVideoEdge!]!
439
-
nodes: [AppBskyEmbedVideo!]!
440
-
}
441
442
-
type AppBskyEmbedVideoEdge {
443
-
node: AppBskyEmbedVideo!
444
-
cursor: String!
445
-
}
446
447
-
enum AppBskyEmbedVideoGroupByField {
448
-
indexedAt
449
-
alt
450
-
aspectRatio
451
-
captions
452
-
video
453
}
454
455
-
input AppBskyEmbedVideoGroupByFieldInput {
456
-
field: AppBskyEmbedVideoGroupByField!
457
-
interval: DateInterval
458
-
}
459
460
-
input AppBskyEmbedVideoInput {
461
-
alt: String
462
-
aspectRatio: JSON
463
-
captions: JSON
464
-
video: JSON!
465
-
}
466
467
-
input AppBskyEmbedVideoSortFieldInput {
468
-
field: AppBskyEmbedVideoGroupByField!
469
-
direction: SortDirection
470
}
471
472
-
input AppBskyEmbedVideoWhereInput {
473
-
indexedAt: DateTimeFilter
474
-
uri: StringFilter
475
-
cid: StringFilter
476
-
did: StringFilter
477
-
collection: StringFilter
478
-
actorHandle: StringFilter
479
-
alt: StringFilter
480
-
aspectRatio: StringFilter
481
-
captions: StringFilter
482
-
video: StringFilter
483
-
json: StringFilter
484
-
and: [AppBskyEmbedVideoWhereInput]
485
-
or: [AppBskyEmbedVideoWhereInput]
486
-
}
487
488
-
type AppBskyFeedPostgate {
489
-
id: ID!
490
-
uri: String!
491
-
cid: String!
492
-
did: String!
493
-
indexedAt: String!
494
-
actorHandle: String
495
-
createdAt: String!
496
-
detachedEmbeddingUris: [String]
497
-
embeddingRules: JSON
498
-
post: String!
499
-
appBskyFeedThreadgate: AppBskyFeedThreadgate
500
-
appBskyActorProfile: AppBskyActorProfile
501
-
fmTealAlphaFeedPlay: FmTealAlphaFeedPlay
502
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
503
-
appBskyFeedPostgatesCount: Int!
504
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
505
-
appBskyFeedThreadgatesCount: Int!
506
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
507
-
appBskyActorProfilesCount: Int!
508
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
509
-
fmTealAlphaFeedPlaysCount: Int!
510
-
}
511
512
-
type AppBskyFeedPostgateAggregated {
513
-
createdAt: JSON
514
-
detachedEmbeddingUris: JSON
515
-
embeddingRules: JSON
516
-
post: JSON
517
-
count: Int!
518
-
}
519
520
-
type AppBskyFeedPostgateConnection {
521
-
totalCount: Int!
522
-
pageInfo: PageInfo!
523
-
edges: [AppBskyFeedPostgateEdge!]!
524
-
nodes: [AppBskyFeedPostgate!]!
525
}
526
527
-
type AppBskyFeedPostgateEdge {
528
-
node: AppBskyFeedPostgate!
529
-
cursor: String!
530
}
531
532
-
enum AppBskyFeedPostgateGroupByField {
533
-
indexedAt
534
-
createdAt
535
-
detachedEmbeddingUris
536
-
embeddingRules
537
-
post
538
-
}
539
540
-
input AppBskyFeedPostgateGroupByFieldInput {
541
-
field: AppBskyFeedPostgateGroupByField!
542
-
interval: DateInterval
543
-
}
544
545
-
input AppBskyFeedPostgateInput {
546
-
createdAt: String!
547
-
detachedEmbeddingUris: [String]
548
-
embeddingRules: JSON
549
-
post: String!
550
-
}
551
552
-
input AppBskyFeedPostgateSortFieldInput {
553
-
field: AppBskyFeedPostgateGroupByField!
554
-
direction: SortDirection
555
-
}
556
557
-
input AppBskyFeedPostgateWhereInput {
558
-
indexedAt: DateTimeFilter
559
-
uri: StringFilter
560
-
cid: StringFilter
561
-
did: StringFilter
562
-
collection: StringFilter
563
-
actorHandle: StringFilter
564
-
createdAt: StringFilter
565
-
detachedEmbeddingUris: StringFilter
566
-
embeddingRules: StringFilter
567
-
post: StringFilter
568
-
json: StringFilter
569
-
and: [AppBskyFeedPostgateWhereInput]
570
-
or: [AppBskyFeedPostgateWhereInput]
571
-
}
572
573
-
type AppBskyFeedThreadgate {
574
-
id: ID!
575
-
uri: String!
576
-
cid: String!
577
-
did: String!
578
-
indexedAt: String!
579
actorHandle: String
580
-
allow: JSON
581
-
createdAt: String!
582
-
hiddenReplies: [String]
583
-
post: String!
584
-
appBskyFeedPostgate: AppBskyFeedPostgate
585
-
appBskyActorProfile: AppBskyActorProfile
586
-
fmTealAlphaFeedPlay: FmTealAlphaFeedPlay
587
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
588
-
appBskyFeedPostgatesCount: Int!
589
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
590
-
appBskyFeedThreadgatesCount: Int!
591
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
592
-
appBskyActorProfilesCount: Int!
593
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
594
-
fmTealAlphaFeedPlaysCount: Int!
595
-
}
596
597
-
type AppBskyFeedThreadgateAggregated {
598
-
allow: JSON
599
-
createdAt: JSON
600
-
hiddenReplies: JSON
601
-
post: JSON
602
-
count: Int!
603
-
}
604
605
-
type AppBskyFeedThreadgateConnection {
606
-
totalCount: Int!
607
-
pageInfo: PageInfo!
608
-
edges: [AppBskyFeedThreadgateEdge!]!
609
-
nodes: [AppBskyFeedThreadgate!]!
610
-
}
611
612
-
type AppBskyFeedThreadgateEdge {
613
-
node: AppBskyFeedThreadgate!
614
-
cursor: String!
615
-
}
616
617
-
enum AppBskyFeedThreadgateGroupByField {
618
-
indexedAt
619
-
allow
620
-
createdAt
621
-
hiddenReplies
622
-
post
623
-
}
624
625
-
input AppBskyFeedThreadgateGroupByFieldInput {
626
-
field: AppBskyFeedThreadgateGroupByField!
627
-
interval: DateInterval
628
-
}
629
630
-
input AppBskyFeedThreadgateInput {
631
-
allow: JSON
632
-
createdAt: String!
633
-
hiddenReplies: [String]
634
-
post: String!
635
-
}
636
637
-
input AppBskyFeedThreadgateSortFieldInput {
638
-
field: AppBskyFeedThreadgateGroupByField!
639
-
direction: SortDirection
640
-
}
641
642
-
input AppBskyFeedThreadgateWhereInput {
643
-
indexedAt: DateTimeFilter
644
-
uri: StringFilter
645
-
cid: StringFilter
646
-
did: StringFilter
647
-
collection: StringFilter
648
-
actorHandle: StringFilter
649
-
allow: StringFilter
650
-
createdAt: StringFilter
651
-
hiddenReplies: StringFilter
652
-
post: StringFilter
653
-
json: StringFilter
654
-
and: [AppBskyFeedThreadgateWhereInput]
655
-
or: [AppBskyFeedThreadgateWhereInput]
656
-
}
657
658
-
type AppBskyRichtextFacet {
659
-
id: ID!
660
-
uri: String!
661
-
cid: String!
662
-
did: String!
663
-
indexedAt: String!
664
-
actorHandle: String
665
-
features: JSON!
666
-
index: AppBskyRichtextFacetByteSlice!
667
-
appBskyActorProfile: AppBskyActorProfile
668
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
669
-
appBskyFeedPostgatesCount: Int!
670
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
671
-
appBskyFeedThreadgatesCount: Int!
672
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
673
-
appBskyActorProfilesCount: Int!
674
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
675
-
fmTealAlphaFeedPlaysCount: Int!
676
-
}
677
678
-
type AppBskyRichtextFacetAggregated {
679
-
features: JSON
680
-
index: JSON
681
-
count: Int!
682
-
}
683
684
-
type AppBskyRichtextFacetByteSlice {
685
-
byteEnd: Int
686
-
byteStart: Int
687
-
}
688
689
-
type AppBskyRichtextFacetConnection {
690
-
totalCount: Int!
691
-
pageInfo: PageInfo!
692
-
edges: [AppBskyRichtextFacetEdge!]!
693
-
nodes: [AppBskyRichtextFacet!]!
694
-
}
695
696
-
type AppBskyRichtextFacetEdge {
697
-
node: AppBskyRichtextFacet!
698
-
cursor: String!
699
-
}
700
701
-
enum AppBskyRichtextFacetGroupByField {
702
-
indexedAt
703
-
features
704
-
index
705
-
}
706
707
-
input AppBskyRichtextFacetGroupByFieldInput {
708
-
field: AppBskyRichtextFacetGroupByField!
709
-
interval: DateInterval
710
-
}
711
712
-
input AppBskyRichtextFacetInput {
713
-
features: JSON!
714
-
index: JSON!
715
-
}
716
717
-
input AppBskyRichtextFacetSortFieldInput {
718
-
field: AppBskyRichtextFacetGroupByField!
719
-
direction: SortDirection
720
-
}
721
722
-
input AppBskyRichtextFacetWhereInput {
723
-
indexedAt: DateTimeFilter
724
-
uri: StringFilter
725
-
cid: StringFilter
726
-
did: StringFilter
727
-
collection: StringFilter
728
-
actorHandle: StringFilter
729
-
features: StringFilter
730
-
index: StringFilter
731
-
json: StringFilter
732
-
and: [AppBskyRichtextFacetWhereInput]
733
-
or: [AppBskyRichtextFacetWhereInput]
734
-
}
735
736
-
type Blob {
737
-
ref: String!
738
-
mimeType: String!
739
-
size: Int!
740
741
"""
742
-
Generate CDN URL for the blob with the specified preset (avatar, banner, feed_thumbnail, feed_fullsize)
743
"""
744
-
url(preset: String): String!
745
-
}
746
747
-
type BlobUploadResponse {
748
-
blob: Blob!
749
-
}
750
751
-
type CollectionSummary {
752
-
collection: String!
753
-
estimatedRepos: Int!
754
-
isExternal: Boolean!
755
-
}
756
757
-
type ComAtprotoRepoStrongRef {
758
-
id: ID!
759
-
did: String!
760
-
indexedAt: String!
761
-
actorHandle: String
762
-
cid: String!
763
-
uri: String!
764
-
appBskyFeedPostgate: AppBskyFeedPostgate
765
-
appBskyFeedThreadgate: AppBskyFeedThreadgate
766
-
appBskyActorProfile: AppBskyActorProfile
767
-
fmTealAlphaFeedPlay: FmTealAlphaFeedPlay
768
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
769
-
appBskyFeedPostgatesCount: Int!
770
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
771
-
appBskyFeedThreadgatesCount: Int!
772
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
773
-
appBskyActorProfilesCount: Int!
774
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
775
-
fmTealAlphaFeedPlaysCount: Int!
776
-
}
777
778
-
type ComAtprotoRepoStrongRefAggregated {
779
-
cid: JSON
780
-
uri: JSON
781
-
count: Int!
782
-
}
783
784
-
type ComAtprotoRepoStrongRefConnection {
785
-
totalCount: Int!
786
-
pageInfo: PageInfo!
787
-
edges: [ComAtprotoRepoStrongRefEdge!]!
788
-
nodes: [ComAtprotoRepoStrongRef!]!
789
-
}
790
791
-
type ComAtprotoRepoStrongRefEdge {
792
-
node: ComAtprotoRepoStrongRef!
793
-
cursor: String!
794
}
795
796
-
enum ComAtprotoRepoStrongRefGroupByField {
797
-
indexedAt
798
-
cid
799
-
uri
800
-
}
801
802
-
input ComAtprotoRepoStrongRefGroupByFieldInput {
803
-
field: ComAtprotoRepoStrongRefGroupByField!
804
-
interval: DateInterval
805
-
}
806
807
-
input ComAtprotoRepoStrongRefInput {
808
-
cid: String!
809
-
uri: String!
810
-
}
811
812
-
input ComAtprotoRepoStrongRefSortFieldInput {
813
-
field: ComAtprotoRepoStrongRefGroupByField!
814
-
direction: SortDirection
815
-
}
816
817
-
input ComAtprotoRepoStrongRefWhereInput {
818
-
indexedAt: DateTimeFilter
819
-
did: StringFilter
820
-
collection: StringFilter
821
-
actorHandle: StringFilter
822
-
cid: StringFilter
823
-
uri: StringFilter
824
-
json: StringFilter
825
-
and: [ComAtprotoRepoStrongRefWhereInput]
826
-
or: [ComAtprotoRepoStrongRefWhereInput]
827
-
}
828
829
-
enum DateInterval {
830
-
second
831
-
minute
832
-
hour
833
-
day
834
-
week
835
-
month
836
-
quarter
837
-
year
838
-
}
839
840
-
input DateTimeFilter {
841
-
eq: String
842
-
gt: String
843
-
gte: String
844
-
lt: String
845
-
lte: String
846
-
}
847
848
-
type DeleteSliceRecordsOutput {
849
-
message: String!
850
-
recordsDeleted: Int!
851
-
actorsDeleted: Int!
852
-
}
853
854
-
type FmTealAlphaFeedDefsArtist {
855
-
artistMbId: String
856
-
artistName: String
857
-
}
858
859
-
type FmTealAlphaFeedPlay {
860
-
id: ID!
861
-
uri: String!
862
-
cid: String!
863
-
did: String!
864
-
indexedAt: String!
865
-
actorHandle: String
866
-
artistMbIds: [String]
867
-
artistNames: [String]
868
-
artists: [FmTealAlphaFeedDefsArtist]
869
-
duration: Int
870
isrc: String
871
musicServiceBaseDomain: String
872
originUrl: String
873
playedTime: String
874
recordingMbId: String
875
releaseMbId: String
876
releaseName: String
877
submissionClientAgent: String
878
trackMbId: String
879
-
trackName: String!
880
-
appBskyActorProfile: AppBskyActorProfile
881
-
appBskyFeedPostgates(limit: Int): [AppBskyFeedPostgate!]!
882
-
appBskyFeedPostgatesCount: Int!
883
-
appBskyFeedThreadgates(limit: Int): [AppBskyFeedThreadgate!]!
884
-
appBskyFeedThreadgatesCount: Int!
885
-
appBskyActorProfiles(limit: Int): [AppBskyActorProfile!]!
886
-
appBskyActorProfilesCount: Int!
887
-
fmTealAlphaFeedPlays(limit: Int): [FmTealAlphaFeedPlay!]!
888
-
fmTealAlphaFeedPlaysCount: Int!
889
-
}
890
891
-
type FmTealAlphaFeedPlayAggregated {
892
-
artistMbIds: JSON
893
-
artistNames: JSON
894
-
artists: JSON
895
-
duration: JSON
896
-
isrc: JSON
897
-
musicServiceBaseDomain: JSON
898
-
originUrl: JSON
899
-
playedTime: JSON
900
-
recordingMbId: JSON
901
-
releaseMbId: JSON
902
-
releaseName: JSON
903
-
submissionClientAgent: JSON
904
-
trackMbId: JSON
905
-
trackName: JSON
906
count: Int!
907
}
908
909
type FmTealAlphaFeedPlayConnection {
910
-
totalCount: Int!
911
pageInfo: PageInfo!
912
-
edges: [FmTealAlphaFeedPlayEdge!]!
913
-
nodes: [FmTealAlphaFeedPlay!]!
914
}
915
916
type FmTealAlphaFeedPlayEdge {
917
node: FmTealAlphaFeedPlay!
918
cursor: String!
919
}
920
921
enum FmTealAlphaFeedPlayGroupByField {
922
indexedAt
923
artistMbIds
924
artistNames
925
artists
926
duration
927
isrc
928
musicServiceBaseDomain
929
originUrl
930
playedTime
931
recordingMbId
932
releaseMbId
933
releaseName
934
submissionClientAgent
935
trackMbId
936
trackName
937
}
938
939
input FmTealAlphaFeedPlayGroupByFieldInput {
940
field: FmTealAlphaFeedPlayGroupByField!
941
interval: DateInterval
942
}
943
944
input FmTealAlphaFeedPlayInput {
945
-
artistMbIds: [String]
946
-
artistNames: [String]
947
-
artists: JSON
948
duration: Int
949
isrc: String
950
musicServiceBaseDomain: String
951
originUrl: String
952
playedTime: String
953
recordingMbId: String
954
releaseMbId: String
955
releaseName: String
956
submissionClientAgent: String
957
trackMbId: String
958
trackName: String!
959
}
960
961
-
input FmTealAlphaFeedPlaySortFieldInput {
962
-
field: FmTealAlphaFeedPlayGroupByField!
963
-
direction: SortDirection
964
-
}
965
966
-
input FmTealAlphaFeedPlayWhereInput {
967
-
indexedAt: DateTimeFilter
968
-
uri: StringFilter
969
-
cid: StringFilter
970
-
did: StringFilter
971
-
collection: StringFilter
972
-
actorHandle: StringFilter
973
-
artistMbIds: StringFilter
974
-
artistNames: StringFilter
975
-
artists: StringFilter
976
-
duration: IntFilter
977
-
isrc: StringFilter
978
-
musicServiceBaseDomain: StringFilter
979
-
originUrl: StringFilter
980
-
playedTime: StringFilter
981
-
recordingMbId: StringFilter
982
-
releaseMbId: StringFilter
983
-
releaseName: StringFilter
984
-
submissionClientAgent: StringFilter
985
-
trackMbId: StringFilter
986
-
trackName: StringFilter
987
-
json: StringFilter
988
-
and: [FmTealAlphaFeedPlayWhereInput]
989
-
or: [FmTealAlphaFeedPlayWhereInput]
990
-
}
991
992
-
input IntFilter {
993
-
eq: Int
994
-
in: [Int]
995
-
gt: Int
996
-
gte: Int
997
-
lt: Int
998
-
lte: Int
999
-
}
1000
1001
-
type JetstreamLogEntry {
1002
-
id: String!
1003
-
createdAt: String!
1004
-
logType: String!
1005
-
jobId: String
1006
-
userDid: String
1007
-
sliceUri: String
1008
-
level: String!
1009
-
message: String!
1010
-
metadata: JSON
1011
-
}
1012
1013
-
scalar JSON
1014
1015
-
type Mutation {
1016
-
"""Sync user collections for a given DID"""
1017
-
syncUserCollections(did: String!): SyncResult!
1018
1019
-
"""Create a new app.bsky.embed.record record"""
1020
-
createAppBskyEmbedRecord(input: AppBskyEmbedRecordInput!, rkey: String): AppBskyEmbedRecord!
1021
1022
-
"""Update a app.bsky.embed.record record"""
1023
-
updateAppBskyEmbedRecord(rkey: String!, input: AppBskyEmbedRecordInput!): AppBskyEmbedRecord!
1024
1025
-
"""Delete a app.bsky.embed.record record"""
1026
-
deleteAppBskyEmbedRecord(rkey: String!): AppBskyEmbedRecord!
1027
1028
-
"""Create a new app.bsky.embed.images record"""
1029
-
createAppBskyEmbedImages(input: AppBskyEmbedImagesInput!, rkey: String): AppBskyEmbedImages!
1030
1031
-
"""Update a app.bsky.embed.images record"""
1032
-
updateAppBskyEmbedImages(rkey: String!, input: AppBskyEmbedImagesInput!): AppBskyEmbedImages!
1033
1034
-
"""Delete a app.bsky.embed.images record"""
1035
-
deleteAppBskyEmbedImages(rkey: String!): AppBskyEmbedImages!
1036
1037
-
"""Create a new app.bsky.embed.recordWithMedia record"""
1038
-
createAppBskyEmbedRecordWithMedia(input: AppBskyEmbedRecordWithMediaInput!, rkey: String): AppBskyEmbedRecordWithMedia!
1039
1040
-
"""Update a app.bsky.embed.recordWithMedia record"""
1041
-
updateAppBskyEmbedRecordWithMedia(rkey: String!, input: AppBskyEmbedRecordWithMediaInput!): AppBskyEmbedRecordWithMedia!
1042
1043
-
"""Delete a app.bsky.embed.recordWithMedia record"""
1044
-
deleteAppBskyEmbedRecordWithMedia(rkey: String!): AppBskyEmbedRecordWithMedia!
1045
1046
-
"""Create a new app.bsky.embed.video record"""
1047
-
createAppBskyEmbedVideo(input: AppBskyEmbedVideoInput!, rkey: String): AppBskyEmbedVideo!
1048
1049
-
"""Update a app.bsky.embed.video record"""
1050
-
updateAppBskyEmbedVideo(rkey: String!, input: AppBskyEmbedVideoInput!): AppBskyEmbedVideo!
1051
1052
-
"""Delete a app.bsky.embed.video record"""
1053
-
deleteAppBskyEmbedVideo(rkey: String!): AppBskyEmbedVideo!
1054
1055
-
"""Create a new app.bsky.embed.external record"""
1056
-
createAppBskyEmbedExternal(input: AppBskyEmbedExternalInput!, rkey: String): AppBskyEmbedExternal!
1057
1058
-
"""Update a app.bsky.embed.external record"""
1059
-
updateAppBskyEmbedExternal(rkey: String!, input: AppBskyEmbedExternalInput!): AppBskyEmbedExternal!
1060
1061
-
"""Delete a app.bsky.embed.external record"""
1062
-
deleteAppBskyEmbedExternal(rkey: String!): AppBskyEmbedExternal!
1063
1064
-
"""Create a new app.bsky.feed.postgate record"""
1065
-
createAppBskyFeedPostgate(input: AppBskyFeedPostgateInput!, rkey: String): AppBskyFeedPostgate!
1066
1067
-
"""Update a app.bsky.feed.postgate record"""
1068
-
updateAppBskyFeedPostgate(rkey: String!, input: AppBskyFeedPostgateInput!): AppBskyFeedPostgate!
1069
1070
-
"""Delete a app.bsky.feed.postgate record"""
1071
-
deleteAppBskyFeedPostgate(rkey: String!): AppBskyFeedPostgate!
1072
1073
-
"""Create a new app.bsky.feed.threadgate record"""
1074
-
createAppBskyFeedThreadgate(input: AppBskyFeedThreadgateInput!, rkey: String): AppBskyFeedThreadgate!
1075
1076
-
"""Update a app.bsky.feed.threadgate record"""
1077
-
updateAppBskyFeedThreadgate(rkey: String!, input: AppBskyFeedThreadgateInput!): AppBskyFeedThreadgate!
1078
1079
-
"""Delete a app.bsky.feed.threadgate record"""
1080
-
deleteAppBskyFeedThreadgate(rkey: String!): AppBskyFeedThreadgate!
1081
1082
-
"""Create a new app.bsky.richtext.facet record"""
1083
-
createAppBskyRichtextFacet(input: AppBskyRichtextFacetInput!, rkey: String): AppBskyRichtextFacet!
1084
1085
-
"""Update a app.bsky.richtext.facet record"""
1086
-
updateAppBskyRichtextFacet(rkey: String!, input: AppBskyRichtextFacetInput!): AppBskyRichtextFacet!
1087
1088
-
"""Delete a app.bsky.richtext.facet record"""
1089
-
deleteAppBskyRichtextFacet(rkey: String!): AppBskyRichtextFacet!
1090
1091
-
"""Create a new app.bsky.actor.profile record"""
1092
-
createAppBskyActorProfile(input: AppBskyActorProfileInput!, rkey: String): AppBskyActorProfile!
1093
1094
-
"""Update a app.bsky.actor.profile record"""
1095
-
updateAppBskyActorProfile(rkey: String!, input: AppBskyActorProfileInput!): AppBskyActorProfile!
1096
1097
-
"""Delete a app.bsky.actor.profile record"""
1098
-
deleteAppBskyActorProfile(rkey: String!): AppBskyActorProfile!
1099
1100
-
"""Create a new com.atproto.repo.strongRef record"""
1101
-
createComAtprotoRepoStrongRef(input: ComAtprotoRepoStrongRefInput!, rkey: String): ComAtprotoRepoStrongRef!
1102
1103
-
"""Update a com.atproto.repo.strongRef record"""
1104
-
updateComAtprotoRepoStrongRef(rkey: String!, input: ComAtprotoRepoStrongRefInput!): ComAtprotoRepoStrongRef!
1105
1106
-
"""Delete a com.atproto.repo.strongRef record"""
1107
-
deleteComAtprotoRepoStrongRef(rkey: String!): ComAtprotoRepoStrongRef!
1108
1109
-
"""Create a new fm.teal.alpha.feed.play record"""
1110
-
createFmTealAlphaFeedPlay(input: FmTealAlphaFeedPlayInput!, rkey: String): FmTealAlphaFeedPlay!
1111
1112
-
"""Update a fm.teal.alpha.feed.play record"""
1113
-
updateFmTealAlphaFeedPlay(rkey: String!, input: FmTealAlphaFeedPlayInput!): FmTealAlphaFeedPlay!
1114
1115
-
"""Delete a fm.teal.alpha.feed.play record"""
1116
-
deleteFmTealAlphaFeedPlay(rkey: String!): FmTealAlphaFeedPlay!
1117
1118
-
"""Start a sync job to backfill collections from the ATProto relay"""
1119
-
startSync(slice: String, collections: [String], externalCollections: [String], repos: [String], limitPerRepo: Int, skipValidation: Boolean, maxRepos: Int): StartSyncOutput!
1120
1121
-
"""Cancel a pending or running sync job"""
1122
-
cancelJob(jobId: String!): Boolean!
1123
1124
-
"""Delete a sync job from the database"""
1125
-
deleteJob(id: ID!): ID
1126
1127
-
"""Upload a blob to the user's AT Protocol repository"""
1128
-
uploadBlob(data: String!, mimeType: String!): BlobUploadResponse!
1129
1130
-
"""Register a new OAuth client for a slice"""
1131
-
createOAuthClient(sliceUri: String!, clientName: String!, redirectUris: [String!]!, scope: String!, clientUri: String, logoUri: String, tosUri: String, policyUri: String): OAuthClient!
1132
1133
-
"""Update an OAuth client"""
1134
-
updateOAuthClient(clientId: String!, clientName: String, redirectUris: [String], scope: String, clientUri: String, logoUri: String, tosUri: String, policyUri: String): OAuthClient!
1135
1136
-
"""Delete an OAuth client"""
1137
-
deleteOAuthClient(clientId: String!): Boolean!
1138
1139
-
"""
1140
-
Delete all records and actors from a slice index. Requires authentication and slice ownership.
1141
-
"""
1142
-
deleteSliceRecords(slice: String): DeleteSliceRecordsOutput!
1143
-
}
1144
1145
-
type OAuthClient {
1146
-
clientId: String!
1147
-
clientSecret: String
1148
-
clientName: String!
1149
-
redirectUris: [String!]!
1150
-
grantTypes: [String!]!
1151
-
responseTypes: [String!]!
1152
-
scope: String
1153
-
clientUri: String
1154
-
logoUri: String
1155
-
tosUri: String
1156
-
policyUri: String
1157
-
createdAt: String!
1158
-
createdByDid: String!
1159
}
1160
1161
type PageInfo {
1162
hasNextPage: Boolean!
1163
hasPreviousPage: Boolean!
1164
startCursor: String
1165
endCursor: String
1166
}
1167
1168
type Query {
1169
-
"""Query app.bsky.embed.record records"""
1170
-
appBskyEmbedRecords(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedRecordSortFieldInput], where: AppBskyEmbedRecordWhereInput): AppBskyEmbedRecordConnection!
1171
-
1172
-
"""
1173
-
Aggregated query for app.bsky.embed.record records with GROUP BY support
1174
-
"""
1175
-
appBskyEmbedRecordsAggregated(groupBy: [AppBskyEmbedRecordGroupByFieldInput!], where: AppBskyEmbedRecordWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedRecordAggregated!]!
1176
-
1177
-
"""Query app.bsky.embed.images records"""
1178
-
appBskyEmbedImageses(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedImagesSortFieldInput], where: AppBskyEmbedImagesWhereInput): AppBskyEmbedImagesConnection!
1179
-
1180
-
"""
1181
-
Aggregated query for app.bsky.embed.images records with GROUP BY support
1182
-
"""
1183
-
appBskyEmbedImagesesAggregated(groupBy: [AppBskyEmbedImagesGroupByFieldInput!], where: AppBskyEmbedImagesWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedImagesAggregated!]!
1184
-
1185
-
"""Query app.bsky.embed.recordWithMedia records"""
1186
-
appBskyEmbedRecordWithMedias(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedRecordWithMediaSortFieldInput], where: AppBskyEmbedRecordWithMediaWhereInput): AppBskyEmbedRecordWithMediaConnection!
1187
-
1188
-
"""
1189
-
Aggregated query for app.bsky.embed.recordWithMedia records with GROUP BY support
1190
-
"""
1191
-
appBskyEmbedRecordWithMediasAggregated(groupBy: [AppBskyEmbedRecordWithMediaGroupByFieldInput!], where: AppBskyEmbedRecordWithMediaWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedRecordWithMediaAggregated!]!
1192
-
1193
-
"""Query app.bsky.embed.video records"""
1194
-
appBskyEmbedVideos(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedVideoSortFieldInput], where: AppBskyEmbedVideoWhereInput): AppBskyEmbedVideoConnection!
1195
1196
-
"""
1197
-
Aggregated query for app.bsky.embed.video records with GROUP BY support
1198
-
"""
1199
-
appBskyEmbedVideosAggregated(groupBy: [AppBskyEmbedVideoGroupByFieldInput!], where: AppBskyEmbedVideoWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedVideoAggregated!]!
1200
-
1201
-
"""Query app.bsky.embed.external records"""
1202
-
appBskyEmbedExternals(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyEmbedExternalSortFieldInput], where: AppBskyEmbedExternalWhereInput): AppBskyEmbedExternalConnection!
1203
-
1204
-
"""
1205
-
Aggregated query for app.bsky.embed.external records with GROUP BY support
1206
-
"""
1207
-
appBskyEmbedExternalsAggregated(groupBy: [AppBskyEmbedExternalGroupByFieldInput!], where: AppBskyEmbedExternalWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyEmbedExternalAggregated!]!
1208
-
1209
-
"""Query app.bsky.feed.postgate records"""
1210
-
appBskyFeedPostgates(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyFeedPostgateSortFieldInput], where: AppBskyFeedPostgateWhereInput): AppBskyFeedPostgateConnection!
1211
-
1212
-
"""
1213
-
Aggregated query for app.bsky.feed.postgate records with GROUP BY support
1214
-
"""
1215
-
appBskyFeedPostgatesAggregated(groupBy: [AppBskyFeedPostgateGroupByFieldInput!], where: AppBskyFeedPostgateWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyFeedPostgateAggregated!]!
1216
-
1217
-
"""Query app.bsky.feed.threadgate records"""
1218
-
appBskyFeedThreadgates(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyFeedThreadgateSortFieldInput], where: AppBskyFeedThreadgateWhereInput): AppBskyFeedThreadgateConnection!
1219
-
1220
-
"""
1221
-
Aggregated query for app.bsky.feed.threadgate records with GROUP BY support
1222
-
"""
1223
-
appBskyFeedThreadgatesAggregated(groupBy: [AppBskyFeedThreadgateGroupByFieldInput!], where: AppBskyFeedThreadgateWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyFeedThreadgateAggregated!]!
1224
-
1225
-
"""Query app.bsky.richtext.facet records"""
1226
-
appBskyRichtextFacets(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyRichtextFacetSortFieldInput], where: AppBskyRichtextFacetWhereInput): AppBskyRichtextFacetConnection!
1227
-
1228
-
"""
1229
-
Aggregated query for app.bsky.richtext.facet records with GROUP BY support
1230
-
"""
1231
-
appBskyRichtextFacetsAggregated(groupBy: [AppBskyRichtextFacetGroupByFieldInput!], where: AppBskyRichtextFacetWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyRichtextFacetAggregated!]!
1232
1233
-
"""Query app.bsky.actor.profile records"""
1234
-
appBskyActorProfiles(first: Int, after: String, last: Int, before: String, sortBy: [AppBskyActorProfileSortFieldInput], where: AppBskyActorProfileWhereInput): AppBskyActorProfileConnection!
1235
1236
-
"""
1237
-
Aggregated query for app.bsky.actor.profile records with GROUP BY support
1238
-
"""
1239
-
appBskyActorProfilesAggregated(groupBy: [AppBskyActorProfileGroupByFieldInput!], where: AppBskyActorProfileWhereInput, orderBy: AggregationOrderBy, limit: Int): [AppBskyActorProfileAggregated!]!
1240
1241
-
"""Query com.atproto.repo.strongRef records"""
1242
-
comAtprotoRepoStrongRefs(first: Int, after: String, last: Int, before: String, sortBy: [ComAtprotoRepoStrongRefSortFieldInput], where: ComAtprotoRepoStrongRefWhereInput): ComAtprotoRepoStrongRefConnection!
1243
1244
-
"""
1245
-
Aggregated query for com.atproto.repo.strongRef records with GROUP BY support
1246
-
"""
1247
-
comAtprotoRepoStrongRefsAggregated(groupBy: [ComAtprotoRepoStrongRefGroupByFieldInput!], where: ComAtprotoRepoStrongRefWhereInput, orderBy: AggregationOrderBy, limit: Int): [ComAtprotoRepoStrongRefAggregated!]!
1248
1249
-
"""Query fm.teal.alpha.feed.play records"""
1250
-
fmTealAlphaFeedPlays(first: Int, after: String, last: Int, before: String, sortBy: [FmTealAlphaFeedPlaySortFieldInput], where: FmTealAlphaFeedPlayWhereInput): FmTealAlphaFeedPlayConnection!
1251
1252
-
"""
1253
-
Aggregated query for fm.teal.alpha.feed.play records with GROUP BY support
1254
-
"""
1255
-
fmTealAlphaFeedPlaysAggregated(groupBy: [FmTealAlphaFeedPlayGroupByFieldInput!], where: FmTealAlphaFeedPlayWhereInput, orderBy: AggregationOrderBy, limit: Int): [FmTealAlphaFeedPlayAggregated!]!
1256
1257
-
"""
1258
-
Get logs from the Jetstream real-time indexing service, optionally filtered by slice
1259
-
"""
1260
-
jetstreamLogs(slice: String, limit: Int): [JetstreamLogEntry!]!
1261
1262
-
"""Get status of a specific sync job"""
1263
-
syncJob(jobId: String!): SyncJob
1264
1265
-
"""Get sync job history for a slice"""
1266
-
syncJobs(slice: String, limit: Int): [SyncJob!]!
1267
1268
-
"""Get logs for a specific sync job"""
1269
-
syncJobLogs(jobId: String!, limit: Int): [JetstreamLogEntry!]!
1270
1271
-
"""Get summary of repos that would be synced based on collection filters"""
1272
-
getSyncSummary(slice: String!, collections: [String], externalCollections: [String], repos: [String]): SyncSummary!
1273
1274
-
"""
1275
-
Get sparkline data for multiple slices showing record indexing activity over time
1276
-
"""
1277
-
sparklines(slices: [String!]!, interval: String, duration: String): [SliceSparkline!]!
1278
1279
-
"""
1280
-
Query records across all collections in a slice with filtering and pagination.
1281
-
Provide either sliceUri or both actorHandle and rkey.
1282
-
"""
1283
-
sliceRecords(sliceUri: String, actorHandle: String, rkey: String, first: Int, after: String, where: SliceRecordsWhereInput): SliceRecordsConnection!
1284
1285
-
"""Get all OAuth clients for a slice"""
1286
-
oauthClients(slice: String): [OAuthClient!]!
1287
-
}
1288
1289
-
type SliceRecord {
1290
-
uri: String!
1291
-
cid: String!
1292
-
did: String!
1293
-
collection: String!
1294
-
value: String!
1295
-
indexedAt: String!
1296
-
}
1297
1298
-
type SliceRecordEdge {
1299
-
node: SliceRecord!
1300
-
cursor: String!
1301
-
}
1302
1303
-
type SliceRecordsConnection {
1304
-
totalCount: Int!
1305
-
edges: [SliceRecordEdge!]!
1306
-
pageInfo: PageInfo!
1307
-
}
1308
1309
-
input SliceRecordsWhereInput {
1310
-
collection: StringFilter
1311
-
did: StringFilter
1312
-
uri: StringFilter
1313
-
cid: StringFilter
1314
-
indexedAt: DateTimeFilter
1315
-
json: StringFilter
1316
-
or: [SliceRecordsWhereInput]
1317
}
1318
1319
-
type SliceSparkline {
1320
-
sliceUri: String!
1321
-
points: [SparklinePoint!]!
1322
-
}
1323
1324
enum SortDirection {
1325
-
asc
1326
-
desc
1327
-
}
1328
-
1329
-
type SparklinePoint {
1330
-
timestamp: String!
1331
-
count: Int!
1332
-
}
1333
-
1334
-
type StartSyncOutput {
1335
-
jobId: String!
1336
-
message: String!
1337
-
}
1338
1339
-
input StringFilter {
1340
-
eq: String
1341
-
in: [String]
1342
-
contains: String
1343
-
fuzzy: String
1344
-
gt: String
1345
-
gte: String
1346
-
lt: String
1347
-
lte: String
1348
}
1349
1350
type Subscription {
1351
-
"""Subscribe to app.bsky.feed.postgate record creation events"""
1352
-
appBskyFeedPostgateCreated: AppBskyFeedPostgate!
1353
-
1354
-
"""Subscribe to app.bsky.feed.postgate record update events"""
1355
-
appBskyFeedPostgateUpdated: AppBskyFeedPostgate!
1356
-
1357
-
"""
1358
-
Subscribe to app.bsky.feed.postgate record deletion events. Returns the URI of deleted records.
1359
-
"""
1360
-
appBskyFeedPostgateDeleted: String!
1361
-
1362
-
"""Subscribe to app.bsky.feed.threadgate record creation events"""
1363
-
appBskyFeedThreadgateCreated: AppBskyFeedThreadgate!
1364
-
1365
-
"""Subscribe to app.bsky.feed.threadgate record update events"""
1366
-
appBskyFeedThreadgateUpdated: AppBskyFeedThreadgate!
1367
-
1368
-
"""
1369
-
Subscribe to app.bsky.feed.threadgate record deletion events. Returns the URI of deleted records.
1370
-
"""
1371
-
appBskyFeedThreadgateDeleted: String!
1372
-
1373
-
"""Subscribe to app.bsky.actor.profile record creation events"""
1374
-
appBskyActorProfileCreated: AppBskyActorProfile!
1375
-
1376
-
"""Subscribe to app.bsky.actor.profile record update events"""
1377
-
appBskyActorProfileUpdated: AppBskyActorProfile!
1378
-
1379
-
"""
1380
-
Subscribe to app.bsky.actor.profile record deletion events. Returns the URI of deleted records.
1381
-
"""
1382
-
appBskyActorProfileDeleted: String!
1383
-
1384
-
"""Subscribe to fm.teal.alpha.feed.play record creation events"""
1385
fmTealAlphaFeedPlayCreated: FmTealAlphaFeedPlay!
1386
1387
-
"""Subscribe to fm.teal.alpha.feed.play record update events"""
1388
fmTealAlphaFeedPlayUpdated: FmTealAlphaFeedPlay!
1389
1390
-
"""
1391
-
Subscribe to fm.teal.alpha.feed.play record deletion events. Returns the URI of deleted records.
1392
-
"""
1393
-
fmTealAlphaFeedPlayDeleted: String!
1394
1395
-
"""Subscribe to new Jetstream log entries, optionally filtered by slice"""
1396
-
jetstreamLogsCreated(slice: String): JetstreamLogEntry!
1397
1398
-
"""Subscribe to sync job status updates"""
1399
-
syncJobUpdated(jobId: String, slice: String): SyncJob!
1400
-
}
1401
1402
-
type SyncJob {
1403
-
id: ID!
1404
-
jobId: String!
1405
-
sliceUri: String!
1406
-
status: String!
1407
-
createdAt: String!
1408
-
startedAt: String
1409
-
completedAt: String
1410
-
result: SyncJobResult
1411
-
error: String
1412
-
retryCount: Int!
1413
-
}
1414
-
1415
-
type SyncJobResult {
1416
-
success: Boolean!
1417
-
totalRecords: Int!
1418
-
collectionsSynced: [String!]!
1419
-
reposProcessed: Int!
1420
-
message: String!
1421
-
}
1422
-
1423
-
type SyncResult {
1424
-
success: Boolean!
1425
-
reposProcessed: Int!
1426
-
recordsSynced: Int!
1427
-
timedOut: Boolean!
1428
-
message: String!
1429
-
}
1430
-
1431
-
type SyncSummary {
1432
-
totalRepos: Int!
1433
-
cappedRepos: Int!
1434
-
wouldBeCapped: Boolean!
1435
-
appliedLimit: Int!
1436
-
collectionsSummary: [CollectionSummary!]!
1437
}
1438
···
1
+
"""Order aggregation results by count"""
2
input AggregationOrderBy {
3
+
"""Order by count (asc or desc)"""
4
count: SortDirection
5
}
6
7
+
"""Record type: app.bsky.actor.profile"""
8
type AppBskyActorProfile {
9
+
"""Record URI"""
10
+
uri: String
11
+
12
+
"""Record CID"""
13
+
cid: String
14
+
15
+
"""DID of record author"""
16
+
did: String
17
+
18
+
"""Collection name"""
19
+
collection: String
20
+
21
+
"""When record was indexed"""
22
+
indexedAt: String
23
+
24
+
"""Handle of the actor who created this record"""
25
actorHandle: String
26
+
27
+
"""Field from lexicon"""
28
avatar: Blob
29
+
30
+
"""Field from lexicon"""
31
banner: Blob
32
+
33
+
"""Field from lexicon"""
34
createdAt: String
35
+
36
+
"""Field from lexicon"""
37
description: String
38
+
39
+
"""Field from lexicon"""
40
displayName: String
41
+
42
+
"""Field from lexicon"""
43
+
joinedViaStarterPack: String
44
+
45
+
"""Field from lexicon"""
46
+
labels: String
47
+
48
+
"""Field from lexicon"""
49
+
pinnedPost: String
50
+
51
+
"""Field from lexicon"""
52
+
pronouns: String
53
+
54
+
"""Field from lexicon"""
55
+
website: String
56
+
57
+
"""Forward join to referenced record"""
58
+
pinnedPostResolved: Record
59
+
60
+
"""Forward join to referenced record"""
61
+
joinedViaStarterPackResolved: Record
62
+
63
+
"""
64
+
DID join: records in fm.teal.alpha.feed.play that share the same DID as this record
65
+
"""
66
+
fmTealAlphaFeedPlayByDid(
67
+
"""Returns the first n items from the list"""
68
+
first: Int
69
+
70
+
"""Returns items after the given cursor"""
71
+
after: String
72
+
73
+
"""Returns the last n items from the list"""
74
+
last: Int
75
+
76
+
"""Returns items before the given cursor"""
77
+
before: String
78
+
79
+
"""Sort order for the connection"""
80
+
sortBy: [FmTealAlphaFeedPlaySortFieldInput!]
81
+
82
+
"""Filter conditions for the query"""
83
+
where: FmTealAlphaFeedPlayWhereInput
84
+
): FmTealAlphaFeedPlayConnection
85
}
86
87
+
"""Aggregated results for app.bsky.actor.profile"""
88
type AppBskyActorProfileAggregated {
89
+
"""Grouped field value"""
90
+
uri: String
91
+
92
+
"""Grouped field value"""
93
+
cid: String
94
+
95
+
"""Grouped field value"""
96
+
did: String
97
+
98
+
"""Grouped field value"""
99
+
collection: String
100
+
101
+
"""Grouped field value"""
102
+
indexed_at: String
103
+
104
+
"""Grouped field value"""
105
+
avatar: String
106
+
107
+
"""Grouped field value"""
108
+
banner: String
109
+
110
+
"""Grouped field value"""
111
+
createdAt: String
112
+
113
+
"""Grouped field value"""
114
+
description: String
115
+
116
+
"""Grouped field value"""
117
+
displayName: String
118
+
119
+
"""Grouped field value"""
120
+
joinedViaStarterPack: String
121
+
122
+
"""Grouped field value"""
123
+
labels: String
124
+
125
+
"""Grouped field value"""
126
+
pinnedPost: String
127
+
128
+
"""Grouped field value"""
129
+
pronouns: String
130
+
131
+
"""Grouped field value"""
132
+
website: String
133
+
134
+
"""Count of records in this group"""
135
count: Int!
136
}
137
138
+
"""A connection to a list of items for AppBskyActorProfile"""
139
type AppBskyActorProfileConnection {
140
+
"""A list of edges"""
141
edges: [AppBskyActorProfileEdge!]!
142
+
143
+
"""Information to aid in pagination"""
144
+
pageInfo: PageInfo!
145
+
146
+
"""Total number of items in the connection"""
147
+
totalCount: Int
148
}
149
150
+
"""An edge in a connection for AppBskyActorProfile"""
151
type AppBskyActorProfileEdge {
152
+
"""The item at the end of the edge"""
153
node: AppBskyActorProfile!
154
+
155
+
"""A cursor for use in pagination"""
156
cursor: String!
157
}
158
159
+
"""Filter operators for AppBskyActorProfile fields"""
160
+
input AppBskyActorProfileFieldCondition {
161
+
"""Exact match (equals)"""
162
+
eq: String
163
+
164
+
"""Match any value in the list"""
165
+
in: [String!]
166
+
167
+
"""Case-insensitive substring match (string fields only)"""
168
+
contains: String
169
+
170
+
"""Greater than"""
171
+
gt: String
172
+
173
+
"""Greater than or equal to"""
174
+
gte: String
175
+
176
+
"""Less than"""
177
+
lt: String
178
+
179
+
"""Less than or equal to"""
180
+
lte: String
181
+
}
182
+
183
+
"""Available groupBy fields for AppBskyActorProfile"""
184
enum AppBskyActorProfileGroupByField {
185
+
"""Group by uri"""
186
+
uri
187
+
188
+
"""Group by cid"""
189
+
cid
190
+
191
+
"""Group by did"""
192
+
did
193
+
194
+
"""Group by collection"""
195
+
collection
196
+
197
+
"""Group by indexedAt"""
198
indexedAt
199
+
200
+
"""Group by actorHandle"""
201
+
actorHandle
202
+
203
+
"""Group by createdAt"""
204
createdAt
205
+
206
+
"""Group by description"""
207
description
208
+
209
+
"""Group by displayName"""
210
displayName
211
+
212
+
"""Group by labels"""
213
labels
214
+
215
+
"""Group by pronouns"""
216
+
pronouns
217
+
218
+
"""Group by website"""
219
+
website
220
}
221
222
+
"""Specifies a field to group by with optional date truncation"""
223
input AppBskyActorProfileGroupByFieldInput {
224
+
"""Field name to group by"""
225
field: AppBskyActorProfileGroupByField!
226
+
227
+
"""Date truncation interval (for datetime fields)"""
228
interval: DateInterval
229
}
230
231
+
"""Input type for AppBskyActorProfileInput"""
232
input AppBskyActorProfileInput {
233
+
"""Input field for avatar"""
234
+
avatar: BlobInput
235
236
+
"""Input field for banner"""
237
+
banner: BlobInput
238
239
+
"""Input field for createdAt"""
240
+
createdAt: String
241
242
+
"""Input field for description"""
243
+
description: String
244
245
+
"""Input field for displayName"""
246
+
displayName: String
247
248
+
"""Input field for joinedViaStarterPack"""
249
+
joinedViaStarterPack: String
250
251
+
"""Input field for labels"""
252
+
labels: String
253
254
+
"""Input field for pinnedPost"""
255
+
pinnedPost: String
256
257
+
"""Input field for pronouns"""
258
+
pronouns: String
259
260
+
"""Input field for website"""
261
+
website: String
262
}
263
264
+
"""Available sort fields for AppBskyActorProfile"""
265
+
enum AppBskyActorProfileSortField {
266
+
"""Sort by uri"""
267
+
uri
268
269
+
"""Sort by cid"""
270
+
cid
271
272
+
"""Sort by did"""
273
+
did
274
275
+
"""Sort by collection"""
276
+
collection
277
278
+
"""Sort by indexedAt"""
279
indexedAt
280
281
+
"""Sort by createdAt"""
282
+
createdAt
283
284
+
"""Sort by description"""
285
+
description
286
287
+
"""Sort by displayName"""
288
+
displayName
289
290
+
"""Sort by labels"""
291
+
labels
292
293
+
"""Sort by pronouns"""
294
+
pronouns
295
296
+
"""Sort by website"""
297
+
website
298
}
299
300
+
"""Specifies a field to sort by and its direction for AppBskyActorProfile"""
301
+
input AppBskyActorProfileSortFieldInput {
302
+
"""Field to sort by"""
303
+
field: AppBskyActorProfileSortField!
304
305
+
"""Sort direction (ASC or DESC)"""
306
+
direction: SortDirection!
307
}
308
309
+
"""Filter conditions for AppBskyActorProfile with nested AND/OR support"""
310
+
input AppBskyActorProfileWhereInput {
311
+
"""Filter by uri"""
312
+
uri: AppBskyActorProfileFieldCondition
313
314
+
"""Filter by cid"""
315
+
cid: AppBskyActorProfileFieldCondition
316
317
+
"""Filter by did"""
318
+
did: AppBskyActorProfileFieldCondition
319
320
+
"""Filter by collection"""
321
+
collection: AppBskyActorProfileFieldCondition
322
323
+
"""Filter by indexedAt"""
324
+
indexedAt: AppBskyActorProfileFieldCondition
325
326
+
"""Filter by actorHandle"""
327
+
actorHandle: AppBskyActorProfileFieldCondition
328
329
+
"""Filter by createdAt"""
330
+
createdAt: AppBskyActorProfileFieldCondition
331
332
+
"""Filter by description"""
333
+
description: AppBskyActorProfileFieldCondition
334
335
+
"""Filter by displayName"""
336
+
displayName: AppBskyActorProfileFieldCondition
337
338
+
"""Filter by labels"""
339
+
labels: AppBskyActorProfileFieldCondition
340
341
+
"""Filter by pronouns"""
342
+
pronouns: AppBskyActorProfileFieldCondition
343
344
+
"""Filter by website"""
345
+
website: AppBskyActorProfileFieldCondition
346
347
+
"""All conditions must match (AND logic)"""
348
+
and: [AppBskyActorProfileWhereInput!]
349
350
+
"""Any condition must match (OR logic)"""
351
+
or: [AppBskyActorProfileWhereInput!]
352
}
353
354
+
"""A blob reference with metadata and URL generation"""
355
+
type Blob {
356
+
"""CID reference to the blob"""
357
+
ref: String!
358
359
+
"""MIME type of the blob"""
360
+
mimeType: String!
361
362
+
"""Size in bytes"""
363
+
size: Int!
364
365
+
"""
366
+
Generate CDN URL for the blob with the specified preset (avatar, banner, feed_thumbnail, feed_fullsize)
367
+
"""
368
+
url(
369
+
"""Image preset: avatar, banner, feed_thumbnail, feed_fullsize"""
370
+
preset: String
371
+
): String!
372
}
373
374
+
"""Input type for blob references"""
375
+
input BlobInput {
376
+
"""CID reference to the blob"""
377
+
ref: String!
378
379
+
"""MIME type of the blob"""
380
+
mimeType: String!
381
382
+
"""Size in bytes"""
383
+
size: Int!
384
}
385
386
+
"""Response from uploading a blob"""
387
+
type BlobUploadResponse {
388
+
"""CID reference to the blob"""
389
+
ref: String!
390
391
+
"""MIME type of the blob"""
392
+
mimeType: String!
393
394
+
"""Size in bytes"""
395
+
size: Int!
396
}
397
398
+
"""Date truncation intervals for aggregation"""
399
+
enum DateInterval {
400
+
"""Truncate to hour"""
401
+
HOUR
402
403
+
"""Truncate to day"""
404
+
DAY
405
406
+
"""Truncate to week"""
407
+
WEEK
408
409
+
"""Truncate to month"""
410
+
MONTH
411
}
412
413
+
"""Result of a delete mutation"""
414
+
type DeleteResult {
415
+
"""URI of deleted record"""
416
+
uri: String
417
}
418
419
+
"""Record type: fm.teal.alpha.feed.play"""
420
+
type FmTealAlphaFeedPlay {
421
+
"""Record URI"""
422
+
uri: String
423
424
+
"""Record CID"""
425
+
cid: String
426
427
+
"""DID of record author"""
428
+
did: String
429
430
+
"""Collection name"""
431
+
collection: String
432
433
+
"""When record was indexed"""
434
+
indexedAt: String
435
436
+
"""Handle of the actor who created this record"""
437
actorHandle: String
438
+
439
+
"""Field from lexicon"""
440
+
artistMbIds: String
441
442
+
"""Field from lexicon"""
443
+
artistNames: String
444
445
+
"""Field from lexicon"""
446
+
artists: String
447
448
+
"""Field from lexicon"""
449
+
duration: Int
450
451
+
"""Field from lexicon"""
452
+
isrc: String
453
454
+
"""Field from lexicon"""
455
+
musicServiceBaseDomain: String
456
457
+
"""Field from lexicon"""
458
+
originUrl: String
459
460
+
"""Field from lexicon"""
461
+
playedTime: String
462
463
+
"""Field from lexicon"""
464
+
recordingMbId: String
465
466
+
"""Field from lexicon"""
467
+
releaseMbId: String
468
469
+
"""Field from lexicon"""
470
+
releaseName: String
471
472
+
"""Field from lexicon"""
473
+
submissionClientAgent: String
474
475
+
"""Field from lexicon"""
476
+
trackMbId: String
477
478
+
"""Field from lexicon"""
479
+
trackName: String
480
481
+
"""
482
+
Reverse join: records in app.bsky.actor.profile that reference this record via joinedViaStarterPack
483
+
"""
484
+
appBskyActorProfileViaJoinedViaStarterPack(
485
+
"""Returns the first n items from the list"""
486
+
first: Int
487
488
+
"""Returns items after the given cursor"""
489
+
after: String
490
491
+
"""Returns the last n items from the list"""
492
+
last: Int
493
494
+
"""Returns items before the given cursor"""
495
+
before: String
496
497
+
"""Sort order for the connection"""
498
+
sortBy: [AppBskyActorProfileSortFieldInput!]
499
500
+
"""Filter conditions for the query"""
501
+
where: AppBskyActorProfileWhereInput
502
+
): AppBskyActorProfileConnection
503
504
"""
505
+
Reverse join: records in app.bsky.actor.profile that reference this record via pinnedPost
506
"""
507
+
appBskyActorProfileViaPinnedPost(
508
+
"""Returns the first n items from the list"""
509
+
first: Int
510
511
+
"""Returns items after the given cursor"""
512
+
after: String
513
514
+
"""Returns the last n items from the list"""
515
+
last: Int
516
517
+
"""Returns items before the given cursor"""
518
+
before: String
519
520
+
"""Sort order for the connection"""
521
+
sortBy: [AppBskyActorProfileSortFieldInput!]
522
523
+
"""Filter conditions for the query"""
524
+
where: AppBskyActorProfileWhereInput
525
+
): AppBskyActorProfileConnection
526
527
+
"""
528
+
DID join: record in app.bsky.actor.profile that shares the same DID as this record
529
+
"""
530
+
appBskyActorProfileByDid: AppBskyActorProfile
531
}
532
533
+
"""Aggregated results for fm.teal.alpha.feed.play"""
534
+
type FmTealAlphaFeedPlayAggregated {
535
+
"""Grouped field value"""
536
+
uri: String
537
538
+
"""Grouped field value"""
539
+
cid: String
540
541
+
"""Grouped field value"""
542
+
did: String
543
544
+
"""Grouped field value"""
545
+
collection: String
546
547
+
"""Grouped field value"""
548
+
indexed_at: String
549
550
+
"""Grouped field value"""
551
+
artistMbIds: String
552
553
+
"""Grouped field value"""
554
+
artistNames: String
555
556
+
"""Grouped field value"""
557
+
artists: String
558
559
+
"""Grouped field value"""
560
+
duration: String
561
562
+
"""Grouped field value"""
563
isrc: String
564
+
565
+
"""Grouped field value"""
566
musicServiceBaseDomain: String
567
+
568
+
"""Grouped field value"""
569
originUrl: String
570
+
571
+
"""Grouped field value"""
572
playedTime: String
573
+
574
+
"""Grouped field value"""
575
recordingMbId: String
576
+
577
+
"""Grouped field value"""
578
releaseMbId: String
579
+
580
+
"""Grouped field value"""
581
releaseName: String
582
+
583
+
"""Grouped field value"""
584
submissionClientAgent: String
585
+
586
+
"""Grouped field value"""
587
trackMbId: String
588
+
589
+
"""Grouped field value"""
590
+
trackName: String
591
592
+
"""Count of records in this group"""
593
count: Int!
594
}
595
596
+
"""A connection to a list of items for FmTealAlphaFeedPlay"""
597
type FmTealAlphaFeedPlayConnection {
598
+
"""A list of edges"""
599
+
edges: [FmTealAlphaFeedPlayEdge!]!
600
+
601
+
"""Information to aid in pagination"""
602
pageInfo: PageInfo!
603
+
604
+
"""Total number of items in the connection"""
605
+
totalCount: Int
606
}
607
608
+
"""An edge in a connection for FmTealAlphaFeedPlay"""
609
type FmTealAlphaFeedPlayEdge {
610
+
"""The item at the end of the edge"""
611
node: FmTealAlphaFeedPlay!
612
+
613
+
"""A cursor for use in pagination"""
614
cursor: String!
615
}
616
617
+
"""Filter operators for FmTealAlphaFeedPlay fields"""
618
+
input FmTealAlphaFeedPlayFieldCondition {
619
+
"""Exact match (equals)"""
620
+
eq: String
621
+
622
+
"""Match any value in the list"""
623
+
in: [String!]
624
+
625
+
"""Case-insensitive substring match (string fields only)"""
626
+
contains: String
627
+
628
+
"""Greater than"""
629
+
gt: String
630
+
631
+
"""Greater than or equal to"""
632
+
gte: String
633
+
634
+
"""Less than"""
635
+
lt: String
636
+
637
+
"""Less than or equal to"""
638
+
lte: String
639
+
}
640
+
641
+
"""Available groupBy fields for FmTealAlphaFeedPlay"""
642
enum FmTealAlphaFeedPlayGroupByField {
643
+
"""Group by uri"""
644
+
uri
645
+
646
+
"""Group by cid"""
647
+
cid
648
+
649
+
"""Group by did"""
650
+
did
651
+
652
+
"""Group by collection"""
653
+
collection
654
+
655
+
"""Group by indexedAt"""
656
indexedAt
657
+
658
+
"""Group by actorHandle"""
659
+
actorHandle
660
+
661
+
"""Group by artistMbIds"""
662
artistMbIds
663
+
664
+
"""Group by artistNames"""
665
artistNames
666
+
667
+
"""Group by artists"""
668
artists
669
+
670
+
"""Group by duration"""
671
duration
672
+
673
+
"""Group by isrc"""
674
isrc
675
+
676
+
"""Group by musicServiceBaseDomain"""
677
musicServiceBaseDomain
678
+
679
+
"""Group by originUrl"""
680
originUrl
681
+
682
+
"""Group by playedTime"""
683
playedTime
684
+
685
+
"""Group by recordingMbId"""
686
recordingMbId
687
+
688
+
"""Group by releaseMbId"""
689
releaseMbId
690
+
691
+
"""Group by releaseName"""
692
releaseName
693
+
694
+
"""Group by submissionClientAgent"""
695
submissionClientAgent
696
+
697
+
"""Group by trackMbId"""
698
trackMbId
699
+
700
+
"""Group by trackName"""
701
trackName
702
}
703
704
+
"""Specifies a field to group by with optional date truncation"""
705
input FmTealAlphaFeedPlayGroupByFieldInput {
706
+
"""Field name to group by"""
707
field: FmTealAlphaFeedPlayGroupByField!
708
+
709
+
"""Date truncation interval (for datetime fields)"""
710
interval: DateInterval
711
}
712
713
+
"""Input type for FmTealAlphaFeedPlayInput"""
714
input FmTealAlphaFeedPlayInput {
715
+
"""Input field for artistMbIds"""
716
+
artistMbIds: String
717
+
718
+
"""Input field for artistNames"""
719
+
artistNames: String
720
+
721
+
"""Input field for artists"""
722
+
artists: String
723
+
724
+
"""Input field for duration"""
725
duration: Int
726
+
727
+
"""Input field for isrc"""
728
isrc: String
729
+
730
+
"""Input field for musicServiceBaseDomain"""
731
musicServiceBaseDomain: String
732
+
733
+
"""Input field for originUrl"""
734
originUrl: String
735
+
736
+
"""Input field for playedTime"""
737
playedTime: String
738
+
739
+
"""Input field for recordingMbId"""
740
recordingMbId: String
741
+
742
+
"""Input field for releaseMbId"""
743
releaseMbId: String
744
+
745
+
"""Input field for releaseName"""
746
releaseName: String
747
+
748
+
"""Input field for submissionClientAgent"""
749
submissionClientAgent: String
750
+
751
+
"""Input field for trackMbId"""
752
trackMbId: String
753
+
754
+
"""Input field for trackName"""
755
trackName: String!
756
}
757
758
+
"""Available sort fields for FmTealAlphaFeedPlay"""
759
+
enum FmTealAlphaFeedPlaySortField {
760
+
"""Sort by uri"""
761
+
uri
762
763
+
"""Sort by cid"""
764
+
cid
765
766
+
"""Sort by did"""
767
+
did
768
769
+
"""Sort by collection"""
770
+
collection
771
772
+
"""Sort by indexedAt"""
773
+
indexedAt
774
775
+
"""Sort by duration"""
776
+
duration
777
778
+
"""Sort by isrc"""
779
+
isrc
780
781
+
"""Sort by musicServiceBaseDomain"""
782
+
musicServiceBaseDomain
783
784
+
"""Sort by originUrl"""
785
+
originUrl
786
787
+
"""Sort by playedTime"""
788
+
playedTime
789
+
790
+
"""Sort by recordingMbId"""
791
+
recordingMbId
792
793
+
"""Sort by releaseMbId"""
794
+
releaseMbId
795
796
+
"""Sort by releaseName"""
797
+
releaseName
798
799
+
"""Sort by submissionClientAgent"""
800
+
submissionClientAgent
801
802
+
"""Sort by trackMbId"""
803
+
trackMbId
804
805
+
"""Sort by trackName"""
806
+
trackName
807
+
}
808
809
+
"""Specifies a field to sort by and its direction for FmTealAlphaFeedPlay"""
810
+
input FmTealAlphaFeedPlaySortFieldInput {
811
+
"""Field to sort by"""
812
+
field: FmTealAlphaFeedPlaySortField!
813
814
+
"""Sort direction (ASC or DESC)"""
815
+
direction: SortDirection!
816
+
}
817
818
+
"""Filter conditions for FmTealAlphaFeedPlay with nested AND/OR support"""
819
+
input FmTealAlphaFeedPlayWhereInput {
820
+
"""Filter by uri"""
821
+
uri: FmTealAlphaFeedPlayFieldCondition
822
823
+
"""Filter by cid"""
824
+
cid: FmTealAlphaFeedPlayFieldCondition
825
826
+
"""Filter by did"""
827
+
did: FmTealAlphaFeedPlayFieldCondition
828
829
+
"""Filter by collection"""
830
+
collection: FmTealAlphaFeedPlayFieldCondition
831
832
+
"""Filter by indexedAt"""
833
+
indexedAt: FmTealAlphaFeedPlayFieldCondition
834
835
+
"""Filter by actorHandle"""
836
+
actorHandle: FmTealAlphaFeedPlayFieldCondition
837
838
+
"""Filter by duration"""
839
+
duration: FmTealAlphaFeedPlayFieldCondition
840
841
+
"""Filter by isrc"""
842
+
isrc: FmTealAlphaFeedPlayFieldCondition
843
844
+
"""Filter by musicServiceBaseDomain"""
845
+
musicServiceBaseDomain: FmTealAlphaFeedPlayFieldCondition
846
847
+
"""Filter by originUrl"""
848
+
originUrl: FmTealAlphaFeedPlayFieldCondition
849
850
+
"""Filter by playedTime"""
851
+
playedTime: FmTealAlphaFeedPlayFieldCondition
852
853
+
"""Filter by recordingMbId"""
854
+
recordingMbId: FmTealAlphaFeedPlayFieldCondition
855
856
+
"""Filter by releaseMbId"""
857
+
releaseMbId: FmTealAlphaFeedPlayFieldCondition
858
859
+
"""Filter by releaseName"""
860
+
releaseName: FmTealAlphaFeedPlayFieldCondition
861
862
+
"""Filter by submissionClientAgent"""
863
+
submissionClientAgent: FmTealAlphaFeedPlayFieldCondition
864
865
+
"""Filter by trackMbId"""
866
+
trackMbId: FmTealAlphaFeedPlayFieldCondition
867
868
+
"""Filter by trackName"""
869
+
trackName: FmTealAlphaFeedPlayFieldCondition
870
871
+
"""All conditions must match (AND logic)"""
872
+
and: [FmTealAlphaFeedPlayWhereInput!]
873
874
+
"""Any condition must match (OR logic)"""
875
+
or: [FmTealAlphaFeedPlayWhereInput!]
876
+
}
877
878
+
"""Root mutation type"""
879
+
type Mutation {
880
+
"""Upload a blob to the PDS"""
881
+
uploadBlob(
882
+
"""Base64 encoded blob data"""
883
+
data: String!
884
885
+
"""MIME type of the blob"""
886
+
mimeType: String!
887
+
): BlobUploadResponse!
888
889
+
"""Create a new fm.teal.alpha.feed.play record"""
890
+
createFmTealAlphaFeedPlay(
891
+
"""Record data"""
892
+
input: FmTealAlphaFeedPlayInput!
893
894
+
"""Optional record key (defaults to TID)"""
895
+
rkey: String
896
+
): FmTealAlphaFeedPlay
897
898
+
"""Update an existing fm.teal.alpha.feed.play record"""
899
+
updateFmTealAlphaFeedPlay(
900
+
"""Record key to update"""
901
+
rkey: String!
902
903
+
"""Updated record data"""
904
+
input: FmTealAlphaFeedPlayInput!
905
+
): FmTealAlphaFeedPlay
906
907
+
"""Delete a fm.teal.alpha.feed.play record"""
908
+
deleteFmTealAlphaFeedPlay(
909
+
"""Record key to delete"""
910
+
rkey: String!
911
+
): DeleteResult
912
913
+
"""Create a new app.bsky.actor.profile record"""
914
+
createAppBskyActorProfile(
915
+
"""Record data"""
916
+
input: AppBskyActorProfileInput!
917
918
+
"""Optional record key (defaults to TID)"""
919
+
rkey: String
920
+
): AppBskyActorProfile
921
922
+
"""Update an existing app.bsky.actor.profile record"""
923
+
updateAppBskyActorProfile(
924
+
"""Record key to update"""
925
+
rkey: String!
926
927
+
"""Updated record data"""
928
+
input: AppBskyActorProfileInput!
929
+
): AppBskyActorProfile
930
931
+
"""Delete a app.bsky.actor.profile record"""
932
+
deleteAppBskyActorProfile(
933
+
"""Record key to delete"""
934
+
rkey: String!
935
+
): DeleteResult
936
}
937
938
+
"""Information about pagination in a connection"""
939
type PageInfo {
940
+
"""When paginating forwards, are there more items?"""
941
hasNextPage: Boolean!
942
+
943
+
"""When paginating backwards, are there more items?"""
944
hasPreviousPage: Boolean!
945
+
946
+
"""Cursor corresponding to the first item in the page"""
947
startCursor: String
948
+
949
+
"""Cursor corresponding to the last item in the page"""
950
endCursor: String
951
}
952
953
+
"""Root query type"""
954
type Query {
955
+
"""Query fm.teal.alpha.feed.play with cursor pagination and sorting"""
956
+
fmTealAlphaFeedPlay(
957
+
"""Returns the first n items from the list"""
958
+
first: Int
959
960
+
"""Returns items after the given cursor"""
961
+
after: String
962
963
+
"""Returns the last n items from the list"""
964
+
last: Int
965
966
+
"""Returns items before the given cursor"""
967
+
before: String
968
969
+
"""Sort order for the connection"""
970
+
sortBy: [FmTealAlphaFeedPlaySortFieldInput!]
971
972
+
"""Filter conditions for the query"""
973
+
where: FmTealAlphaFeedPlayWhereInput
974
+
): FmTealAlphaFeedPlayConnection
975
976
+
"""Query app.bsky.actor.profile with cursor pagination and sorting"""
977
+
appBskyActorProfile(
978
+
"""Returns the first n items from the list"""
979
+
first: Int
980
981
+
"""Returns items after the given cursor"""
982
+
after: String
983
984
+
"""Returns the last n items from the list"""
985
+
last: Int
986
987
+
"""Returns items before the given cursor"""
988
+
before: String
989
990
+
"""Sort order for the connection"""
991
+
sortBy: [AppBskyActorProfileSortFieldInput!]
992
993
+
"""Filter conditions for the query"""
994
+
where: AppBskyActorProfileWhereInput
995
+
): AppBskyActorProfileConnection
996
997
+
"""Aggregated query for fm.teal.alpha.feed.play"""
998
+
fmTealAlphaFeedPlayAggregated(
999
+
"""Fields to group by (required)"""
1000
+
groupBy: [FmTealAlphaFeedPlayGroupByFieldInput!]
1001
1002
+
"""Filter records before aggregation"""
1003
+
where: FmTealAlphaFeedPlayWhereInput
1004
1005
+
"""Order by count (default: desc)"""
1006
+
orderBy: AggregationOrderBy
1007
1008
+
"""Maximum number of results (default 50, max 1000)"""
1009
+
limit: Int
1010
+
): [FmTealAlphaFeedPlayAggregated!]
1011
1012
+
"""Aggregated query for app.bsky.actor.profile"""
1013
+
appBskyActorProfileAggregated(
1014
+
"""Fields to group by (required)"""
1015
+
groupBy: [AppBskyActorProfileGroupByFieldInput!]
1016
1017
+
"""Filter records before aggregation"""
1018
+
where: AppBskyActorProfileWhereInput
1019
1020
+
"""Order by count (default: desc)"""
1021
+
orderBy: AggregationOrderBy
1022
1023
+
"""Maximum number of results (default 50, max 1000)"""
1024
+
limit: Int
1025
+
): [AppBskyActorProfileAggregated!]
1026
}
1027
1028
+
union Record = AppBskyActorProfile | FmTealAlphaFeedPlay
1029
1030
+
"""Sort direction for query results"""
1031
enum SortDirection {
1032
+
"""Ascending order"""
1033
+
ASC
1034
1035
+
"""Descending order"""
1036
+
DESC
1037
}
1038
1039
+
"""GraphQL subscription root"""
1040
type Subscription {
1041
+
"""Emitted when a new fm.teal.alpha.feed.play record is created"""
1042
fmTealAlphaFeedPlayCreated: FmTealAlphaFeedPlay!
1043
1044
+
"""Emitted when a fm.teal.alpha.feed.play record is updated"""
1045
fmTealAlphaFeedPlayUpdated: FmTealAlphaFeedPlay!
1046
1047
+
"""Emitted when a fm.teal.alpha.feed.play record is deleted"""
1048
+
fmTealAlphaFeedPlayDeleted: FmTealAlphaFeedPlay!
1049
1050
+
"""Emitted when a new app.bsky.actor.profile record is created"""
1051
+
appBskyActorProfileCreated: AppBskyActorProfile!
1052
1053
+
"""Emitted when a app.bsky.actor.profile record is updated"""
1054
+
appBskyActorProfileUpdated: AppBskyActorProfile!
1055
1056
+
"""Emitted when a app.bsky.actor.profile record is deleted"""
1057
+
appBskyActorProfileDeleted: AppBskyActorProfile!
1058
}
1059
+79
-63
src/App.tsx
+79
-63
src/App.tsx
···
4
usePaginationFragment,
5
useSubscription,
6
} from "react-relay";
7
-
import { useEffect, useRef, useMemo } from "react";
8
import type { AppQuery } from "./__generated__/AppQuery.graphql";
9
import type { App_plays$key } from "./__generated__/App_plays.graphql";
10
import type { AppSubscription } from "./__generated__/AppSubscription.graphql";
···
39
...ScrobbleChart_data
40
}
41
`,
42
-
queryVariables
43
);
44
45
const { data, loadNext, hasNext, isLoadingNext } = usePaginationFragment<
···
53
cursor: { type: "String" }
54
count: { type: "Int", defaultValue: 20 }
55
) {
56
-
fmTealAlphaFeedPlays(
57
first: $count
58
after: $cursor
59
-
sortBy: [{ field: playedTime, direction: desc }]
60
-
) @connection(key: "App_fmTealAlphaFeedPlays", filters: ["sortBy"]) {
61
totalCount
62
edges {
63
node {
···
68
}
69
}
70
`,
71
-
queryData
72
);
73
74
const loadMoreRef = useRef<HTMLDivElement>(null);
75
76
// Subscribe to new plays
77
-
const subscriptionConfig: GraphQLSubscriptionConfig<AppSubscription> = {
78
-
subscription: graphql`
79
subscription AppSubscription {
80
fmTealAlphaFeedPlayCreated {
81
uri
···
84
}
85
}
86
`,
87
-
variables: {},
88
-
updater: (store) => {
89
-
const newPlay = store.getRootField("fmTealAlphaFeedPlayCreated");
90
-
if (!newPlay) return;
91
92
-
// Only add plays from the last 24 hours
93
-
const playedTime = newPlay.getValue("playedTime") as string | null;
94
-
if (!playedTime) return;
95
96
-
const playDate = new Date(playedTime);
97
-
const cutoff = new Date(Date.now() - 24 * 60 * 60 * 1000);
98
99
-
if (playDate < cutoff) {
100
-
// Play is too old, don't add it to the feed
101
-
return;
102
-
}
103
104
-
const root = store.getRoot();
105
-
const connection = ConnectionHandler.getConnection(
106
-
root,
107
-
"App_fmTealAlphaFeedPlays",
108
-
{ sortBy: [{ field: "playedTime", direction: "desc" }] }
109
-
);
110
111
-
if (!connection) return;
112
113
-
const edge = ConnectionHandler.createEdge(
114
-
store,
115
-
connection,
116
-
newPlay,
117
-
"FmTealAlphaFeedPlayEdge"
118
-
);
119
120
-
ConnectionHandler.insertEdgeBefore(connection, edge);
121
122
-
// Update totalCount
123
-
const totalCountRecord = root.getLinkedRecord("fmTealAlphaFeedPlays", {
124
-
sortBy: [{ field: "playedTime", direction: "desc" }],
125
-
});
126
-
if (totalCountRecord) {
127
-
const currentCount = totalCountRecord.getValue("totalCount") as number;
128
-
if (typeof currentCount === "number") {
129
-
totalCountRecord.setValue(currentCount + 1, "totalCount");
130
}
131
-
}
132
-
},
133
-
};
134
135
useSubscription(subscriptionConfig);
136
···
138
window.scrollTo(0, 0);
139
}, []);
140
141
-
const plays =
142
-
data?.fmTealAlphaFeedPlays?.edges
143
-
?.map((edge) => edge.node)
144
-
.filter((n) => n != null) || [];
145
146
useEffect(() => {
147
if (!loadMoreRef.current || !hasNext) return;
148
149
const observer = new IntersectionObserver(
150
(entries) => {
151
-
if (entries[0].isIntersecting && hasNext && !isLoadingNext) {
152
-
loadNext(20);
153
}
154
},
155
-
{ threshold: 0.1 }
156
);
157
158
-
observer.observe(loadMoreRef.current);
159
160
return () => observer.disconnect();
161
-
}, [hasNext, isLoadingNext, loadNext]);
162
163
// Group plays by date
164
const groupedPlays: { date: string; plays: typeof plays }[] = [];
···
186
<Layout headerChart={<ScrobbleChart queryRef={queryData} />}>
187
<div className="mb-8">
188
<p className="text-xs text-zinc-500 uppercase tracking-wider">
189
-
{data?.fmTealAlphaFeedPlays?.totalCount?.toLocaleString()} scrobbles
190
</p>
191
</div>
192
···
207
208
{hasNext && (
209
<div ref={loadMoreRef} className="py-12 text-center">
210
-
{isLoadingNext ? (
211
-
<p className="text-xs text-zinc-600 uppercase tracking-wider">
212
-
Loading...
213
-
</p>
214
-
) : (
215
-
<p className="text-xs text-zinc-700 uppercase tracking-wider">·</p>
216
-
)}
217
</div>
218
)}
219
</Layout>
···
4
usePaginationFragment,
5
useSubscription,
6
} from "react-relay";
7
+
import { useEffect, useMemo, useRef } from "react";
8
import type { AppQuery } from "./__generated__/AppQuery.graphql";
9
import type { App_plays$key } from "./__generated__/App_plays.graphql";
10
import type { AppSubscription } from "./__generated__/AppSubscription.graphql";
···
39
...ScrobbleChart_data
40
}
41
`,
42
+
queryVariables,
43
);
44
45
const { data, loadNext, hasNext, isLoadingNext } = usePaginationFragment<
···
53
cursor: { type: "String" }
54
count: { type: "Int", defaultValue: 20 }
55
) {
56
+
fmTealAlphaFeedPlay(
57
first: $count
58
after: $cursor
59
+
sortBy: [{ field: playedTime, direction: DESC }]
60
+
) @connection(key: "App_fmTealAlphaFeedPlay", filters: ["sortBy"]) {
61
totalCount
62
edges {
63
node {
···
68
}
69
}
70
`,
71
+
queryData,
72
);
73
74
const loadMoreRef = useRef<HTMLDivElement>(null);
75
+
const loadNextRef = useRef(loadNext);
76
+
const isLoadingRef = useRef(false);
77
+
loadNextRef.current = loadNext;
78
79
// Subscribe to new plays
80
+
const subscriptionConfig: GraphQLSubscriptionConfig<AppSubscription> =
81
+
useMemo(() => ({
82
+
subscription: graphql`
83
subscription AppSubscription {
84
fmTealAlphaFeedPlayCreated {
85
uri
···
88
}
89
}
90
`,
91
+
variables: {},
92
+
updater: (store) => {
93
+
const newPlay = store.getRootField("fmTealAlphaFeedPlayCreated");
94
+
if (!newPlay) return;
95
96
+
// Only add plays from the last 24 hours
97
+
const playedTime = newPlay.getValue("playedTime") as string | null;
98
+
if (!playedTime) return;
99
100
+
const playDate = new Date(playedTime);
101
+
const cutoff = new Date(Date.now() - 24 * 60 * 60 * 1000);
102
103
+
if (playDate < cutoff) {
104
+
// Play is too old, don't add it to the feed
105
+
return;
106
+
}
107
108
+
const root = store.getRoot();
109
+
const connection = ConnectionHandler.getConnection(
110
+
root,
111
+
"App_fmTealAlphaFeedPlay",
112
+
{ sortBy: [{ field: "playedTime", direction: "DESC" }] },
113
+
);
114
115
+
if (!connection) return;
116
117
+
const edge = ConnectionHandler.createEdge(
118
+
store,
119
+
connection,
120
+
newPlay,
121
+
"FmTealAlphaFeedPlayEdge",
122
+
);
123
124
+
ConnectionHandler.insertEdgeBefore(connection, edge);
125
126
+
// Update totalCount
127
+
const totalCountRecord = root.getLinkedRecord("fmTealAlphaFeedPlay", {
128
+
sortBy: [{ field: "playedTime", direction: "DESC" }],
129
+
});
130
+
if (totalCountRecord) {
131
+
const currentCount = totalCountRecord.getValue(
132
+
"totalCount",
133
+
) as number;
134
+
if (typeof currentCount === "number") {
135
+
totalCountRecord.setValue(currentCount + 1, "totalCount");
136
+
}
137
}
138
+
},
139
+
}), []);
140
141
useSubscription(subscriptionConfig);
142
···
144
window.scrollTo(0, 0);
145
}, []);
146
147
+
const plays = data?.fmTealAlphaFeedPlay?.edges
148
+
?.map((edge) => edge.node)
149
+
.filter((n) => n != null) || [];
150
+
151
+
// Sync the loading ref with isLoadingNext
152
+
useEffect(() => {
153
+
isLoadingRef.current = isLoadingNext;
154
+
}, [isLoadingNext]);
155
156
useEffect(() => {
157
if (!loadMoreRef.current || !hasNext) return;
158
159
+
const element = loadMoreRef.current;
160
const observer = new IntersectionObserver(
161
(entries) => {
162
+
if (entries[0].isIntersecting && !isLoadingRef.current) {
163
+
isLoadingRef.current = true;
164
+
loadNextRef.current(20);
165
}
166
},
167
+
{ threshold: 0.1 },
168
);
169
170
+
observer.observe(element);
171
172
return () => observer.disconnect();
173
+
}, [hasNext]);
174
175
// Group plays by date
176
const groupedPlays: { date: string; plays: typeof plays }[] = [];
···
198
<Layout headerChart={<ScrobbleChart queryRef={queryData} />}>
199
<div className="mb-8">
200
<p className="text-xs text-zinc-500 uppercase tracking-wider">
201
+
{data?.fmTealAlphaFeedPlay?.totalCount?.toLocaleString()} scrobbles
202
</p>
203
</div>
204
···
219
220
{hasNext && (
221
<div ref={loadMoreRef} className="py-12 text-center">
222
+
{isLoadingNext
223
+
? (
224
+
<p className="text-xs text-zinc-600 uppercase tracking-wider">
225
+
Loading...
226
+
</p>
227
+
)
228
+
: (
229
+
<p className="text-xs text-zinc-700 uppercase tracking-wider">
230
+
·
231
+
</p>
232
+
)}
233
</div>
234
)}
235
</Layout>
+40
-26
src/Profile.tsx
+40
-26
src/Profile.tsx
···
1
import { graphql, useLazyLoadQuery, usePaginationFragment } from "react-relay";
2
-
import { useParams, Link } from "react-router-dom";
3
-
import { useEffect, useRef, useMemo } from "react";
4
import type { ProfileQuery as ProfileQueryType } from "./__generated__/ProfileQuery.graphql";
5
import type { Profile_plays$key } from "./__generated__/Profile_plays.graphql";
6
import TrackItem from "./TrackItem";
···
33
...ScrobbleChart_data
34
}
35
`,
36
-
queryVariables
37
);
38
39
const { data, loadNext, hasNext, isLoadingNext } = usePaginationFragment<
···
48
count: { type: "Int", defaultValue: 20 }
49
where: { type: "FmTealAlphaFeedPlayWhereInput!" }
50
) {
51
-
fmTealAlphaFeedPlays(
52
first: $count
53
after: $cursor
54
-
sortBy: [{ field: playedTime, direction: desc }]
55
where: $where
56
)
57
@connection(
58
-
key: "Profile_fmTealAlphaFeedPlays"
59
filters: ["where", "sortBy"]
60
) {
61
totalCount
···
63
node {
64
...TrackItem_play
65
actorHandle
66
-
appBskyActorProfile {
67
displayName
68
description
69
avatar {
···
75
}
76
}
77
`,
78
-
queryData
79
);
80
81
const loadMoreRef = useRef<HTMLDivElement>(null);
82
83
const plays = useMemo(
84
-
() => data?.fmTealAlphaFeedPlays?.edges?.map((edge) => edge.node).filter((n) => n != null) || [],
85
-
[data?.fmTealAlphaFeedPlays?.edges]
86
);
87
-
const profile = plays?.[0]?.appBskyActorProfile;
88
89
useEffect(() => {
90
window.scrollTo(0, 0);
···
99
loadNext(20);
100
}
101
},
102
-
{ threshold: 0.1 }
103
);
104
105
observer.observe(loadMoreRef.current);
···
142
</div>
143
144
<div className="mb-8">
145
-
<h2 className="text-sm font-medium uppercase tracking-wider text-zinc-400 mb-2">Recent Tracks</h2>
146
<p className="text-xs text-zinc-500 uppercase tracking-wider">
147
-
{(data?.fmTealAlphaFeedPlays?.totalCount ?? 0).toLocaleString()} scrobbles
148
</p>
149
</div>
150
151
<div className="space-y-1">
152
-
{plays && plays.length > 0 ? (
153
-
plays.map((play, index) => <TrackItem key={index} play={play} />)
154
-
) : (
155
-
<p className="text-zinc-600 text-center py-8 text-xs uppercase tracking-wider">
156
-
No tracks found for this user
157
-
</p>
158
-
)}
159
</div>
160
161
{hasNext && (
162
<div ref={loadMoreRef} className="py-12 text-center">
163
-
{isLoadingNext ? (
164
-
<p className="text-xs text-zinc-600 uppercase tracking-wider">Loading...</p>
165
-
) : (
166
-
<p className="text-xs text-zinc-700 uppercase tracking-wider">·</p>
167
-
)}
168
</div>
169
)}
170
</div>
···
1
import { graphql, useLazyLoadQuery, usePaginationFragment } from "react-relay";
2
+
import { Link, useParams } from "react-router-dom";
3
+
import { useEffect, useMemo, useRef } from "react";
4
import type { ProfileQuery as ProfileQueryType } from "./__generated__/ProfileQuery.graphql";
5
import type { Profile_plays$key } from "./__generated__/Profile_plays.graphql";
6
import TrackItem from "./TrackItem";
···
33
...ScrobbleChart_data
34
}
35
`,
36
+
queryVariables,
37
);
38
39
const { data, loadNext, hasNext, isLoadingNext } = usePaginationFragment<
···
48
count: { type: "Int", defaultValue: 20 }
49
where: { type: "FmTealAlphaFeedPlayWhereInput!" }
50
) {
51
+
fmTealAlphaFeedPlay(
52
first: $count
53
after: $cursor
54
+
sortBy: [{ field: playedTime, direction: DESC }]
55
where: $where
56
)
57
@connection(
58
+
key: "Profile_fmTealAlphaFeedPlay"
59
filters: ["where", "sortBy"]
60
) {
61
totalCount
···
63
node {
64
...TrackItem_play
65
actorHandle
66
+
appBskyActorProfileByDid {
67
displayName
68
description
69
avatar {
···
75
}
76
}
77
`,
78
+
queryData,
79
);
80
81
const loadMoreRef = useRef<HTMLDivElement>(null);
82
83
const plays = useMemo(
84
+
() =>
85
+
data?.fmTealAlphaFeedPlay?.edges?.map((edge) => edge.node).filter((n) =>
86
+
n != null
87
+
) || [],
88
+
[data?.fmTealAlphaFeedPlay?.edges],
89
);
90
+
const profile = plays?.[0]?.appBskyActorProfileByDid;
91
92
useEffect(() => {
93
window.scrollTo(0, 0);
···
102
loadNext(20);
103
}
104
},
105
+
{ threshold: 0.1 },
106
);
107
108
observer.observe(loadMoreRef.current);
···
145
</div>
146
147
<div className="mb-8">
148
+
<h2 className="text-sm font-medium uppercase tracking-wider text-zinc-400 mb-2">
149
+
Recent Tracks
150
+
</h2>
151
<p className="text-xs text-zinc-500 uppercase tracking-wider">
152
+
{(data?.fmTealAlphaFeedPlay?.totalCount ?? 0).toLocaleString()}{" "}
153
+
scrobbles
154
</p>
155
</div>
156
157
<div className="space-y-1">
158
+
{plays && plays.length > 0
159
+
? (
160
+
plays.map((play, index) => <TrackItem key={index} play={play} />)
161
+
)
162
+
: (
163
+
<p className="text-zinc-600 text-center py-8 text-xs uppercase tracking-wider">
164
+
No tracks found for this user
165
+
</p>
166
+
)}
167
</div>
168
169
{hasNext && (
170
<div ref={loadMoreRef} className="py-12 text-center">
171
+
{isLoadingNext
172
+
? (
173
+
<p className="text-xs text-zinc-600 uppercase tracking-wider">
174
+
Loading...
175
+
</p>
176
+
)
177
+
: (
178
+
<p className="text-xs text-zinc-700 uppercase tracking-wider">
179
+
·
180
+
</p>
181
+
)}
182
</div>
183
)}
184
</div>
+23
-21
src/ScrobbleChart.tsx
+23
-21
src/ScrobbleChart.tsx
···
10
const data = useFragment(
11
graphql`
12
fragment ScrobbleChart_data on Query {
13
-
chartData: fmTealAlphaFeedPlaysAggregated(
14
-
groupBy: [{ field: playedTime, interval: day }]
15
where: $chartWhere
16
limit: 90
17
) {
···
20
}
21
}
22
`,
23
-
queryRef
24
);
25
26
const chartData = useMemo(() => {
···
29
// Convert aggregated data to chart format
30
const aggregated = data.chartData.map((item) => {
31
// playedTime comes back as '2025-08-03 00:00:00', extract just the date part
32
-
const date = item.playedTime ? item.playedTime.split(' ')[0] : "";
33
return {
34
date,
35
count: item.count,
···
71
// Generate points for the line
72
const points = chartData.map((d, i) => {
73
const x = padding.left + (i / (chartData.length - 1)) * chartWidth;
74
-
const y = padding.top + chartHeight - ((d.count - minCount) / range) * chartHeight;
75
return `${x},${y}`;
76
}).join(" ");
77
···
80
`${padding.left},${padding.top + chartHeight}`,
81
...chartData.map((d, i) => {
82
const x = padding.left + (i / (chartData.length - 1)) * chartWidth;
83
-
const y = padding.top + chartHeight - ((d.count - minCount) / range) * chartHeight;
84
return `${x},${y}`;
85
}),
86
`${padding.left + chartWidth},${padding.top + chartHeight}`,
···
92
className="w-full h-full"
93
preserveAspectRatio="none"
94
>
95
-
{/* Area fill */}
96
-
<polygon
97
-
points={areaPoints}
98
-
fill="rgb(139 92 246 / 0.1)"
99
-
stroke="none"
100
-
/>
101
102
-
{/* Line */}
103
-
<polyline
104
-
points={points}
105
-
fill="none"
106
-
stroke="rgb(139 92 246)"
107
-
strokeWidth="1.5"
108
-
strokeLinecap="round"
109
-
strokeLinejoin="round"
110
-
/>
111
</svg>
112
);
113
}
···
10
const data = useFragment(
11
graphql`
12
fragment ScrobbleChart_data on Query {
13
+
chartData: fmTealAlphaFeedPlayAggregated(
14
+
groupBy: [{ field: playedTime, interval: DAY }]
15
where: $chartWhere
16
limit: 90
17
) {
···
20
}
21
}
22
`,
23
+
queryRef,
24
);
25
26
const chartData = useMemo(() => {
···
29
// Convert aggregated data to chart format
30
const aggregated = data.chartData.map((item) => {
31
// playedTime comes back as '2025-08-03 00:00:00', extract just the date part
32
+
const date = item.playedTime ? item.playedTime.split(" ")[0] : "";
33
return {
34
date,
35
count: item.count,
···
71
// Generate points for the line
72
const points = chartData.map((d, i) => {
73
const x = padding.left + (i / (chartData.length - 1)) * chartWidth;
74
+
const y = padding.top + chartHeight -
75
+
((d.count - minCount) / range) * chartHeight;
76
return `${x},${y}`;
77
}).join(" ");
78
···
81
`${padding.left},${padding.top + chartHeight}`,
82
...chartData.map((d, i) => {
83
const x = padding.left + (i / (chartData.length - 1)) * chartWidth;
84
+
const y = padding.top + chartHeight -
85
+
((d.count - minCount) / range) * chartHeight;
86
return `${x},${y}`;
87
}),
88
`${padding.left + chartWidth},${padding.top + chartHeight}`,
···
94
className="w-full h-full"
95
preserveAspectRatio="none"
96
>
97
+
{/* Area fill */}
98
+
<polygon
99
+
points={areaPoints}
100
+
fill="rgb(139 92 246 / 0.1)"
101
+
stroke="none"
102
+
/>
103
104
+
{/* Line */}
105
+
<polyline
106
+
points={points}
107
+
fill="none"
108
+
stroke="rgb(139 92 246)"
109
+
strokeWidth="1.5"
110
+
strokeLinecap="round"
111
+
strokeLinejoin="round"
112
+
/>
113
</svg>
114
);
115
}
+4
-4
src/TopAlbums.tsx
+4
-4
src/TopAlbums.tsx
···
12
const data = useLazyLoadQuery<TopAlbumsQuery>(
13
graphql`
14
query TopAlbumsQuery($where: FmTealAlphaFeedPlayWhereInput) {
15
-
fmTealAlphaFeedPlaysAggregated(
16
groupBy: [{ field: releaseMbId }, { field: releaseName }, { field: artists }]
17
-
orderBy: { count: desc }
18
limit: 100
19
where: $where
20
) {
···
26
}
27
`,
28
queryVariables,
29
-
{ fetchKey: period || "all", fetchPolicy: "store-or-network" }
30
);
31
32
-
const albums = [...(data.fmTealAlphaFeedPlaysAggregated || [])];
33
34
// Deduplicate by release name, keeping the one with highest count
35
// Prefer entries with artist data
···
12
const data = useLazyLoadQuery<TopAlbumsQuery>(
13
graphql`
14
query TopAlbumsQuery($where: FmTealAlphaFeedPlayWhereInput) {
15
+
fmTealAlphaFeedPlayAggregated(
16
groupBy: [{ field: releaseMbId }, { field: releaseName }, { field: artists }]
17
+
orderBy: { count: DESC }
18
limit: 100
19
where: $where
20
) {
···
26
}
27
`,
28
queryVariables,
29
+
{ fetchKey: period || "all", fetchPolicy: "store-or-network" },
30
);
31
32
+
const albums = [...(data.fmTealAlphaFeedPlayAggregated || [])];
33
34
// Deduplicate by release name, keeping the one with highest count
35
// Prefer entries with artist data
+3
-3
src/TopTracks.tsx
+3
-3
src/TopTracks.tsx
···
12
const data = useLazyLoadQuery<TopTracksQuery>(
13
graphql`
14
query TopTracksQuery($where: FmTealAlphaFeedPlayWhereInput) {
15
-
fmTealAlphaFeedPlaysAggregated(
16
groupBy: [{ field: trackName }, { field: releaseMbId }, { field: artists }]
17
-
orderBy: { count: desc }
18
limit: 50
19
where: $where
20
) {
···
29
{ fetchKey: period || "all", fetchPolicy: "store-or-network" },
30
);
31
32
-
const tracks = data.fmTealAlphaFeedPlaysAggregated || [];
33
const maxCount = tracks.length > 0 ? tracks[0].count : 0;
34
35
return (
···
12
const data = useLazyLoadQuery<TopTracksQuery>(
13
graphql`
14
query TopTracksQuery($where: FmTealAlphaFeedPlayWhereInput) {
15
+
fmTealAlphaFeedPlayAggregated(
16
groupBy: [{ field: trackName }, { field: releaseMbId }, { field: artists }]
17
+
orderBy: { count: DESC }
18
limit: 50
19
where: $where
20
) {
···
29
{ fetchKey: period || "all", fetchPolicy: "store-or-network" },
30
);
31
32
+
const tracks = data.fmTealAlphaFeedPlayAggregated || [];
33
const maxCount = tracks.length > 0 ? tracks[0].count : 0;
34
35
return (
+5
-7
src/TrackItem.tsx
+5
-7
src/TrackItem.tsx
···
13
fragment TrackItem_play on FmTealAlphaFeedPlay {
14
trackName
15
playedTime
16
-
artists {
17
-
artistName
18
-
artistMbId
19
-
}
20
releaseName
21
releaseMbId
22
actorHandle
23
musicServiceBaseDomain
24
-
appBskyActorProfile {
25
displayName
26
}
27
}
···
55
)}
56
</h3>
57
<p className="text-xs text-zinc-500 truncate">
58
-
{data.artists?.map((a) => a?.artistName).join(", ") ||
59
-
"Unknown Artist"}
60
</p>
61
</div>
62
···
13
fragment TrackItem_play on FmTealAlphaFeedPlay {
14
trackName
15
playedTime
16
+
artists
17
releaseName
18
releaseMbId
19
actorHandle
20
musicServiceBaseDomain
21
+
appBskyActorProfileByDid {
22
displayName
23
}
24
}
···
52
)}
53
</h3>
54
<p className="text-xs text-zinc-500 truncate">
55
+
{Array.isArray(data.artists)
56
+
? data.artists.map((a: { artistName: string }) => a.artistName).join(", ")
57
+
: data.artists || "Unknown Artist"}
58
</p>
59
</div>
60
+12
-39
src/__generated__/AppPaginationQuery.graphql.ts
+12
-39
src/__generated__/AppPaginationQuery.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<4144e88e9b03430408917b25e498a033>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
51
"name": "sortBy",
52
"value": [
53
{
54
-
"direction": "desc",
55
"field": "playedTime"
56
}
57
]
58
}
59
-
],
60
-
v2 = {
61
-
"alias": null,
62
-
"args": null,
63
-
"kind": "ScalarField",
64
-
"name": "id",
65
-
"storageKey": null
66
-
};
67
return {
68
"fragment": {
69
"argumentDefinitions": (v0/*: any*/),
···
102
"args": (v1/*: any*/),
103
"concreteType": "FmTealAlphaFeedPlayConnection",
104
"kind": "LinkedField",
105
-
"name": "fmTealAlphaFeedPlays",
106
"plural": false,
107
"selections": [
108
{
···
145
{
146
"alias": null,
147
"args": null,
148
-
"concreteType": "FmTealAlphaFeedDefsArtist",
149
-
"kind": "LinkedField",
150
"name": "artists",
151
-
"plural": true,
152
-
"selections": [
153
-
{
154
-
"alias": null,
155
-
"args": null,
156
-
"kind": "ScalarField",
157
-
"name": "artistName",
158
-
"storageKey": null
159
-
},
160
-
{
161
-
"alias": null,
162
-
"args": null,
163
-
"kind": "ScalarField",
164
-
"name": "artistMbId",
165
-
"storageKey": null
166
-
}
167
-
],
168
"storageKey": null
169
},
170
{
···
200
"args": null,
201
"concreteType": "AppBskyActorProfile",
202
"kind": "LinkedField",
203
-
"name": "appBskyActorProfile",
204
"plural": false,
205
"selections": [
206
{
···
209
"kind": "ScalarField",
210
"name": "displayName",
211
"storageKey": null
212
-
},
213
-
(v2/*: any*/)
214
],
215
"storageKey": null
216
},
217
-
(v2/*: any*/),
218
{
219
"alias": null,
220
"args": null,
···
270
"sortBy"
271
],
272
"handle": "connection",
273
-
"key": "App_fmTealAlphaFeedPlays",
274
"kind": "LinkedHandle",
275
-
"name": "fmTealAlphaFeedPlays"
276
}
277
]
278
},
279
"params": {
280
-
"cacheID": "d41913a8ba0cde3255c03b34e36f4baf",
281
"id": null,
282
"metadata": {},
283
"name": "AppPaginationQuery",
284
"operationKind": "query",
285
-
"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"
286
}
287
};
288
})();
289
290
-
(node as any).hash = "1e73fa97ccff20071e5a3fba0f00b48c";
291
292
export default node;
···
1
/**
2
+
* @generated SignedSource<<c45bdaea334f402a012edc7b022378d5>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
51
"name": "sortBy",
52
"value": [
53
{
54
+
"direction": "DESC",
55
"field": "playedTime"
56
}
57
]
58
}
59
+
];
60
return {
61
"fragment": {
62
"argumentDefinitions": (v0/*: any*/),
···
95
"args": (v1/*: any*/),
96
"concreteType": "FmTealAlphaFeedPlayConnection",
97
"kind": "LinkedField",
98
+
"name": "fmTealAlphaFeedPlay",
99
"plural": false,
100
"selections": [
101
{
···
138
{
139
"alias": null,
140
"args": null,
141
+
"kind": "ScalarField",
142
"name": "artists",
143
"storageKey": null
144
},
145
{
···
175
"args": null,
176
"concreteType": "AppBskyActorProfile",
177
"kind": "LinkedField",
178
+
"name": "appBskyActorProfileByDid",
179
"plural": false,
180
"selections": [
181
{
···
184
"kind": "ScalarField",
185
"name": "displayName",
186
"storageKey": null
187
+
}
188
],
189
"storageKey": null
190
},
191
{
192
"alias": null,
193
"args": null,
···
243
"sortBy"
244
],
245
"handle": "connection",
246
+
"key": "App_fmTealAlphaFeedPlay",
247
"kind": "LinkedHandle",
248
+
"name": "fmTealAlphaFeedPlay"
249
}
250
]
251
},
252
"params": {
253
+
"cacheID": "64e4647c8da02ce7d37088b8ed78c6a8",
254
"id": null,
255
"metadata": {},
256
"name": "AppPaginationQuery",
257
"operationKind": "query",
258
+
"text": "query AppPaginationQuery(\n $count: Int = 20\n $cursor: String\n) {\n ...App_plays_1G22uz\n}\n\nfragment App_plays_1G22uz on Query {\n fmTealAlphaFeedPlay(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 appBskyActorProfileByDid {\n displayName\n }\n}\n"
259
}
260
};
261
})();
262
263
+
(node as any).hash = "b793d066128b9e7d52d3209bd3e14afe";
264
265
export default node;
+34
-81
src/__generated__/AppQuery.graphql.ts
+34
-81
src/__generated__/AppQuery.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<4eadb1b67651fecb72943df792f91938>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ConcreteRequest } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type FmTealAlphaFeedPlayWhereInput = {
14
-
actorHandle?: StringFilter | null | undefined;
15
-
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
16
-
artistMbIds?: StringFilter | null | undefined;
17
-
artistNames?: StringFilter | null | undefined;
18
-
artists?: StringFilter | null | undefined;
19
-
cid?: StringFilter | null | undefined;
20
-
collection?: StringFilter | null | undefined;
21
-
did?: StringFilter | null | undefined;
22
-
duration?: IntFilter | null | undefined;
23
-
indexedAt?: DateTimeFilter | null | undefined;
24
-
isrc?: StringFilter | null | undefined;
25
-
json?: StringFilter | null | undefined;
26
-
musicServiceBaseDomain?: StringFilter | null | undefined;
27
-
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
28
-
originUrl?: StringFilter | null | undefined;
29
-
playedTime?: StringFilter | null | undefined;
30
-
recordingMbId?: StringFilter | null | undefined;
31
-
releaseMbId?: StringFilter | null | undefined;
32
-
releaseName?: StringFilter | null | undefined;
33
-
submissionClientAgent?: StringFilter | null | undefined;
34
-
trackMbId?: StringFilter | null | undefined;
35
-
trackName?: StringFilter | null | undefined;
36
-
uri?: StringFilter | null | undefined;
37
-
};
38
-
export type DateTimeFilter = {
39
-
eq?: string | null | undefined;
40
-
gt?: string | null | undefined;
41
-
gte?: string | null | undefined;
42
-
lt?: string | null | undefined;
43
-
lte?: string | null | undefined;
44
};
45
-
export type StringFilter = {
46
contains?: string | null | undefined;
47
eq?: string | null | undefined;
48
-
fuzzy?: string | null | undefined;
49
gt?: string | null | undefined;
50
gte?: string | null | undefined;
51
-
in?: ReadonlyArray<string | null | undefined> | null | undefined;
52
lt?: string | null | undefined;
53
lte?: string | null | undefined;
54
};
55
-
export type IntFilter = {
56
-
eq?: number | null | undefined;
57
-
gt?: number | null | undefined;
58
-
gte?: number | null | undefined;
59
-
in?: ReadonlyArray<number | null | undefined> | null | undefined;
60
-
lt?: number | null | undefined;
61
-
lte?: number | null | undefined;
62
-
};
63
export type AppQuery$variables = {
64
chartWhere: FmTealAlphaFeedPlayWhereInput;
65
};
···
90
"name": "sortBy",
91
"value": [
92
{
93
-
"direction": "desc",
94
"field": "playedTime"
95
}
96
]
···
101
"args": null,
102
"kind": "ScalarField",
103
"name": "playedTime",
104
-
"storageKey": null
105
-
},
106
-
v3 = {
107
-
"alias": null,
108
-
"args": null,
109
-
"kind": "ScalarField",
110
-
"name": "id",
111
"storageKey": null
112
};
113
return {
···
142
"args": (v1/*: any*/),
143
"concreteType": "FmTealAlphaFeedPlayConnection",
144
"kind": "LinkedField",
145
-
"name": "fmTealAlphaFeedPlays",
146
"plural": false,
147
"selections": [
148
{
···
179
{
180
"alias": null,
181
"args": null,
182
-
"concreteType": "FmTealAlphaFeedDefsArtist",
183
-
"kind": "LinkedField",
184
"name": "artists",
185
-
"plural": true,
186
-
"selections": [
187
-
{
188
-
"alias": null,
189
-
"args": null,
190
-
"kind": "ScalarField",
191
-
"name": "artistName",
192
-
"storageKey": null
193
-
},
194
-
{
195
-
"alias": null,
196
-
"args": null,
197
-
"kind": "ScalarField",
198
-
"name": "artistMbId",
199
-
"storageKey": null
200
-
}
201
-
],
202
"storageKey": null
203
},
204
{
···
234
"args": null,
235
"concreteType": "AppBskyActorProfile",
236
"kind": "LinkedField",
237
-
"name": "appBskyActorProfile",
238
"plural": false,
239
"selections": [
240
{
···
243
"kind": "ScalarField",
244
"name": "displayName",
245
"storageKey": null
246
-
},
247
-
(v3/*: any*/)
248
],
249
"storageKey": null
250
},
251
-
(v3/*: any*/),
252
{
253
"alias": null,
254
"args": null,
···
295
"storageKey": null
296
}
297
],
298
-
"storageKey": "fmTealAlphaFeedPlays(first:20,sortBy:[{\"direction\":\"desc\",\"field\":\"playedTime\"}])"
299
},
300
{
301
"alias": null,
···
304
"sortBy"
305
],
306
"handle": "connection",
307
-
"key": "App_fmTealAlphaFeedPlays",
308
"kind": "LinkedHandle",
309
-
"name": "fmTealAlphaFeedPlays"
310
},
311
{
312
"alias": "chartData",
···
317
"value": [
318
{
319
"field": "playedTime",
320
-
"interval": "day"
321
}
322
]
323
},
···
334
],
335
"concreteType": "FmTealAlphaFeedPlayAggregated",
336
"kind": "LinkedField",
337
-
"name": "fmTealAlphaFeedPlaysAggregated",
338
"plural": true,
339
"selections": [
340
(v2/*: any*/),
···
351
]
352
},
353
"params": {
354
-
"cacheID": "ab3827e5716f65074a802ddb36f66d2b",
355
"id": null,
356
"metadata": {},
357
"name": "AppQuery",
358
"operationKind": "query",
359
-
"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"
360
}
361
};
362
})();
···
1
/**
2
+
* @generated SignedSource<<6fa660d4747cd5269f2ca3ac9e251447>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ConcreteRequest } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type FmTealAlphaFeedPlayWhereInput = {
14
+
actorHandle?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
15
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
16
+
cid?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
17
+
collection?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
18
+
did?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
19
+
duration?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
20
+
indexedAt?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
21
+
isrc?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
22
+
musicServiceBaseDomain?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
23
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
24
+
originUrl?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
25
+
playedTime?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
26
+
recordingMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
27
+
releaseMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
28
+
releaseName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
29
+
submissionClientAgent?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
30
+
trackMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
31
+
trackName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
32
+
uri?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
33
};
34
+
export type FmTealAlphaFeedPlayFieldCondition = {
35
contains?: string | null | undefined;
36
eq?: string | null | undefined;
37
gt?: string | null | undefined;
38
gte?: string | null | undefined;
39
+
in?: ReadonlyArray<string> | null | undefined;
40
lt?: string | null | undefined;
41
lte?: string | null | undefined;
42
};
43
export type AppQuery$variables = {
44
chartWhere: FmTealAlphaFeedPlayWhereInput;
45
};
···
70
"name": "sortBy",
71
"value": [
72
{
73
+
"direction": "DESC",
74
"field": "playedTime"
75
}
76
]
···
81
"args": null,
82
"kind": "ScalarField",
83
"name": "playedTime",
84
"storageKey": null
85
};
86
return {
···
115
"args": (v1/*: any*/),
116
"concreteType": "FmTealAlphaFeedPlayConnection",
117
"kind": "LinkedField",
118
+
"name": "fmTealAlphaFeedPlay",
119
"plural": false,
120
"selections": [
121
{
···
152
{
153
"alias": null,
154
"args": null,
155
+
"kind": "ScalarField",
156
"name": "artists",
157
"storageKey": null
158
},
159
{
···
189
"args": null,
190
"concreteType": "AppBskyActorProfile",
191
"kind": "LinkedField",
192
+
"name": "appBskyActorProfileByDid",
193
"plural": false,
194
"selections": [
195
{
···
198
"kind": "ScalarField",
199
"name": "displayName",
200
"storageKey": null
201
+
}
202
],
203
"storageKey": null
204
},
205
{
206
"alias": null,
207
"args": null,
···
248
"storageKey": null
249
}
250
],
251
+
"storageKey": "fmTealAlphaFeedPlay(first:20,sortBy:[{\"direction\":\"DESC\",\"field\":\"playedTime\"}])"
252
},
253
{
254
"alias": null,
···
257
"sortBy"
258
],
259
"handle": "connection",
260
+
"key": "App_fmTealAlphaFeedPlay",
261
"kind": "LinkedHandle",
262
+
"name": "fmTealAlphaFeedPlay"
263
},
264
{
265
"alias": "chartData",
···
270
"value": [
271
{
272
"field": "playedTime",
273
+
"interval": "DAY"
274
}
275
]
276
},
···
287
],
288
"concreteType": "FmTealAlphaFeedPlayAggregated",
289
"kind": "LinkedField",
290
+
"name": "fmTealAlphaFeedPlayAggregated",
291
"plural": true,
292
"selections": [
293
(v2/*: any*/),
···
304
]
305
},
306
"params": {
307
+
"cacheID": "3620b802448dd92e20f1ee8b7fd51980",
308
"id": null,
309
"metadata": {},
310
"name": "AppQuery",
311
"operationKind": "query",
312
+
"text": "query AppQuery(\n $chartWhere: FmTealAlphaFeedPlayWhereInput!\n) {\n ...App_plays\n ...ScrobbleChart_data\n}\n\nfragment App_plays on Query {\n fmTealAlphaFeedPlay(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: fmTealAlphaFeedPlayAggregated(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 appBskyActorProfileByDid {\n displayName\n }\n}\n"
313
}
314
};
315
})();
+8
-35
src/__generated__/AppSubscription.graphql.ts
+8
-35
src/__generated__/AppSubscription.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<f0666e46fa4693a3d7869f9de0266bab>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
14
export type AppSubscription$data = {
15
readonly fmTealAlphaFeedPlayCreated: {
16
readonly playedTime: string | null | undefined;
17
-
readonly uri: string;
18
readonly " $fragmentSpreads": FragmentRefs<"TrackItem_play">;
19
};
20
};
···
36
"args": null,
37
"kind": "ScalarField",
38
"name": "playedTime",
39
-
"storageKey": null
40
-
},
41
-
v2 = {
42
-
"alias": null,
43
-
"args": null,
44
-
"kind": "ScalarField",
45
-
"name": "id",
46
"storageKey": null
47
};
48
return {
···
100
{
101
"alias": null,
102
"args": null,
103
-
"concreteType": "FmTealAlphaFeedDefsArtist",
104
-
"kind": "LinkedField",
105
"name": "artists",
106
-
"plural": true,
107
-
"selections": [
108
-
{
109
-
"alias": null,
110
-
"args": null,
111
-
"kind": "ScalarField",
112
-
"name": "artistName",
113
-
"storageKey": null
114
-
},
115
-
{
116
-
"alias": null,
117
-
"args": null,
118
-
"kind": "ScalarField",
119
-
"name": "artistMbId",
120
-
"storageKey": null
121
-
}
122
-
],
123
"storageKey": null
124
},
125
{
···
155
"args": null,
156
"concreteType": "AppBskyActorProfile",
157
"kind": "LinkedField",
158
-
"name": "appBskyActorProfile",
159
"plural": false,
160
"selections": [
161
{
···
164
"kind": "ScalarField",
165
"name": "displayName",
166
"storageKey": null
167
-
},
168
-
(v2/*: any*/)
169
],
170
"storageKey": null
171
-
},
172
-
(v2/*: any*/)
173
],
174
"storageKey": null
175
}
176
]
177
},
178
"params": {
179
-
"cacheID": "f547109f04ecd8d1a8679dbf0b7f98b4",
180
"id": null,
181
"metadata": {},
182
"name": "AppSubscription",
183
"operationKind": "subscription",
184
-
"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"
185
}
186
};
187
})();
···
1
/**
2
+
* @generated SignedSource<<c4198cc44967175302aceaf063070457>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
14
export type AppSubscription$data = {
15
readonly fmTealAlphaFeedPlayCreated: {
16
readonly playedTime: string | null | undefined;
17
+
readonly uri: string | null | undefined;
18
readonly " $fragmentSpreads": FragmentRefs<"TrackItem_play">;
19
};
20
};
···
36
"args": null,
37
"kind": "ScalarField",
38
"name": "playedTime",
39
"storageKey": null
40
};
41
return {
···
93
{
94
"alias": null,
95
"args": null,
96
+
"kind": "ScalarField",
97
"name": "artists",
98
"storageKey": null
99
},
100
{
···
130
"args": null,
131
"concreteType": "AppBskyActorProfile",
132
"kind": "LinkedField",
133
+
"name": "appBskyActorProfileByDid",
134
"plural": false,
135
"selections": [
136
{
···
139
"kind": "ScalarField",
140
"name": "displayName",
141
"storageKey": null
142
+
}
143
],
144
"storageKey": null
145
+
}
146
],
147
"storageKey": null
148
}
149
]
150
},
151
"params": {
152
+
"cacheID": "8dfe214f7630ae86042df4676198d298",
153
"id": null,
154
"metadata": {},
155
"name": "AppSubscription",
156
"operationKind": "subscription",
157
+
"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 appBskyActorProfileByDid {\n displayName\n }\n}\n"
158
}
159
};
160
})();
+10
-10
src/__generated__/App_plays.graphql.ts
+10
-10
src/__generated__/App_plays.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<ba0bacb4e016f0edbea67013c8694b23>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ReaderFragment } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type App_plays$data = {
14
-
readonly fmTealAlphaFeedPlays: {
15
readonly edges: ReadonlyArray<{
16
readonly node: {
17
readonly playedTime: string | null | undefined;
18
readonly " $fragmentSpreads": FragmentRefs<"TrackItem_play">;
19
};
20
}>;
21
-
readonly totalCount: number;
22
-
};
23
readonly " $fragmentType": "App_plays";
24
};
25
export type App_plays$key = {
···
31
32
const node: ReaderFragment = (function(){
33
var v0 = [
34
-
"fmTealAlphaFeedPlays"
35
];
36
return {
37
"argumentDefinitions": [
···
72
"name": "App_plays",
73
"selections": [
74
{
75
-
"alias": "fmTealAlphaFeedPlays",
76
"args": [
77
{
78
"kind": "Literal",
79
"name": "sortBy",
80
"value": [
81
{
82
-
"direction": "desc",
83
"field": "playedTime"
84
}
85
]
···
87
],
88
"concreteType": "FmTealAlphaFeedPlayConnection",
89
"kind": "LinkedField",
90
-
"name": "__App_fmTealAlphaFeedPlays_connection",
91
"plural": false,
92
"selections": [
93
{
···
171
"storageKey": null
172
}
173
],
174
-
"storageKey": "__App_fmTealAlphaFeedPlays_connection(sortBy:[{\"direction\":\"desc\",\"field\":\"playedTime\"}])"
175
}
176
],
177
"type": "Query",
···
179
};
180
})();
181
182
-
(node as any).hash = "1e73fa97ccff20071e5a3fba0f00b48c";
183
184
export default node;
···
1
/**
2
+
* @generated SignedSource<<3266d35506946a9879921e682d9a0b8a>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ReaderFragment } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type App_plays$data = {
14
+
readonly fmTealAlphaFeedPlay: {
15
readonly edges: ReadonlyArray<{
16
readonly node: {
17
readonly playedTime: string | null | undefined;
18
readonly " $fragmentSpreads": FragmentRefs<"TrackItem_play">;
19
};
20
}>;
21
+
readonly totalCount: number | null | undefined;
22
+
} | null | undefined;
23
readonly " $fragmentType": "App_plays";
24
};
25
export type App_plays$key = {
···
31
32
const node: ReaderFragment = (function(){
33
var v0 = [
34
+
"fmTealAlphaFeedPlay"
35
];
36
return {
37
"argumentDefinitions": [
···
72
"name": "App_plays",
73
"selections": [
74
{
75
+
"alias": "fmTealAlphaFeedPlay",
76
"args": [
77
{
78
"kind": "Literal",
79
"name": "sortBy",
80
"value": [
81
{
82
+
"direction": "DESC",
83
"field": "playedTime"
84
}
85
]
···
87
],
88
"concreteType": "FmTealAlphaFeedPlayConnection",
89
"kind": "LinkedField",
90
+
"name": "__App_fmTealAlphaFeedPlay_connection",
91
"plural": false,
92
"selections": [
93
{
···
171
"storageKey": null
172
}
173
],
174
+
"storageKey": "__App_fmTealAlphaFeedPlay_connection(sortBy:[{\"direction\":\"DESC\",\"field\":\"playedTime\"}])"
175
}
176
],
177
"type": "Query",
···
179
};
180
})();
181
182
+
(node as any).hash = "b793d066128b9e7d52d3209bd3e14afe";
183
184
export default node;
+32
-79
src/__generated__/ProfilePaginationQuery.graphql.ts
+32
-79
src/__generated__/ProfilePaginationQuery.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<ebf74750639e18cbf2425bae6cf23f69>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ConcreteRequest } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type FmTealAlphaFeedPlayWhereInput = {
14
-
actorHandle?: StringFilter | null | undefined;
15
-
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
16
-
artistMbIds?: StringFilter | null | undefined;
17
-
artistNames?: StringFilter | null | undefined;
18
-
artists?: StringFilter | null | undefined;
19
-
cid?: StringFilter | null | undefined;
20
-
collection?: StringFilter | null | undefined;
21
-
did?: StringFilter | null | undefined;
22
-
duration?: IntFilter | null | undefined;
23
-
indexedAt?: DateTimeFilter | null | undefined;
24
-
isrc?: StringFilter | null | undefined;
25
-
json?: StringFilter | null | undefined;
26
-
musicServiceBaseDomain?: StringFilter | null | undefined;
27
-
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
28
-
originUrl?: StringFilter | null | undefined;
29
-
playedTime?: StringFilter | null | undefined;
30
-
recordingMbId?: StringFilter | null | undefined;
31
-
releaseMbId?: StringFilter | null | undefined;
32
-
releaseName?: StringFilter | null | undefined;
33
-
submissionClientAgent?: StringFilter | null | undefined;
34
-
trackMbId?: StringFilter | null | undefined;
35
-
trackName?: StringFilter | null | undefined;
36
-
uri?: StringFilter | null | undefined;
37
-
};
38
-
export type DateTimeFilter = {
39
-
eq?: string | null | undefined;
40
-
gt?: string | null | undefined;
41
-
gte?: string | null | undefined;
42
-
lt?: string | null | undefined;
43
-
lte?: string | null | undefined;
44
};
45
-
export type StringFilter = {
46
contains?: string | null | undefined;
47
eq?: string | null | undefined;
48
-
fuzzy?: string | null | undefined;
49
gt?: string | null | undefined;
50
gte?: string | null | undefined;
51
-
in?: ReadonlyArray<string | null | undefined> | null | undefined;
52
lt?: string | null | undefined;
53
lte?: string | null | undefined;
54
};
55
-
export type IntFilter = {
56
-
eq?: number | null | undefined;
57
-
gt?: number | null | undefined;
58
-
gte?: number | null | undefined;
59
-
in?: ReadonlyArray<number | null | undefined> | null | undefined;
60
-
lt?: number | null | undefined;
61
-
lte?: number | null | undefined;
62
-
};
63
export type ProfilePaginationQuery$variables = {
64
count?: number | null | undefined;
65
cursor?: string | null | undefined;
···
112
"name": "sortBy",
113
"value": [
114
{
115
-
"direction": "desc",
116
"field": "playedTime"
117
}
118
]
119
},
120
(v1/*: any*/)
121
-
],
122
-
v3 = {
123
-
"alias": null,
124
-
"args": null,
125
-
"kind": "ScalarField",
126
-
"name": "id",
127
-
"storageKey": null
128
-
};
129
return {
130
"fragment": {
131
"argumentDefinitions": (v0/*: any*/),
···
165
"args": (v2/*: any*/),
166
"concreteType": "FmTealAlphaFeedPlayConnection",
167
"kind": "LinkedField",
168
-
"name": "fmTealAlphaFeedPlays",
169
"plural": false,
170
"selections": [
171
{
···
208
{
209
"alias": null,
210
"args": null,
211
-
"concreteType": "FmTealAlphaFeedDefsArtist",
212
-
"kind": "LinkedField",
213
"name": "artists",
214
-
"plural": true,
215
-
"selections": [
216
-
{
217
-
"alias": null,
218
-
"args": null,
219
-
"kind": "ScalarField",
220
-
"name": "artistName",
221
-
"storageKey": null
222
-
},
223
-
{
224
-
"alias": null,
225
-
"args": null,
226
-
"kind": "ScalarField",
227
-
"name": "artistMbId",
228
-
"storageKey": null
229
-
}
230
-
],
231
"storageKey": null
232
},
233
{
···
263
"args": null,
264
"concreteType": "AppBskyActorProfile",
265
"kind": "LinkedField",
266
-
"name": "appBskyActorProfile",
267
"plural": false,
268
"selections": [
269
{
···
273
"name": "displayName",
274
"storageKey": null
275
},
276
-
(v3/*: any*/),
277
{
278
"alias": null,
279
"args": null,
···
308
],
309
"storageKey": null
310
},
311
-
(v3/*: any*/),
312
{
313
"alias": null,
314
"args": null,
···
365
"sortBy"
366
],
367
"handle": "connection",
368
-
"key": "Profile_fmTealAlphaFeedPlays",
369
"kind": "LinkedHandle",
370
-
"name": "fmTealAlphaFeedPlays"
371
}
372
]
373
},
374
"params": {
375
-
"cacheID": "776562076929c2efa168256be3868659",
376
"id": null,
377
"metadata": {},
378
"name": "ProfilePaginationQuery",
379
"operationKind": "query",
380
-
"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"
381
}
382
};
383
})();
384
385
-
(node as any).hash = "fb9d67e8cd94c4191b9956225ff78bdf";
386
387
export default node;
···
1
/**
2
+
* @generated SignedSource<<e269ae086e67fb50189bc00d0cfa2fba>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ConcreteRequest } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type FmTealAlphaFeedPlayWhereInput = {
14
+
actorHandle?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
15
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
16
+
cid?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
17
+
collection?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
18
+
did?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
19
+
duration?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
20
+
indexedAt?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
21
+
isrc?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
22
+
musicServiceBaseDomain?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
23
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
24
+
originUrl?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
25
+
playedTime?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
26
+
recordingMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
27
+
releaseMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
28
+
releaseName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
29
+
submissionClientAgent?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
30
+
trackMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
31
+
trackName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
32
+
uri?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
33
};
34
+
export type FmTealAlphaFeedPlayFieldCondition = {
35
contains?: string | null | undefined;
36
eq?: string | null | undefined;
37
gt?: string | null | undefined;
38
gte?: string | null | undefined;
39
+
in?: ReadonlyArray<string> | null | undefined;
40
lt?: string | null | undefined;
41
lte?: string | null | undefined;
42
};
43
export type ProfilePaginationQuery$variables = {
44
count?: number | null | undefined;
45
cursor?: string | null | undefined;
···
92
"name": "sortBy",
93
"value": [
94
{
95
+
"direction": "DESC",
96
"field": "playedTime"
97
}
98
]
99
},
100
(v1/*: any*/)
101
+
];
102
return {
103
"fragment": {
104
"argumentDefinitions": (v0/*: any*/),
···
138
"args": (v2/*: any*/),
139
"concreteType": "FmTealAlphaFeedPlayConnection",
140
"kind": "LinkedField",
141
+
"name": "fmTealAlphaFeedPlay",
142
"plural": false,
143
"selections": [
144
{
···
181
{
182
"alias": null,
183
"args": null,
184
+
"kind": "ScalarField",
185
"name": "artists",
186
"storageKey": null
187
},
188
{
···
218
"args": null,
219
"concreteType": "AppBskyActorProfile",
220
"kind": "LinkedField",
221
+
"name": "appBskyActorProfileByDid",
222
"plural": false,
223
"selections": [
224
{
···
228
"name": "displayName",
229
"storageKey": null
230
},
231
{
232
"alias": null,
233
"args": null,
···
262
],
263
"storageKey": null
264
},
265
{
266
"alias": null,
267
"args": null,
···
318
"sortBy"
319
],
320
"handle": "connection",
321
+
"key": "Profile_fmTealAlphaFeedPlay",
322
"kind": "LinkedHandle",
323
+
"name": "fmTealAlphaFeedPlay"
324
}
325
]
326
},
327
"params": {
328
+
"cacheID": "71567c0f3de4624c411f4821789aaae9",
329
"id": null,
330
"metadata": {},
331
"name": "ProfilePaginationQuery",
332
"operationKind": "query",
333
+
"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 fmTealAlphaFeedPlay(first: $count, after: $cursor, sortBy: [{field: playedTime, direction: DESC}], where: $where) {\n totalCount\n edges {\n node {\n ...TrackItem_play\n actorHandle\n appBskyActorProfileByDid {\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 appBskyActorProfileByDid {\n displayName\n }\n}\n"
334
}
335
};
336
})();
337
338
+
(node as any).hash = "06ba557474df22684f61a32da8aec20a";
339
340
export default node;
+32
-79
src/__generated__/ProfileQuery.graphql.ts
+32
-79
src/__generated__/ProfileQuery.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<0e53ec9fb8aaac689644785adae05957>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ConcreteRequest } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type FmTealAlphaFeedPlayWhereInput = {
14
-
actorHandle?: StringFilter | null | undefined;
15
-
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
16
-
artistMbIds?: StringFilter | null | undefined;
17
-
artistNames?: StringFilter | null | undefined;
18
-
artists?: StringFilter | null | undefined;
19
-
cid?: StringFilter | null | undefined;
20
-
collection?: StringFilter | null | undefined;
21
-
did?: StringFilter | null | undefined;
22
-
duration?: IntFilter | null | undefined;
23
-
indexedAt?: DateTimeFilter | null | undefined;
24
-
isrc?: StringFilter | null | undefined;
25
-
json?: StringFilter | null | undefined;
26
-
musicServiceBaseDomain?: StringFilter | null | undefined;
27
-
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
28
-
originUrl?: StringFilter | null | undefined;
29
-
playedTime?: StringFilter | null | undefined;
30
-
recordingMbId?: StringFilter | null | undefined;
31
-
releaseMbId?: StringFilter | null | undefined;
32
-
releaseName?: StringFilter | null | undefined;
33
-
submissionClientAgent?: StringFilter | null | undefined;
34
-
trackMbId?: StringFilter | null | undefined;
35
-
trackName?: StringFilter | null | undefined;
36
-
uri?: StringFilter | null | undefined;
37
-
};
38
-
export type DateTimeFilter = {
39
-
eq?: string | null | undefined;
40
-
gt?: string | null | undefined;
41
-
gte?: string | null | undefined;
42
-
lt?: string | null | undefined;
43
-
lte?: string | null | undefined;
44
};
45
-
export type StringFilter = {
46
contains?: string | null | undefined;
47
eq?: string | null | undefined;
48
-
fuzzy?: string | null | undefined;
49
gt?: string | null | undefined;
50
gte?: string | null | undefined;
51
-
in?: ReadonlyArray<string | null | undefined> | null | undefined;
52
lt?: string | null | undefined;
53
lte?: string | null | undefined;
54
};
55
-
export type IntFilter = {
56
-
eq?: number | null | undefined;
57
-
gt?: number | null | undefined;
58
-
gte?: number | null | undefined;
59
-
in?: ReadonlyArray<number | null | undefined> | null | undefined;
60
-
lt?: number | null | undefined;
61
-
lte?: number | null | undefined;
62
-
};
63
export type ProfileQuery$variables = {
64
chartWhere: FmTealAlphaFeedPlayWhereInput;
65
where: FmTealAlphaFeedPlayWhereInput;
···
99
"name": "sortBy",
100
"value": [
101
{
102
-
"direction": "desc",
103
"field": "playedTime"
104
}
105
]
···
112
"kind": "ScalarField",
113
"name": "playedTime",
114
"storageKey": null
115
-
},
116
-
v5 = {
117
-
"alias": null,
118
-
"args": null,
119
-
"kind": "ScalarField",
120
-
"name": "id",
121
-
"storageKey": null
122
};
123
return {
124
"fragment": {
···
160
"args": (v3/*: any*/),
161
"concreteType": "FmTealAlphaFeedPlayConnection",
162
"kind": "LinkedField",
163
-
"name": "fmTealAlphaFeedPlays",
164
"plural": false,
165
"selections": [
166
{
···
197
{
198
"alias": null,
199
"args": null,
200
-
"concreteType": "FmTealAlphaFeedDefsArtist",
201
-
"kind": "LinkedField",
202
"name": "artists",
203
-
"plural": true,
204
-
"selections": [
205
-
{
206
-
"alias": null,
207
-
"args": null,
208
-
"kind": "ScalarField",
209
-
"name": "artistName",
210
-
"storageKey": null
211
-
},
212
-
{
213
-
"alias": null,
214
-
"args": null,
215
-
"kind": "ScalarField",
216
-
"name": "artistMbId",
217
-
"storageKey": null
218
-
}
219
-
],
220
"storageKey": null
221
},
222
{
···
252
"args": null,
253
"concreteType": "AppBskyActorProfile",
254
"kind": "LinkedField",
255
-
"name": "appBskyActorProfile",
256
"plural": false,
257
"selections": [
258
{
···
262
"name": "displayName",
263
"storageKey": null
264
},
265
-
(v5/*: any*/),
266
{
267
"alias": null,
268
"args": null,
···
297
],
298
"storageKey": null
299
},
300
-
(v5/*: any*/),
301
{
302
"alias": null,
303
"args": null,
···
354
"sortBy"
355
],
356
"handle": "connection",
357
-
"key": "Profile_fmTealAlphaFeedPlays",
358
"kind": "LinkedHandle",
359
-
"name": "fmTealAlphaFeedPlays"
360
},
361
{
362
"alias": "chartData",
···
367
"value": [
368
{
369
"field": "playedTime",
370
-
"interval": "day"
371
}
372
]
373
},
···
384
],
385
"concreteType": "FmTealAlphaFeedPlayAggregated",
386
"kind": "LinkedField",
387
-
"name": "fmTealAlphaFeedPlaysAggregated",
388
"plural": true,
389
"selections": [
390
(v4/*: any*/),
···
401
]
402
},
403
"params": {
404
-
"cacheID": "6555ddce48917a1e1a522f5b4800192b",
405
"id": null,
406
"metadata": {},
407
"name": "ProfileQuery",
408
"operationKind": "query",
409
-
"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"
410
}
411
};
412
})();
···
1
/**
2
+
* @generated SignedSource<<d7bc3a763e9feefe1b760612bdc9ef3a>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ConcreteRequest } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type FmTealAlphaFeedPlayWhereInput = {
14
+
actorHandle?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
15
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
16
+
cid?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
17
+
collection?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
18
+
did?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
19
+
duration?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
20
+
indexedAt?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
21
+
isrc?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
22
+
musicServiceBaseDomain?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
23
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
24
+
originUrl?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
25
+
playedTime?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
26
+
recordingMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
27
+
releaseMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
28
+
releaseName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
29
+
submissionClientAgent?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
30
+
trackMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
31
+
trackName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
32
+
uri?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
33
};
34
+
export type FmTealAlphaFeedPlayFieldCondition = {
35
contains?: string | null | undefined;
36
eq?: string | null | undefined;
37
gt?: string | null | undefined;
38
gte?: string | null | undefined;
39
+
in?: ReadonlyArray<string> | null | undefined;
40
lt?: string | null | undefined;
41
lte?: string | null | undefined;
42
};
43
export type ProfileQuery$variables = {
44
chartWhere: FmTealAlphaFeedPlayWhereInput;
45
where: FmTealAlphaFeedPlayWhereInput;
···
79
"name": "sortBy",
80
"value": [
81
{
82
+
"direction": "DESC",
83
"field": "playedTime"
84
}
85
]
···
92
"kind": "ScalarField",
93
"name": "playedTime",
94
"storageKey": null
95
};
96
return {
97
"fragment": {
···
133
"args": (v3/*: any*/),
134
"concreteType": "FmTealAlphaFeedPlayConnection",
135
"kind": "LinkedField",
136
+
"name": "fmTealAlphaFeedPlay",
137
"plural": false,
138
"selections": [
139
{
···
170
{
171
"alias": null,
172
"args": null,
173
+
"kind": "ScalarField",
174
"name": "artists",
175
"storageKey": null
176
},
177
{
···
207
"args": null,
208
"concreteType": "AppBskyActorProfile",
209
"kind": "LinkedField",
210
+
"name": "appBskyActorProfileByDid",
211
"plural": false,
212
"selections": [
213
{
···
217
"name": "displayName",
218
"storageKey": null
219
},
220
{
221
"alias": null,
222
"args": null,
···
251
],
252
"storageKey": null
253
},
254
{
255
"alias": null,
256
"args": null,
···
307
"sortBy"
308
],
309
"handle": "connection",
310
+
"key": "Profile_fmTealAlphaFeedPlay",
311
"kind": "LinkedHandle",
312
+
"name": "fmTealAlphaFeedPlay"
313
},
314
{
315
"alias": "chartData",
···
320
"value": [
321
{
322
"field": "playedTime",
323
+
"interval": "DAY"
324
}
325
]
326
},
···
337
],
338
"concreteType": "FmTealAlphaFeedPlayAggregated",
339
"kind": "LinkedField",
340
+
"name": "fmTealAlphaFeedPlayAggregated",
341
"plural": true,
342
"selections": [
343
(v4/*: any*/),
···
354
]
355
},
356
"params": {
357
+
"cacheID": "e246f4fa3d278d1cba09fc7be013172d",
358
"id": null,
359
"metadata": {},
360
"name": "ProfileQuery",
361
"operationKind": "query",
362
+
"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 fmTealAlphaFeedPlay(first: 20, sortBy: [{field: playedTime, direction: DESC}], where: $where) {\n totalCount\n edges {\n node {\n ...TrackItem_play\n actorHandle\n appBskyActorProfileByDid {\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: fmTealAlphaFeedPlayAggregated(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 appBskyActorProfileByDid {\n displayName\n }\n}\n"
363
}
364
};
365
})();
+11
-11
src/__generated__/Profile_plays.graphql.ts
+11
-11
src/__generated__/Profile_plays.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<9b9347661ace6bcbeb677e53e4b5feec>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ReaderFragment } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type Profile_plays$data = {
14
-
readonly fmTealAlphaFeedPlays: {
15
readonly edges: ReadonlyArray<{
16
readonly node: {
17
readonly actorHandle: string | null | undefined;
18
-
readonly appBskyActorProfile: {
19
readonly avatar: {
20
readonly url: string;
21
} | null | undefined;
···
25
readonly " $fragmentSpreads": FragmentRefs<"TrackItem_play">;
26
};
27
}>;
28
-
readonly totalCount: number;
29
-
};
30
readonly " $fragmentType": "Profile_plays";
31
};
32
export type Profile_plays$key = {
···
38
39
const node: ReaderFragment = (function(){
40
var v0 = [
41
-
"fmTealAlphaFeedPlays"
42
];
43
return {
44
"argumentDefinitions": [
···
84
"name": "Profile_plays",
85
"selections": [
86
{
87
-
"alias": "fmTealAlphaFeedPlays",
88
"args": [
89
{
90
"kind": "Literal",
91
"name": "sortBy",
92
"value": [
93
{
94
-
"direction": "desc",
95
"field": "playedTime"
96
}
97
]
···
104
],
105
"concreteType": "FmTealAlphaFeedPlayConnection",
106
"kind": "LinkedField",
107
-
"name": "__Profile_fmTealAlphaFeedPlays_connection",
108
"plural": false,
109
"selections": [
110
{
···
147
"args": null,
148
"concreteType": "AppBskyActorProfile",
149
"kind": "LinkedField",
150
-
"name": "appBskyActorProfile",
151
"plural": false,
152
"selections": [
153
{
···
245
};
246
})();
247
248
-
(node as any).hash = "fb9d67e8cd94c4191b9956225ff78bdf";
249
250
export default node;
···
1
/**
2
+
* @generated SignedSource<<debe921c118f11f1685c3407b690bcf8>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
11
import { ReaderFragment } from 'relay-runtime';
12
import { FragmentRefs } from "relay-runtime";
13
export type Profile_plays$data = {
14
+
readonly fmTealAlphaFeedPlay: {
15
readonly edges: ReadonlyArray<{
16
readonly node: {
17
readonly actorHandle: string | null | undefined;
18
+
readonly appBskyActorProfileByDid: {
19
readonly avatar: {
20
readonly url: string;
21
} | null | undefined;
···
25
readonly " $fragmentSpreads": FragmentRefs<"TrackItem_play">;
26
};
27
}>;
28
+
readonly totalCount: number | null | undefined;
29
+
} | null | undefined;
30
readonly " $fragmentType": "Profile_plays";
31
};
32
export type Profile_plays$key = {
···
38
39
const node: ReaderFragment = (function(){
40
var v0 = [
41
+
"fmTealAlphaFeedPlay"
42
];
43
return {
44
"argumentDefinitions": [
···
84
"name": "Profile_plays",
85
"selections": [
86
{
87
+
"alias": "fmTealAlphaFeedPlay",
88
"args": [
89
{
90
"kind": "Literal",
91
"name": "sortBy",
92
"value": [
93
{
94
+
"direction": "DESC",
95
"field": "playedTime"
96
}
97
]
···
104
],
105
"concreteType": "FmTealAlphaFeedPlayConnection",
106
"kind": "LinkedField",
107
+
"name": "__Profile_fmTealAlphaFeedPlay_connection",
108
"plural": false,
109
"selections": [
110
{
···
147
"args": null,
148
"concreteType": "AppBskyActorProfile",
149
"kind": "LinkedField",
150
+
"name": "appBskyActorProfileByDid",
151
"plural": false,
152
"selections": [
153
{
···
245
};
246
})();
247
248
+
(node as any).hash = "06ba557474df22684f61a32da8aec20a";
249
250
export default node;
+6
-6
src/__generated__/ScrobbleChart_data.graphql.ts
+6
-6
src/__generated__/ScrobbleChart_data.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<7b446f8950ffde63fb0e7748bb596e66>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
13
export type ScrobbleChart_data$data = {
14
readonly chartData: ReadonlyArray<{
15
readonly count: number;
16
-
readonly playedTime: any | null | undefined;
17
-
}>;
18
readonly " $fragmentType": "ScrobbleChart_data";
19
};
20
export type ScrobbleChart_data$key = {
···
42
"value": [
43
{
44
"field": "playedTime",
45
-
"interval": "day"
46
}
47
]
48
},
···
59
],
60
"concreteType": "FmTealAlphaFeedPlayAggregated",
61
"kind": "LinkedField",
62
-
"name": "fmTealAlphaFeedPlaysAggregated",
63
"plural": true,
64
"selections": [
65
{
···
84
"abstractKey": null
85
};
86
87
-
(node as any).hash = "6d8ebfa533779947a0b3cd703929b5ba";
88
89
export default node;
···
1
/**
2
+
* @generated SignedSource<<7e2392afa490a7b1da46656aa250f70b>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
13
export type ScrobbleChart_data$data = {
14
readonly chartData: ReadonlyArray<{
15
readonly count: number;
16
+
readonly playedTime: string | null | undefined;
17
+
}> | null | undefined;
18
readonly " $fragmentType": "ScrobbleChart_data";
19
};
20
export type ScrobbleChart_data$key = {
···
42
"value": [
43
{
44
"field": "playedTime",
45
+
"interval": "DAY"
46
}
47
]
48
},
···
59
],
60
"concreteType": "FmTealAlphaFeedPlayAggregated",
61
"kind": "LinkedField",
62
+
"name": "fmTealAlphaFeedPlayAggregated",
63
"plural": true,
64
"selections": [
65
{
···
84
"abstractKey": null
85
};
86
87
+
(node as any).hash = "acb96f5268c9520f77c672a7ea3a7454";
88
89
export default node;
+32
-52
src/__generated__/TopAlbumsQuery.graphql.ts
+32
-52
src/__generated__/TopAlbumsQuery.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<5b4069c82e72c33b75aaff1d16f1421f>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
10
11
import { ConcreteRequest } from 'relay-runtime';
12
export type FmTealAlphaFeedPlayWhereInput = {
13
-
actorHandle?: StringFilter | null | undefined;
14
-
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
15
-
artistMbIds?: StringFilter | null | undefined;
16
-
artistNames?: StringFilter | null | undefined;
17
-
artists?: StringFilter | null | undefined;
18
-
cid?: StringFilter | null | undefined;
19
-
collection?: StringFilter | null | undefined;
20
-
did?: StringFilter | null | undefined;
21
-
duration?: IntFilter | null | undefined;
22
-
indexedAt?: DateTimeFilter | null | undefined;
23
-
isrc?: StringFilter | null | undefined;
24
-
json?: StringFilter | null | undefined;
25
-
musicServiceBaseDomain?: StringFilter | null | undefined;
26
-
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
27
-
originUrl?: StringFilter | null | undefined;
28
-
playedTime?: StringFilter | null | undefined;
29
-
recordingMbId?: StringFilter | null | undefined;
30
-
releaseMbId?: StringFilter | null | undefined;
31
-
releaseName?: StringFilter | null | undefined;
32
-
submissionClientAgent?: StringFilter | null | undefined;
33
-
trackMbId?: StringFilter | null | undefined;
34
-
trackName?: StringFilter | null | undefined;
35
-
uri?: StringFilter | null | undefined;
36
-
};
37
-
export type DateTimeFilter = {
38
-
eq?: string | null | undefined;
39
-
gt?: string | null | undefined;
40
-
gte?: string | null | undefined;
41
-
lt?: string | null | undefined;
42
-
lte?: string | null | undefined;
43
};
44
-
export type StringFilter = {
45
contains?: string | null | undefined;
46
eq?: string | null | undefined;
47
-
fuzzy?: string | null | undefined;
48
gt?: string | null | undefined;
49
gte?: string | null | undefined;
50
-
in?: ReadonlyArray<string | null | undefined> | null | undefined;
51
lt?: string | null | undefined;
52
lte?: string | null | undefined;
53
};
54
-
export type IntFilter = {
55
-
eq?: number | null | undefined;
56
-
gt?: number | null | undefined;
57
-
gte?: number | null | undefined;
58
-
in?: ReadonlyArray<number | null | undefined> | null | undefined;
59
-
lt?: number | null | undefined;
60
-
lte?: number | null | undefined;
61
-
};
62
export type TopAlbumsQuery$variables = {
63
where?: FmTealAlphaFeedPlayWhereInput | null | undefined;
64
};
65
export type TopAlbumsQuery$data = {
66
-
readonly fmTealAlphaFeedPlaysAggregated: ReadonlyArray<{
67
-
readonly artists: any | null | undefined;
68
readonly count: number;
69
-
readonly releaseMbId: any | null | undefined;
70
-
readonly releaseName: any | null | undefined;
71
-
}>;
72
};
73
export type TopAlbumsQuery = {
74
response: TopAlbumsQuery$data;
···
111
"kind": "Literal",
112
"name": "orderBy",
113
"value": {
114
-
"count": "desc"
115
}
116
},
117
{
···
122
],
123
"concreteType": "FmTealAlphaFeedPlayAggregated",
124
"kind": "LinkedField",
125
-
"name": "fmTealAlphaFeedPlaysAggregated",
126
"plural": true,
127
"selections": [
128
{
···
175
"selections": (v1/*: any*/)
176
},
177
"params": {
178
-
"cacheID": "4bc742f9cab572a86f4956ae1325e650",
179
"id": null,
180
"metadata": {},
181
"name": "TopAlbumsQuery",
182
"operationKind": "query",
183
-
"text": "query TopAlbumsQuery(\n $where: FmTealAlphaFeedPlayWhereInput\n) {\n fmTealAlphaFeedPlaysAggregated(groupBy: [{field: releaseMbId}, {field: releaseName}, {field: artists}], orderBy: {count: desc}, limit: 100, where: $where) {\n releaseMbId\n releaseName\n artists\n count\n }\n}\n"
184
}
185
};
186
})();
187
188
-
(node as any).hash = "c916cfe287c6837e7b40f0712b123f12";
189
190
export default node;
···
1
/**
2
+
* @generated SignedSource<<8d07fc631e364271a41ea2bd1ab069bb>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
10
11
import { ConcreteRequest } from 'relay-runtime';
12
export type FmTealAlphaFeedPlayWhereInput = {
13
+
actorHandle?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
14
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
15
+
cid?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
16
+
collection?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
17
+
did?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
18
+
duration?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
19
+
indexedAt?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
20
+
isrc?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
21
+
musicServiceBaseDomain?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
22
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
23
+
originUrl?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
24
+
playedTime?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
25
+
recordingMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
26
+
releaseMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
27
+
releaseName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
28
+
submissionClientAgent?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
29
+
trackMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
30
+
trackName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
31
+
uri?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
32
};
33
+
export type FmTealAlphaFeedPlayFieldCondition = {
34
contains?: string | null | undefined;
35
eq?: string | null | undefined;
36
gt?: string | null | undefined;
37
gte?: string | null | undefined;
38
+
in?: ReadonlyArray<string> | null | undefined;
39
lt?: string | null | undefined;
40
lte?: string | null | undefined;
41
};
42
export type TopAlbumsQuery$variables = {
43
where?: FmTealAlphaFeedPlayWhereInput | null | undefined;
44
};
45
export type TopAlbumsQuery$data = {
46
+
readonly fmTealAlphaFeedPlayAggregated: ReadonlyArray<{
47
+
readonly artists: string | null | undefined;
48
readonly count: number;
49
+
readonly releaseMbId: string | null | undefined;
50
+
readonly releaseName: string | null | undefined;
51
+
}> | null | undefined;
52
};
53
export type TopAlbumsQuery = {
54
response: TopAlbumsQuery$data;
···
91
"kind": "Literal",
92
"name": "orderBy",
93
"value": {
94
+
"count": "DESC"
95
}
96
},
97
{
···
102
],
103
"concreteType": "FmTealAlphaFeedPlayAggregated",
104
"kind": "LinkedField",
105
+
"name": "fmTealAlphaFeedPlayAggregated",
106
"plural": true,
107
"selections": [
108
{
···
155
"selections": (v1/*: any*/)
156
},
157
"params": {
158
+
"cacheID": "6b742b6a57c908748af1780da995e31c",
159
"id": null,
160
"metadata": {},
161
"name": "TopAlbumsQuery",
162
"operationKind": "query",
163
+
"text": "query TopAlbumsQuery(\n $where: FmTealAlphaFeedPlayWhereInput\n) {\n fmTealAlphaFeedPlayAggregated(groupBy: [{field: releaseMbId}, {field: releaseName}, {field: artists}], orderBy: {count: DESC}, limit: 100, where: $where) {\n releaseMbId\n releaseName\n artists\n count\n }\n}\n"
164
}
165
};
166
})();
167
168
+
(node as any).hash = "13fd8a47c19eeb4f327f0d6d869b73cd";
169
170
export default node;
+32
-52
src/__generated__/TopTracksQuery.graphql.ts
+32
-52
src/__generated__/TopTracksQuery.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<28bfcfbaf324e20bbfc524afcc9ed549>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
10
11
import { ConcreteRequest } from 'relay-runtime';
12
export type FmTealAlphaFeedPlayWhereInput = {
13
-
actorHandle?: StringFilter | null | undefined;
14
-
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
15
-
artistMbIds?: StringFilter | null | undefined;
16
-
artistNames?: StringFilter | null | undefined;
17
-
artists?: StringFilter | null | undefined;
18
-
cid?: StringFilter | null | undefined;
19
-
collection?: StringFilter | null | undefined;
20
-
did?: StringFilter | null | undefined;
21
-
duration?: IntFilter | null | undefined;
22
-
indexedAt?: DateTimeFilter | null | undefined;
23
-
isrc?: StringFilter | null | undefined;
24
-
json?: StringFilter | null | undefined;
25
-
musicServiceBaseDomain?: StringFilter | null | undefined;
26
-
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput | null | undefined> | null | undefined;
27
-
originUrl?: StringFilter | null | undefined;
28
-
playedTime?: StringFilter | null | undefined;
29
-
recordingMbId?: StringFilter | null | undefined;
30
-
releaseMbId?: StringFilter | null | undefined;
31
-
releaseName?: StringFilter | null | undefined;
32
-
submissionClientAgent?: StringFilter | null | undefined;
33
-
trackMbId?: StringFilter | null | undefined;
34
-
trackName?: StringFilter | null | undefined;
35
-
uri?: StringFilter | null | undefined;
36
-
};
37
-
export type DateTimeFilter = {
38
-
eq?: string | null | undefined;
39
-
gt?: string | null | undefined;
40
-
gte?: string | null | undefined;
41
-
lt?: string | null | undefined;
42
-
lte?: string | null | undefined;
43
};
44
-
export type StringFilter = {
45
contains?: string | null | undefined;
46
eq?: string | null | undefined;
47
-
fuzzy?: string | null | undefined;
48
gt?: string | null | undefined;
49
gte?: string | null | undefined;
50
-
in?: ReadonlyArray<string | null | undefined> | null | undefined;
51
lt?: string | null | undefined;
52
lte?: string | null | undefined;
53
};
54
-
export type IntFilter = {
55
-
eq?: number | null | undefined;
56
-
gt?: number | null | undefined;
57
-
gte?: number | null | undefined;
58
-
in?: ReadonlyArray<number | null | undefined> | null | undefined;
59
-
lt?: number | null | undefined;
60
-
lte?: number | null | undefined;
61
-
};
62
export type TopTracksQuery$variables = {
63
where?: FmTealAlphaFeedPlayWhereInput | null | undefined;
64
};
65
export type TopTracksQuery$data = {
66
-
readonly fmTealAlphaFeedPlaysAggregated: ReadonlyArray<{
67
-
readonly artists: any | null | undefined;
68
readonly count: number;
69
-
readonly releaseMbId: any | null | undefined;
70
-
readonly trackName: any | null | undefined;
71
-
}>;
72
};
73
export type TopTracksQuery = {
74
response: TopTracksQuery$data;
···
111
"kind": "Literal",
112
"name": "orderBy",
113
"value": {
114
-
"count": "desc"
115
}
116
},
117
{
···
122
],
123
"concreteType": "FmTealAlphaFeedPlayAggregated",
124
"kind": "LinkedField",
125
-
"name": "fmTealAlphaFeedPlaysAggregated",
126
"plural": true,
127
"selections": [
128
{
···
175
"selections": (v1/*: any*/)
176
},
177
"params": {
178
-
"cacheID": "d889d685b64fb19d468954bb3fb7ff7c",
179
"id": null,
180
"metadata": {},
181
"name": "TopTracksQuery",
182
"operationKind": "query",
183
-
"text": "query TopTracksQuery(\n $where: FmTealAlphaFeedPlayWhereInput\n) {\n fmTealAlphaFeedPlaysAggregated(groupBy: [{field: trackName}, {field: releaseMbId}, {field: artists}], orderBy: {count: desc}, limit: 50, where: $where) {\n trackName\n releaseMbId\n artists\n count\n }\n}\n"
184
}
185
};
186
})();
187
188
-
(node as any).hash = "4b62eaeaf8a935abc28e77c8cd2907d1";
189
190
export default node;
···
1
/**
2
+
* @generated SignedSource<<3d375bb2f6549eb84b9399717743b845>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
10
11
import { ConcreteRequest } from 'relay-runtime';
12
export type FmTealAlphaFeedPlayWhereInput = {
13
+
actorHandle?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
14
+
and?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
15
+
cid?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
16
+
collection?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
17
+
did?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
18
+
duration?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
19
+
indexedAt?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
20
+
isrc?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
21
+
musicServiceBaseDomain?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
22
+
or?: ReadonlyArray<FmTealAlphaFeedPlayWhereInput> | null | undefined;
23
+
originUrl?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
24
+
playedTime?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
25
+
recordingMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
26
+
releaseMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
27
+
releaseName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
28
+
submissionClientAgent?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
29
+
trackMbId?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
30
+
trackName?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
31
+
uri?: FmTealAlphaFeedPlayFieldCondition | null | undefined;
32
};
33
+
export type FmTealAlphaFeedPlayFieldCondition = {
34
contains?: string | null | undefined;
35
eq?: string | null | undefined;
36
gt?: string | null | undefined;
37
gte?: string | null | undefined;
38
+
in?: ReadonlyArray<string> | null | undefined;
39
lt?: string | null | undefined;
40
lte?: string | null | undefined;
41
};
42
export type TopTracksQuery$variables = {
43
where?: FmTealAlphaFeedPlayWhereInput | null | undefined;
44
};
45
export type TopTracksQuery$data = {
46
+
readonly fmTealAlphaFeedPlayAggregated: ReadonlyArray<{
47
+
readonly artists: string | null | undefined;
48
readonly count: number;
49
+
readonly releaseMbId: string | null | undefined;
50
+
readonly trackName: string | null | undefined;
51
+
}> | null | undefined;
52
};
53
export type TopTracksQuery = {
54
response: TopTracksQuery$data;
···
91
"kind": "Literal",
92
"name": "orderBy",
93
"value": {
94
+
"count": "DESC"
95
}
96
},
97
{
···
102
],
103
"concreteType": "FmTealAlphaFeedPlayAggregated",
104
"kind": "LinkedField",
105
+
"name": "fmTealAlphaFeedPlayAggregated",
106
"plural": true,
107
"selections": [
108
{
···
155
"selections": (v1/*: any*/)
156
},
157
"params": {
158
+
"cacheID": "bc9ed2b6c355b3a8fedb84cb713fa8de",
159
"id": null,
160
"metadata": {},
161
"name": "TopTracksQuery",
162
"operationKind": "query",
163
+
"text": "query TopTracksQuery(\n $where: FmTealAlphaFeedPlayWhereInput\n) {\n fmTealAlphaFeedPlayAggregated(groupBy: [{field: trackName}, {field: releaseMbId}, {field: artists}], orderBy: {count: DESC}, limit: 50, where: $where) {\n trackName\n releaseMbId\n artists\n count\n }\n}\n"
164
}
165
};
166
})();
167
168
+
(node as any).hash = "d2aadd883f60f6f31f8d466dc9653cd8";
169
170
export default node;
+7
-28
src/__generated__/TrackItem_play.graphql.ts
+7
-28
src/__generated__/TrackItem_play.graphql.ts
···
1
/**
2
-
* @generated SignedSource<<b5b4d3bdca427eb13381e978bf98d7b9>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
12
import { FragmentRefs } from "relay-runtime";
13
export type TrackItem_play$data = {
14
readonly actorHandle: string | null | undefined;
15
-
readonly appBskyActorProfile: {
16
readonly displayName: string | null | undefined;
17
} | null | undefined;
18
-
readonly artists: ReadonlyArray<{
19
-
readonly artistMbId: string | null | undefined;
20
-
readonly artistName: string | null | undefined;
21
-
} | null | undefined> | null | undefined;
22
readonly musicServiceBaseDomain: string | null | undefined;
23
readonly playedTime: string | null | undefined;
24
readonly releaseMbId: string | null | undefined;
25
readonly releaseName: string | null | undefined;
26
-
readonly trackName: string;
27
readonly " $fragmentType": "TrackItem_play";
28
};
29
export type TrackItem_play$key = {
···
54
{
55
"alias": null,
56
"args": null,
57
-
"concreteType": "FmTealAlphaFeedDefsArtist",
58
-
"kind": "LinkedField",
59
"name": "artists",
60
-
"plural": true,
61
-
"selections": [
62
-
{
63
-
"alias": null,
64
-
"args": null,
65
-
"kind": "ScalarField",
66
-
"name": "artistName",
67
-
"storageKey": null
68
-
},
69
-
{
70
-
"alias": null,
71
-
"args": null,
72
-
"kind": "ScalarField",
73
-
"name": "artistMbId",
74
-
"storageKey": null
75
-
}
76
-
],
77
"storageKey": null
78
},
79
{
···
109
"args": null,
110
"concreteType": "AppBskyActorProfile",
111
"kind": "LinkedField",
112
-
"name": "appBskyActorProfile",
113
"plural": false,
114
"selections": [
115
{
···
127
"abstractKey": null
128
};
129
130
-
(node as any).hash = "9a70dada54e50e27bdd19183f1b16e35";
131
132
export default node;
···
1
/**
2
+
* @generated SignedSource<<2ac2423fc2223016d85ad3440952732c>>
3
* @lightSyntaxTransform
4
* @nogrep
5
*/
···
12
import { FragmentRefs } from "relay-runtime";
13
export type TrackItem_play$data = {
14
readonly actorHandle: string | null | undefined;
15
+
readonly appBskyActorProfileByDid: {
16
readonly displayName: string | null | undefined;
17
} | null | undefined;
18
+
readonly artists: string | null | undefined;
19
readonly musicServiceBaseDomain: string | null | undefined;
20
readonly playedTime: string | null | undefined;
21
readonly releaseMbId: string | null | undefined;
22
readonly releaseName: string | null | undefined;
23
+
readonly trackName: string | null | undefined;
24
readonly " $fragmentType": "TrackItem_play";
25
};
26
export type TrackItem_play$key = {
···
51
{
52
"alias": null,
53
"args": null,
54
+
"kind": "ScalarField",
55
"name": "artists",
56
"storageKey": null
57
},
58
{
···
88
"args": null,
89
"concreteType": "AppBskyActorProfile",
90
"kind": "LinkedField",
91
+
"name": "appBskyActorProfileByDid",
92
"plural": false,
93
"selections": [
94
{
···
106
"abstractKey": null
107
};
108
109
+
(node as any).hash = "6c80a7f51708b5def457b01bd5fae190";
110
111
export default node;
+8
-9
src/main.tsx
+8
-9
src/main.tsx
···
1
import { StrictMode, Suspense } from "react";
2
import { createRoot } from "react-dom/client";
3
-
import { BrowserRouter, Routes, Route } from "react-router-dom";
4
import "./index.css";
5
import App from "./App.tsx";
6
import Profile from "./Profile.tsx";
···
10
import { RelayEnvironmentProvider } from "react-relay";
11
import {
12
Environment,
13
Network,
14
-
type FetchFunction,
15
Observable,
16
type SubscribeFunction,
17
-
type GraphQLResponse,
18
} from "relay-runtime";
19
import { createClient } from "graphql-ws";
20
21
const HTTP_ENDPOINT =
22
-
"https://api.slices.network/graphql?slice=at://did:plc:fpruhuo22xkm5o7ttr2ktxdo/network.slices.slice/3m257yljpbg2a";
23
24
-
const WS_ENDPOINT =
25
-
"wss://api.slices.network/graphql/ws?slice=at://did:plc:fpruhuo22xkm5o7ttr2ktxdo/network.slices.slice/3m257yljpbg2a";
26
27
const fetchGraphQL: FetchFunction = async (request, variables) => {
28
const resp = await fetch(HTTP_ENDPOINT, {
···
78
sink.error(error);
79
} else if (error instanceof CloseEvent) {
80
sink.error(
81
-
new Error(`WebSocket closed: ${error.code} ${error.reason}`)
82
);
83
} else {
84
sink.error(new Error(JSON.stringify(error)));
85
}
86
},
87
complete: () => sink.complete(),
88
-
}
89
);
90
});
91
};
···
110
</Suspense>
111
</RelayEnvironmentProvider>
112
</BrowserRouter>
113
-
</StrictMode>
114
);
···
1
import { StrictMode, Suspense } from "react";
2
import { createRoot } from "react-dom/client";
3
+
import { BrowserRouter, Route, Routes } from "react-router-dom";
4
import "./index.css";
5
import App from "./App.tsx";
6
import Profile from "./Profile.tsx";
···
10
import { RelayEnvironmentProvider } from "react-relay";
11
import {
12
Environment,
13
+
type FetchFunction,
14
+
type GraphQLResponse,
15
Network,
16
Observable,
17
type SubscribeFunction,
18
} from "relay-runtime";
19
import { createClient } from "graphql-ws";
20
21
const HTTP_ENDPOINT =
22
+
"https://quickslice-production-d668.up.railway.app/graphql";
23
24
+
const WS_ENDPOINT = "wss://quickslice-production-d668.up.railway.app/graphql";
25
26
const fetchGraphQL: FetchFunction = async (request, variables) => {
27
const resp = await fetch(HTTP_ENDPOINT, {
···
77
sink.error(error);
78
} else if (error instanceof CloseEvent) {
79
sink.error(
80
+
new Error(`WebSocket closed: ${error.code} ${error.reason}`),
81
);
82
} else {
83
sink.error(new Error(JSON.stringify(error)));
84
}
85
},
86
complete: () => sink.complete(),
87
+
},
88
);
89
});
90
};
···
109
</Suspense>
110
</RelayEnvironmentProvider>
111
</BrowserRouter>
112
+
</StrictMode>,
113
);