@tryline/interface 1.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.
- package/README.md +229 -0
- package/dist/api/admin/admin.d.ts +4 -0
- package/dist/api/admin/admin.d.ts.map +1 -0
- package/dist/api/admin/admin.js +1 -0
- package/dist/api/admin/articles.d.ts +77 -0
- package/dist/api/admin/articles.d.ts.map +1 -0
- package/dist/api/admin/articles.js +6 -0
- package/dist/api/admin/index.d.ts +5 -0
- package/dist/api/admin/index.d.ts.map +1 -0
- package/dist/api/admin/index.js +4 -0
- package/dist/api/admin/matches.d.ts +33 -0
- package/dist/api/admin/matches.d.ts.map +1 -0
- package/dist/api/admin/matches.js +6 -0
- package/dist/api/admin/matchup/index.d.ts +4 -0
- package/dist/api/admin/matchup/index.d.ts.map +1 -0
- package/dist/api/admin/matchup/index.js +3 -0
- package/dist/api/admin/matchup/matches.d.ts +33 -0
- package/dist/api/admin/matchup/matches.d.ts.map +1 -0
- package/dist/api/admin/matchup/matches.js +6 -0
- package/dist/api/admin/matchup/players.d.ts +100 -0
- package/dist/api/admin/matchup/players.d.ts.map +1 -0
- package/dist/api/admin/matchup/players.js +6 -0
- package/dist/api/admin/matchup/teams.d.ts +207 -0
- package/dist/api/admin/matchup/teams.d.ts.map +1 -0
- package/dist/api/admin/matchup/teams.js +6 -0
- package/dist/api/admin/matchup-players.d.ts +100 -0
- package/dist/api/admin/matchup-players.d.ts.map +1 -0
- package/dist/api/admin/matchup-players.js +6 -0
- package/dist/api/admin/matchup-teams.d.ts +207 -0
- package/dist/api/admin/matchup-teams.d.ts.map +1 -0
- package/dist/api/admin/matchup-teams.js +6 -0
- package/dist/api/admin/nrl-matches.d.ts +146 -0
- package/dist/api/admin/nrl-matches.d.ts.map +1 -0
- package/dist/api/admin/nrl-matches.js +6 -0
- package/dist/api/articles.d.ts +50 -0
- package/dist/api/articles.d.ts.map +1 -0
- package/dist/api/articles.js +1 -0
- package/dist/api/auth.d.ts +75 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +5 -0
- package/dist/api/competitions.d.ts +34 -0
- package/dist/api/competitions.d.ts.map +1 -0
- package/dist/api/competitions.js +1 -0
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +9 -0
- package/dist/api/matches.d.ts +77 -0
- package/dist/api/matches.d.ts.map +1 -0
- package/dist/api/matches.js +1 -0
- package/dist/api/news.d.ts +50 -0
- package/dist/api/news.d.ts.map +1 -0
- package/dist/api/news.js +1 -0
- package/dist/api/nrl/analytics.d.ts +129 -0
- package/dist/api/nrl/analytics.d.ts.map +1 -0
- package/dist/api/nrl/analytics.js +1 -0
- package/dist/api/nrl/index.d.ts +7 -0
- package/dist/api/nrl/index.d.ts.map +1 -0
- package/dist/api/nrl/index.js +6 -0
- package/dist/api/nrl/ladder.d.ts +67 -0
- package/dist/api/nrl/ladder.d.ts.map +1 -0
- package/dist/api/nrl/ladder.js +1 -0
- package/dist/api/nrl/matches.d.ts +297 -0
- package/dist/api/nrl/matches.d.ts.map +1 -0
- package/dist/api/nrl/matches.js +1 -0
- package/dist/api/nrl/stats.d.ts +280 -0
- package/dist/api/nrl/stats.d.ts.map +1 -0
- package/dist/api/nrl/stats.js +1 -0
- package/dist/api/nrl/team-player-stats.d.ts +195 -0
- package/dist/api/nrl/team-player-stats.d.ts.map +1 -0
- package/dist/api/nrl/team-player-stats.js +1 -0
- package/dist/api/nrl/teams.d.ts +66 -0
- package/dist/api/nrl/teams.d.ts.map +1 -0
- package/dist/api/nrl/teams.js +1 -0
- package/dist/api/players.d.ts +31 -0
- package/dist/api/players.d.ts.map +1 -0
- package/dist/api/players.js +1 -0
- package/dist/api/search.d.ts +68 -0
- package/dist/api/search.d.ts.map +1 -0
- package/dist/api/search.js +1 -0
- package/dist/api/shared.d.ts +30 -0
- package/dist/api/shared.d.ts.map +1 -0
- package/dist/api/shared.js +4 -0
- package/dist/api/teams.d.ts +48 -0
- package/dist/api/teams.d.ts.map +1 -0
- package/dist/api/teams.js +1 -0
- package/dist/api/test.d.ts +8 -0
- package/dist/api/test.d.ts.map +1 -0
- package/dist/api/test.js +4 -0
- package/dist/api/version.d.ts +8 -0
- package/dist/api/version.d.ts.map +1 -0
- package/dist/api/version.js +4 -0
- package/dist/api/votes.d.ts +26 -0
- package/dist/api/votes.d.ts.map +1 -0
- package/dist/api/votes.js +5 -0
- package/dist/common/index.d.ts +2 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +1 -0
- package/dist/common/response.d.ts +31 -0
- package/dist/common/response.d.ts.map +1 -0
- package/dist/common/response.js +21 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/package.json +65 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { MatchTeam } from "../shared";
|
|
2
|
+
/**
|
|
3
|
+
* NRL Ladder API types
|
|
4
|
+
* Shared between backend and frontend for ladder-related operations
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Performance outcome for a match
|
|
8
|
+
*/
|
|
9
|
+
export type PerformanceOutcome = "win" | "loss" | "draw";
|
|
10
|
+
/**
|
|
11
|
+
* Performance location for a match
|
|
12
|
+
*/
|
|
13
|
+
export type PerformanceLocation = "home" | "away";
|
|
14
|
+
/**
|
|
15
|
+
* Recent performance record for a team
|
|
16
|
+
* Represents outcome and location of a single completed match
|
|
17
|
+
*/
|
|
18
|
+
export interface TeamRecentPerformance {
|
|
19
|
+
outcome: PerformanceOutcome;
|
|
20
|
+
location: PerformanceLocation;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Complete team information for ladder display
|
|
24
|
+
* Includes team details and recent performance history
|
|
25
|
+
*/
|
|
26
|
+
export interface TeamLadderInfo {
|
|
27
|
+
team_details: MatchTeam;
|
|
28
|
+
team_recent_performance: TeamRecentPerformance[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Ladder ranking entry for a single team in a specific round
|
|
32
|
+
* Contains all ladder statistics for the team at that point in the season
|
|
33
|
+
*/
|
|
34
|
+
export interface LadderTeamRanking {
|
|
35
|
+
position: number;
|
|
36
|
+
team_id: number;
|
|
37
|
+
played: number;
|
|
38
|
+
points: number;
|
|
39
|
+
wins: number;
|
|
40
|
+
drawn: number;
|
|
41
|
+
lost: number;
|
|
42
|
+
byes: number;
|
|
43
|
+
for_points: number;
|
|
44
|
+
against_points: number;
|
|
45
|
+
diff: number;
|
|
46
|
+
home_record: string;
|
|
47
|
+
away_record: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ladder standings for a single round
|
|
51
|
+
* Contains round information and team rankings for that round
|
|
52
|
+
*/
|
|
53
|
+
export interface LadderRound {
|
|
54
|
+
round: number;
|
|
55
|
+
round_text: string;
|
|
56
|
+
team_rankings: LadderTeamRanking[];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Response type for GET /nrl/ladder?season_id={season_id}
|
|
60
|
+
* Returns ladder data grouped by rounds and team information
|
|
61
|
+
* If no data exists, rounds will be empty array and teams will be null
|
|
62
|
+
*/
|
|
63
|
+
export interface GetLadderResponse {
|
|
64
|
+
rounds: LadderRound[];
|
|
65
|
+
teams: Record<number, TeamLadderInfo> | null;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=ladder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ladder.d.ts","sourceRoot":"","sources":["../../../src/api/nrl/ladder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,SAAS,CAAC;IACxB,uBAAuB,EAAE,qBAAqB,EAAE,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { MatchTeam, MatchVenue } from "../shared";
|
|
2
|
+
import { Season } from "../competitions";
|
|
3
|
+
/**
|
|
4
|
+
* Single NRL match highlight
|
|
5
|
+
* Contains match info with highlight URL and round information
|
|
6
|
+
*/
|
|
7
|
+
export interface MatchHighlight {
|
|
8
|
+
match_id: number;
|
|
9
|
+
datetime: string;
|
|
10
|
+
status: "completed";
|
|
11
|
+
slug: string;
|
|
12
|
+
round_text: string;
|
|
13
|
+
official_highlights_url: string;
|
|
14
|
+
home_team: MatchTeam;
|
|
15
|
+
away_team: MatchTeam;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Response type for GET /nrl/latest-highlights
|
|
19
|
+
* Returns array of up to 8 most recent completed NRL matches with highlights
|
|
20
|
+
*/
|
|
21
|
+
export interface GetLatestHighlightsResponse {
|
|
22
|
+
highlights: MatchHighlight[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Team ranking information from the ladder
|
|
26
|
+
* Contains position and additional stats
|
|
27
|
+
*/
|
|
28
|
+
export interface TeamRanking {
|
|
29
|
+
rank: number;
|
|
30
|
+
played: number | null;
|
|
31
|
+
wins: number | null;
|
|
32
|
+
drawn: number | null;
|
|
33
|
+
lost: number | null;
|
|
34
|
+
byes: number | null;
|
|
35
|
+
diff: number | null;
|
|
36
|
+
points: number | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* NRL-specific team information extending base MatchTeam
|
|
40
|
+
* Includes team ranking from the ladder
|
|
41
|
+
*/
|
|
42
|
+
export interface MatchTeamWithRanking extends MatchTeam {
|
|
43
|
+
ranking: TeamRanking | null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Response type for GET /nrl/basic-info/:match_id
|
|
47
|
+
* Contains comprehensive match data specific to NRL
|
|
48
|
+
* Returned directly in the data field of ApiResponse
|
|
49
|
+
*/
|
|
50
|
+
export interface GetMatchBasicInfoResponse {
|
|
51
|
+
match_id: number;
|
|
52
|
+
slug: string;
|
|
53
|
+
season: Season;
|
|
54
|
+
round: number;
|
|
55
|
+
round_text: string;
|
|
56
|
+
datetime: string;
|
|
57
|
+
status: "scheduled" | "live" | "completed" | "postponed" | "cancelled";
|
|
58
|
+
ground_condition: string | null;
|
|
59
|
+
official_page_url: string | null;
|
|
60
|
+
official_highlights_url: string | null;
|
|
61
|
+
home_team_interview_url: string | null;
|
|
62
|
+
away_team_interview_url: string | null;
|
|
63
|
+
weather: string | null;
|
|
64
|
+
venue: MatchVenue | null;
|
|
65
|
+
public_broadcast: boolean;
|
|
66
|
+
home_team: MatchTeamWithRanking;
|
|
67
|
+
away_team: MatchTeamWithRanking;
|
|
68
|
+
referee: string | null;
|
|
69
|
+
analysis: string | null;
|
|
70
|
+
golden_point: boolean | null;
|
|
71
|
+
home_team_dotpoints: string[] | null;
|
|
72
|
+
away_team_dotpoints: string[] | null;
|
|
73
|
+
update_24h: string | null;
|
|
74
|
+
update_1h: string | null;
|
|
75
|
+
home_team_final_score_f: number | null;
|
|
76
|
+
home_team_final_score_h: number | null;
|
|
77
|
+
away_team_final_score_f: number | null;
|
|
78
|
+
away_team_final_score_h: number | null;
|
|
79
|
+
home_team_possession: string | null;
|
|
80
|
+
away_team_possession: string | null;
|
|
81
|
+
scoring_events: ScoringEvent[];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Try overall location enum
|
|
85
|
+
*/
|
|
86
|
+
export type TryOverallLocation = "left" | "middle" | "right";
|
|
87
|
+
/**
|
|
88
|
+
* Scoring type enum
|
|
89
|
+
*/
|
|
90
|
+
export type ScoringType = "try" | "conversion" | "penalty_goal" | "field_goal_1pt" | "field_goal_2pt";
|
|
91
|
+
/**
|
|
92
|
+
* Player information for scoring events
|
|
93
|
+
* Contains player details plus lineup info (jersey number, captain)
|
|
94
|
+
*/
|
|
95
|
+
export interface ScoringEventPlayer {
|
|
96
|
+
player_id: number;
|
|
97
|
+
first_name: string;
|
|
98
|
+
last_name: string;
|
|
99
|
+
image_default: string | null;
|
|
100
|
+
image_headshot: string | null;
|
|
101
|
+
competition_image_default: string | null;
|
|
102
|
+
competition_image_headshot: string | null;
|
|
103
|
+
jersey_number: number;
|
|
104
|
+
captain: boolean;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Single NRL scoring event
|
|
108
|
+
* Contains scoring data with player and positional information
|
|
109
|
+
*/
|
|
110
|
+
export interface ScoringEvent {
|
|
111
|
+
side: "home" | "away";
|
|
112
|
+
player: ScoringEventPlayer;
|
|
113
|
+
sample_offset_s: number;
|
|
114
|
+
scoring_type: ScoringType;
|
|
115
|
+
try_score_x: number | null;
|
|
116
|
+
try_score_y: number | null;
|
|
117
|
+
break_x: number | null;
|
|
118
|
+
break_y: number | null;
|
|
119
|
+
kicking_x: number | null;
|
|
120
|
+
kicking_y: number | null;
|
|
121
|
+
kick_successful: boolean | null;
|
|
122
|
+
try_associated: number | null;
|
|
123
|
+
try_comments: string | null;
|
|
124
|
+
try_overall_location: TryOverallLocation | null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Single H2H match result
|
|
128
|
+
* Contains the outcome of a previous match between two teams
|
|
129
|
+
*/
|
|
130
|
+
export interface H2HMatchResult {
|
|
131
|
+
match_id: number;
|
|
132
|
+
slug: string;
|
|
133
|
+
home_team_id: number;
|
|
134
|
+
home_team_score: number;
|
|
135
|
+
away_team_id: number;
|
|
136
|
+
away_team_score: number;
|
|
137
|
+
winner: "home" | "away" | "draw";
|
|
138
|
+
round_text: string;
|
|
139
|
+
season_value: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Response type for GET /nrl/recent-performance-h2h
|
|
143
|
+
* Returns head-to-head statistics and recent match results between two teams
|
|
144
|
+
*/
|
|
145
|
+
export interface GetH2HResponse {
|
|
146
|
+
home_team: MatchTeam;
|
|
147
|
+
away_team: MatchTeam;
|
|
148
|
+
home_team_wins: number;
|
|
149
|
+
away_team_wins: number;
|
|
150
|
+
draws: number;
|
|
151
|
+
results: H2HMatchResult[];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Single recent match result for a team's form
|
|
155
|
+
* Contains the outcome from the perspective of the team
|
|
156
|
+
*/
|
|
157
|
+
export interface TeamRecentFormMatch {
|
|
158
|
+
match_id: number;
|
|
159
|
+
slug: string;
|
|
160
|
+
team_score: number;
|
|
161
|
+
opponent_score: number;
|
|
162
|
+
winner: "team" | "opponent" | "draw";
|
|
163
|
+
opponent_logo: string | null;
|
|
164
|
+
team_host: "home" | "away";
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Team form data with details and recent performance
|
|
168
|
+
*/
|
|
169
|
+
export interface TeamFormData {
|
|
170
|
+
details: MatchTeam;
|
|
171
|
+
recent_performance: TeamRecentFormMatch[];
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Response type for GET /nrl/recent-performance-form
|
|
175
|
+
* Returns recent form for both teams in the context of the current match
|
|
176
|
+
*/
|
|
177
|
+
export interface GetRecentFormResponse {
|
|
178
|
+
home_team: TeamFormData;
|
|
179
|
+
away_team: TeamFormData;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* NRL position definition
|
|
183
|
+
* Contains both unadjusted (broad) and adjusted (specific) position names
|
|
184
|
+
*/
|
|
185
|
+
export interface Position {
|
|
186
|
+
position_id: number;
|
|
187
|
+
unadjusted_position_name: string;
|
|
188
|
+
short_unadjusted_position_name: string;
|
|
189
|
+
adjusted_position_name: string;
|
|
190
|
+
short_adjusted_position_name: string;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Single lineup entry for a player
|
|
194
|
+
* Contains position information and player metadata
|
|
195
|
+
*/
|
|
196
|
+
export interface LineupEntry {
|
|
197
|
+
lineup_entry_id: number;
|
|
198
|
+
player_id: number;
|
|
199
|
+
jersey_number: number;
|
|
200
|
+
captain: boolean;
|
|
201
|
+
original_position_id: number;
|
|
202
|
+
updated_position_id: number | null;
|
|
203
|
+
details: unknown[];
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Team lineup data
|
|
207
|
+
* Contains team identification, team colour, and all player entries
|
|
208
|
+
*/
|
|
209
|
+
export interface LineupTeam {
|
|
210
|
+
team_id: number;
|
|
211
|
+
side: "home" | "away";
|
|
212
|
+
colour: string;
|
|
213
|
+
entries: LineupEntry[];
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Player details for lineup display
|
|
217
|
+
* Contains both global and competition-specific images
|
|
218
|
+
*/
|
|
219
|
+
export interface LineupPlayer {
|
|
220
|
+
player_id: number;
|
|
221
|
+
slug: string;
|
|
222
|
+
first_name: string;
|
|
223
|
+
last_name: string;
|
|
224
|
+
image_headshot: string | null;
|
|
225
|
+
image_default: string | null;
|
|
226
|
+
competition_image_headshot: string | null;
|
|
227
|
+
competition_image_default: string | null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Response type for GET /nrl/lineup/:match_id
|
|
231
|
+
* Returns comprehensive lineup information for both teams in an NRL match
|
|
232
|
+
*
|
|
233
|
+
* positions_adjusted is true only when ALL players have updated_position_id != null
|
|
234
|
+
* If any player has updated_position_id = null, positions_adjusted is false
|
|
235
|
+
* This acts as a validation guard for frontend rendering logic
|
|
236
|
+
*
|
|
237
|
+
* When lineup is not announced yet, entries arrays will be empty and players object will be {}
|
|
238
|
+
*/
|
|
239
|
+
export interface GetLineupResponse {
|
|
240
|
+
match_id: number;
|
|
241
|
+
competition_id: number;
|
|
242
|
+
positions_adjusted: boolean;
|
|
243
|
+
positions: Position[];
|
|
244
|
+
teams: LineupTeam[];
|
|
245
|
+
players: Record<string, LineupPlayer>;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Season information for stats filter context (with round ranges)
|
|
249
|
+
* Used by scoring-by-position, scoring-map, and overs-unders filters
|
|
250
|
+
*/
|
|
251
|
+
export interface StatsFilterContextSeason {
|
|
252
|
+
season_id: number;
|
|
253
|
+
value: string;
|
|
254
|
+
min_round: number;
|
|
255
|
+
max_round: number;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Season information for analytics filter context (no round ranges)
|
|
259
|
+
* Used by analytics-scoring and analytics-stats filters
|
|
260
|
+
* Analytics data is available for all seasons
|
|
261
|
+
*/
|
|
262
|
+
export interface AnalyticsFilterContextSeason {
|
|
263
|
+
season_id: number;
|
|
264
|
+
value: string;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Filter configuration for stats endpoints (scoring-by-position, scoring-map, overs-unders)
|
|
268
|
+
*/
|
|
269
|
+
export interface StatsFilterContextFilter {
|
|
270
|
+
filter_id: "scoring-by-position" | "scoring-map" | "overs-unders";
|
|
271
|
+
seasons: StatsFilterContextSeason[];
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Filter configuration for analytics endpoints (analytics-scoring, analytics-stats)
|
|
275
|
+
*/
|
|
276
|
+
export interface AnalyticsFilterContextFilter {
|
|
277
|
+
filter_id: "analytics-scoring" | "analytics-stats";
|
|
278
|
+
seasons: AnalyticsFilterContextSeason[];
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Union type for all filter configurations
|
|
282
|
+
*/
|
|
283
|
+
export type FilterContextFilter = StatsFilterContextFilter | AnalyticsFilterContextFilter;
|
|
284
|
+
/**
|
|
285
|
+
* Response type for GET /nrl/matches/filter-context/:match_id
|
|
286
|
+
* Returns available seasons and rounds for each filter type
|
|
287
|
+
* - Stats filters: Include min_round/max_round based on data availability
|
|
288
|
+
* - Analytics filters: Include all seasons (no round ranges needed)
|
|
289
|
+
*/
|
|
290
|
+
export interface GetMatchFilterContextResponse {
|
|
291
|
+
match_id: number;
|
|
292
|
+
competition_id: number;
|
|
293
|
+
default_season_id: number;
|
|
294
|
+
default_season_id_value: string;
|
|
295
|
+
filters: FilterContextFilter[];
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=matches.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matches.d.ts","sourceRoot":"","sources":["../../../src/api/nrl/matches.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { MatchTeam } from "../shared";
|
|
2
|
+
/**
|
|
3
|
+
* Mode for scoring by position query
|
|
4
|
+
* - season: Use the match's season, rounds 1 through last completed round
|
|
5
|
+
* - l5: Last 5 completed matches for each team across seasons
|
|
6
|
+
* - l10: Last 10 completed matches for each team across seasons
|
|
7
|
+
* - h2h: Last 3 head-to-head encounters between the two teams
|
|
8
|
+
* - rd: Custom round range with specified season_id, round_from, round_to
|
|
9
|
+
*/
|
|
10
|
+
export type ScoringByPositionMode = "season" | "l5" | "l10" | "h2h" | "rd";
|
|
11
|
+
/**
|
|
12
|
+
* Selection context for scoring by position
|
|
13
|
+
* For l5/l10/h2h modes, all values will be null
|
|
14
|
+
* For season/rd modes, values will be populated
|
|
15
|
+
*/
|
|
16
|
+
export interface ScoringByPositionSelection {
|
|
17
|
+
season_id: number | null;
|
|
18
|
+
season_value: string | null;
|
|
19
|
+
round_from: number | null;
|
|
20
|
+
round_to: number | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Scoring data by position for a team
|
|
24
|
+
* Contains scored and conceded points for each position
|
|
25
|
+
* Position keys are uppercase (LW, LC, L2R, FE, HLF, R2R, RC, RW, FB, PR, HK, LK)
|
|
26
|
+
*/
|
|
27
|
+
export interface PositionScoring {
|
|
28
|
+
scored: Record<string, number>;
|
|
29
|
+
conceded: Record<string, number>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Response type for GET /nrl/scoring-by-position/:match_id
|
|
33
|
+
* Returns scoring statistics by position for both teams
|
|
34
|
+
*
|
|
35
|
+
* Query params:
|
|
36
|
+
* - mode: season (default), l5, l10, h2h, rd
|
|
37
|
+
* - season_id: Required for rd mode, optional for season mode
|
|
38
|
+
* - round_from/round_to: Required for rd mode
|
|
39
|
+
*
|
|
40
|
+
* When a team has no data for the selected range (e.g., new team),
|
|
41
|
+
* all position values will be 0.
|
|
42
|
+
*/
|
|
43
|
+
export interface GetScoringByPositionResponse {
|
|
44
|
+
match_id: number;
|
|
45
|
+
competition_id: number;
|
|
46
|
+
home_team: MatchTeam;
|
|
47
|
+
away_team: MatchTeam;
|
|
48
|
+
mode: ScoringByPositionMode;
|
|
49
|
+
selection: ScoringByPositionSelection;
|
|
50
|
+
/** Position codes in display order */
|
|
51
|
+
positions: string[];
|
|
52
|
+
home: PositionScoring;
|
|
53
|
+
away: PositionScoring;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Mode for scoring map query
|
|
57
|
+
* - season: Use the match's season, all completed rounds
|
|
58
|
+
* - l5: Last 5 completed matches for each team across seasons
|
|
59
|
+
* - l10: Last 10 completed matches for each team across seasons
|
|
60
|
+
* - rd: Custom round range with specified season_id, round_from, round_to
|
|
61
|
+
*
|
|
62
|
+
* Note: H2H mode is intentionally excluded due to ranking complexity
|
|
63
|
+
*/
|
|
64
|
+
export type ScoringMapMode = "season" | "l5" | "l10" | "rd";
|
|
65
|
+
/**
|
|
66
|
+
* Side-specific attacking statistics
|
|
67
|
+
*/
|
|
68
|
+
export interface AttackingSideStats {
|
|
69
|
+
/** Rank among all teams (1 = most tries scored on this side) */
|
|
70
|
+
rank: number;
|
|
71
|
+
/** Total tries scored on this side */
|
|
72
|
+
tries: number;
|
|
73
|
+
/** Percentage of team's total tries scored on this side */
|
|
74
|
+
percentageTotal: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Side-specific defending statistics
|
|
78
|
+
*/
|
|
79
|
+
export interface DefendingSideStats {
|
|
80
|
+
/** Rank among all teams (1 = fewest tries conceded on this side) */
|
|
81
|
+
rank: number;
|
|
82
|
+
/** Total tries conceded on this side */
|
|
83
|
+
concededTries: number;
|
|
84
|
+
/** Percentage of team's total tries conceded on this side */
|
|
85
|
+
percentageTotal: number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Overall attacking statistics
|
|
89
|
+
*/
|
|
90
|
+
export interface AttackingOverallStats {
|
|
91
|
+
/** Rank among all teams (1 = most total tries) */
|
|
92
|
+
rank: number;
|
|
93
|
+
/** Total tries scored */
|
|
94
|
+
tries: number;
|
|
95
|
+
/** Average tries per game */
|
|
96
|
+
triesPerGame: number;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Overall defending statistics
|
|
100
|
+
*/
|
|
101
|
+
export interface DefendingOverallStats {
|
|
102
|
+
/** Rank among all teams (1 = fewest total tries conceded) */
|
|
103
|
+
rank: number;
|
|
104
|
+
/** Total tries conceded */
|
|
105
|
+
concededTries: number;
|
|
106
|
+
/** Average tries conceded per game */
|
|
107
|
+
concededPerGame: number;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Attacking statistics for a team
|
|
111
|
+
*/
|
|
112
|
+
export interface TeamAttacking {
|
|
113
|
+
leftSide: AttackingSideStats;
|
|
114
|
+
middle: AttackingSideStats;
|
|
115
|
+
rightSide: AttackingSideStats;
|
|
116
|
+
overall: AttackingOverallStats;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Defending statistics for a team
|
|
120
|
+
* Note: Sides are flipped from attacker's perspective
|
|
121
|
+
* If attacker scores on their left, defender conceded on their right
|
|
122
|
+
*/
|
|
123
|
+
export interface TeamDefending {
|
|
124
|
+
leftSide: DefendingSideStats;
|
|
125
|
+
middle: DefendingSideStats;
|
|
126
|
+
rightSide: DefendingSideStats;
|
|
127
|
+
overall: DefendingOverallStats;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Complete scoring map for a single team
|
|
131
|
+
*/
|
|
132
|
+
export interface TeamScoringMap {
|
|
133
|
+
team_id: number;
|
|
134
|
+
display_name: string;
|
|
135
|
+
display_name_short: string | null;
|
|
136
|
+
display_name_code: string | null;
|
|
137
|
+
logo: string | null;
|
|
138
|
+
colour: string;
|
|
139
|
+
/** Number of matches in the dataset for this team */
|
|
140
|
+
matches_played: number;
|
|
141
|
+
attacking: TeamAttacking;
|
|
142
|
+
defending: TeamDefending;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Selection context for scoring map
|
|
146
|
+
* For l5/l10 modes, all values will be null
|
|
147
|
+
* For season/rd modes, values will be populated
|
|
148
|
+
*/
|
|
149
|
+
export interface ScoringMapSelection {
|
|
150
|
+
season_id: number | null;
|
|
151
|
+
season_value: string | null;
|
|
152
|
+
round_from: number | null;
|
|
153
|
+
round_to: number | null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Response type for GET /nrl/scoring-map/:match_id
|
|
157
|
+
* Returns try scoring statistics by field location (left/middle/right) for both teams
|
|
158
|
+
*
|
|
159
|
+
* Query params:
|
|
160
|
+
* - mode: season (default), l5, l10, rd
|
|
161
|
+
* - season_id: Required for rd mode
|
|
162
|
+
* - round_from/round_to: Required for rd mode
|
|
163
|
+
*
|
|
164
|
+
* Rankings are calculated across all teams in the dataset.
|
|
165
|
+
* Teams with no data will have rank: 0 and all stats set to 0.
|
|
166
|
+
*/
|
|
167
|
+
export interface GetScoringMapResponse {
|
|
168
|
+
match_id: number;
|
|
169
|
+
competition_id: number;
|
|
170
|
+
mode: ScoringMapMode;
|
|
171
|
+
selection: ScoringMapSelection;
|
|
172
|
+
/** Total number of teams included in rankings */
|
|
173
|
+
total_teams_in_ranking: number;
|
|
174
|
+
home_team: TeamScoringMap;
|
|
175
|
+
away_team: TeamScoringMap;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Mode for overs/unders query
|
|
179
|
+
* - season: Use the match's season, rounds 1 through last completed round
|
|
180
|
+
* - l5: Last 5 completed matches for each team across seasons
|
|
181
|
+
* - l10: Last 10 completed matches for each team across seasons
|
|
182
|
+
* - h2h: Last head-to-head encounters between the two teams
|
|
183
|
+
* - rd: Custom round range with specified season_id, round_from, round_to
|
|
184
|
+
*/
|
|
185
|
+
export type OversUndersMode = "season" | "l5" | "l10" | "h2h" | "rd";
|
|
186
|
+
/**
|
|
187
|
+
* Selection context for overs/unders
|
|
188
|
+
* For l5/l10/h2h modes, all values will be null
|
|
189
|
+
* For season/rd modes, values will be populated
|
|
190
|
+
*/
|
|
191
|
+
export interface OversUndersSelection {
|
|
192
|
+
season_id: number | null;
|
|
193
|
+
season_value: string | null;
|
|
194
|
+
round_from: number | null;
|
|
195
|
+
round_to: number | null;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Tags indicating opponent's current ladder position
|
|
199
|
+
* Based on the latest available ladder data (most recent season by start_date, latest round)
|
|
200
|
+
* Teams can have multiple tags (e.g., top_4 implies top_8)
|
|
201
|
+
*/
|
|
202
|
+
export interface OpponentTags {
|
|
203
|
+
/** Opponent is currently ranked 1-4 */
|
|
204
|
+
top_4: boolean;
|
|
205
|
+
/** Opponent is currently ranked 1-8 */
|
|
206
|
+
top_8: boolean;
|
|
207
|
+
/** Opponent is currently ranked 9-17 */
|
|
208
|
+
bottom_9: boolean;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Individual match data in the overs/unders response
|
|
212
|
+
* Contains combined scores (team + opponent) for each half and full game
|
|
213
|
+
*/
|
|
214
|
+
export interface OversUndersMatch {
|
|
215
|
+
match_id: number;
|
|
216
|
+
/** The opponent team's ID (for lookup in teams object) */
|
|
217
|
+
opponent_team_id: number;
|
|
218
|
+
/** Combined 1st half score (team's 1st half + opponent's 1st half) */
|
|
219
|
+
first_half_total: number;
|
|
220
|
+
/** Combined 2nd half score (team's 2nd half + opponent's 2nd half) */
|
|
221
|
+
second_half_total: number;
|
|
222
|
+
/** Combined full time score (team's final + opponent's final) */
|
|
223
|
+
full_time_total: number;
|
|
224
|
+
/** Tags for client-side filtering (vs Top 4, vs Top 8, vs Bottom 9) */
|
|
225
|
+
opponent_tags: OpponentTags;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Aggregated statistics for a team's historical matches
|
|
229
|
+
*/
|
|
230
|
+
export interface OversUndersTeamStats {
|
|
231
|
+
/** Array of historical matches with scoring data */
|
|
232
|
+
matches: OversUndersMatch[];
|
|
233
|
+
/** Average scores across all matches (not filtered) */
|
|
234
|
+
averages: {
|
|
235
|
+
first_half: number;
|
|
236
|
+
second_half: number;
|
|
237
|
+
full_time: number;
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Max values for y-axis chart labelling
|
|
242
|
+
* Separate values allow proper scaling when switching between views
|
|
243
|
+
*/
|
|
244
|
+
export interface OversUndersMaxValues {
|
|
245
|
+
/** Highest 1st half score across all matches for both teams + 10 */
|
|
246
|
+
first_half: number;
|
|
247
|
+
/** Highest 2nd half score across all matches for both teams + 10 */
|
|
248
|
+
second_half: number;
|
|
249
|
+
/** Highest full time score across all matches for both teams + 10 */
|
|
250
|
+
full_time: number;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Response type for GET /nrl/overs-unders/:match_id
|
|
254
|
+
* Returns historical match scoring data for both teams
|
|
255
|
+
*
|
|
256
|
+
* Query params:
|
|
257
|
+
* - mode: season (default), l5, l10, h2h, rd
|
|
258
|
+
* - season_id: Required for rd mode
|
|
259
|
+
* - round_from/round_to: Required for rd mode
|
|
260
|
+
*
|
|
261
|
+
* Used by frontend to display interactive chart where users can
|
|
262
|
+
* drag a threshold line to see which matches went "over" or "under"
|
|
263
|
+
*/
|
|
264
|
+
export interface GetOversUndersResponse {
|
|
265
|
+
match_id: number;
|
|
266
|
+
competition_id: number;
|
|
267
|
+
home_team: MatchTeam;
|
|
268
|
+
away_team: MatchTeam;
|
|
269
|
+
mode: OversUndersMode;
|
|
270
|
+
selection: OversUndersSelection;
|
|
271
|
+
/** Object mapping team_id to team info for quick lookup of opponent names */
|
|
272
|
+
teams: Record<number, MatchTeam>;
|
|
273
|
+
/** Home team's historical match data */
|
|
274
|
+
home: OversUndersTeamStats;
|
|
275
|
+
/** Away team's historical match data */
|
|
276
|
+
away: OversUndersTeamStats;
|
|
277
|
+
/** Max values for y-axis labelling (highest score + 10 for each category) */
|
|
278
|
+
max_values: OversUndersMaxValues;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/api/nrl/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|