rhythia-api 242.0.0 → 244.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/api/createBeatmap.ts +64 -40
  2. package/api/editProfile.ts +4 -67
  3. package/api/executeAdminOperation.ts +637 -27
  4. package/api/getAvatarUploadUrl.ts +90 -85
  5. package/api/getBeatmapPage.ts +2 -0
  6. package/api/getBeatmapPageById.ts +2 -0
  7. package/api/getBeatmaps.ts +110 -197
  8. package/api/getChangelog.ts +46 -0
  9. package/api/getCollection.ts +44 -31
  10. package/api/getMapUploadUrl.ts +90 -93
  11. package/api/getProfile.ts +297 -297
  12. package/api/getScore.ts +2 -0
  13. package/api/getVideoUploadUrl.ts +90 -85
  14. package/api/submitScoreInternal.ts +506 -461
  15. package/api/updateBeatmapPage.ts +6 -0
  16. package/beatmap-file-urls.json +29398 -0
  17. package/handleApi.ts +7 -4
  18. package/index.ts +193 -162
  19. package/package.json +7 -3
  20. package/queries/admin_delete_user.sql +42 -39
  21. package/queries/admin_remove_all_scores.sql +6 -3
  22. package/queries/admin_remove_score.sql +107 -0
  23. package/queries/admin_update_profile.sql +22 -0
  24. package/queries/get_beatmaps_v2.sql +48 -0
  25. package/queries/get_top_scores_for_beatmap3.sql +47 -38
  26. package/queries/profile_update_guards.sql +66 -0
  27. package/supabase/.temp/cli-latest +1 -0
  28. package/supabase/.temp/linked-project.json +1 -0
  29. package/types/database.ts +1702 -1450
  30. package/utils/beatmapFiles.ts +102 -0
  31. package/utils/beatmapHash.ts +239 -0
  32. package/utils/beatmapTopScores.ts +68 -84
  33. package/utils/getUserBySession.ts +3 -1
  34. package/utils/moderation.ts +101 -0
  35. package/utils/profileUpdateValidation.ts +51 -0
  36. package/utils/redis.ts +24 -0
  37. package/utils/requestUtils.ts +2 -2
  38. package/utils/rhrReplay.ts +122 -0
  39. package/utils/star-calc/formatSingle.ts +107 -0
  40. package/utils/star-calc/rhmParser.ts +214 -0
  41. package/utils/star-calc/sspmParser.ts +294 -160
  42. package/worker.ts +197 -195
  43. package/.env +0 -1
package/types/database.ts CHANGED
@@ -1,1450 +1,1702 @@
1
- export type Json =
2
- | string
3
- | number
4
- | boolean
5
- | null
6
- | { [key: string]: Json | undefined }
7
- | Json[]
8
-
9
- export type Database = {
10
- // Allows to automatically instantiate createClient with right options
11
- // instead of createClient<Database, { PostgrestVersion: 'XX' }>(URL, KEY)
12
- __InternalSupabase: {
13
- PostgrestVersion: "13.0.4"
14
- }
15
- public: {
16
- Tables: {
17
- admin_actions: {
18
- Row: {
19
- action_type: string
20
- admin_id: number
21
- created_at: string | null
22
- details: Json | null
23
- id: number
24
- target_id: number | null
25
- }
26
- Insert: {
27
- action_type: string
28
- admin_id: number
29
- created_at?: string | null
30
- details?: Json | null
31
- id?: number
32
- target_id?: number | null
33
- }
34
- Update: {
35
- action_type?: string
36
- admin_id?: number
37
- created_at?: string | null
38
- details?: Json | null
39
- id?: number
40
- target_id?: number | null
41
- }
42
- Relationships: []
43
- }
44
- admin_operations: {
45
- Row: {
46
- action_type: string | null
47
- details: Json
48
- id: number
49
- target_id: string | null
50
- }
51
- Insert: {
52
- action_type?: string | null
53
- details: Json
54
- id?: number
55
- target_id?: string | null
56
- }
57
- Update: {
58
- action_type?: string | null
59
- details?: Json
60
- id?: number
61
- target_id?: string | null
62
- }
63
- Relationships: [
64
- {
65
- foreignKeyName: "admin_operations_id_fkey"
66
- columns: ["id"]
67
- isOneToOne: true
68
- referencedRelation: "profiles"
69
- referencedColumns: ["id"]
70
- },
71
- ]
72
- }
73
- beatmapCollections: {
74
- Row: {
75
- created_at: string
76
- description: string
77
- id: number
78
- is_list: boolean
79
- owner: number
80
- title: string
81
- }
82
- Insert: {
83
- created_at?: string
84
- description: string
85
- id?: number
86
- is_list?: boolean
87
- owner: number
88
- title: string
89
- }
90
- Update: {
91
- created_at?: string
92
- description?: string
93
- id?: number
94
- is_list?: boolean
95
- owner?: number
96
- title?: string
97
- }
98
- Relationships: [
99
- {
100
- foreignKeyName: "beatmapCollections_owner_fkey"
101
- columns: ["owner"]
102
- isOneToOne: false
103
- referencedRelation: "profiles"
104
- referencedColumns: ["id"]
105
- },
106
- ]
107
- }
108
- beatmapPageComments: {
109
- Row: {
110
- beatmapPage: number
111
- content: string | null
112
- created_at: string
113
- id: number
114
- owner: number
115
- }
116
- Insert: {
117
- beatmapPage: number
118
- content?: string | null
119
- created_at?: string
120
- id?: number
121
- owner: number
122
- }
123
- Update: {
124
- beatmapPage?: number
125
- content?: string | null
126
- created_at?: string
127
- id?: number
128
- owner?: number
129
- }
130
- Relationships: [
131
- {
132
- foreignKeyName: "beatmapPageComments_beatmapPage_fkey"
133
- columns: ["beatmapPage"]
134
- isOneToOne: false
135
- referencedRelation: "beatmapPages"
136
- referencedColumns: ["id"]
137
- },
138
- {
139
- foreignKeyName: "beatmapPageComments_owner_fkey"
140
- columns: ["owner"]
141
- isOneToOne: false
142
- referencedRelation: "profiles"
143
- referencedColumns: ["id"]
144
- },
145
- ]
146
- }
147
- beatmapPages: {
148
- Row: {
149
- created_at: string
150
- description: string
151
- genre: string | null
152
- id: number
153
- latestBeatmapHash: string | null
154
- nominations: Json | null
155
- owner: number | null
156
- qualified: boolean
157
- qualifiedAt: string | null
158
- ranked_at: number
159
- status: string | null
160
- tags: string
161
- title: string | null
162
- updated_at: number | null
163
- video_url: string | null
164
- }
165
- Insert: {
166
- created_at?: string
167
- description?: string
168
- genre?: string | null
169
- id?: number
170
- latestBeatmapHash?: string | null
171
- nominations?: Json | null
172
- owner?: number | null
173
- qualified?: boolean
174
- qualifiedAt?: string | null
175
- ranked_at?: number
176
- status?: string | null
177
- tags?: string
178
- title?: string | null
179
- updated_at?: number | null
180
- video_url?: string | null
181
- }
182
- Update: {
183
- created_at?: string
184
- description?: string
185
- genre?: string | null
186
- id?: number
187
- latestBeatmapHash?: string | null
188
- nominations?: Json | null
189
- owner?: number | null
190
- qualified?: boolean
191
- qualifiedAt?: string | null
192
- ranked_at?: number
193
- status?: string | null
194
- tags?: string
195
- title?: string | null
196
- updated_at?: number | null
197
- video_url?: string | null
198
- }
199
- Relationships: [
200
- {
201
- foreignKeyName: "beatmapPages_latestBeatmapHash_fkey"
202
- columns: ["latestBeatmapHash"]
203
- isOneToOne: false
204
- referencedRelation: "beatmaps"
205
- referencedColumns: ["beatmapHash"]
206
- },
207
- {
208
- foreignKeyName: "beatmapPages_owner_fkey"
209
- columns: ["owner"]
210
- isOneToOne: false
211
- referencedRelation: "profiles"
212
- referencedColumns: ["id"]
213
- },
214
- ]
215
- }
216
- beatmaps: {
217
- Row: {
218
- beatmapFile: string | null
219
- beatmapHash: string
220
- created_at: string
221
- difficulty: number | null
222
- image: string | null
223
- imageLarge: string | null
224
- length: number | null
225
- noteCount: number | null
226
- playcount: number | null
227
- ranked: boolean | null
228
- starRating: number | null
229
- title: string | null
230
- }
231
- Insert: {
232
- beatmapFile?: string | null
233
- beatmapHash: string
234
- created_at?: string
235
- difficulty?: number | null
236
- image?: string | null
237
- imageLarge?: string | null
238
- length?: number | null
239
- noteCount?: number | null
240
- playcount?: number | null
241
- ranked?: boolean | null
242
- starRating?: number | null
243
- title?: string | null
244
- }
245
- Update: {
246
- beatmapFile?: string | null
247
- beatmapHash?: string
248
- created_at?: string
249
- difficulty?: number | null
250
- image?: string | null
251
- imageLarge?: string | null
252
- length?: number | null
253
- noteCount?: number | null
254
- playcount?: number | null
255
- ranked?: boolean | null
256
- starRating?: number | null
257
- title?: string | null
258
- }
259
- Relationships: []
260
- }
261
- cache: {
262
- Row: {
263
- key: string
264
- value: Json
265
- }
266
- Insert: {
267
- key: string
268
- value: Json
269
- }
270
- Update: {
271
- key?: string
272
- value?: Json
273
- }
274
- Relationships: []
275
- }
276
- chartedValues: {
277
- Row: {
278
- created_at: string
279
- id: number
280
- type: string | null
281
- value: number | null
282
- }
283
- Insert: {
284
- created_at?: string
285
- id?: number
286
- type?: string | null
287
- value?: number | null
288
- }
289
- Update: {
290
- created_at?: string
291
- id?: number
292
- type?: string | null
293
- value?: number | null
294
- }
295
- Relationships: []
296
- }
297
- clans: {
298
- Row: {
299
- acronym: string | null
300
- allowed_users: Json
301
- avatar_url: string | null
302
- created_at: string
303
- description: string | null
304
- id: number
305
- name: string
306
- owner: number | null
307
- }
308
- Insert: {
309
- acronym?: string | null
310
- allowed_users?: Json
311
- avatar_url?: string | null
312
- created_at?: string
313
- description?: string | null
314
- id?: number
315
- name?: string
316
- owner?: number | null
317
- }
318
- Update: {
319
- acronym?: string | null
320
- allowed_users?: Json
321
- avatar_url?: string | null
322
- created_at?: string
323
- description?: string | null
324
- id?: number
325
- name?: string
326
- owner?: number | null
327
- }
328
- Relationships: [
329
- {
330
- foreignKeyName: "clans_owner_fkey"
331
- columns: ["owner"]
332
- isOneToOne: false
333
- referencedRelation: "profiles"
334
- referencedColumns: ["id"]
335
- },
336
- ]
337
- }
338
- collectionRelations: {
339
- Row: {
340
- beatmapPage: number | null
341
- collection: number
342
- created_at: string
343
- id: number
344
- sort: number
345
- }
346
- Insert: {
347
- beatmapPage?: number | null
348
- collection: number
349
- created_at?: string
350
- id?: number
351
- sort?: number
352
- }
353
- Update: {
354
- beatmapPage?: number | null
355
- collection?: number
356
- created_at?: string
357
- id?: number
358
- sort?: number
359
- }
360
- Relationships: [
361
- {
362
- foreignKeyName: "collectionRelations_beatmapPage_fkey"
363
- columns: ["beatmapPage"]
364
- isOneToOne: false
365
- referencedRelation: "beatmapPages"
366
- referencedColumns: ["id"]
367
- },
368
- {
369
- foreignKeyName: "collectionRelations_collection_fkey"
370
- columns: ["collection"]
371
- isOneToOne: false
372
- referencedRelation: "beatmapCollections"
373
- referencedColumns: ["id"]
374
- },
375
- ]
376
- }
377
- discordWebhooks: {
378
- Row: {
379
- id: number
380
- type: Database["public"]["Enums"]["discordWebhookType"] | null
381
- webhook_link: string
382
- }
383
- Insert: {
384
- id?: number
385
- type?: Database["public"]["Enums"]["discordWebhookType"] | null
386
- webhook_link?: string
387
- }
388
- Update: {
389
- id?: number
390
- type?: Database["public"]["Enums"]["discordWebhookType"] | null
391
- webhook_link?: string
392
- }
393
- Relationships: []
394
- }
395
- inventories: {
396
- Row: {
397
- contents: Json
398
- id: number
399
- }
400
- Insert: {
401
- contents?: Json
402
- id?: number
403
- }
404
- Update: {
405
- contents?: Json
406
- id?: number
407
- }
408
- Relationships: [
409
- {
410
- foreignKeyName: "inventory_id_fkey"
411
- columns: ["id"]
412
- isOneToOne: true
413
- referencedRelation: "profiles"
414
- referencedColumns: ["id"]
415
- },
416
- ]
417
- }
418
- invites: {
419
- Row: {
420
- code: string
421
- created_at: string
422
- id: number
423
- resourceId: string
424
- type: string
425
- used: boolean
426
- }
427
- Insert: {
428
- code: string
429
- created_at?: string
430
- id?: number
431
- resourceId: string
432
- type: string
433
- used?: boolean
434
- }
435
- Update: {
436
- code?: string
437
- created_at?: string
438
- id?: number
439
- resourceId?: string
440
- type?: string
441
- used?: boolean
442
- }
443
- Relationships: []
444
- }
445
- leaderboard_map_user: {
446
- Row: {
447
- beatmapHash: string
448
- best_score_id: number | null
449
- best_sp: number | null
450
- userId: number
451
- }
452
- Insert: {
453
- beatmapHash: string
454
- best_score_id?: number | null
455
- best_sp?: number | null
456
- userId: number
457
- }
458
- Update: {
459
- beatmapHash?: string
460
- best_score_id?: number | null
461
- best_sp?: number | null
462
- userId?: number
463
- }
464
- Relationships: []
465
- }
466
- levers: {
467
- Row: {
468
- disable_scores: boolean
469
- id: number
470
- }
471
- Insert: {
472
- disable_scores?: boolean
473
- id?: number
474
- }
475
- Update: {
476
- disable_scores?: boolean
477
- id?: number
478
- }
479
- Relationships: []
480
- }
481
- passkeys: {
482
- Row: {
483
- email: string
484
- id: number
485
- passkey: string
486
- }
487
- Insert: {
488
- email: string
489
- id: number
490
- passkey: string
491
- }
492
- Update: {
493
- email?: string
494
- id?: number
495
- passkey?: string
496
- }
497
- Relationships: [
498
- {
499
- foreignKeyName: "passkeys_id_fkey"
500
- columns: ["id"]
501
- isOneToOne: true
502
- referencedRelation: "profiles"
503
- referencedColumns: ["id"]
504
- },
505
- ]
506
- }
507
- profileActivities: {
508
- Row: {
509
- last_activity: number | null
510
- uid: string
511
- }
512
- Insert: {
513
- last_activity?: number | null
514
- uid: string
515
- }
516
- Update: {
517
- last_activity?: number | null
518
- uid?: string
519
- }
520
- Relationships: []
521
- }
522
- profileReports: {
523
- Row: {
524
- created_at: string
525
- description: string
526
- id: number
527
- reported: number
528
- reporter: number
529
- }
530
- Insert: {
531
- created_at?: string
532
- description: string
533
- id?: number
534
- reported: number
535
- reporter: number
536
- }
537
- Update: {
538
- created_at?: string
539
- description?: string
540
- id?: number
541
- reported?: number
542
- reporter?: number
543
- }
544
- Relationships: [
545
- {
546
- foreignKeyName: "profileReports_reported_fkey"
547
- columns: ["reported"]
548
- isOneToOne: false
549
- referencedRelation: "profiles"
550
- referencedColumns: ["id"]
551
- },
552
- {
553
- foreignKeyName: "profileReports_reporter_fkey"
554
- columns: ["reporter"]
555
- isOneToOne: false
556
- referencedRelation: "profiles"
557
- referencedColumns: ["id"]
558
- },
559
- ]
560
- }
561
- profileFriends: {
562
- Row: {
563
- created_at: string
564
- friend_id: number
565
- id: number
566
- profile_id: number
567
- }
568
- Insert: {
569
- created_at?: string
570
- friend_id: number
571
- id?: number
572
- profile_id: number
573
- }
574
- Update: {
575
- created_at?: string
576
- friend_id?: number
577
- id?: number
578
- profile_id?: number
579
- }
580
- Relationships: [
581
- {
582
- foreignKeyName: "profileFriends_friend_id_fkey"
583
- columns: ["friend_id"]
584
- isOneToOne: false
585
- referencedRelation: "profiles"
586
- referencedColumns: ["id"]
587
- },
588
- {
589
- foreignKeyName: "profileFriends_profile_id_fkey"
590
- columns: ["profile_id"]
591
- isOneToOne: false
592
- referencedRelation: "profiles"
593
- referencedColumns: ["id"]
594
- },
595
- ]
596
- }
597
- profileFlags: {
598
- Row: {
599
- changed_at: string
600
- flag: string | null
601
- id: number
602
- profile_id: number
603
- }
604
- Insert: {
605
- changed_at?: string
606
- flag?: string | null
607
- id?: number
608
- profile_id: number
609
- }
610
- Update: {
611
- changed_at?: string
612
- flag?: string | null
613
- id?: number
614
- profile_id?: number
615
- }
616
- Relationships: [
617
- {
618
- foreignKeyName: "profileFlags_profile_id_fkey"
619
- columns: ["profile_id"]
620
- isOneToOne: false
621
- referencedRelation: "profiles"
622
- referencedColumns: ["id"]
623
- },
624
- ]
625
- }
626
- profileUsernames: {
627
- Row: {
628
- changed_at: string
629
- id: number
630
- profile_id: number
631
- username: string
632
- }
633
- Insert: {
634
- changed_at?: string
635
- id?: number
636
- profile_id: number
637
- username: string
638
- }
639
- Update: {
640
- changed_at?: string
641
- id?: number
642
- profile_id?: number
643
- username?: string
644
- }
645
- Relationships: [
646
- {
647
- foreignKeyName: "profileUsernames_profile_id_fkey"
648
- columns: ["profile_id"]
649
- isOneToOne: false
650
- referencedRelation: "profiles"
651
- referencedColumns: ["id"]
652
- },
653
- ]
654
- }
655
- profiles: {
656
- Row: {
657
- about_me: string | null
658
- avatar_url: string | null
659
- badges: Json | null
660
- ban: Database["public"]["Enums"]["banTypes"] | null
661
- bannedAt: number | null
662
- clan: number | null
663
- computedUsername: string | null
664
- created_at: number | null
665
- flag: string | null
666
- id: number
667
- mu_rank: number
668
- play_count: number | null
669
- profile_image: string | null
670
- sigma_rank: number | null
671
- skill_points: number | null
672
- spin_skill_points: number
673
- squares_hit: number | null
674
- total_score: number | null
675
- uid: string | null
676
- username: string | null
677
- verificationDeadline: number
678
- verified: boolean | null
679
- }
680
- Insert: {
681
- about_me?: string | null
682
- avatar_url?: string | null
683
- badges?: Json | null
684
- ban?: Database["public"]["Enums"]["banTypes"] | null
685
- bannedAt?: number | null
686
- clan?: number | null
687
- computedUsername?: string | null
688
- created_at?: number | null
689
- flag?: string | null
690
- id?: number
691
- mu_rank?: number
692
- play_count?: number | null
693
- profile_image?: string | null
694
- sigma_rank?: number | null
695
- skill_points?: number | null
696
- spin_skill_points?: number
697
- squares_hit?: number | null
698
- total_score?: number | null
699
- uid?: string | null
700
- username?: string | null
701
- verificationDeadline?: number
702
- verified?: boolean | null
703
- }
704
- Update: {
705
- about_me?: string | null
706
- avatar_url?: string | null
707
- badges?: Json | null
708
- ban?: Database["public"]["Enums"]["banTypes"] | null
709
- bannedAt?: number | null
710
- clan?: number | null
711
- computedUsername?: string | null
712
- created_at?: number | null
713
- flag?: string | null
714
- id?: number
715
- mu_rank?: number
716
- play_count?: number | null
717
- profile_image?: string | null
718
- sigma_rank?: number | null
719
- skill_points?: number | null
720
- spin_skill_points?: number
721
- squares_hit?: number | null
722
- total_score?: number | null
723
- uid?: string | null
724
- username?: string | null
725
- verificationDeadline?: number
726
- verified?: boolean | null
727
- }
728
- Relationships: [
729
- {
730
- foreignKeyName: "profiles_clan_fkey"
731
- columns: ["clan"]
732
- isOneToOne: false
733
- referencedRelation: "clans"
734
- referencedColumns: ["id"]
735
- },
736
- ]
737
- }
738
- scores: {
739
- Row: {
740
- additional_data: Json
741
- awarded_sp: number | null
742
- beatmapHash: string | null
743
- created_at: string
744
- id: number
745
- misses: number | null
746
- mods: Json
747
- passed: boolean | null
748
- replay_url: string | null
749
- replayHwid: string | null
750
- songId: string | null
751
- speed: number | null
752
- spin: boolean
753
- token: number | null
754
- userId: number | null
755
- }
756
- Insert: {
757
- additional_data?: Json
758
- awarded_sp?: number | null
759
- beatmapHash?: string | null
760
- created_at?: string
761
- id?: number
762
- misses?: number | null
763
- mods?: Json
764
- passed?: boolean | null
765
- replay_url?: string | null
766
- replayHwid?: string | null
767
- songId?: string | null
768
- speed?: number | null
769
- spin?: boolean
770
- token?: number | null
771
- userId?: number | null
772
- }
773
- Update: {
774
- additional_data?: Json
775
- awarded_sp?: number | null
776
- beatmapHash?: string | null
777
- created_at?: string
778
- id?: number
779
- misses?: number | null
780
- mods?: Json
781
- passed?: boolean | null
782
- replay_url?: string | null
783
- replayHwid?: string | null
784
- songId?: string | null
785
- speed?: number | null
786
- spin?: boolean
787
- token?: number | null
788
- userId?: number | null
789
- }
790
- Relationships: [
791
- {
792
- foreignKeyName: "scores_beatmapHash_fkey"
793
- columns: ["beatmapHash"]
794
- isOneToOne: false
795
- referencedRelation: "beatmaps"
796
- referencedColumns: ["beatmapHash"]
797
- },
798
- {
799
- foreignKeyName: "scores_token_fkey"
800
- columns: ["token"]
801
- isOneToOne: false
802
- referencedRelation: "tokens"
803
- referencedColumns: ["id"]
804
- },
805
- {
806
- foreignKeyName: "scores_userId_fkey"
807
- columns: ["userId"]
808
- isOneToOne: false
809
- referencedRelation: "profiles"
810
- referencedColumns: ["id"]
811
- },
812
- ]
813
- }
814
- tokens: {
815
- Row: {
816
- created_at: string
817
- hash: string | null
818
- id: number
819
- processed: Json | null
820
- raw: string | null
821
- }
822
- Insert: {
823
- created_at?: string
824
- hash?: string | null
825
- id?: number
826
- processed?: Json | null
827
- raw?: string | null
828
- }
829
- Update: {
830
- created_at?: string
831
- hash?: string | null
832
- id?: number
833
- processed?: Json | null
834
- raw?: string | null
835
- }
836
- Relationships: []
837
- }
838
- user_hwids: {
839
- Row: {
840
- created_at: string | null
841
- hwid: string
842
- id: number
843
- }
844
- Insert: {
845
- created_at?: string | null
846
- hwid: string
847
- id?: number
848
- }
849
- Update: {
850
- created_at?: string | null
851
- hwid?: string
852
- id?: number
853
- }
854
- Relationships: [
855
- {
856
- foreignKeyName: "user_hwids_id_fkey"
857
- columns: ["id"]
858
- isOneToOne: false
859
- referencedRelation: "profiles"
860
- referencedColumns: ["id"]
861
- },
862
- ]
863
- }
864
- vetos: {
865
- Row: {
866
- beatmapPage: number
867
- created_at: string
868
- id: number
869
- user: number
870
- veto_reason: string
871
- }
872
- Insert: {
873
- beatmapPage: number
874
- created_at?: string
875
- id?: number
876
- user: number
877
- veto_reason: string
878
- }
879
- Update: {
880
- beatmapPage?: number
881
- created_at?: string
882
- id?: number
883
- user?: number
884
- veto_reason?: string
885
- }
886
- Relationships: [
887
- {
888
- foreignKeyName: "vetos_beatmapPage_fkey"
889
- columns: ["beatmapPage"]
890
- isOneToOne: false
891
- referencedRelation: "beatmapPages"
892
- referencedColumns: ["id"]
893
- },
894
- {
895
- foreignKeyName: "vetos_user_fkey"
896
- columns: ["user"]
897
- isOneToOne: false
898
- referencedRelation: "profiles"
899
- referencedColumns: ["id"]
900
- },
901
- ]
902
- }
903
- }
904
- Views: {
905
- [_ in never]: never
906
- }
907
- Functions: {
908
- admin_delete_user: { Args: { user_id: number }; Returns: boolean }
909
- admin_exclude_user: { Args: { user_id: number }; Returns: boolean }
910
- admin_invalidate_ranked_scores: {
911
- Args: { user_id: number }
912
- Returns: number
913
- }
914
- admin_log_action:
915
- | {
916
- Args: {
917
- action_type: string
918
- admin_id: number
919
- details?: Json
920
- target_id: number
921
- }
922
- Returns: undefined
923
- }
924
- | {
925
- Args: {
926
- action_type: string
927
- admin_id: number
928
- details?: Json
929
- target_id: string
930
- }
931
- Returns: undefined
932
- }
933
- admin_profanity_clear: { Args: { user_id: number }; Returns: boolean }
934
- admin_remove_all_scores: { Args: { user_id: number }; Returns: number }
935
- admin_restrict_user: { Args: { user_id: number }; Returns: boolean }
936
- admin_search_users: {
937
- Args: { search_text: string }
938
- Returns: {
939
- about_me: string | null
940
- avatar_url: string | null
941
- badges: Json | null
942
- ban: Database["public"]["Enums"]["banTypes"] | null
943
- bannedAt: number | null
944
- clan: number | null
945
- computedUsername: string | null
946
- created_at: number | null
947
- flag: string | null
948
- id: number
949
- mu_rank: number
950
- play_count: number | null
951
- profile_image: string | null
952
- sigma_rank: number | null
953
- skill_points: number | null
954
- spin_skill_points: number
955
- squares_hit: number | null
956
- total_score: number | null
957
- uid: string | null
958
- username: string | null
959
- verificationDeadline: number
960
- verified: boolean | null
961
- }[]
962
- SetofOptions: {
963
- from: "*"
964
- to: "profiles"
965
- isOneToOne: false
966
- isSetofReturn: true
967
- }
968
- }
969
- admin_silence_user: { Args: { user_id: number }; Returns: boolean }
970
- admin_unban_user: { Args: { user_id: number }; Returns: boolean }
971
- enhanced_search: {
972
- Args: { result_limit?: number; search_text: string }
973
- Returns: {
974
- beatmap_description: string
975
- beatmap_image: string
976
- beatmap_length: number
977
- beatmap_map_id: string
978
- beatmap_owner: number
979
- beatmap_owner_avatar: string
980
- beatmap_owner_username: string
981
- beatmap_page_id: number
982
- beatmap_star_rating: number
983
- beatmap_status: string
984
- beatmap_tags: string
985
- beatmap_title: string
986
- relevance: number
987
- result_type: string
988
- user_about_me: string
989
- user_avatar_url: string
990
- user_flag: string
991
- user_id: number
992
- user_username: string
993
- }[]
994
- }
995
- get_badge_leaderboard: {
996
- Args: { p_limit?: number }
997
- Returns: {
998
- avatar_url: string
999
- display_name: string
1000
- id: number
1001
- special_badge_count: number
1002
- }[]
1003
- }
1004
- get_clan_leaderboard: {
1005
- Args: { items_per_page?: number; page_number?: number }
1006
- Returns: {
1007
- acronym: string
1008
- avatar_url: string
1009
- description: string
1010
- id: number
1011
- member_count: number
1012
- name: string
1013
- total_pages: number
1014
- total_skill_points: number
1015
- }[]
1016
- }
1017
- get_collections_v1: {
1018
- Args: { items_per_page?: number; page_number?: number }
1019
- Returns: {
1020
- beatmap_count: number
1021
- created_at: string
1022
- description: string
1023
- id: number
1024
- owner: number
1025
- star1: number
1026
- star10: number
1027
- star11: number
1028
- star12: number
1029
- star13: number
1030
- star14: number
1031
- star15: number
1032
- star16: number
1033
- star17: number
1034
- star18: number
1035
- star2: number
1036
- star3: number
1037
- star4: number
1038
- star5: number
1039
- star6: number
1040
- star7: number
1041
- star8: number
1042
- star9: number
1043
- title: string
1044
- total_pages: number
1045
- }[]
1046
- }
1047
- get_collections_v2:
1048
- | {
1049
- Args: { items_per_page?: number; page_number?: number }
1050
- Returns: {
1051
- beatmap_count: number
1052
- created_at: string
1053
- description: string
1054
- id: number
1055
- owner: number
1056
- owner_avatar_url: string
1057
- owner_username: string
1058
- star1: number
1059
- star10: number
1060
- star11: number
1061
- star12: number
1062
- star13: number
1063
- star14: number
1064
- star15: number
1065
- star16: number
1066
- star17: number
1067
- star18: number
1068
- star2: number
1069
- star3: number
1070
- star4: number
1071
- star5: number
1072
- star6: number
1073
- star7: number
1074
- star8: number
1075
- star9: number
1076
- title: string
1077
- total_pages: number
1078
- }[]
1079
- }
1080
- | {
1081
- Args: {
1082
- items_per_page?: number
1083
- owner_filter?: number
1084
- page_number?: number
1085
- }
1086
- Returns: {
1087
- beatmap_count: number
1088
- created_at: string
1089
- description: string
1090
- id: number
1091
- owner: number
1092
- owner_avatar_url: string
1093
- owner_username: string
1094
- star1: number
1095
- star10: number
1096
- star11: number
1097
- star12: number
1098
- star13: number
1099
- star14: number
1100
- star15: number
1101
- star16: number
1102
- star17: number
1103
- star18: number
1104
- star2: number
1105
- star3: number
1106
- star4: number
1107
- star5: number
1108
- star6: number
1109
- star7: number
1110
- star8: number
1111
- star9: number
1112
- title: string
1113
- total_pages: number
1114
- }[]
1115
- }
1116
- get_collections_v3: {
1117
- Args: {
1118
- items_per_page?: number
1119
- owner_filter?: number
1120
- page_number?: number
1121
- }
1122
- Returns: {
1123
- beatmap_count: number
1124
- created_at: string
1125
- description: string
1126
- id: number
1127
- owner: number
1128
- owner_avatar_url: string
1129
- owner_username: string
1130
- star1: number
1131
- star10: number
1132
- star11: number
1133
- star12: number
1134
- star13: number
1135
- star14: number
1136
- star15: number
1137
- star16: number
1138
- star17: number
1139
- star18: number
1140
- star2: number
1141
- star3: number
1142
- star4: number
1143
- star5: number
1144
- star6: number
1145
- star7: number
1146
- star8: number
1147
- star9: number
1148
- title: string
1149
- total_pages: number
1150
- }[]
1151
- }
1152
- get_collections_v4: {
1153
- Args: {
1154
- author_filter?: string
1155
- items_per_page?: number
1156
- min_beatmaps?: number
1157
- owner_filter?: number
1158
- page_number?: number
1159
- search_query?: string
1160
- }
1161
- Returns: {
1162
- beatmap_count: number
1163
- created_at: string
1164
- description: string
1165
- id: number
1166
- owner: number
1167
- owner_avatar_url: string
1168
- owner_username: string
1169
- star1: number
1170
- star10: number
1171
- star11: number
1172
- star12: number
1173
- star13: number
1174
- star14: number
1175
- star15: number
1176
- star16: number
1177
- star17: number
1178
- star18: number
1179
- star2: number
1180
- star3: number
1181
- star4: number
1182
- star5: number
1183
- star6: number
1184
- star7: number
1185
- star8: number
1186
- star9: number
1187
- title: string
1188
- total_pages: number
1189
- }[]
1190
- }
1191
- get_top_scores_for_beatmap: {
1192
- Args: { beatmap_hash: string }
1193
- Returns: {
1194
- accuracy: number
1195
- avatar_url: string
1196
- awarded_sp: number
1197
- created_at: string
1198
- id: number
1199
- misses: number
1200
- mods: Json
1201
- passed: boolean
1202
- replayhwid: string
1203
- songid: string
1204
- speed: number
1205
- spin: boolean
1206
- userid: number
1207
- username: string
1208
- }[]
1209
- }
1210
- get_top_scores_for_beatmap2: {
1211
- Args: { beatmap_hash: string }
1212
- Returns: {
1213
- accuracy: number
1214
- avatar_url: string
1215
- awarded_sp: number
1216
- created_at: string
1217
- id: number
1218
- misses: number
1219
- mods: Json
1220
- passed: boolean
1221
- replayhwid: string
1222
- songid: string
1223
- speed: number
1224
- spin: boolean
1225
- userid: number
1226
- username: string
1227
- }[]
1228
- }
1229
- get_top_scores_for_beatmap3: {
1230
- Args: { beatmap_hash: string }
1231
- Returns: {
1232
- accuracy: number
1233
- avatar_url: string
1234
- awarded_sp: number
1235
- created_at: string
1236
- id: number
1237
- misses: number
1238
- mods: Json
1239
- passed: boolean
1240
- replayHwid: string
1241
- songId: string
1242
- speed: number
1243
- spin: boolean
1244
- userId: number
1245
- username: string
1246
- }[]
1247
- }
1248
- get_user_activity: {
1249
- Args: { score_limit?: number; user_id: number }
1250
- Returns: Json
1251
- }
1252
- get_user_by_email: { Args: { email_address: string }; Returns: Json }
1253
- get_user_reigning_scores:
1254
- | {
1255
- Args: { userid: number }
1256
- Returns: {
1257
- awarded_sp: number
1258
- beatmaphash: string
1259
- created_at: string
1260
- id: number
1261
- misses: number
1262
- mods: Json
1263
- passed: boolean
1264
- replayhwid: string
1265
- songid: string
1266
- speed: number
1267
- spin: boolean
1268
- }[]
1269
- }
1270
- | {
1271
- Args: { page_size: number; userid: number }
1272
- Returns: {
1273
- awarded_sp: number
1274
- beatmaphash: string
1275
- beatmaptitle: string
1276
- created_at: string
1277
- difficulty: number
1278
- id: number
1279
- misses: number
1280
- mods: Json
1281
- notes: number
1282
- passed: boolean
1283
- replayhwid: string
1284
- songid: string
1285
- speed: number
1286
- spin: boolean
1287
- }[]
1288
- }
1289
- get_user_scores_lastday: {
1290
- Args: { limit_param: number; userid: number }
1291
- Returns: Json
1292
- }
1293
- get_user_scores_payload: {
1294
- Args: { limit_param: number; userid: number }
1295
- Returns: Json
1296
- }
1297
- get_user_scores_reign: { Args: { userid: number }; Returns: Json }
1298
- get_user_scores_summary: {
1299
- Args: { limit_param?: number; userid: number }
1300
- Returns: Json
1301
- }
1302
- get_user_scores_top_and_stats: {
1303
- Args: { limit_param: number; userid: number }
1304
- Returns: Json
1305
- }
1306
- grant_special_badges: {
1307
- Args: {
1308
- p_beatmap_id: number
1309
- p_passed?: boolean
1310
- p_spin?: boolean
1311
- p_user_id: number
1312
- }
1313
- Returns: Json
1314
- }
1315
- }
1316
- Enums: {
1317
- banTypes: "cool" | "silenced" | "restricted" | "excluded"
1318
- discordWebhookType: "maps" | "scores"
1319
- }
1320
- CompositeTypes: {
1321
- [_ in never]: never
1322
- }
1323
- }
1324
- }
1325
-
1326
- type DatabaseWithoutInternals = Omit<Database, "__InternalSupabase">
1327
-
1328
- type DefaultSchema = DatabaseWithoutInternals[Extract<keyof Database, "public">]
1329
-
1330
- export type Tables<
1331
- DefaultSchemaTableNameOrOptions extends
1332
- | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"])
1333
- | { schema: keyof DatabaseWithoutInternals },
1334
- TableName extends DefaultSchemaTableNameOrOptions extends {
1335
- schema: keyof DatabaseWithoutInternals
1336
- }
1337
- ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
1338
- DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])
1339
- : never = never,
1340
- > = DefaultSchemaTableNameOrOptions extends {
1341
- schema: keyof DatabaseWithoutInternals
1342
- }
1343
- ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
1344
- DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends {
1345
- Row: infer R
1346
- }
1347
- ? R
1348
- : never
1349
- : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] &
1350
- DefaultSchema["Views"])
1351
- ? (DefaultSchema["Tables"] &
1352
- DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends {
1353
- Row: infer R
1354
- }
1355
- ? R
1356
- : never
1357
- : never
1358
-
1359
- export type TablesInsert<
1360
- DefaultSchemaTableNameOrOptions extends
1361
- | keyof DefaultSchema["Tables"]
1362
- | { schema: keyof DatabaseWithoutInternals },
1363
- TableName extends DefaultSchemaTableNameOrOptions extends {
1364
- schema: keyof DatabaseWithoutInternals
1365
- }
1366
- ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
1367
- : never = never,
1368
- > = DefaultSchemaTableNameOrOptions extends {
1369
- schema: keyof DatabaseWithoutInternals
1370
- }
1371
- ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1372
- Insert: infer I
1373
- }
1374
- ? I
1375
- : never
1376
- : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
1377
- ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
1378
- Insert: infer I
1379
- }
1380
- ? I
1381
- : never
1382
- : never
1383
-
1384
- export type TablesUpdate<
1385
- DefaultSchemaTableNameOrOptions extends
1386
- | keyof DefaultSchema["Tables"]
1387
- | { schema: keyof DatabaseWithoutInternals },
1388
- TableName extends DefaultSchemaTableNameOrOptions extends {
1389
- schema: keyof DatabaseWithoutInternals
1390
- }
1391
- ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
1392
- : never = never,
1393
- > = DefaultSchemaTableNameOrOptions extends {
1394
- schema: keyof DatabaseWithoutInternals
1395
- }
1396
- ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1397
- Update: infer U
1398
- }
1399
- ? U
1400
- : never
1401
- : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
1402
- ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
1403
- Update: infer U
1404
- }
1405
- ? U
1406
- : never
1407
- : never
1408
-
1409
- export type Enums<
1410
- DefaultSchemaEnumNameOrOptions extends
1411
- | keyof DefaultSchema["Enums"]
1412
- | { schema: keyof DatabaseWithoutInternals },
1413
- EnumName extends DefaultSchemaEnumNameOrOptions extends {
1414
- schema: keyof DatabaseWithoutInternals
1415
- }
1416
- ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"]
1417
- : never = never,
1418
- > = DefaultSchemaEnumNameOrOptions extends {
1419
- schema: keyof DatabaseWithoutInternals
1420
- }
1421
- ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName]
1422
- : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"]
1423
- ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions]
1424
- : never
1425
-
1426
- export type CompositeTypes<
1427
- PublicCompositeTypeNameOrOptions extends
1428
- | keyof DefaultSchema["CompositeTypes"]
1429
- | { schema: keyof DatabaseWithoutInternals },
1430
- CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
1431
- schema: keyof DatabaseWithoutInternals
1432
- }
1433
- ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
1434
- : never = never,
1435
- > = PublicCompositeTypeNameOrOptions extends {
1436
- schema: keyof DatabaseWithoutInternals
1437
- }
1438
- ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
1439
- : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"]
1440
- ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
1441
- : never
1442
-
1443
- export const Constants = {
1444
- public: {
1445
- Enums: {
1446
- banTypes: ["cool", "silenced", "restricted", "excluded"],
1447
- discordWebhookType: ["maps", "scores"],
1448
- },
1449
- },
1450
- } as const
1
+ export type Json =
2
+ | string
3
+ | number
4
+ | boolean
5
+ | null
6
+ | { [key: string]: Json | undefined }
7
+ | Json[]
8
+
9
+ export type Database = {
10
+ // Allows to automatically instantiate createClient with right options
11
+ // instead of createClient<Database, { PostgrestVersion: 'XX' }>(URL, KEY)
12
+ __InternalSupabase: {
13
+ PostgrestVersion: "13.0.4"
14
+ }
15
+ public: {
16
+ Tables: {
17
+ ac_builds: {
18
+ Row: {
19
+ active: boolean
20
+ created_at: string
21
+ game_branch: string
22
+ hash: string
23
+ id: number
24
+ platform: string
25
+ url: string
26
+ }
27
+ Insert: {
28
+ active: boolean
29
+ created_at?: string
30
+ game_branch?: string
31
+ hash: string
32
+ id?: number
33
+ platform?: string
34
+ url: string
35
+ }
36
+ Update: {
37
+ active?: boolean
38
+ created_at?: string
39
+ game_branch?: string
40
+ hash?: string
41
+ id?: number
42
+ platform?: string
43
+ url?: string
44
+ }
45
+ Relationships: []
46
+ }
47
+ admin_actions: {
48
+ Row: {
49
+ action_type: string
50
+ admin_id: number
51
+ created_at: string | null
52
+ details: Json | null
53
+ id: number
54
+ target_id: number | null
55
+ }
56
+ Insert: {
57
+ action_type: string
58
+ admin_id: number
59
+ created_at?: string | null
60
+ details?: Json | null
61
+ id?: number
62
+ target_id?: number | null
63
+ }
64
+ Update: {
65
+ action_type?: string
66
+ admin_id?: number
67
+ created_at?: string | null
68
+ details?: Json | null
69
+ id?: number
70
+ target_id?: number | null
71
+ }
72
+ Relationships: []
73
+ }
74
+ admin_operations: {
75
+ Row: {
76
+ action_type: string | null
77
+ details: Json
78
+ id: number
79
+ target_id: string | null
80
+ }
81
+ Insert: {
82
+ action_type?: string | null
83
+ details: Json
84
+ id?: number
85
+ target_id?: string | null
86
+ }
87
+ Update: {
88
+ action_type?: string | null
89
+ details?: Json
90
+ id?: number
91
+ target_id?: string | null
92
+ }
93
+ Relationships: [
94
+ {
95
+ foreignKeyName: "admin_operations_id_fkey"
96
+ columns: ["id"]
97
+ isOneToOne: true
98
+ referencedRelation: "profiles"
99
+ referencedColumns: ["id"]
100
+ },
101
+ ]
102
+ }
103
+ beatmapCollections: {
104
+ Row: {
105
+ created_at: string
106
+ description: string
107
+ id: number
108
+ is_list: boolean
109
+ owner: number
110
+ title: string
111
+ }
112
+ Insert: {
113
+ created_at?: string
114
+ description: string
115
+ id?: number
116
+ is_list?: boolean
117
+ owner: number
118
+ title: string
119
+ }
120
+ Update: {
121
+ created_at?: string
122
+ description?: string
123
+ id?: number
124
+ is_list?: boolean
125
+ owner?: number
126
+ title?: string
127
+ }
128
+ Relationships: [
129
+ {
130
+ foreignKeyName: "beatmapCollections_owner_fkey"
131
+ columns: ["owner"]
132
+ isOneToOne: false
133
+ referencedRelation: "profiles"
134
+ referencedColumns: ["id"]
135
+ },
136
+ ]
137
+ }
138
+ beatmapPageComments: {
139
+ Row: {
140
+ beatmapPage: number
141
+ content: string | null
142
+ created_at: string
143
+ id: number
144
+ owner: number
145
+ }
146
+ Insert: {
147
+ beatmapPage: number
148
+ content?: string | null
149
+ created_at?: string
150
+ id?: number
151
+ owner: number
152
+ }
153
+ Update: {
154
+ beatmapPage?: number
155
+ content?: string | null
156
+ created_at?: string
157
+ id?: number
158
+ owner?: number
159
+ }
160
+ Relationships: [
161
+ {
162
+ foreignKeyName: "beatmapPageComments_beatmapPage_fkey"
163
+ columns: ["beatmapPage"]
164
+ isOneToOne: false
165
+ referencedRelation: "beatmapPages"
166
+ referencedColumns: ["id"]
167
+ },
168
+ {
169
+ foreignKeyName: "beatmapPageComments_owner_fkey"
170
+ columns: ["owner"]
171
+ isOneToOne: false
172
+ referencedRelation: "profiles"
173
+ referencedColumns: ["id"]
174
+ },
175
+ ]
176
+ }
177
+ beatmapPages: {
178
+ Row: {
179
+ created_at: string
180
+ description: string
181
+ genre: string | null
182
+ id: number
183
+ latestBeatmapHash: string | null
184
+ mapHash: string | null
185
+ nominations: Json | null
186
+ owner: number | null
187
+ qualified: boolean
188
+ qualifiedAt: string | null
189
+ ranked_at: number
190
+ status: string | null
191
+ tags: string
192
+ title: string | null
193
+ updated_at: number | null
194
+ video_url: string | null
195
+ }
196
+ Insert: {
197
+ created_at?: string
198
+ description?: string
199
+ genre?: string | null
200
+ id?: number
201
+ latestBeatmapHash?: string | null
202
+ mapHash?: string | null
203
+ nominations?: Json | null
204
+ owner?: number | null
205
+ qualified?: boolean
206
+ qualifiedAt?: string | null
207
+ ranked_at?: number
208
+ status?: string | null
209
+ tags?: string
210
+ title?: string | null
211
+ updated_at?: number | null
212
+ video_url?: string | null
213
+ }
214
+ Update: {
215
+ created_at?: string
216
+ description?: string
217
+ genre?: string | null
218
+ id?: number
219
+ latestBeatmapHash?: string | null
220
+ mapHash?: string | null
221
+ nominations?: Json | null
222
+ owner?: number | null
223
+ qualified?: boolean
224
+ qualifiedAt?: string | null
225
+ ranked_at?: number
226
+ status?: string | null
227
+ tags?: string
228
+ title?: string | null
229
+ updated_at?: number | null
230
+ video_url?: string | null
231
+ }
232
+ Relationships: [
233
+ {
234
+ foreignKeyName: "beatmapPages_latestBeatmapHash_fkey"
235
+ columns: ["latestBeatmapHash"]
236
+ isOneToOne: false
237
+ referencedRelation: "beatmaps"
238
+ referencedColumns: ["beatmapHash"]
239
+ },
240
+ {
241
+ foreignKeyName: "beatmapPages_owner_fkey"
242
+ columns: ["owner"]
243
+ isOneToOne: false
244
+ referencedRelation: "profiles"
245
+ referencedColumns: ["id"]
246
+ },
247
+ ]
248
+ }
249
+ beatmaps: {
250
+ Row: {
251
+ beatmapFile: string | null
252
+ beatmapHash: string
253
+ created_at: string
254
+ difficulty: number | null
255
+ image: string | null
256
+ imageLarge: string | null
257
+ length: number | null
258
+ noteCount: number | null
259
+ playcount: number | null
260
+ ranked: boolean | null
261
+ starRating: number | null
262
+ title: string | null
263
+ }
264
+ Insert: {
265
+ beatmapFile?: string | null
266
+ beatmapHash: string
267
+ created_at?: string
268
+ difficulty?: number | null
269
+ image?: string | null
270
+ imageLarge?: string | null
271
+ length?: number | null
272
+ noteCount?: number | null
273
+ playcount?: number | null
274
+ ranked?: boolean | null
275
+ starRating?: number | null
276
+ title?: string | null
277
+ }
278
+ Update: {
279
+ beatmapFile?: string | null
280
+ beatmapHash?: string
281
+ created_at?: string
282
+ difficulty?: number | null
283
+ image?: string | null
284
+ imageLarge?: string | null
285
+ length?: number | null
286
+ noteCount?: number | null
287
+ playcount?: number | null
288
+ ranked?: boolean | null
289
+ starRating?: number | null
290
+ title?: string | null
291
+ }
292
+ Relationships: []
293
+ }
294
+ cache: {
295
+ Row: {
296
+ key: string
297
+ value: Json
298
+ }
299
+ Insert: {
300
+ key: string
301
+ value: Json
302
+ }
303
+ Update: {
304
+ key?: string
305
+ value?: Json
306
+ }
307
+ Relationships: []
308
+ }
309
+ changelogs: {
310
+ Row: {
311
+ created_at: string
312
+ date: string
313
+ id: number
314
+ markdown: string
315
+ name: string
316
+ type: string
317
+ }
318
+ Insert: {
319
+ created_at?: string
320
+ date: string
321
+ id?: number
322
+ markdown: string
323
+ name: string
324
+ type: string
325
+ }
326
+ Update: {
327
+ created_at?: string
328
+ date?: string
329
+ id?: number
330
+ markdown?: string
331
+ name?: string
332
+ type?: string
333
+ }
334
+ Relationships: []
335
+ }
336
+ chartedValues: {
337
+ Row: {
338
+ created_at: string
339
+ id: number
340
+ type: string | null
341
+ value: number | null
342
+ }
343
+ Insert: {
344
+ created_at?: string
345
+ id?: number
346
+ type?: string | null
347
+ value?: number | null
348
+ }
349
+ Update: {
350
+ created_at?: string
351
+ id?: number
352
+ type?: string | null
353
+ value?: number | null
354
+ }
355
+ Relationships: []
356
+ }
357
+ clans: {
358
+ Row: {
359
+ acronym: string | null
360
+ allowed_users: Json
361
+ avatar_url: string | null
362
+ created_at: string
363
+ description: string | null
364
+ id: number
365
+ name: string
366
+ owner: number | null
367
+ }
368
+ Insert: {
369
+ acronym?: string | null
370
+ allowed_users?: Json
371
+ avatar_url?: string | null
372
+ created_at?: string
373
+ description?: string | null
374
+ id?: number
375
+ name?: string
376
+ owner?: number | null
377
+ }
378
+ Update: {
379
+ acronym?: string | null
380
+ allowed_users?: Json
381
+ avatar_url?: string | null
382
+ created_at?: string
383
+ description?: string | null
384
+ id?: number
385
+ name?: string
386
+ owner?: number | null
387
+ }
388
+ Relationships: [
389
+ {
390
+ foreignKeyName: "clans_owner_fkey"
391
+ columns: ["owner"]
392
+ isOneToOne: false
393
+ referencedRelation: "profiles"
394
+ referencedColumns: ["id"]
395
+ },
396
+ ]
397
+ }
398
+ collectionRelations: {
399
+ Row: {
400
+ beatmapPage: number | null
401
+ collection: number
402
+ created_at: string
403
+ id: number
404
+ sort: number
405
+ }
406
+ Insert: {
407
+ beatmapPage?: number | null
408
+ collection: number
409
+ created_at?: string
410
+ id?: number
411
+ sort?: number
412
+ }
413
+ Update: {
414
+ beatmapPage?: number | null
415
+ collection?: number
416
+ created_at?: string
417
+ id?: number
418
+ sort?: number
419
+ }
420
+ Relationships: [
421
+ {
422
+ foreignKeyName: "collectionRelations_beatmapPage_fkey"
423
+ columns: ["beatmapPage"]
424
+ isOneToOne: false
425
+ referencedRelation: "beatmapPages"
426
+ referencedColumns: ["id"]
427
+ },
428
+ {
429
+ foreignKeyName: "collectionRelations_collection_fkey"
430
+ columns: ["collection"]
431
+ isOneToOne: false
432
+ referencedRelation: "beatmapCollections"
433
+ referencedColumns: ["id"]
434
+ },
435
+ ]
436
+ }
437
+ discordWebhooks: {
438
+ Row: {
439
+ id: number
440
+ type: Database["public"]["Enums"]["discordWebhookType"] | null
441
+ webhook_link: string
442
+ }
443
+ Insert: {
444
+ id?: number
445
+ type?: Database["public"]["Enums"]["discordWebhookType"] | null
446
+ webhook_link?: string
447
+ }
448
+ Update: {
449
+ id?: number
450
+ type?: Database["public"]["Enums"]["discordWebhookType"] | null
451
+ webhook_link?: string
452
+ }
453
+ Relationships: []
454
+ }
455
+ inventories: {
456
+ Row: {
457
+ contents: Json
458
+ id: number
459
+ }
460
+ Insert: {
461
+ contents?: Json
462
+ id?: number
463
+ }
464
+ Update: {
465
+ contents?: Json
466
+ id?: number
467
+ }
468
+ Relationships: [
469
+ {
470
+ foreignKeyName: "inventory_id_fkey"
471
+ columns: ["id"]
472
+ isOneToOne: true
473
+ referencedRelation: "profiles"
474
+ referencedColumns: ["id"]
475
+ },
476
+ ]
477
+ }
478
+ invites: {
479
+ Row: {
480
+ code: string
481
+ created_at: string
482
+ id: number
483
+ resourceId: string
484
+ type: string
485
+ used: boolean
486
+ }
487
+ Insert: {
488
+ code: string
489
+ created_at?: string
490
+ id?: number
491
+ resourceId: string
492
+ type: string
493
+ used?: boolean
494
+ }
495
+ Update: {
496
+ code?: string
497
+ created_at?: string
498
+ id?: number
499
+ resourceId?: string
500
+ type?: string
501
+ used?: boolean
502
+ }
503
+ Relationships: []
504
+ }
505
+ leaderboard_map_user: {
506
+ Row: {
507
+ beatmapHash: string
508
+ best_score_id: number | null
509
+ best_sp: number | null
510
+ userId: number
511
+ }
512
+ Insert: {
513
+ beatmapHash: string
514
+ best_score_id?: number | null
515
+ best_sp?: number | null
516
+ userId: number
517
+ }
518
+ Update: {
519
+ beatmapHash?: string
520
+ best_score_id?: number | null
521
+ best_sp?: number | null
522
+ userId?: number
523
+ }
524
+ Relationships: []
525
+ }
526
+ levers: {
527
+ Row: {
528
+ disable_scores: boolean
529
+ id: number
530
+ }
531
+ Insert: {
532
+ disable_scores?: boolean
533
+ id?: number
534
+ }
535
+ Update: {
536
+ disable_scores?: boolean
537
+ id?: number
538
+ }
539
+ Relationships: []
540
+ }
541
+ passkeys: {
542
+ Row: {
543
+ email: string
544
+ id: number
545
+ passkey: string
546
+ }
547
+ Insert: {
548
+ email: string
549
+ id: number
550
+ passkey: string
551
+ }
552
+ Update: {
553
+ email?: string
554
+ id?: number
555
+ passkey?: string
556
+ }
557
+ Relationships: [
558
+ {
559
+ foreignKeyName: "passkeys_id_fkey"
560
+ columns: ["id"]
561
+ isOneToOne: true
562
+ referencedRelation: "profiles"
563
+ referencedColumns: ["id"]
564
+ },
565
+ ]
566
+ }
567
+ profileActivities: {
568
+ Row: {
569
+ last_activity: number | null
570
+ uid: string
571
+ }
572
+ Insert: {
573
+ last_activity?: number | null
574
+ uid: string
575
+ }
576
+ Update: {
577
+ last_activity?: number | null
578
+ uid?: string
579
+ }
580
+ Relationships: []
581
+ }
582
+ profileFlags: {
583
+ Row: {
584
+ changed_at: string
585
+ flag: string | null
586
+ id: number
587
+ profile_id: number
588
+ }
589
+ Insert: {
590
+ changed_at?: string
591
+ flag?: string | null
592
+ id?: number
593
+ profile_id: number
594
+ }
595
+ Update: {
596
+ changed_at?: string
597
+ flag?: string | null
598
+ id?: number
599
+ profile_id?: number
600
+ }
601
+ Relationships: [
602
+ {
603
+ foreignKeyName: "profileFlags_profile_id_fkey"
604
+ columns: ["profile_id"]
605
+ isOneToOne: false
606
+ referencedRelation: "profiles"
607
+ referencedColumns: ["id"]
608
+ },
609
+ ]
610
+ }
611
+ profileFriends: {
612
+ Row: {
613
+ created_at: string
614
+ friend_id: number
615
+ id: number
616
+ profile_id: number
617
+ }
618
+ Insert: {
619
+ created_at?: string
620
+ friend_id: number
621
+ id?: number
622
+ profile_id: number
623
+ }
624
+ Update: {
625
+ created_at?: string
626
+ friend_id?: number
627
+ id?: number
628
+ profile_id?: number
629
+ }
630
+ Relationships: [
631
+ {
632
+ foreignKeyName: "profileFriends_friend_id_fkey"
633
+ columns: ["friend_id"]
634
+ isOneToOne: false
635
+ referencedRelation: "profiles"
636
+ referencedColumns: ["id"]
637
+ },
638
+ {
639
+ foreignKeyName: "profileFriends_profile_id_fkey"
640
+ columns: ["profile_id"]
641
+ isOneToOne: false
642
+ referencedRelation: "profiles"
643
+ referencedColumns: ["id"]
644
+ },
645
+ ]
646
+ }
647
+ profileReports: {
648
+ Row: {
649
+ created_at: string
650
+ description: string
651
+ id: number
652
+ reported: number
653
+ reporter: number
654
+ }
655
+ Insert: {
656
+ created_at?: string
657
+ description: string
658
+ id?: number
659
+ reported: number
660
+ reporter: number
661
+ }
662
+ Update: {
663
+ created_at?: string
664
+ description?: string
665
+ id?: number
666
+ reported?: number
667
+ reporter?: number
668
+ }
669
+ Relationships: [
670
+ {
671
+ foreignKeyName: "profileReports_reported_fkey"
672
+ columns: ["reported"]
673
+ isOneToOne: false
674
+ referencedRelation: "profiles"
675
+ referencedColumns: ["id"]
676
+ },
677
+ {
678
+ foreignKeyName: "profileReports_reporter_fkey"
679
+ columns: ["reporter"]
680
+ isOneToOne: false
681
+ referencedRelation: "profiles"
682
+ referencedColumns: ["id"]
683
+ },
684
+ ]
685
+ }
686
+ profiles: {
687
+ Row: {
688
+ about_me: string | null
689
+ avatar_url: string | null
690
+ badges: Json | null
691
+ ban: Database["public"]["Enums"]["banTypes"] | null
692
+ bannedAt: number | null
693
+ clan: number | null
694
+ computedUsername: string | null
695
+ created_at: number | null
696
+ flag: string | null
697
+ id: number
698
+ mu_rank: number
699
+ play_count: number | null
700
+ profile_image: string | null
701
+ sigma_rank: number | null
702
+ skill_points: number | null
703
+ spin_skill_points: number
704
+ squares_hit: number | null
705
+ total_score: number | null
706
+ uid: string | null
707
+ username: string | null
708
+ verificationDeadline: number
709
+ verified: boolean | null
710
+ }
711
+ Insert: {
712
+ about_me?: string | null
713
+ avatar_url?: string | null
714
+ badges?: Json | null
715
+ ban?: Database["public"]["Enums"]["banTypes"] | null
716
+ bannedAt?: number | null
717
+ clan?: number | null
718
+ computedUsername?: string | null
719
+ created_at?: number | null
720
+ flag?: string | null
721
+ id?: number
722
+ mu_rank?: number
723
+ play_count?: number | null
724
+ profile_image?: string | null
725
+ sigma_rank?: number | null
726
+ skill_points?: number | null
727
+ spin_skill_points?: number
728
+ squares_hit?: number | null
729
+ total_score?: number | null
730
+ uid?: string | null
731
+ username?: string | null
732
+ verificationDeadline?: number
733
+ verified?: boolean | null
734
+ }
735
+ Update: {
736
+ about_me?: string | null
737
+ avatar_url?: string | null
738
+ badges?: Json | null
739
+ ban?: Database["public"]["Enums"]["banTypes"] | null
740
+ bannedAt?: number | null
741
+ clan?: number | null
742
+ computedUsername?: string | null
743
+ created_at?: number | null
744
+ flag?: string | null
745
+ id?: number
746
+ mu_rank?: number
747
+ play_count?: number | null
748
+ profile_image?: string | null
749
+ sigma_rank?: number | null
750
+ skill_points?: number | null
751
+ spin_skill_points?: number
752
+ squares_hit?: number | null
753
+ total_score?: number | null
754
+ uid?: string | null
755
+ username?: string | null
756
+ verificationDeadline?: number
757
+ verified?: boolean | null
758
+ }
759
+ Relationships: [
760
+ {
761
+ foreignKeyName: "profiles_clan_fkey"
762
+ columns: ["clan"]
763
+ isOneToOne: false
764
+ referencedRelation: "clans"
765
+ referencedColumns: ["id"]
766
+ },
767
+ ]
768
+ }
769
+ profileUsernames: {
770
+ Row: {
771
+ changed_at: string
772
+ id: number
773
+ profile_id: number
774
+ username: string
775
+ }
776
+ Insert: {
777
+ changed_at?: string
778
+ id?: number
779
+ profile_id: number
780
+ username: string
781
+ }
782
+ Update: {
783
+ changed_at?: string
784
+ id?: number
785
+ profile_id?: number
786
+ username?: string
787
+ }
788
+ Relationships: [
789
+ {
790
+ foreignKeyName: "profileUsernames_profile_id_fkey"
791
+ columns: ["profile_id"]
792
+ isOneToOne: false
793
+ referencedRelation: "profiles"
794
+ referencedColumns: ["id"]
795
+ },
796
+ ]
797
+ }
798
+ scores: {
799
+ Row: {
800
+ additional_data: Json
801
+ awarded_sp: number | null
802
+ beatmapHash: string | null
803
+ created_at: string
804
+ id: number
805
+ misses: number | null
806
+ mods: Json
807
+ passed: boolean | null
808
+ replay_url: string | null
809
+ replayHwid: string | null
810
+ songId: string | null
811
+ speed: number | null
812
+ spin: boolean
813
+ token: number | null
814
+ userId: number | null
815
+ }
816
+ Insert: {
817
+ additional_data?: Json
818
+ awarded_sp?: number | null
819
+ beatmapHash?: string | null
820
+ created_at?: string
821
+ id?: number
822
+ misses?: number | null
823
+ mods?: Json
824
+ passed?: boolean | null
825
+ replay_url?: string | null
826
+ replayHwid?: string | null
827
+ songId?: string | null
828
+ speed?: number | null
829
+ spin?: boolean
830
+ token?: number | null
831
+ userId?: number | null
832
+ }
833
+ Update: {
834
+ additional_data?: Json
835
+ awarded_sp?: number | null
836
+ beatmapHash?: string | null
837
+ created_at?: string
838
+ id?: number
839
+ misses?: number | null
840
+ mods?: Json
841
+ passed?: boolean | null
842
+ replay_url?: string | null
843
+ replayHwid?: string | null
844
+ songId?: string | null
845
+ speed?: number | null
846
+ spin?: boolean
847
+ token?: number | null
848
+ userId?: number | null
849
+ }
850
+ Relationships: [
851
+ {
852
+ foreignKeyName: "scores_beatmapHash_fkey"
853
+ columns: ["beatmapHash"]
854
+ isOneToOne: false
855
+ referencedRelation: "beatmaps"
856
+ referencedColumns: ["beatmapHash"]
857
+ },
858
+ {
859
+ foreignKeyName: "scores_token_fkey"
860
+ columns: ["token"]
861
+ isOneToOne: false
862
+ referencedRelation: "tokens"
863
+ referencedColumns: ["id"]
864
+ },
865
+ {
866
+ foreignKeyName: "scores_userId_fkey"
867
+ columns: ["userId"]
868
+ isOneToOne: false
869
+ referencedRelation: "profiles"
870
+ referencedColumns: ["id"]
871
+ },
872
+ ]
873
+ }
874
+ tokens: {
875
+ Row: {
876
+ created_at: string
877
+ hash: string | null
878
+ id: number
879
+ processed: Json | null
880
+ raw: string | null
881
+ }
882
+ Insert: {
883
+ created_at?: string
884
+ hash?: string | null
885
+ id?: number
886
+ processed?: Json | null
887
+ raw?: string | null
888
+ }
889
+ Update: {
890
+ created_at?: string
891
+ hash?: string | null
892
+ id?: number
893
+ processed?: Json | null
894
+ raw?: string | null
895
+ }
896
+ Relationships: []
897
+ }
898
+ user_hwids: {
899
+ Row: {
900
+ created_at: string | null
901
+ hwid: string
902
+ id: number
903
+ }
904
+ Insert: {
905
+ created_at?: string | null
906
+ hwid: string
907
+ id?: number
908
+ }
909
+ Update: {
910
+ created_at?: string | null
911
+ hwid?: string
912
+ id?: number
913
+ }
914
+ Relationships: [
915
+ {
916
+ foreignKeyName: "user_hwids_id_fkey"
917
+ columns: ["id"]
918
+ isOneToOne: false
919
+ referencedRelation: "profiles"
920
+ referencedColumns: ["id"]
921
+ },
922
+ ]
923
+ }
924
+ user_violations: {
925
+ Row: {
926
+ active_period: unknown
927
+ created_at: string
928
+ effective_until: string | null
929
+ expires_at: string | null
930
+ id: number
931
+ metadata: Json
932
+ moderated_by: number | null
933
+ profile_id: number
934
+ reason: string
935
+ revoke_reason: string | null
936
+ revoked_at: string | null
937
+ revoked_by: number | null
938
+ violation_type: Database["public"]["Enums"]["user_violation_type"]
939
+ }
940
+ Insert: {
941
+ active_period?: unknown
942
+ created_at?: string
943
+ effective_until?: string | null
944
+ expires_at?: string | null
945
+ id?: number
946
+ metadata?: Json
947
+ moderated_by?: number | null
948
+ profile_id: number
949
+ reason: string
950
+ revoke_reason?: string | null
951
+ revoked_at?: string | null
952
+ revoked_by?: number | null
953
+ violation_type: Database["public"]["Enums"]["user_violation_type"]
954
+ }
955
+ Update: {
956
+ active_period?: unknown
957
+ created_at?: string
958
+ effective_until?: string | null
959
+ expires_at?: string | null
960
+ id?: number
961
+ metadata?: Json
962
+ moderated_by?: number | null
963
+ profile_id?: number
964
+ reason?: string
965
+ revoke_reason?: string | null
966
+ revoked_at?: string | null
967
+ revoked_by?: number | null
968
+ violation_type?: Database["public"]["Enums"]["user_violation_type"]
969
+ }
970
+ Relationships: [
971
+ {
972
+ foreignKeyName: "user_violations_moderated_by_fkey"
973
+ columns: ["moderated_by"]
974
+ isOneToOne: false
975
+ referencedRelation: "profiles"
976
+ referencedColumns: ["id"]
977
+ },
978
+ {
979
+ foreignKeyName: "user_violations_profile_id_fkey"
980
+ columns: ["profile_id"]
981
+ isOneToOne: false
982
+ referencedRelation: "profiles"
983
+ referencedColumns: ["id"]
984
+ },
985
+ {
986
+ foreignKeyName: "user_violations_revoked_by_fkey"
987
+ columns: ["revoked_by"]
988
+ isOneToOne: false
989
+ referencedRelation: "profiles"
990
+ referencedColumns: ["id"]
991
+ },
992
+ ]
993
+ }
994
+ vetos: {
995
+ Row: {
996
+ beatmapPage: number
997
+ created_at: string
998
+ id: number
999
+ user: number
1000
+ veto_reason: string
1001
+ }
1002
+ Insert: {
1003
+ beatmapPage: number
1004
+ created_at?: string
1005
+ id?: number
1006
+ user: number
1007
+ veto_reason: string
1008
+ }
1009
+ Update: {
1010
+ beatmapPage?: number
1011
+ created_at?: string
1012
+ id?: number
1013
+ user?: number
1014
+ veto_reason?: string
1015
+ }
1016
+ Relationships: [
1017
+ {
1018
+ foreignKeyName: "vetos_beatmapPage_fkey"
1019
+ columns: ["beatmapPage"]
1020
+ isOneToOne: false
1021
+ referencedRelation: "beatmapPages"
1022
+ referencedColumns: ["id"]
1023
+ },
1024
+ {
1025
+ foreignKeyName: "vetos_user_fkey"
1026
+ columns: ["user"]
1027
+ isOneToOne: false
1028
+ referencedRelation: "profiles"
1029
+ referencedColumns: ["id"]
1030
+ },
1031
+ ]
1032
+ }
1033
+ }
1034
+ Views: {
1035
+ [_ in never]: never
1036
+ }
1037
+ Functions: {
1038
+ add_user_violation: {
1039
+ Args: {
1040
+ _expires_at?: string
1041
+ _metadata?: Json
1042
+ _moderated_by?: number
1043
+ _profile_id: number
1044
+ _reason: string
1045
+ _violation_type: Database["public"]["Enums"]["user_violation_type"]
1046
+ }
1047
+ Returns: {
1048
+ active_period: unknown
1049
+ created_at: string
1050
+ effective_until: string | null
1051
+ expires_at: string | null
1052
+ id: number
1053
+ metadata: Json
1054
+ moderated_by: number | null
1055
+ profile_id: number
1056
+ reason: string
1057
+ revoke_reason: string | null
1058
+ revoked_at: string | null
1059
+ revoked_by: number | null
1060
+ violation_type: Database["public"]["Enums"]["user_violation_type"]
1061
+ }
1062
+ SetofOptions: {
1063
+ from: "*"
1064
+ to: "user_violations"
1065
+ isOneToOne: true
1066
+ isSetofReturn: false
1067
+ }
1068
+ }
1069
+ admin_delete_user: { Args: { user_id: number }; Returns: boolean }
1070
+ admin_exclude_user: { Args: { user_id: number }; Returns: boolean }
1071
+ admin_invalidate_ranked_scores: {
1072
+ Args: { user_id: number }
1073
+ Returns: number
1074
+ }
1075
+ admin_log_action:
1076
+ | {
1077
+ Args: {
1078
+ action_type: string
1079
+ admin_id: number
1080
+ details?: Json
1081
+ target_id: number
1082
+ }
1083
+ Returns: undefined
1084
+ }
1085
+ | {
1086
+ Args: {
1087
+ action_type: string
1088
+ admin_id: number
1089
+ details?: Json
1090
+ target_id: string
1091
+ }
1092
+ Returns: undefined
1093
+ }
1094
+ admin_profanity_clear: { Args: { user_id: number }; Returns: boolean }
1095
+ admin_remove_all_scores: { Args: { user_id: number }; Returns: number }
1096
+ admin_remove_score: {
1097
+ Args: { score_id: number; user_id: number }
1098
+ Returns: boolean
1099
+ }
1100
+ admin_restrict_user: { Args: { user_id: number }; Returns: boolean }
1101
+ admin_search_users: {
1102
+ Args: { search_text: string }
1103
+ Returns: {
1104
+ about_me: string | null
1105
+ avatar_url: string | null
1106
+ badges: Json | null
1107
+ ban: Database["public"]["Enums"]["banTypes"] | null
1108
+ bannedAt: number | null
1109
+ clan: number | null
1110
+ computedUsername: string | null
1111
+ created_at: number | null
1112
+ flag: string | null
1113
+ id: number
1114
+ mu_rank: number
1115
+ play_count: number | null
1116
+ profile_image: string | null
1117
+ sigma_rank: number | null
1118
+ skill_points: number | null
1119
+ spin_skill_points: number
1120
+ squares_hit: number | null
1121
+ total_score: number | null
1122
+ uid: string | null
1123
+ username: string | null
1124
+ verificationDeadline: number
1125
+ verified: boolean | null
1126
+ }[]
1127
+ SetofOptions: {
1128
+ from: "*"
1129
+ to: "profiles"
1130
+ isOneToOne: false
1131
+ isSetofReturn: true
1132
+ }
1133
+ }
1134
+ admin_silence_user: { Args: { user_id: number }; Returns: boolean }
1135
+ admin_unban_user: { Args: { user_id: number }; Returns: boolean }
1136
+ admin_update_profile: {
1137
+ Args: { profile_data: Json; user_id: number }
1138
+ Returns: {
1139
+ about_me: string | null
1140
+ avatar_url: string | null
1141
+ badges: Json | null
1142
+ ban: Database["public"]["Enums"]["banTypes"] | null
1143
+ bannedAt: number | null
1144
+ clan: number | null
1145
+ computedUsername: string | null
1146
+ created_at: number | null
1147
+ flag: string | null
1148
+ id: number
1149
+ mu_rank: number
1150
+ play_count: number | null
1151
+ profile_image: string | null
1152
+ sigma_rank: number | null
1153
+ skill_points: number | null
1154
+ spin_skill_points: number
1155
+ squares_hit: number | null
1156
+ total_score: number | null
1157
+ uid: string | null
1158
+ username: string | null
1159
+ verificationDeadline: number
1160
+ verified: boolean | null
1161
+ }[]
1162
+ SetofOptions: {
1163
+ from: "*"
1164
+ to: "profiles"
1165
+ isOneToOne: false
1166
+ isSetofReturn: true
1167
+ }
1168
+ }
1169
+ enhanced_search: {
1170
+ Args: { result_limit?: number; search_text: string }
1171
+ Returns: {
1172
+ beatmap_description: string
1173
+ beatmap_image: string
1174
+ beatmap_length: number
1175
+ beatmap_map_id: string
1176
+ beatmap_owner: number
1177
+ beatmap_owner_avatar: string
1178
+ beatmap_owner_username: string
1179
+ beatmap_page_id: number
1180
+ beatmap_star_rating: number
1181
+ beatmap_status: string
1182
+ beatmap_tags: string
1183
+ beatmap_title: string
1184
+ relevance: number
1185
+ result_type: string
1186
+ user_about_me: string
1187
+ user_avatar_url: string
1188
+ user_flag: string
1189
+ user_id: number
1190
+ user_username: string
1191
+ }[]
1192
+ }
1193
+ get_badge_leaderboard: {
1194
+ Args: { p_limit?: number }
1195
+ Returns: {
1196
+ avatar_url: string
1197
+ display_name: string
1198
+ id: number
1199
+ special_badge_count: number
1200
+ }[]
1201
+ }
1202
+ get_beatmaps_v2: {
1203
+ Args: {
1204
+ author_filter?: string
1205
+ creator_filter?: number
1206
+ items_per_page?: number
1207
+ max_length?: number
1208
+ max_stars?: number
1209
+ min_length?: number
1210
+ min_stars?: number
1211
+ page_number?: number
1212
+ status_filter?: string
1213
+ tags_filter?: string
1214
+ text_filter?: string
1215
+ }
1216
+ Returns: {
1217
+ beatmap_file: string
1218
+ created_at: string
1219
+ difficulty: number
1220
+ id: number
1221
+ image: string
1222
+ length: number
1223
+ owner: number
1224
+ owner_username: string
1225
+ playcount: number
1226
+ qualified: boolean
1227
+ ranked: boolean
1228
+ star_rating: number
1229
+ status: string
1230
+ tags: string
1231
+ title: string
1232
+ total_count: number
1233
+ video_url: string
1234
+ }[]
1235
+ }
1236
+ get_clan_leaderboard: {
1237
+ Args: { items_per_page?: number; page_number?: number }
1238
+ Returns: {
1239
+ acronym: string
1240
+ avatar_url: string
1241
+ description: string
1242
+ id: number
1243
+ member_count: number
1244
+ name: string
1245
+ total_pages: number
1246
+ total_skill_points: number
1247
+ }[]
1248
+ }
1249
+ get_collections_v1: {
1250
+ Args: { items_per_page?: number; page_number?: number }
1251
+ Returns: {
1252
+ beatmap_count: number
1253
+ created_at: string
1254
+ description: string
1255
+ id: number
1256
+ owner: number
1257
+ star1: number
1258
+ star10: number
1259
+ star11: number
1260
+ star12: number
1261
+ star13: number
1262
+ star14: number
1263
+ star15: number
1264
+ star16: number
1265
+ star17: number
1266
+ star18: number
1267
+ star2: number
1268
+ star3: number
1269
+ star4: number
1270
+ star5: number
1271
+ star6: number
1272
+ star7: number
1273
+ star8: number
1274
+ star9: number
1275
+ title: string
1276
+ total_pages: number
1277
+ }[]
1278
+ }
1279
+ get_collections_v2:
1280
+ | {
1281
+ Args: { items_per_page?: number; page_number?: number }
1282
+ Returns: {
1283
+ beatmap_count: number
1284
+ created_at: string
1285
+ description: string
1286
+ id: number
1287
+ owner: number
1288
+ owner_avatar_url: string
1289
+ owner_username: string
1290
+ star1: number
1291
+ star10: number
1292
+ star11: number
1293
+ star12: number
1294
+ star13: number
1295
+ star14: number
1296
+ star15: number
1297
+ star16: number
1298
+ star17: number
1299
+ star18: number
1300
+ star2: number
1301
+ star3: number
1302
+ star4: number
1303
+ star5: number
1304
+ star6: number
1305
+ star7: number
1306
+ star8: number
1307
+ star9: number
1308
+ title: string
1309
+ total_pages: number
1310
+ }[]
1311
+ }
1312
+ | {
1313
+ Args: {
1314
+ items_per_page?: number
1315
+ owner_filter?: number
1316
+ page_number?: number
1317
+ }
1318
+ Returns: {
1319
+ beatmap_count: number
1320
+ created_at: string
1321
+ description: string
1322
+ id: number
1323
+ owner: number
1324
+ owner_avatar_url: string
1325
+ owner_username: string
1326
+ star1: number
1327
+ star10: number
1328
+ star11: number
1329
+ star12: number
1330
+ star13: number
1331
+ star14: number
1332
+ star15: number
1333
+ star16: number
1334
+ star17: number
1335
+ star18: number
1336
+ star2: number
1337
+ star3: number
1338
+ star4: number
1339
+ star5: number
1340
+ star6: number
1341
+ star7: number
1342
+ star8: number
1343
+ star9: number
1344
+ title: string
1345
+ total_pages: number
1346
+ }[]
1347
+ }
1348
+ get_collections_v3: {
1349
+ Args: {
1350
+ items_per_page?: number
1351
+ owner_filter?: number
1352
+ page_number?: number
1353
+ }
1354
+ Returns: {
1355
+ beatmap_count: number
1356
+ created_at: string
1357
+ description: string
1358
+ id: number
1359
+ owner: number
1360
+ owner_avatar_url: string
1361
+ owner_username: string
1362
+ star1: number
1363
+ star10: number
1364
+ star11: number
1365
+ star12: number
1366
+ star13: number
1367
+ star14: number
1368
+ star15: number
1369
+ star16: number
1370
+ star17: number
1371
+ star18: number
1372
+ star2: number
1373
+ star3: number
1374
+ star4: number
1375
+ star5: number
1376
+ star6: number
1377
+ star7: number
1378
+ star8: number
1379
+ star9: number
1380
+ title: string
1381
+ total_pages: number
1382
+ }[]
1383
+ }
1384
+ get_collections_v4: {
1385
+ Args: {
1386
+ author_filter?: string
1387
+ items_per_page?: number
1388
+ min_beatmaps?: number
1389
+ owner_filter?: number
1390
+ page_number?: number
1391
+ search_query?: string
1392
+ }
1393
+ Returns: {
1394
+ beatmap_count: number
1395
+ created_at: string
1396
+ description: string
1397
+ id: number
1398
+ owner: number
1399
+ owner_avatar_url: string
1400
+ owner_username: string
1401
+ star1: number
1402
+ star10: number
1403
+ star11: number
1404
+ star12: number
1405
+ star13: number
1406
+ star14: number
1407
+ star15: number
1408
+ star16: number
1409
+ star17: number
1410
+ star18: number
1411
+ star2: number
1412
+ star3: number
1413
+ star4: number
1414
+ star5: number
1415
+ star6: number
1416
+ star7: number
1417
+ star8: number
1418
+ star9: number
1419
+ title: string
1420
+ total_pages: number
1421
+ }[]
1422
+ }
1423
+ get_top_scores_for_beatmap: {
1424
+ Args: { beatmap_hash: string }
1425
+ Returns: {
1426
+ accuracy: number
1427
+ avatar_url: string
1428
+ awarded_sp: number
1429
+ created_at: string
1430
+ id: number
1431
+ misses: number
1432
+ mods: Json
1433
+ passed: boolean
1434
+ replayhwid: string
1435
+ songid: string
1436
+ speed: number
1437
+ spin: boolean
1438
+ userid: number
1439
+ username: string
1440
+ }[]
1441
+ }
1442
+ get_top_scores_for_beatmap2: {
1443
+ Args: { beatmap_hash: string }
1444
+ Returns: {
1445
+ accuracy: number
1446
+ avatar_url: string
1447
+ awarded_sp: number
1448
+ created_at: string
1449
+ id: number
1450
+ misses: number
1451
+ mods: Json
1452
+ passed: boolean
1453
+ replayhwid: string
1454
+ songid: string
1455
+ speed: number
1456
+ spin: boolean
1457
+ userid: number
1458
+ username: string
1459
+ }[]
1460
+ }
1461
+ get_top_scores_for_beatmap3: {
1462
+ Args: { beatmap_hash: string; score_limit?: number }
1463
+ Returns: {
1464
+ accuracy: number
1465
+ avatar_url: string
1466
+ awarded_sp: number
1467
+ created_at: string
1468
+ id: number
1469
+ misses: number
1470
+ mods: Json
1471
+ passed: boolean
1472
+ replayHwid: string
1473
+ songId: string
1474
+ speed: number
1475
+ spin: boolean
1476
+ userId: number
1477
+ username: string
1478
+ }[]
1479
+ }
1480
+ get_user_activity: {
1481
+ Args: { score_limit?: number; user_id: number }
1482
+ Returns: Json
1483
+ }
1484
+ get_user_by_email: { Args: { email_address: string }; Returns: Json }
1485
+ get_user_reigning_scores:
1486
+ | {
1487
+ Args: { userid: number }
1488
+ Returns: {
1489
+ awarded_sp: number
1490
+ beatmaphash: string
1491
+ created_at: string
1492
+ id: number
1493
+ misses: number
1494
+ mods: Json
1495
+ passed: boolean
1496
+ replayhwid: string
1497
+ songid: string
1498
+ speed: number
1499
+ spin: boolean
1500
+ }[]
1501
+ }
1502
+ | {
1503
+ Args: { page_size: number; userid: number }
1504
+ Returns: {
1505
+ awarded_sp: number
1506
+ beatmaphash: string
1507
+ beatmaptitle: string
1508
+ created_at: string
1509
+ difficulty: number
1510
+ id: number
1511
+ misses: number
1512
+ mods: Json
1513
+ notes: number
1514
+ passed: boolean
1515
+ replayhwid: string
1516
+ songid: string
1517
+ speed: number
1518
+ spin: boolean
1519
+ }[]
1520
+ }
1521
+ get_user_scores_lastday: {
1522
+ Args: { limit_param: number; userid: number }
1523
+ Returns: Json
1524
+ }
1525
+ get_user_scores_payload: {
1526
+ Args: { limit_param: number; userid: number }
1527
+ Returns: Json
1528
+ }
1529
+ get_user_scores_reign: { Args: { userid: number }; Returns: Json }
1530
+ get_user_scores_summary: {
1531
+ Args: { limit_param?: number; userid: number }
1532
+ Returns: Json
1533
+ }
1534
+ get_user_scores_top_and_stats: {
1535
+ Args: { limit_param: number; userid: number }
1536
+ Returns: Json
1537
+ }
1538
+ get_user_violation_state: {
1539
+ Args: { _profile_id: number }
1540
+ Returns: {
1541
+ active_violations: Json
1542
+ excluded: boolean
1543
+ restricted: boolean
1544
+ silenced: boolean
1545
+ }[]
1546
+ }
1547
+ grant_special_badges: {
1548
+ Args: {
1549
+ p_beatmap_id: number
1550
+ p_passed?: boolean
1551
+ p_spin?: boolean
1552
+ p_user_id: number
1553
+ }
1554
+ Returns: Json
1555
+ }
1556
+ revoke_user_violation: {
1557
+ Args: {
1558
+ _profile_id: number
1559
+ _revoke_reason?: string
1560
+ _revoked_by?: number
1561
+ _violation_type: Database["public"]["Enums"]["user_violation_type"]
1562
+ }
1563
+ Returns: number
1564
+ }
1565
+ }
1566
+ Enums: {
1567
+ banTypes: "cool" | "silenced" | "restricted" | "excluded"
1568
+ discordWebhookType: "maps" | "scores"
1569
+ user_violation_type: "silenced" | "restricted" | "excluded"
1570
+ }
1571
+ CompositeTypes: {
1572
+ [_ in never]: never
1573
+ }
1574
+ }
1575
+ }
1576
+
1577
+ type DatabaseWithoutInternals = Omit<Database, "__InternalSupabase">
1578
+
1579
+ type DefaultSchema = DatabaseWithoutInternals[Extract<keyof Database, "public">]
1580
+
1581
+ export type Tables<
1582
+ DefaultSchemaTableNameOrOptions extends
1583
+ | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"])
1584
+ | { schema: keyof DatabaseWithoutInternals },
1585
+ TableName extends DefaultSchemaTableNameOrOptions extends {
1586
+ schema: keyof DatabaseWithoutInternals
1587
+ }
1588
+ ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
1589
+ DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])
1590
+ : never = never,
1591
+ > = DefaultSchemaTableNameOrOptions extends {
1592
+ schema: keyof DatabaseWithoutInternals
1593
+ }
1594
+ ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
1595
+ DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends {
1596
+ Row: infer R
1597
+ }
1598
+ ? R
1599
+ : never
1600
+ : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] &
1601
+ DefaultSchema["Views"])
1602
+ ? (DefaultSchema["Tables"] &
1603
+ DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends {
1604
+ Row: infer R
1605
+ }
1606
+ ? R
1607
+ : never
1608
+ : never
1609
+
1610
+ export type TablesInsert<
1611
+ DefaultSchemaTableNameOrOptions extends
1612
+ | keyof DefaultSchema["Tables"]
1613
+ | { schema: keyof DatabaseWithoutInternals },
1614
+ TableName extends DefaultSchemaTableNameOrOptions extends {
1615
+ schema: keyof DatabaseWithoutInternals
1616
+ }
1617
+ ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
1618
+ : never = never,
1619
+ > = DefaultSchemaTableNameOrOptions extends {
1620
+ schema: keyof DatabaseWithoutInternals
1621
+ }
1622
+ ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1623
+ Insert: infer I
1624
+ }
1625
+ ? I
1626
+ : never
1627
+ : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
1628
+ ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
1629
+ Insert: infer I
1630
+ }
1631
+ ? I
1632
+ : never
1633
+ : never
1634
+
1635
+ export type TablesUpdate<
1636
+ DefaultSchemaTableNameOrOptions extends
1637
+ | keyof DefaultSchema["Tables"]
1638
+ | { schema: keyof DatabaseWithoutInternals },
1639
+ TableName extends DefaultSchemaTableNameOrOptions extends {
1640
+ schema: keyof DatabaseWithoutInternals
1641
+ }
1642
+ ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
1643
+ : never = never,
1644
+ > = DefaultSchemaTableNameOrOptions extends {
1645
+ schema: keyof DatabaseWithoutInternals
1646
+ }
1647
+ ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1648
+ Update: infer U
1649
+ }
1650
+ ? U
1651
+ : never
1652
+ : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
1653
+ ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
1654
+ Update: infer U
1655
+ }
1656
+ ? U
1657
+ : never
1658
+ : never
1659
+
1660
+ export type Enums<
1661
+ DefaultSchemaEnumNameOrOptions extends
1662
+ | keyof DefaultSchema["Enums"]
1663
+ | { schema: keyof DatabaseWithoutInternals },
1664
+ EnumName extends DefaultSchemaEnumNameOrOptions extends {
1665
+ schema: keyof DatabaseWithoutInternals
1666
+ }
1667
+ ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"]
1668
+ : never = never,
1669
+ > = DefaultSchemaEnumNameOrOptions extends {
1670
+ schema: keyof DatabaseWithoutInternals
1671
+ }
1672
+ ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName]
1673
+ : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"]
1674
+ ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions]
1675
+ : never
1676
+
1677
+ export type CompositeTypes<
1678
+ PublicCompositeTypeNameOrOptions extends
1679
+ | keyof DefaultSchema["CompositeTypes"]
1680
+ | { schema: keyof DatabaseWithoutInternals },
1681
+ CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
1682
+ schema: keyof DatabaseWithoutInternals
1683
+ }
1684
+ ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
1685
+ : never = never,
1686
+ > = PublicCompositeTypeNameOrOptions extends {
1687
+ schema: keyof DatabaseWithoutInternals
1688
+ }
1689
+ ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
1690
+ : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"]
1691
+ ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
1692
+ : never
1693
+
1694
+ export const Constants = {
1695
+ public: {
1696
+ Enums: {
1697
+ banTypes: ["cool", "silenced", "restricted", "excluded"],
1698
+ discordWebhookType: ["maps", "scores"],
1699
+ user_violation_type: ["silenced", "restricted", "excluded"],
1700
+ },
1701
+ },
1702
+ } as const