rhythia-api 209.0.0 → 211.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.
@@ -0,0 +1,69 @@
1
+ import { NextResponse } from "next/server";
2
+ import z from "zod";
3
+ import { supabase } from "../utils/supabase";
4
+
5
+ export const Schema = {
6
+ input: z.strictObject({
7
+ limit: z.number().min(1).max(100).optional().default(100),
8
+ }),
9
+ output: z.object({
10
+ leaderboard: z.array(
11
+ z.object({
12
+ id: z.number(),
13
+ display_name: z.string(),
14
+ avatar_url: z.string().nullable(),
15
+ special_badge_count: z.number(),
16
+ earned_badges: z.array(z.string()),
17
+ all_badges: z.any(), // JSON type
18
+ })
19
+ ),
20
+ total_count: z.number(),
21
+ error: z.string().optional(),
22
+ }),
23
+ };
24
+
25
+ export async function POST(request: Request): Promise<NextResponse> {
26
+ return handler({ limit: 100 });
27
+ }
28
+
29
+ export async function handler({
30
+ limit = 100,
31
+ }: {
32
+ limit?: number;
33
+ }): Promise<NextResponse<(typeof Schema)["output"]["_type"]>> {
34
+ try {
35
+ const { data: leaderboard, error } = await supabase.rpc(
36
+ "get_badge_leaderboard",
37
+ {
38
+ p_limit: limit,
39
+ }
40
+ );
41
+
42
+ if (error) {
43
+ console.error("Badge leaderboard error:", error);
44
+ return NextResponse.json(
45
+ {
46
+ leaderboard: [],
47
+ total_count: 0,
48
+ error: "Failed to fetch badge leaderboard",
49
+ },
50
+ { status: 500 }
51
+ );
52
+ }
53
+
54
+ return NextResponse.json({
55
+ leaderboard: leaderboard || [],
56
+ total_count: leaderboard?.length || 0,
57
+ });
58
+ } catch (error) {
59
+ console.error("Badge leaderboard exception:", error);
60
+ return NextResponse.json(
61
+ {
62
+ leaderboard: [],
63
+ total_count: 0,
64
+ error: "Internal server error",
65
+ },
66
+ { status: 500 }
67
+ );
68
+ }
69
+ }
@@ -33,16 +33,16 @@ export const Schema = {
33
33
  reign: z
34
34
  .array(
35
35
  z.object({
36
- id: z.number(), // Use z.number() for compatibility, or z.bigint() if supported
37
- awarded_sp: z.number().nullable(), // Use z.number() for NUMERIC
38
- created_at: z.string(), // Use z.string() for TIMESTAMP WITH TIME ZONE
36
+ id: z.number(),
37
+ awarded_sp: z.number().nullable(),
38
+ created_at: z.string(),
39
39
  misses: z.number().nullable(),
40
40
  mods: z.record(z.unknown()),
41
41
  passed: z.boolean().nullable(),
42
42
  songId: z.string().nullable(),
43
43
  speed: z.number().nullable(),
44
44
  spin: z.boolean(),
45
- beatmapHash: z.string().nullable(), // Add beatmapHash to the schema
45
+ beatmapHash: z.string().nullable(),
46
46
  beatmapTitle: z.string().nullable(),
47
47
  difficulty: z.number().nullable(),
48
48
  beatmapNotes: z.number().optional().nullable(),
@@ -91,128 +91,29 @@ export async function handler(
91
91
  data: (typeof Schema)["input"]["_type"],
92
92
  req: Request
93
93
  ): Promise<NextResponse<(typeof Schema)["output"]["_type"]>> {
94
- if (data.limit > 100) {
95
- return NextResponse.json({ error: "Limit breached" });
96
- }
97
- let { data: scores1, error: errorlast } = await supabase
98
- .from("scores")
99
- .select(
100
- `
101
- *,
102
- beatmaps (
103
- difficulty,
104
- noteCount,
105
- title
106
- )
107
- `
108
- )
109
- .eq("userId", data.id)
110
- .eq("passed", true)
111
- .order("created_at", { ascending: false })
112
- .limit(data.limit);
113
-
114
- let { data: scores2, error: errorsp } = await supabase
115
- .from("scores")
116
- .select(
117
- `
118
- *,
119
- beatmaps (
120
- difficulty,
121
- noteCount,
122
- title
123
- )
124
- `
125
- )
126
- .eq("userId", data.id)
127
- .neq("awarded_sp", 0)
128
- .eq("passed", true)
129
- .order("awarded_sp", { ascending: false });
130
-
131
- if (scores2 == null) return NextResponse.json({ error: "No scores" });
132
-
133
- let spinScores = 0;
134
- let totalScores = scores2.length;
135
- let hashMap: Record<string, { awarded_sp: number; score: any }> = {};
136
-
137
- for (const score of scores2) {
138
- const { beatmapHash, awarded_sp, spin } = score;
139
-
140
- if (!beatmapHash || !awarded_sp) continue;
141
-
142
- if (score.spin) {
143
- spinScores++;
144
- }
145
-
146
- if (!hashMap[beatmapHash] || hashMap[beatmapHash].awarded_sp < awarded_sp) {
147
- hashMap[beatmapHash] = { awarded_sp, score };
94
+ // Call the RPC created earlier
95
+ const { data: result, error } = await supabase.rpc(
96
+ "get_user_scores_summary",
97
+ {
98
+ userid: data.id,
99
+ limit_param: data.limit,
148
100
  }
149
- }
150
-
151
- const values = Object.values(hashMap);
152
- let vals = values
153
- .sort((a, b) => b.awarded_sp - a.awarded_sp)
154
- .slice(0, data.limit)
155
- .map((e) => e.score);
156
-
157
- const { data: reignScores, error } = await supabase.rpc(
158
- "get_user_reigning_scores",
159
- { userid: data.id, page_size: 10 }
160
101
  );
161
102
 
162
103
  if (error) {
163
104
  return NextResponse.json({ error: JSON.stringify(error) });
164
105
  }
165
106
 
166
- return NextResponse.json({
167
- lastDay: scores1?.map((s) => ({
168
- created_at: s.created_at,
169
- id: s.id,
170
- passed: s.passed,
171
- userId: s.userId,
172
- awarded_sp: s.awarded_sp,
173
- beatmapHash: s.beatmapHash,
174
- misses: s.misses,
175
- songId: s.songId,
176
- beatmapDifficulty: s.beatmaps?.difficulty,
177
- beatmapNotes: s.beatmaps?.noteCount,
178
- beatmapTitle: s.beatmaps?.title,
179
- speed: s.speed,
180
- spin: s.spin,
181
- })),
182
- reign: reignScores?.map((s) => ({
183
- id: s.id,
184
- awarded_sp: s.awarded_sp,
185
- created_at: s.created_at,
186
- misses: s.misses,
187
- mods: s.mods as any,
188
- passed: s.passed,
189
- songId: s.songid,
190
- speed: s.speed,
191
- spin: s.spin,
192
- beatmapHash: s.beatmaphash,
193
- beatmapTitle: s.beatmaptitle,
194
- beatmapNotes: s.notes,
195
- difficulty: s.difficulty,
196
- })),
197
- top: vals?.map((s) => ({
198
- created_at: s.created_at,
199
- id: s.id,
200
- passed: s.passed,
201
- userId: s.userId,
202
- awarded_sp: s.awarded_sp,
203
- beatmapHash: s.beatmapHash,
204
- misses: s.misses,
205
- rank: s.rank,
206
- songId: s.songId,
207
- beatmapDifficulty: s.beatmaps?.difficulty,
208
- beatmapNotes: s.beatmaps?.noteCount,
209
- beatmapTitle: s.beatmaps?.title,
210
- speed: s.speed,
211
- spin: s.spin,
212
- })),
213
- stats: {
214
- totalScores,
215
- spinScores,
216
- },
217
- });
107
+ if (!result) {
108
+ return NextResponse.json({ error: "No data returned" });
109
+ }
110
+
111
+ // The RPC may return { error: "..." } as a JSON object
112
+ if (typeof result === "object" && result !== null && "error" in result) {
113
+ return NextResponse.json({ error: String((result as any).error) });
114
+ }
115
+
116
+ // Trust the RPC's JSON shape to match Schema.output
117
+ const typedResult = result as (typeof Schema)["output"]["_type"];
118
+ return NextResponse.json(typedResult);
218
119
  }
@@ -279,6 +279,27 @@ export async function handler({
279
279
  squares_hit: (userData.squares_hit || 0) + data.hits,
280
280
  });
281
281
  console.log("p3");
282
+ // Grant special badges if applicable
283
+ if (passed && beatmapPages && !data.mods.includes("mod_nofail")) {
284
+ try {
285
+ const { data: badgeResult, error: badgeError } = await supabase.rpc(
286
+ "grant_special_badges",
287
+ {
288
+ p_user_id: userData.id,
289
+ p_beatmap_id: beatmapPages.id,
290
+ p_spin: data.spin || false,
291
+ p_passed: passed,
292
+ }
293
+ );
294
+
295
+ const result = badgeResult as { granted: boolean; badge: string | null };
296
+ if (result && result.granted) {
297
+ console.log(`Badge granted: ${result.badge} to user ${userData.id}`);
298
+ }
299
+ } catch (error) {
300
+ console.error("Error granting badge:", error);
301
+ }
302
+ }
282
303
 
283
304
  if (awarded_sp > 99 && userData.ban == "cool") {
284
305
  await postToWebhooks({
package/index.ts CHANGED
@@ -370,6 +370,32 @@ import { Schema as GetBadgedUsers } from "./api/getBadgedUsers"
370
370
  export { Schema as SchemaGetBadgedUsers } from "./api/getBadgedUsers"
371
371
  export const getBadgedUsers = handleApi({url:"/api/getBadgedUsers",...GetBadgedUsers})
372
372
 
373
+ // ./api/getBadgeLeaders.ts API
374
+
375
+ /*
376
+ export const Schema = {
377
+ input: z.strictObject({
378
+ limit: z.number().min(1).max(100).optional().default(100),
379
+ }),
380
+ output: z.object({
381
+ leaderboard: z.array(
382
+ z.object({
383
+ id: z.number(),
384
+ display_name: z.string(),
385
+ avatar_url: z.string().nullable(),
386
+ special_badge_count: z.number(),
387
+ earned_badges: z.array(z.string()),
388
+ all_badges: z.any(), // JSON type
389
+ })
390
+ ),
391
+ total_count: z.number(),
392
+ error: z.string().optional(),
393
+ }),
394
+ };*/
395
+ import { Schema as GetBadgeLeaders } from "./api/getBadgeLeaders"
396
+ export { Schema as SchemaGetBadgeLeaders } from "./api/getBadgeLeaders"
397
+ export const getBadgeLeaders = handleApi({url:"/api/getBadgeLeaders",...GetBadgeLeaders})
398
+
373
399
  // ./api/getBeatmapComments.ts API
374
400
 
375
401
  /*
@@ -1079,16 +1105,16 @@ export const Schema = {
1079
1105
  reign: z
1080
1106
  .array(
1081
1107
  z.object({
1082
- id: z.number(), // Use z.number() for compatibility, or z.bigint() if supported
1083
- awarded_sp: z.number().nullable(), // Use z.number() for NUMERIC
1084
- created_at: z.string(), // Use z.string() for TIMESTAMP WITH TIME ZONE
1108
+ id: z.number(),
1109
+ awarded_sp: z.number().nullable(),
1110
+ created_at: z.string(),
1085
1111
  misses: z.number().nullable(),
1086
1112
  mods: z.record(z.unknown()),
1087
1113
  passed: z.boolean().nullable(),
1088
1114
  songId: z.string().nullable(),
1089
1115
  speed: z.number().nullable(),
1090
1116
  spin: z.boolean(),
1091
- beatmapHash: z.string().nullable(), // Add beatmapHash to the schema
1117
+ beatmapHash: z.string().nullable(),
1092
1118
  beatmapTitle: z.string().nullable(),
1093
1119
  difficulty: z.number().nullable(),
1094
1120
  beatmapNotes: z.number().optional().nullable(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rhythia-api",
3
- "version": "209.0.0",
3
+ "version": "211.0.0",
4
4
  "main": "index.ts",
5
5
  "author": "online-contributors-cunev",
6
6
  "scripts": {
package/types/database.ts CHANGED
@@ -7,6 +7,11 @@ export type Json =
7
7
  | Json[]
8
8
 
9
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: "12.2.3 (519615d)"
14
+ }
10
15
  public: {
11
16
  Tables: {
12
17
  admin_actions: {
@@ -621,64 +626,47 @@ export type Database = {
621
626
  }
622
627
  Functions: {
623
628
  admin_delete_user: {
624
- Args: {
625
- user_id: number
626
- }
629
+ Args: { user_id: number }
627
630
  Returns: boolean
628
631
  }
629
632
  admin_exclude_user: {
630
- Args: {
631
- user_id: number
632
- }
633
+ Args: { user_id: number }
633
634
  Returns: boolean
634
635
  }
635
636
  admin_invalidate_ranked_scores: {
636
- Args: {
637
- user_id: number
638
- }
637
+ Args: { user_id: number }
639
638
  Returns: number
640
639
  }
641
- admin_log_action:
642
- | {
643
- Args: {
644
- admin_id: number
640
+ admin_log_action: {
641
+ Args:
642
+ | {
645
643
  action_type: string
646
- target_id: number
644
+ admin_id: number
647
645
  details?: Json
646
+ target_id: number
648
647
  }
649
- Returns: undefined
650
- }
651
- | {
652
- Args: {
653
- admin_id: number
648
+ | {
654
649
  action_type: string
655
- target_id: string
650
+ admin_id: number
656
651
  details?: Json
652
+ target_id: string
657
653
  }
658
- Returns: undefined
659
- }
654
+ Returns: undefined
655
+ }
660
656
  admin_profanity_clear: {
661
- Args: {
662
- user_id: number
663
- }
657
+ Args: { user_id: number }
664
658
  Returns: boolean
665
659
  }
666
660
  admin_remove_all_scores: {
667
- Args: {
668
- user_id: number
669
- }
661
+ Args: { user_id: number }
670
662
  Returns: number
671
663
  }
672
664
  admin_restrict_user: {
673
- Args: {
674
- user_id: number
675
- }
665
+ Args: { user_id: number }
676
666
  Returns: boolean
677
667
  }
678
668
  admin_search_users: {
679
- Args: {
680
- search_text: string
681
- }
669
+ Args: { search_text: string }
682
670
  Returns: {
683
671
  about_me: string | null
684
672
  avatar_url: string | null
@@ -705,46 +693,55 @@ export type Database = {
705
693
  }[]
706
694
  }
707
695
  admin_silence_user: {
708
- Args: {
709
- user_id: number
710
- }
696
+ Args: { user_id: number }
711
697
  Returns: boolean
712
698
  }
713
699
  admin_unban_user: {
714
- Args: {
715
- user_id: number
716
- }
700
+ Args: { user_id: number }
717
701
  Returns: boolean
718
702
  }
719
- get_clan_leaderboard: {
720
- Args: {
721
- page_number?: number
722
- items_per_page?: number
723
- }
703
+ get_badge_leaderboard: {
704
+ Args: { p_limit?: number }
724
705
  Returns: {
706
+ all_badges: Json
707
+ avatar_url: string
708
+ display_name: string
709
+ earned_badges: string[]
725
710
  id: number
726
- name: string
711
+ special_badge_count: number
712
+ }[]
713
+ }
714
+ get_clan_leaderboard: {
715
+ Args: { items_per_page?: number; page_number?: number }
716
+ Returns: {
727
717
  acronym: string
728
718
  avatar_url: string
729
719
  description: string
720
+ id: number
730
721
  member_count: number
731
- total_skill_points: number
722
+ name: string
732
723
  total_pages: number
724
+ total_skill_points: number
733
725
  }[]
734
726
  }
735
727
  get_collections_v1: {
736
- Args: {
737
- page_number?: number
738
- items_per_page?: number
739
- }
728
+ Args: { items_per_page?: number; page_number?: number }
740
729
  Returns: {
741
- id: number
742
- title: string
743
- description: string
730
+ beatmap_count: number
744
731
  created_at: string
732
+ description: string
733
+ id: number
745
734
  owner: number
746
- beatmap_count: number
747
735
  star1: number
736
+ star10: number
737
+ star11: number
738
+ star12: number
739
+ star13: number
740
+ star14: number
741
+ star15: number
742
+ star16: number
743
+ star17: number
744
+ star18: number
748
745
  star2: number
749
746
  star3: number
750
747
  star4: number
@@ -753,6 +750,27 @@ export type Database = {
753
750
  star7: number
754
751
  star8: number
755
752
  star9: number
753
+ title: string
754
+ total_pages: number
755
+ }[]
756
+ }
757
+ get_collections_v2: {
758
+ Args:
759
+ | {
760
+ items_per_page?: number
761
+ owner_filter?: number
762
+ page_number?: number
763
+ }
764
+ | { items_per_page?: number; page_number?: number }
765
+ Returns: {
766
+ beatmap_count: number
767
+ created_at: string
768
+ description: string
769
+ id: number
770
+ owner: number
771
+ owner_avatar_url: string
772
+ owner_username: string
773
+ star1: number
756
774
  star10: number
757
775
  star11: number
758
776
  star12: number
@@ -762,105 +780,33 @@ export type Database = {
762
780
  star16: number
763
781
  star17: number
764
782
  star18: number
783
+ star2: number
784
+ star3: number
785
+ star4: number
786
+ star5: number
787
+ star6: number
788
+ star7: number
789
+ star8: number
790
+ star9: number
791
+ title: string
765
792
  total_pages: number
766
793
  }[]
767
794
  }
768
- get_collections_v2:
769
- | {
770
- Args: {
771
- page_number?: number
772
- items_per_page?: number
773
- }
774
- Returns: {
775
- id: number
776
- title: string
777
- description: string
778
- created_at: string
779
- owner: number
780
- owner_username: string
781
- owner_avatar_url: string
782
- beatmap_count: number
783
- star1: number
784
- star2: number
785
- star3: number
786
- star4: number
787
- star5: number
788
- star6: number
789
- star7: number
790
- star8: number
791
- star9: number
792
- star10: number
793
- star11: number
794
- star12: number
795
- star13: number
796
- star14: number
797
- star15: number
798
- star16: number
799
- star17: number
800
- star18: number
801
- total_pages: number
802
- }[]
803
- }
804
- | {
805
- Args: {
806
- page_number?: number
807
- items_per_page?: number
808
- owner_filter?: number
809
- }
810
- Returns: {
811
- id: number
812
- title: string
813
- description: string
814
- created_at: string
815
- owner: number
816
- owner_username: string
817
- owner_avatar_url: string
818
- beatmap_count: number
819
- star1: number
820
- star2: number
821
- star3: number
822
- star4: number
823
- star5: number
824
- star6: number
825
- star7: number
826
- star8: number
827
- star9: number
828
- star10: number
829
- star11: number
830
- star12: number
831
- star13: number
832
- star14: number
833
- star15: number
834
- star16: number
835
- star17: number
836
- star18: number
837
- total_pages: number
838
- }[]
839
- }
840
795
  get_collections_v3: {
841
796
  Args: {
842
- page_number?: number
843
797
  items_per_page?: number
844
798
  owner_filter?: number
799
+ page_number?: number
845
800
  }
846
801
  Returns: {
847
- id: number
848
- title: string
849
- description: string
802
+ beatmap_count: number
850
803
  created_at: string
804
+ description: string
805
+ id: number
851
806
  owner: number
852
- owner_username: string
853
807
  owner_avatar_url: string
854
- beatmap_count: number
808
+ owner_username: string
855
809
  star1: number
856
- star2: number
857
- star3: number
858
- star4: number
859
- star5: number
860
- star6: number
861
- star7: number
862
- star8: number
863
- star9: number
864
810
  star10: number
865
811
  star11: number
866
812
  star12: number
@@ -870,36 +816,36 @@ export type Database = {
870
816
  star16: number
871
817
  star17: number
872
818
  star18: number
819
+ star2: number
820
+ star3: number
821
+ star4: number
822
+ star5: number
823
+ star6: number
824
+ star7: number
825
+ star8: number
826
+ star9: number
827
+ title: string
873
828
  total_pages: number
874
829
  }[]
875
830
  }
876
831
  get_collections_v4: {
877
832
  Args: {
878
- page_number?: number
833
+ author_filter?: string
879
834
  items_per_page?: number
835
+ min_beatmaps?: number
880
836
  owner_filter?: number
837
+ page_number?: number
881
838
  search_query?: string
882
- author_filter?: string
883
- min_beatmaps?: number
884
839
  }
885
840
  Returns: {
886
- id: number
887
- title: string
888
- description: string
841
+ beatmap_count: number
889
842
  created_at: string
843
+ description: string
844
+ id: number
890
845
  owner: number
891
- owner_username: string
892
846
  owner_avatar_url: string
893
- beatmap_count: number
847
+ owner_username: string
894
848
  star1: number
895
- star2: number
896
- star3: number
897
- star4: number
898
- star5: number
899
- star6: number
900
- star7: number
901
- star8: number
902
- star9: number
903
849
  star10: number
904
850
  star11: number
905
851
  star12: number
@@ -909,17 +855,26 @@ export type Database = {
909
855
  star16: number
910
856
  star17: number
911
857
  star18: number
858
+ star2: number
859
+ star3: number
860
+ star4: number
861
+ star5: number
862
+ star6: number
863
+ star7: number
864
+ star8: number
865
+ star9: number
866
+ title: string
912
867
  total_pages: number
913
868
  }[]
914
869
  }
915
870
  get_top_scores_for_beatmap: {
916
- Args: {
917
- beatmap_hash: string
918
- }
871
+ Args: { beatmap_hash: string }
919
872
  Returns: {
920
- id: number
873
+ accuracy: number
874
+ avatar_url: string
921
875
  awarded_sp: number
922
876
  created_at: string
877
+ id: number
923
878
  misses: number
924
879
  mods: Json
925
880
  passed: boolean
@@ -929,18 +884,16 @@ export type Database = {
929
884
  spin: boolean
930
885
  userid: number
931
886
  username: string
932
- avatar_url: string
933
- accuracy: number
934
887
  }[]
935
888
  }
936
889
  get_top_scores_for_beatmap2: {
937
- Args: {
938
- beatmap_hash: string
939
- }
890
+ Args: { beatmap_hash: string }
940
891
  Returns: {
941
- id: number
892
+ accuracy: number
893
+ avatar_url: string
942
894
  awarded_sp: number
943
895
  created_at: string
896
+ id: number
944
897
  misses: number
945
898
  mods: Json
946
899
  passed: boolean
@@ -950,57 +903,48 @@ export type Database = {
950
903
  spin: boolean
951
904
  userid: number
952
905
  username: string
953
- avatar_url: string
954
- accuracy: number
955
906
  }[]
956
907
  }
908
+ get_user_activity: {
909
+ Args: { score_limit?: number; user_id: number }
910
+ Returns: Json
911
+ }
957
912
  get_user_by_email: {
913
+ Args: { email_address: string }
914
+ Returns: Json
915
+ }
916
+ get_user_reigning_scores: {
917
+ Args: { page_size: number; userid: number } | { userid: number }
918
+ Returns: {
919
+ awarded_sp: number
920
+ beatmaphash: string
921
+ beatmaptitle: string
922
+ created_at: string
923
+ difficulty: number
924
+ id: number
925
+ misses: number
926
+ mods: Json
927
+ notes: number
928
+ passed: boolean
929
+ replayhwid: string
930
+ songid: string
931
+ speed: number
932
+ spin: boolean
933
+ }[]
934
+ }
935
+ get_user_scores_summary: {
936
+ Args: { limit_param?: number; userid: number }
937
+ Returns: Json
938
+ }
939
+ grant_special_badges: {
958
940
  Args: {
959
- email_address: string
941
+ p_beatmap_id: number
942
+ p_passed?: boolean
943
+ p_spin?: boolean
944
+ p_user_id: number
960
945
  }
961
946
  Returns: Json
962
947
  }
963
- get_user_reigning_scores:
964
- | {
965
- Args: {
966
- userid: number
967
- }
968
- Returns: {
969
- id: number
970
- awarded_sp: number
971
- created_at: string
972
- misses: number
973
- mods: Json
974
- passed: boolean
975
- replayhwid: string
976
- songid: string
977
- speed: number
978
- spin: boolean
979
- beatmaphash: string
980
- }[]
981
- }
982
- | {
983
- Args: {
984
- userid: number
985
- page_size: number
986
- }
987
- Returns: {
988
- id: number
989
- awarded_sp: number
990
- created_at: string
991
- misses: number
992
- mods: Json
993
- passed: boolean
994
- replayhwid: string
995
- songid: string
996
- speed: number
997
- spin: boolean
998
- beatmaphash: string
999
- beatmaptitle: string
1000
- difficulty: number
1001
- notes: number
1002
- }[]
1003
- }
1004
948
  }
1005
949
  Enums: {
1006
950
  banTypes: "cool" | "silenced" | "restricted" | "excluded"
@@ -1012,27 +956,33 @@ export type Database = {
1012
956
  }
1013
957
  }
1014
958
 
1015
- type PublicSchema = Database[Extract<keyof Database, "public">]
959
+ type DatabaseWithoutInternals = Omit<Database, "__InternalSupabase">
960
+
961
+ type DefaultSchema = DatabaseWithoutInternals[Extract<keyof Database, "public">]
1016
962
 
1017
963
  export type Tables<
1018
- PublicTableNameOrOptions extends
1019
- | keyof (PublicSchema["Tables"] & PublicSchema["Views"])
1020
- | { schema: keyof Database },
1021
- TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
1022
- ? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
1023
- Database[PublicTableNameOrOptions["schema"]]["Views"])
964
+ DefaultSchemaTableNameOrOptions extends
965
+ | keyof (DefaultSchema["Tables"] & DefaultSchema["Views"])
966
+ | { schema: keyof DatabaseWithoutInternals },
967
+ TableName extends DefaultSchemaTableNameOrOptions extends {
968
+ schema: keyof DatabaseWithoutInternals
969
+ }
970
+ ? keyof (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
971
+ DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])
1024
972
  : never = never,
1025
- > = PublicTableNameOrOptions extends { schema: keyof Database }
1026
- ? (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
1027
- Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends {
973
+ > = DefaultSchemaTableNameOrOptions extends {
974
+ schema: keyof DatabaseWithoutInternals
975
+ }
976
+ ? (DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"] &
977
+ DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Views"])[TableName] extends {
1028
978
  Row: infer R
1029
979
  }
1030
980
  ? R
1031
981
  : never
1032
- : PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] &
1033
- PublicSchema["Views"])
1034
- ? (PublicSchema["Tables"] &
1035
- PublicSchema["Views"])[PublicTableNameOrOptions] extends {
982
+ : DefaultSchemaTableNameOrOptions extends keyof (DefaultSchema["Tables"] &
983
+ DefaultSchema["Views"])
984
+ ? (DefaultSchema["Tables"] &
985
+ DefaultSchema["Views"])[DefaultSchemaTableNameOrOptions] extends {
1036
986
  Row: infer R
1037
987
  }
1038
988
  ? R
@@ -1040,20 +990,24 @@ export type Tables<
1040
990
  : never
1041
991
 
1042
992
  export type TablesInsert<
1043
- PublicTableNameOrOptions extends
1044
- | keyof PublicSchema["Tables"]
1045
- | { schema: keyof Database },
1046
- TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
1047
- ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
993
+ DefaultSchemaTableNameOrOptions extends
994
+ | keyof DefaultSchema["Tables"]
995
+ | { schema: keyof DatabaseWithoutInternals },
996
+ TableName extends DefaultSchemaTableNameOrOptions extends {
997
+ schema: keyof DatabaseWithoutInternals
998
+ }
999
+ ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
1048
1000
  : never = never,
1049
- > = PublicTableNameOrOptions extends { schema: keyof Database }
1050
- ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1001
+ > = DefaultSchemaTableNameOrOptions extends {
1002
+ schema: keyof DatabaseWithoutInternals
1003
+ }
1004
+ ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1051
1005
  Insert: infer I
1052
1006
  }
1053
1007
  ? I
1054
1008
  : never
1055
- : PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
1056
- ? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
1009
+ : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
1010
+ ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
1057
1011
  Insert: infer I
1058
1012
  }
1059
1013
  ? I
@@ -1061,20 +1015,24 @@ export type TablesInsert<
1061
1015
  : never
1062
1016
 
1063
1017
  export type TablesUpdate<
1064
- PublicTableNameOrOptions extends
1065
- | keyof PublicSchema["Tables"]
1066
- | { schema: keyof Database },
1067
- TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
1068
- ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
1018
+ DefaultSchemaTableNameOrOptions extends
1019
+ | keyof DefaultSchema["Tables"]
1020
+ | { schema: keyof DatabaseWithoutInternals },
1021
+ TableName extends DefaultSchemaTableNameOrOptions extends {
1022
+ schema: keyof DatabaseWithoutInternals
1023
+ }
1024
+ ? keyof DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"]
1069
1025
  : never = never,
1070
- > = PublicTableNameOrOptions extends { schema: keyof Database }
1071
- ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1026
+ > = DefaultSchemaTableNameOrOptions extends {
1027
+ schema: keyof DatabaseWithoutInternals
1028
+ }
1029
+ ? DatabaseWithoutInternals[DefaultSchemaTableNameOrOptions["schema"]]["Tables"][TableName] extends {
1072
1030
  Update: infer U
1073
1031
  }
1074
1032
  ? U
1075
1033
  : never
1076
- : PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
1077
- ? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
1034
+ : DefaultSchemaTableNameOrOptions extends keyof DefaultSchema["Tables"]
1035
+ ? DefaultSchema["Tables"][DefaultSchemaTableNameOrOptions] extends {
1078
1036
  Update: infer U
1079
1037
  }
1080
1038
  ? U
@@ -1082,29 +1040,44 @@ export type TablesUpdate<
1082
1040
  : never
1083
1041
 
1084
1042
  export type Enums<
1085
- PublicEnumNameOrOptions extends
1086
- | keyof PublicSchema["Enums"]
1087
- | { schema: keyof Database },
1088
- EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database }
1089
- ? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"]
1043
+ DefaultSchemaEnumNameOrOptions extends
1044
+ | keyof DefaultSchema["Enums"]
1045
+ | { schema: keyof DatabaseWithoutInternals },
1046
+ EnumName extends DefaultSchemaEnumNameOrOptions extends {
1047
+ schema: keyof DatabaseWithoutInternals
1048
+ }
1049
+ ? keyof DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"]
1090
1050
  : never = never,
1091
- > = PublicEnumNameOrOptions extends { schema: keyof Database }
1092
- ? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName]
1093
- : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
1094
- ? PublicSchema["Enums"][PublicEnumNameOrOptions]
1051
+ > = DefaultSchemaEnumNameOrOptions extends {
1052
+ schema: keyof DatabaseWithoutInternals
1053
+ }
1054
+ ? DatabaseWithoutInternals[DefaultSchemaEnumNameOrOptions["schema"]]["Enums"][EnumName]
1055
+ : DefaultSchemaEnumNameOrOptions extends keyof DefaultSchema["Enums"]
1056
+ ? DefaultSchema["Enums"][DefaultSchemaEnumNameOrOptions]
1095
1057
  : never
1096
1058
 
1097
1059
  export type CompositeTypes<
1098
1060
  PublicCompositeTypeNameOrOptions extends
1099
- | keyof PublicSchema["CompositeTypes"]
1100
- | { schema: keyof Database },
1061
+ | keyof DefaultSchema["CompositeTypes"]
1062
+ | { schema: keyof DatabaseWithoutInternals },
1101
1063
  CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
1102
- schema: keyof Database
1064
+ schema: keyof DatabaseWithoutInternals
1103
1065
  }
1104
- ? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
1066
+ ? keyof DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
1105
1067
  : never = never,
1106
- > = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
1107
- ? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
1108
- : PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"]
1109
- ? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
1068
+ > = PublicCompositeTypeNameOrOptions extends {
1069
+ schema: keyof DatabaseWithoutInternals
1070
+ }
1071
+ ? DatabaseWithoutInternals[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
1072
+ : PublicCompositeTypeNameOrOptions extends keyof DefaultSchema["CompositeTypes"]
1073
+ ? DefaultSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
1110
1074
  : never
1075
+
1076
+ export const Constants = {
1077
+ public: {
1078
+ Enums: {
1079
+ banTypes: ["cool", "silenced", "restricted", "excluded"],
1080
+ discordWebhookType: ["maps", "scores"],
1081
+ },
1082
+ },
1083
+ } as const