overtime-live-trading-utils 2.1.42 → 2.1.44

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 (39) hide show
  1. package/.circleci/config.yml +32 -32
  2. package/.prettierrc +9 -9
  3. package/codecov.yml +20 -20
  4. package/index.ts +26 -26
  5. package/jest.config.ts +16 -16
  6. package/main.js +1 -1
  7. package/package.json +30 -30
  8. package/src/constants/common.ts +7 -7
  9. package/src/constants/errors.ts +6 -6
  10. package/src/constants/sports.ts +78 -78
  11. package/src/enums/sports.ts +109 -109
  12. package/src/tests/mock/MockLeagueMap.ts +170 -170
  13. package/src/tests/mock/MockOpticOddsEvents.ts +662 -662
  14. package/src/tests/mock/MockOpticSoccer.ts +9378 -9378
  15. package/src/tests/mock/MockSoccerRedis.ts +2308 -2308
  16. package/src/tests/unit/bookmakers.test.ts +79 -79
  17. package/src/tests/unit/markets.test.ts +156 -156
  18. package/src/tests/unit/odds.test.ts +92 -92
  19. package/src/tests/unit/resolution.test.ts +1489 -1489
  20. package/src/tests/unit/sports.test.ts +58 -58
  21. package/src/tests/unit/spread.test.ts +131 -131
  22. package/src/types/missing-types.d.ts +2 -2
  23. package/src/types/odds.ts +61 -61
  24. package/src/types/resolution.ts +656 -656
  25. package/src/types/sports.ts +19 -19
  26. package/src/utils/bookmakers.ts +159 -159
  27. package/src/utils/constraints.ts +210 -210
  28. package/src/utils/gameMatching.ts +81 -81
  29. package/src/utils/markets.ts +119 -119
  30. package/src/utils/odds.ts +918 -918
  31. package/src/utils/opticOdds.ts +71 -71
  32. package/src/utils/resolution.ts +319 -320
  33. package/src/utils/sportPeriodMapping.ts +36 -36
  34. package/src/utils/sports.ts +51 -51
  35. package/src/utils/spread.ts +97 -97
  36. package/tsconfig.json +16 -16
  37. package/webpack.config.js +24 -24
  38. package/CLAUDE.md +0 -84
  39. package/resolution_live_markets.md +0 -356
@@ -1,656 +1,656 @@
1
- export type PeriodScores = {
2
- [key: string]: { home: number; away: number };
3
- };
4
-
5
- export type PeriodResolutionData = {
6
- completedPeriods: number[];
7
- readyForResolution: boolean;
8
- periodScores: PeriodScores;
9
- currentPeriod?: number;
10
- };
11
-
12
- /**
13
- * OpticOdds Event type from their API response
14
- * Uses 'any' for flexibility as API structure may vary
15
- */
16
- export type OpticOddsEvent = any;
17
-
18
- /**
19
- * Sport period structure types
20
- * Different sports have different period structures that affect how typeIds are resolved
21
- */
22
- export enum SportPeriodType {
23
- /** Sports with 2 halves (Soccer, NCAAB) */
24
- HALVES_BASED = 'halves_based',
25
- /** Sports with 4 quarters (NFL, NBA) */
26
- QUARTERS_BASED = 'quarters_based',
27
- /** Sports with 9+ innings (MLB, NPB, KBO, College Baseball, etc.) */
28
- INNINGS_BASED = 'innings_based',
29
- /** Sports with 9 periods without halves or secondary moneyline types */
30
- PERIOD_BASED = 'period_based',
31
- }
32
-
33
- /**
34
- * Comprehensive enum of all market type IDs
35
- * Maps numeric type IDs to their descriptive names
36
- */
37
- export enum MarketTypeId {
38
- WINNER = 0,
39
- SPREAD = 10001,
40
- TOTALS = 10002,
41
- DOUBLE_CHANCE = 10003,
42
- MONEYLINE_TOTAL = 10004,
43
- ODD_EVEN = 10005,
44
- HALFTIME_FULLTIME = 10006,
45
- GOALS = 10007,
46
- HALFTIME_FULLTIME_GOALS = 10008,
47
- SCORE_SCORE = 10009,
48
- DRAW_NO_BET = 10010,
49
- SECOND_MONEYLINE = 10011,
50
- THIRD_MONEYLINE = 10012,
51
- SPREAD_SECOND_SPREAD = 10013,
52
- TOTALS_SECOND_TOTAL = 10014,
53
- DOUBLE_CHANCE_FIRST_PERIOD = 10015,
54
- DOUBLE_CHANCE_SECOND_PERIOD = 10016,
55
- HOME_TEAM_SCORE = 10017,
56
- AWAY_TEAM_SCORE = 10018,
57
- FIRST_TEAM_SCORE = 10019,
58
- LAST_TEAM_SCORE = 10020,
59
- FIRST_PERIOD_MONEYLINE = 10021,
60
- SECOND_PERIOD_MONEYLINE = 10022,
61
- THIRD_PERIOD_MONEYLINE = 10023,
62
- FOURTH_PERIOD_MONEYLINE = 10024,
63
- FIFTH_PERIOD_MONEYLINE = 10025,
64
- SIXTH_PERIOD_MONEYLINE = 10026,
65
- SEVENTH_PERIOD_MONEYLINE = 10027,
66
- EIGHTH_PERIOD_MONEYLINE = 10028,
67
- NINTH_PERIOD_MONEYLINE = 10029,
68
- FIRST_PERIOD_TOTAL = 10031,
69
- SECOND_PERIOD_TOTAL = 10032,
70
- THIRD_PERIOD_TOTAL = 10033,
71
- FOURTH_PERIOD_TOTAL = 10034,
72
- FIFTH_PERIOD_TOTAL = 10035,
73
- SIXTH_PERIOD_TOTAL = 10036,
74
- SEVENTH_PERIOD_TOTAL = 10037,
75
- EIGHTH_PERIOD_TOTAL = 10038,
76
- NINTH_PERIOD_TOTAL = 10039,
77
- FIRST_PERIOD_SPREAD = 10041,
78
- SECOND_PERIOD_SPREAD = 10042,
79
- THIRD_PERIOD_SPREAD = 10043,
80
- FOURTH_PERIOD_SPREAD = 10044,
81
- FIFTH_PERIOD_SPREAD = 10045,
82
- SIXTH_PERIOD_SPREAD = 10046,
83
- SEVENTH_PERIOD_SPREAD = 10047,
84
- EIGHTH_PERIOD_SPREAD = 10048,
85
- NINTH_PERIOD_SPREAD = 10049,
86
- FIRST_PERIOD_MONEYLINE_SECONDARY_3WAY = 10050,
87
- FIRST_PERIOD_MONEYLINE_SECONDARY = 10051,
88
- SECOND_PERIOD_MONEYLINE_SECONDARY = 10052,
89
- THIRD_PERIOD_MONEYLINE_SECONDARY = 10053,
90
- FOURTH_PERIOD_MONEYLINE_SECONDARY = 10054,
91
- FIFTH_PERIOD_MONEYLINE_SECONDARY = 10055,
92
- SIXTH_PERIOD_MONEYLINE_SECONDARY = 10056,
93
- SEVENTH_PERIOD_MONEYLINE_SECONDARY = 10057,
94
- EIGHTH_PERIOD_MONEYLINE_SECONDARY = 10058,
95
- NINTH_PERIOD_MONEYLINE_SECONDARY = 10059,
96
- FIRST_PERIOD_TOTAL_SECONDARY = 10061,
97
- SECOND_PERIOD_TOTAL_SECONDARY = 10062,
98
- THIRD_PERIOD_TOTAL_SECONDARY = 10063,
99
- FOURTH_PERIOD_TOTAL_SECONDARY = 10064,
100
- FIFTH_PERIOD_TOTAL_SECONDARY = 10065,
101
- SIXTH_PERIOD_TOTAL_SECONDARY = 10066,
102
- SEVENTH_PERIOD_TOTAL_SECONDARY = 10067,
103
- EIGHTH_PERIOD_TOTAL_SECONDARY = 10068,
104
- NINTH_PERIOD_TOTAL_SECONDARY = 10069,
105
- FIRST_PERIOD_SPREAD_SECONDARY = 10071,
106
- SECOND_PERIOD_SPREAD_SECONDARY = 10072,
107
- THIRD_PERIOD_SPREAD_SECONDARY = 10073,
108
- FOURTH_PERIOD_SPREAD_SECONDARY = 10074,
109
- FIFTH_PERIOD_SPREAD_SECONDARY = 10075,
110
- SIXTH_PERIOD_SPREAD_SECONDARY = 10076,
111
- SEVENTH_PERIOD_SPREAD_SECONDARY = 10077,
112
- EIGHTH_PERIOD_SPREAD_SECONDARY = 10078,
113
- NINTH_PERIOD_SPREAD_SECONDARY = 10079,
114
- FIRST_PERIOD_ODD_EVEN = 10081,
115
- SECOND_PERIOD_ODD_EVEN = 10082,
116
- THIRD_PERIOD_ODD_EVEN = 10083,
117
- FOURTH_PERIOD_ODD_EVEN = 10084,
118
- FIFTH_PERIOD_ODD_EVEN = 10085,
119
- SIXTH_PERIOD_ODD_EVEN = 10086,
120
- SEVENTH_PERIOD_ODD_EVEN = 10087,
121
- EIGHTH_PERIOD_ODD_EVEN = 10088,
122
- NINTH_PERIOD_ODD_EVEN = 10089,
123
- FIRST_PERIOD_ODD_EVEN_SECONDARY = 10091,
124
- SECOND_PERIOD_ODD_EVEN_SECONDARY = 10092,
125
- THIRD_PERIOD_ODD_EVEN_SECONDARY = 10093,
126
- FOURTH_PERIOD_ODD_EVEN_SECONDARY = 10094,
127
- FIFTH_PERIOD_ODD_EVEN_SECONDARY = 10095,
128
- SIXTH_PERIOD_ODD_EVEN_SECONDARY = 10096,
129
- SEVENTH_PERIOD_ODD_EVEN_SECONDARY = 10097,
130
- EIGHTH_PERIOD_ODD_EVEN_SECONDARY = 10098,
131
- NINTH_PERIOD_ODD_EVEN_SECONDARY = 10099,
132
- CORRECT_SCORE = 10100,
133
- FIRST_PERIOD_SCORE_SCORE = 10101,
134
- SECOND_PERIOD_SCORE_SCORE = 10102,
135
- THIRD_PERIOD_SCORE_SCORE = 10103,
136
- FOURTH_PERIOD_SCORE_SCORE = 10104,
137
- FIFTH_PERIOD_SCORE_SCORE = 10105,
138
- SIXTH_PERIOD_SCORE_SCORE = 10106,
139
- SEVENTH_PERIOD_SCORE_SCORE = 10107,
140
- EIGHTH_PERIOD_SCORE_SCORE = 10108,
141
- NINTH_PERIOD_SCORE_SCORE = 10109,
142
- FIRST_PERIOD_HOME_TEAM_SCORE = 10111,
143
- FIRST_PERIOD_AWAY_TEAM_SCORE = 10112,
144
- FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE = 10118,
145
- FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE = 10119,
146
- FIRST_PERIOD_DRAW_NO_BET = 10121,
147
- SECOND_PERIOD_DRAW_NO_BET = 10122,
148
- THIRD_PERIOD_DRAW_NO_BET = 10123,
149
- FOURTH_PERIOD_DRAW_NO_BET = 10124,
150
- WHO_WILL_QUALIFY = 10130,
151
- WILL_THERE_BE_OVERTIME = 10131,
152
- NO_RUNS_FIRST_INNING = 10132,
153
- WILL_THERE_BE_CENTURY = 10133,
154
- WILL_THERE_BE_FIFTY = 10134,
155
- WILL_THERE_BE_SAFETY = 10135,
156
- HOME_TEAM_CLEAN_SHEET = 10141,
157
- AWAY_TEAM_CLEAN_SHEET = 10142,
158
- HOME_TEAM_EXACT_TOTAL = 10143,
159
- AWAY_TEAM_EXACT_TOTAL = 10144,
160
- HOME_TEAM_EXACT_TOTAL_FIRST_PERIOD = 10145,
161
- AWAY_TEAM_EXACT_TOTAL_FIRST_PERIOD = 10146,
162
- HOME_TEAM_EXACT_TOTAL_SECOND_PERIOD = 10147,
163
- AWAY_TEAM_EXACT_TOTAL_SECOND_PERIOD = 10148,
164
- WINNING_ROUNDS = 10151,
165
- GO_THE_DISTANCE = 10154,
166
- FIRST_MINUTE_STOPPAGE = 10155,
167
- WILL_POINT_BE_DEDUCTED = 10156,
168
- WINNING_METHOD = 10157,
169
- VICTORY_METHOD = 10158,
170
- TOTAL_TIEBREAKS = 10160,
171
- TOTAL_ACES = 10161,
172
- WILL_THERE_BE_TIEBREAK = 10162,
173
- CORRECT_SCORE_PERIOD_ONE = 10163,
174
- CORRECT_SCORE_PERIOD_TWO = 10164,
175
- CORRECT_SCORE_PERIOD_THREE = 10165,
176
- CORRECT_SCORE_PERIOD_FOUR = 10166,
177
- CORRECT_SCORE_PERIOD_FIVE = 10167,
178
- CORRECT_SCORE_PERIOD_SIX = 10168,
179
- CORRECT_SCORE_PERIOD_SEVEN = 10169,
180
- MONEYLINE_FIRST_THREE_INNINGS = 10170,
181
- TOTALS_FIRST_THREE_INNINGS = 10171,
182
- SPREAD_FIRST_THREE_INNINGS = 10172,
183
- TOTAL_HOME_TEAM_TO_SCORE_FIRST_THREE_INNINGS = 10173,
184
- TOTAL_AWAY_TEAM_TO_SCORE_FIRST_THREE_INNINGS = 10174,
185
- MONEYLINE_FIRST_SEVEN_INNINGS = 10175,
186
- TOTALS_FIRST_SEVEN_INNINGS = 10176,
187
- SPREAD_FIRST_SEVEN_INNINGS = 10177,
188
- TOTAL_HOME_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS = 10178,
189
- TOTAL_AWAY_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS = 10179,
190
- TOTAL_SIXES = 10180,
191
- TOTAL_FOURS = 10181,
192
- TOTAL_RUNS_OUTS = 10182,
193
- TOTAL_HOME_TEAM_SIXES = 10183,
194
- TOTAL_AWAY_TEAM_SIXES = 10184,
195
- TOTAL_HOME_TEAM_FOURS = 10185,
196
- TOTAL_AWAY_TEAM_FOURS = 10186,
197
- TOTAL_HOME_TEAM_RUNS_OUTS = 10187,
198
- TOTAL_AWAY_TEAM_RUNS_OUTS = 10188,
199
- MOST_FOURS = 10189,
200
- MOST_SIXES = 10190,
201
- MOST_RUNS_OUTS = 10191,
202
- TOTAL_FIELD_GOALS = 10192,
203
- TOTAL_PUNTS = 10193,
204
- TOTAL_TOUCHDOWNS = 10194,
205
- TOTAL_TOUCHDOWNS_HOME_TEAM = 10195,
206
- TOTAL_TOUCHDOWNS_AWAY_TEAM = 10196,
207
- CORRECT_SCORE_PERIOD_EIGHT = 10197,
208
- CORRECT_SCORE_PERIOD_NINE = 10198,
209
- FIRST_PERIOD_CORRECT_SCORE_SECONDARY = 10200,
210
- SECOND_PERIOD_CORRECT_SCORE_SECONDARY = 10201,
211
- SEVENTH_PERIOD_CORRECT_SCORE_SECONDARY = 10202,
212
- HOME_TEAM_TO_SCORE = 10204,
213
- AWAY_TEAM_TO_SCORE = 10205,
214
- HOME_TEAM_TO_WIN_WITH_NIL = 10206,
215
- AWAY_TEAM_TO_WIN_WITH_NIL = 10207,
216
- SECOND_PERIOD_HOME_TEAM_SCORE = 10211,
217
- SECOND_PERIOD_AWAY_TEAM_SCORE = 10212,
218
- SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE = 10218,
219
- SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE = 10219,
220
- SPREAD_CORNERS = 10221,
221
- TOTAL_CORNERS = 10222,
222
- TOTAL_HOME_TEAM_CORNERS = 10223,
223
- TOTAL_AWAY_TEAM_CORNERS = 10224,
224
- TOTAL_CORNERS_ODD_EVEN = 10225,
225
- TOTAL_CORNERS_FIRST_PERIOD = 10226,
226
- TOTAL_CORNERS_SECOND_PERIOD = 10227,
227
- TOTAL_HOME_TEAM_CORNERS_FIRST_PERIOD = 10228,
228
- TOTAL_AWAY_TEAM_CORNERS_FIRST_PERIOD = 10229,
229
- TOTAL_HOME_TEAM_CORNERS_SECOND_PERIOD = 10230,
230
- TOTAL_AWAY_TEAM_CORNERS_SECOND_PERIOD = 10231,
231
- SPREAD_CORNERS_FIRST_PERIOD = 10232,
232
- SPREAD_CORNERS_SECOND_PERIOD = 10233,
233
- MOST_CORNERS = 10234,
234
- MOST_CORNERS_FIRST_PERIOD = 10235,
235
- MOST_CORNERS_SECOND_PERIOD = 10236,
236
- SPREAD_CARDS_POINTS = 10241,
237
- TOTAL_CARDS_POINTS = 10242,
238
- TOTAL_HOME_TEAM_CARD_POINTS = 10243,
239
- TOTAL_AWAY_TEAM_CARD_POINTS = 10244,
240
- TOTAL_RED_CARDS = 10245,
241
- MOST_CARDS = 10246,
242
- FIRST_CARD = 10247,
243
- LAST_CARD = 10248,
244
- TOTAL_180 = 10250,
245
- CHECKOUTS_100_PLUS = 10251,
246
- MOST_180 = 10252,
247
- HIGHEST_MATCH_CHECKOUT_PLAYER = 10253,
248
- HIGHEST_MATCH_CHECKOUT_POINTS = 10254,
249
- TOTAL_STEALS = 10268,
250
- TOTAL_BLOCKS = 10269,
251
- TOTAL_ASSISTS = 10270,
252
- TOTAL_MADE_THREES = 10271,
253
- TOTAL_MADE_THREES_HOME_TEAM = 10272,
254
- TOTAL_MADE_THREES_AWAY_TEAM = 10273,
255
- THIRD_PERIOD_HOME_TEAM_SCORE = 10311,
256
- THIRD_PERIOD_AWAY_TEAM_SCORE = 10312,
257
- SPREAD_KILLS = 10320,
258
- TOTAL_KILLS = 10321,
259
- TOTAL_HOME_TEAM_KILLS = 10322,
260
- TOTAL_AWAY_TEAM_KILLS = 10323,
261
- TOTAL_KILLS_ODD_EVEN = 10324,
262
- FIRST_PERIOD_SPREAD_KILLS = 10325,
263
- FIRST_PERIOD_TOTAL_KILLS = 10326,
264
- FIRST_PERIOD_TOTAL_HOME_TEAM_KILLS = 10327,
265
- FIRST_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10328,
266
- FIRST_PERIOD_TOTAL_KILLS_ODD_EVEN = 10329,
267
- SECOND_PERIOD_SPREAD_KILLS = 10330,
268
- SECOND_PERIOD_TOTAL_KILLS = 10331,
269
- SECOND_PERIOD_TOTAL_HOME_TEAM_KILLS = 10332,
270
- SECOND_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10333,
271
- SECOND_PERIOD_TOTAL_KILLS_ODD_EVEN = 10334,
272
- THIRD_PERIOD_SPREAD_KILLS = 10335,
273
- THIRD_PERIOD_TOTAL_KILLS = 10336,
274
- THIRD_PERIOD_TOTAL_HOME_TEAM_KILLS = 10337,
275
- THIRD_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10338,
276
- THIRD_PERIOD_TOTAL_KILLS_ODD_EVEN = 10339,
277
- FOURTH_PERIOD_SPREAD_KILLS = 10340,
278
- FOURTH_PERIOD_TOTAL_KILLS = 10341,
279
- FOURTH_PERIOD_TOTAL_HOME_TEAM_KILLS = 10342,
280
- FOURTH_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10343,
281
- FOURTH_PERIOD_TOTAL_KILLS_ODD_EVEN = 10344,
282
- FIFTH_PERIOD_SPREAD_KILLS = 10345,
283
- FIFTH_PERIOD_TOTAL_KILLS = 10346,
284
- FIFTH_PERIOD_TOTAL_HOME_TEAM_KILLS = 10347,
285
- FIFTH_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10348,
286
- FIFTH_PERIOD_TOTAL_KILLS_ODD_EVEN = 10349,
287
- FOURTH_PERIOD_HOME_TEAM_SCORE = 10411,
288
- FOURTH_PERIOD_AWAY_TEAM_SCORE = 10412,
289
- FIRST_PERIOD_TOTAL_FIELD_GOALS = 10413,
290
- FIRST_PERIOD_TOTAL_TOUCHDOWNS = 10414,
291
- FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10415,
292
- FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10416,
293
- FIRST_PERIOD_TOTAL_FIELD_GOALS_SECONDARY = 10417,
294
- FIRST_PERIOD_TOTAL_TOUCHDOWNS_SECONDARY = 10418,
295
- FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM_SECONDARY = 10419,
296
- FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM_SECONDARY = 10420,
297
- SECOND_PERIOD_TOTAL_FIELD_GOALS = 10421,
298
- SECOND_PERIOD_TOTAL_TOUCHDOWNS = 10422,
299
- SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10423,
300
- SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10424,
301
- SECOND_PERIOD_TOTAL_FIELD_GOALS_SECONDARY = 10425,
302
- SECOND_PERIOD_TOTAL_TOUCHDOWNS_SECONDARY = 10426,
303
- SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM_SECONDARY = 10427,
304
- SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM_SECONDARY = 10428,
305
- THIRD_PERIOD_TOTAL_FIELD_GOALS = 10429,
306
- THIRD_PERIOD_TOTAL_TOUCHDOWNS = 10430,
307
- THIRD_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10431,
308
- THIRD_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10432,
309
- FOURTH_PERIOD_TOTAL_FIELD_GOALS = 10433,
310
- FOURTH_PERIOD_TOTAL_TOUCHDOWNS = 10434,
311
- FOURTH_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10435,
312
- FOURTH_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10436,
313
- FIFTH_PERIOD_HOME_TEAM_SCORE = 10511,
314
- FIFTH_PERIOD_AWAY_TEAM_SCORE = 10512,
315
- SIXTH_PERIOD_HOME_TEAM_SCORE = 10611,
316
- SIXTH_PERIOD_AWAY_TEAM_SCORE = 10612,
317
- SEVENTH_PERIOD_HOME_TEAM_SCORE = 10711,
318
- SEVENTH_PERIOD_AWAY_TEAM_SCORE = 10712,
319
- EIGHTH_PERIOD_HOME_TEAM_SCORE = 10811,
320
- EIGHTH_PERIOD_AWAY_TEAM_SCORE = 10812,
321
- POPULAR_VOTES = 10900,
322
- WINNING_PARTY = 10901,
323
- WINNING_PARTY_AR = 10902,
324
- WINNING_PARTY_GE = 10903,
325
- WINNING_PARTY_MI = 10904,
326
- WINNING_PARTY_NE = 10905,
327
- WINNING_PARTY_PE = 10906,
328
- WINNING_PARTY_WI = 10907,
329
- WINNING_PARTY_NC = 10908,
330
- PLAYER_PROPS = 11000,
331
- }
332
-
333
- /**
334
- * Halves-based sports period-to-typeId mapping (Soccer, NCAAB)
335
- * Period 1 = 1st half
336
- * Period 2 = 2nd half
337
- */
338
- export const HALVES_PERIOD_TYPE_ID_MAPPING: { [period: number]: number[] } = {
339
- 1: [
340
- MarketTypeId.FIRST_PERIOD_MONEYLINE,
341
- MarketTypeId.FIRST_PERIOD_TOTAL,
342
- MarketTypeId.FIRST_PERIOD_SPREAD,
343
- MarketTypeId.FIRST_PERIOD_MONEYLINE_SECONDARY,
344
- MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
345
- MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
346
- MarketTypeId.FIRST_PERIOD_ODD_EVEN,
347
- MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
348
- MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
349
- MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
350
- MarketTypeId.FIRST_PERIOD_CORRECT_SCORE_SECONDARY,
351
- MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
352
- MarketTypeId.FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE,
353
- MarketTypeId.FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
354
- MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
355
- ], // 1st half
356
- 2: [
357
- MarketTypeId.SECOND_PERIOD_MONEYLINE,
358
- MarketTypeId.SECOND_PERIOD_TOTAL,
359
- MarketTypeId.SECOND_PERIOD_SPREAD,
360
- MarketTypeId.SECOND_PERIOD_MONEYLINE_SECONDARY,
361
- MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
362
- MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
363
- MarketTypeId.SECOND_PERIOD_ODD_EVEN,
364
- MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
365
- MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
366
- MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
367
- MarketTypeId.SECOND_PERIOD_CORRECT_SCORE_SECONDARY,
368
- MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
369
- MarketTypeId.SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE,
370
- MarketTypeId.SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
371
- MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
372
- ], // 2nd half
373
- };
374
-
375
- /**
376
- * Quarters-based sports period-to-typeId mapping (NFL, NBA)
377
- * Period 1 = 1st quarter
378
- * Period 2 = 2nd quarter (also completes 1st half - typeId 10051)
379
- * Period 3 = 3rd quarter
380
- * Period 4 = 4th quarter (also completes 2nd half - typeId 10052)
381
- * Period 5+ = Overtime
382
- */
383
- export const QUARTERS_PERIOD_TYPE_ID_MAPPING: { [period: number]: number[] } = {
384
- 1: [
385
- MarketTypeId.FIRST_PERIOD_MONEYLINE,
386
- MarketTypeId.FIRST_PERIOD_TOTAL,
387
- MarketTypeId.FIRST_PERIOD_SPREAD,
388
- MarketTypeId.FIRST_PERIOD_ODD_EVEN,
389
- MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
390
- MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
391
- MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
392
- MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
393
- MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
394
- ], // 1st quarter
395
- 2: [
396
- MarketTypeId.SECOND_PERIOD_MONEYLINE,
397
- MarketTypeId.SECOND_PERIOD_TOTAL,
398
- MarketTypeId.SECOND_PERIOD_SPREAD,
399
- MarketTypeId.SECOND_PERIOD_ODD_EVEN,
400
- MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
401
- MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
402
- MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
403
- MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
404
- MarketTypeId.FIRST_PERIOD_MONEYLINE_SECONDARY,
405
- MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
406
- MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
407
- MarketTypeId.FIRST_PERIOD_ODD_EVEN_SECONDARY,
408
- MarketTypeId.FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE,
409
- MarketTypeId.FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
410
- MarketTypeId.FIRST_PERIOD_CORRECT_SCORE_SECONDARY,
411
- MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
412
- MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
413
- ], // 2nd quarter + 1st half
414
- 3: [
415
- MarketTypeId.THIRD_PERIOD_MONEYLINE,
416
- MarketTypeId.THIRD_PERIOD_TOTAL,
417
- MarketTypeId.THIRD_PERIOD_SPREAD,
418
- MarketTypeId.THIRD_PERIOD_ODD_EVEN,
419
- MarketTypeId.THIRD_PERIOD_HOME_TEAM_SCORE,
420
- MarketTypeId.THIRD_PERIOD_AWAY_TEAM_SCORE,
421
- MarketTypeId.THIRD_PERIOD_DRAW_NO_BET,
422
- MarketTypeId.THIRD_PERIOD_SCORE_SCORE,
423
- MarketTypeId.CORRECT_SCORE_PERIOD_THREE,
424
- ], // 3rd quarter
425
- 4: [
426
- MarketTypeId.FOURTH_PERIOD_MONEYLINE,
427
- MarketTypeId.FOURTH_PERIOD_TOTAL,
428
- MarketTypeId.FOURTH_PERIOD_SPREAD,
429
- MarketTypeId.FOURTH_PERIOD_ODD_EVEN,
430
- MarketTypeId.FOURTH_PERIOD_HOME_TEAM_SCORE,
431
- MarketTypeId.FOURTH_PERIOD_AWAY_TEAM_SCORE,
432
- MarketTypeId.FOURTH_PERIOD_DRAW_NO_BET,
433
- MarketTypeId.FOURTH_PERIOD_SCORE_SCORE,
434
- MarketTypeId.SECOND_PERIOD_MONEYLINE_SECONDARY,
435
- MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
436
- MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
437
- MarketTypeId.SECOND_PERIOD_ODD_EVEN_SECONDARY,
438
- MarketTypeId.SECOND_PERIOD_CORRECT_SCORE_SECONDARY,
439
- MarketTypeId.SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE,
440
- MarketTypeId.SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
441
- MarketTypeId.CORRECT_SCORE_PERIOD_FOUR,
442
- ], // 4th quarter + 2nd half
443
- 5: [
444
- ], // Overtime/5th period
445
- };
446
-
447
- /**
448
- * Innings-based sports period-to-typeId mapping (MLB, NPB, KBO, College Baseball)
449
- * Period 1-5 = Innings 1-5 (period 5 completes 1st half - typeId 10051)
450
- * Period 6-9 = Innings 6-9 (period 9 completes 2nd half - typeId 10052)
451
- */
452
- export const INNINGS_PERIOD_TYPE_ID_MAPPING: { [period: number]: number[] } = {
453
- 1: [
454
- MarketTypeId.FIRST_PERIOD_MONEYLINE,
455
- MarketTypeId.FIRST_PERIOD_TOTAL,
456
- MarketTypeId.FIRST_PERIOD_SPREAD,
457
- MarketTypeId.FIRST_PERIOD_ODD_EVEN,
458
- MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
459
- MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
460
- MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
461
- MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
462
- MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
463
- ], // 1st inning
464
- 2: [
465
- MarketTypeId.SECOND_PERIOD_MONEYLINE,
466
- MarketTypeId.SECOND_PERIOD_TOTAL,
467
- MarketTypeId.SECOND_PERIOD_SPREAD,
468
- MarketTypeId.SECOND_PERIOD_ODD_EVEN,
469
- MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
470
- MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
471
- MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
472
- MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
473
- MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
474
- ], // 2nd inning
475
- 3: [
476
- MarketTypeId.THIRD_PERIOD_MONEYLINE,
477
- MarketTypeId.THIRD_PERIOD_TOTAL,
478
- MarketTypeId.THIRD_PERIOD_SPREAD,
479
- MarketTypeId.THIRD_PERIOD_ODD_EVEN,
480
- MarketTypeId.THIRD_PERIOD_HOME_TEAM_SCORE,
481
- MarketTypeId.THIRD_PERIOD_AWAY_TEAM_SCORE,
482
- MarketTypeId.THIRD_PERIOD_DRAW_NO_BET,
483
- MarketTypeId.THIRD_PERIOD_SCORE_SCORE,
484
- MarketTypeId.MONEYLINE_FIRST_THREE_INNINGS,
485
- MarketTypeId.TOTALS_FIRST_THREE_INNINGS,
486
- MarketTypeId.SPREAD_FIRST_THREE_INNINGS,
487
- MarketTypeId.TOTAL_HOME_TEAM_TO_SCORE_FIRST_THREE_INNINGS,
488
- MarketTypeId.TOTAL_AWAY_TEAM_TO_SCORE_FIRST_THREE_INNINGS,
489
- MarketTypeId.SECOND_PERIOD_CORRECT_SCORE_SECONDARY,
490
- MarketTypeId.CORRECT_SCORE_PERIOD_THREE,
491
- ], // 3rd inning + first 3 innings
492
- 4: [
493
- MarketTypeId.FOURTH_PERIOD_MONEYLINE,
494
- MarketTypeId.FOURTH_PERIOD_TOTAL,
495
- MarketTypeId.FOURTH_PERIOD_SPREAD,
496
- MarketTypeId.FOURTH_PERIOD_ODD_EVEN,
497
- MarketTypeId.FOURTH_PERIOD_HOME_TEAM_SCORE,
498
- MarketTypeId.FOURTH_PERIOD_AWAY_TEAM_SCORE,
499
- MarketTypeId.FOURTH_PERIOD_DRAW_NO_BET,
500
- MarketTypeId.FOURTH_PERIOD_SCORE_SCORE,
501
- MarketTypeId.CORRECT_SCORE_PERIOD_FOUR,
502
- ], // 4th inning
503
- 5: [
504
- MarketTypeId.FIFTH_PERIOD_MONEYLINE,
505
- MarketTypeId.FIFTH_PERIOD_TOTAL,
506
- MarketTypeId.FIFTH_PERIOD_SPREAD,
507
- MarketTypeId.FIFTH_PERIOD_ODD_EVEN,
508
- MarketTypeId.FIFTH_PERIOD_HOME_TEAM_SCORE,
509
- MarketTypeId.FIFTH_PERIOD_AWAY_TEAM_SCORE,
510
- MarketTypeId.FIFTH_PERIOD_SCORE_SCORE,
511
- MarketTypeId.FIRST_PERIOD_MONEYLINE_SECONDARY,
512
- MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
513
- MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
514
- MarketTypeId.FIRST_PERIOD_CORRECT_SCORE_SECONDARY,
515
- MarketTypeId.FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE,
516
- MarketTypeId.FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
517
- MarketTypeId.CORRECT_SCORE_PERIOD_FIVE,
518
- ], // 5th inning + 1st half (first 5 innings)
519
- 6: [
520
- MarketTypeId.SIXTH_PERIOD_MONEYLINE,
521
- MarketTypeId.SIXTH_PERIOD_TOTAL,
522
- MarketTypeId.SIXTH_PERIOD_SPREAD,
523
- MarketTypeId.SIXTH_PERIOD_ODD_EVEN,
524
- MarketTypeId.SIXTH_PERIOD_HOME_TEAM_SCORE,
525
- MarketTypeId.SIXTH_PERIOD_AWAY_TEAM_SCORE,
526
- MarketTypeId.SIXTH_PERIOD_SCORE_SCORE,
527
- MarketTypeId.CORRECT_SCORE_PERIOD_SIX,
528
- ], // 6th inning
529
- 7: [
530
- MarketTypeId.SEVENTH_PERIOD_MONEYLINE,
531
- MarketTypeId.SEVENTH_PERIOD_TOTAL,
532
- MarketTypeId.SEVENTH_PERIOD_SPREAD,
533
- MarketTypeId.SEVENTH_PERIOD_ODD_EVEN,
534
- MarketTypeId.SEVENTH_PERIOD_HOME_TEAM_SCORE,
535
- MarketTypeId.SEVENTH_PERIOD_AWAY_TEAM_SCORE,
536
- MarketTypeId.SEVENTH_PERIOD_CORRECT_SCORE_SECONDARY,
537
- MarketTypeId.SEVENTH_PERIOD_SCORE_SCORE,
538
- MarketTypeId.MONEYLINE_FIRST_SEVEN_INNINGS,
539
- MarketTypeId.TOTALS_FIRST_SEVEN_INNINGS,
540
- MarketTypeId.SPREAD_FIRST_SEVEN_INNINGS,
541
- MarketTypeId.TOTAL_HOME_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS,
542
- MarketTypeId.TOTAL_AWAY_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS,
543
- MarketTypeId.CORRECT_SCORE_PERIOD_SEVEN,
544
- ], // 7th inning + first 7 innings
545
- 8: [
546
- MarketTypeId.EIGHTH_PERIOD_MONEYLINE,
547
- MarketTypeId.EIGHTH_PERIOD_TOTAL,
548
- MarketTypeId.EIGHTH_PERIOD_SPREAD,
549
- MarketTypeId.EIGHTH_PERIOD_ODD_EVEN,
550
- MarketTypeId.EIGHTH_PERIOD_HOME_TEAM_SCORE,
551
- MarketTypeId.EIGHTH_PERIOD_AWAY_TEAM_SCORE,
552
- MarketTypeId.EIGHTH_PERIOD_SCORE_SCORE,
553
- MarketTypeId.CORRECT_SCORE_PERIOD_EIGHT,
554
- ], // 8th inning
555
- 9: [
556
- MarketTypeId.NINTH_PERIOD_MONEYLINE,
557
- MarketTypeId.NINTH_PERIOD_TOTAL,
558
- MarketTypeId.NINTH_PERIOD_SPREAD,
559
- MarketTypeId.NINTH_PERIOD_ODD_EVEN,
560
- MarketTypeId.NINTH_PERIOD_SCORE_SCORE,
561
- MarketTypeId.SECOND_PERIOD_MONEYLINE_SECONDARY,
562
- MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
563
- MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
564
- MarketTypeId.SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE,
565
- MarketTypeId.SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
566
- MarketTypeId.CORRECT_SCORE_PERIOD_NINE,
567
- ], // 9th inning
568
- };
569
-
570
- /**
571
- * Period-based sports period-to-typeId mapping (9 periods)
572
- * Excludes halves types (10051, 10052) and secondary moneyline types (ending in 11/12)
573
- */
574
- export const PERIOD_BASED_TYPE_ID_MAPPING: { [period: number]: number[] } = {
575
- 1: [
576
- MarketTypeId.FIRST_PERIOD_MONEYLINE,
577
- MarketTypeId.FIRST_PERIOD_TOTAL,
578
- MarketTypeId.FIRST_PERIOD_SPREAD,
579
- MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
580
- MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
581
- MarketTypeId.FIRST_PERIOD_ODD_EVEN,
582
- MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
583
- MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
584
- MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
585
- MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
586
- MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
587
- ], // 1st period
588
- 2: [
589
- MarketTypeId.SECOND_PERIOD_MONEYLINE,
590
- MarketTypeId.SECOND_PERIOD_TOTAL,
591
- MarketTypeId.SECOND_PERIOD_SPREAD,
592
- MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
593
- MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
594
- MarketTypeId.SECOND_PERIOD_ODD_EVEN,
595
- MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
596
- MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
597
- MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
598
- MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
599
- MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
600
- ], // 2nd period
601
- 3: [
602
- MarketTypeId.THIRD_PERIOD_MONEYLINE,
603
- MarketTypeId.THIRD_PERIOD_TOTAL,
604
- MarketTypeId.THIRD_PERIOD_SPREAD,
605
- MarketTypeId.THIRD_PERIOD_TOTAL_SECONDARY,
606
- MarketTypeId.THIRD_PERIOD_SPREAD_SECONDARY,
607
- MarketTypeId.THIRD_PERIOD_ODD_EVEN,
608
- MarketTypeId.THIRD_PERIOD_DRAW_NO_BET,
609
- MarketTypeId.THIRD_PERIOD_HOME_TEAM_SCORE,
610
- MarketTypeId.THIRD_PERIOD_AWAY_TEAM_SCORE,
611
- MarketTypeId.CORRECT_SCORE_PERIOD_THREE,
612
- MarketTypeId.THIRD_PERIOD_SCORE_SCORE,
613
- ], // 3rd period
614
- 4: [
615
- MarketTypeId.FOURTH_PERIOD_MONEYLINE,
616
- MarketTypeId.FOURTH_PERIOD_TOTAL,
617
- MarketTypeId.FOURTH_PERIOD_SPREAD,
618
- MarketTypeId.FOURTH_PERIOD_TOTAL_SECONDARY,
619
- MarketTypeId.FOURTH_PERIOD_SPREAD_SECONDARY,
620
- MarketTypeId.FOURTH_PERIOD_ODD_EVEN,
621
- MarketTypeId.FOURTH_PERIOD_DRAW_NO_BET,
622
- MarketTypeId.FOURTH_PERIOD_HOME_TEAM_SCORE,
623
- MarketTypeId.FOURTH_PERIOD_AWAY_TEAM_SCORE,
624
- MarketTypeId.CORRECT_SCORE_PERIOD_FOUR,
625
- MarketTypeId.FOURTH_PERIOD_SCORE_SCORE,
626
- ], // 4th period
627
- 5: [
628
- MarketTypeId.FIFTH_PERIOD_MONEYLINE,
629
- MarketTypeId.FIFTH_PERIOD_TOTAL,
630
- MarketTypeId.FIFTH_PERIOD_SPREAD,
631
- MarketTypeId.FIFTH_PERIOD_TOTAL_SECONDARY,
632
- MarketTypeId.FIFTH_PERIOD_SPREAD_SECONDARY,
633
- MarketTypeId.FIFTH_PERIOD_ODD_EVEN,
634
- MarketTypeId.FIFTH_PERIOD_HOME_TEAM_SCORE,
635
- MarketTypeId.FIFTH_PERIOD_AWAY_TEAM_SCORE,
636
- MarketTypeId.CORRECT_SCORE_PERIOD_FIVE,
637
- MarketTypeId.FIFTH_PERIOD_SCORE_SCORE,
638
- ], // 5th period
639
- };
640
-
641
- /**
642
- * Full game type IDs that should NOT be resolved during live games
643
- * These can only be resolved when the game status is "completed"
644
- */
645
- export const FULL_GAME_TYPE_IDS: number[] = [
646
- MarketTypeId.WINNER,
647
- MarketTypeId.SPREAD,
648
- MarketTypeId.TOTALS,
649
- MarketTypeId.DOUBLE_CHANCE,
650
- MarketTypeId.MONEYLINE_TOTAL,
651
- MarketTypeId.DRAW_NO_BET,
652
- MarketTypeId.SECOND_MONEYLINE,
653
- MarketTypeId.THIRD_MONEYLINE,
654
- ];
655
-
656
-
1
+ export type PeriodScores = {
2
+ [key: string]: { home: number; away: number };
3
+ };
4
+
5
+ export type PeriodResolutionData = {
6
+ completedPeriods: number[];
7
+ readyForResolution: boolean;
8
+ periodScores: PeriodScores;
9
+ currentPeriod?: number;
10
+ };
11
+
12
+ /**
13
+ * OpticOdds Event type from their API response
14
+ * Uses 'any' for flexibility as API structure may vary
15
+ */
16
+ export type OpticOddsEvent = any;
17
+
18
+ /**
19
+ * Sport period structure types
20
+ * Different sports have different period structures that affect how typeIds are resolved
21
+ */
22
+ export enum SportPeriodType {
23
+ /** Sports with 2 halves (Soccer, NCAAB) */
24
+ HALVES_BASED = 'halves_based',
25
+ /** Sports with 4 quarters (NFL, NBA) */
26
+ QUARTERS_BASED = 'quarters_based',
27
+ /** Sports with 9+ innings (MLB, NPB, KBO, College Baseball, etc.) */
28
+ INNINGS_BASED = 'innings_based',
29
+ /** Sports with 9 periods without halves or secondary moneyline types */
30
+ PERIOD_BASED = 'period_based',
31
+ }
32
+
33
+ /**
34
+ * Comprehensive enum of all market type IDs
35
+ * Maps numeric type IDs to their descriptive names
36
+ */
37
+ export enum MarketTypeId {
38
+ WINNER = 0,
39
+ SPREAD = 10001,
40
+ TOTALS = 10002,
41
+ DOUBLE_CHANCE = 10003,
42
+ MONEYLINE_TOTAL = 10004,
43
+ ODD_EVEN = 10005,
44
+ HALFTIME_FULLTIME = 10006,
45
+ GOALS = 10007,
46
+ HALFTIME_FULLTIME_GOALS = 10008,
47
+ SCORE_SCORE = 10009,
48
+ DRAW_NO_BET = 10010,
49
+ SECOND_MONEYLINE = 10011,
50
+ THIRD_MONEYLINE = 10012,
51
+ SPREAD_SECOND_SPREAD = 10013,
52
+ TOTALS_SECOND_TOTAL = 10014,
53
+ DOUBLE_CHANCE_FIRST_PERIOD = 10015,
54
+ DOUBLE_CHANCE_SECOND_PERIOD = 10016,
55
+ HOME_TEAM_SCORE = 10017,
56
+ AWAY_TEAM_SCORE = 10018,
57
+ FIRST_TEAM_SCORE = 10019,
58
+ LAST_TEAM_SCORE = 10020,
59
+ FIRST_PERIOD_MONEYLINE = 10021,
60
+ SECOND_PERIOD_MONEYLINE = 10022,
61
+ THIRD_PERIOD_MONEYLINE = 10023,
62
+ FOURTH_PERIOD_MONEYLINE = 10024,
63
+ FIFTH_PERIOD_MONEYLINE = 10025,
64
+ SIXTH_PERIOD_MONEYLINE = 10026,
65
+ SEVENTH_PERIOD_MONEYLINE = 10027,
66
+ EIGHTH_PERIOD_MONEYLINE = 10028,
67
+ NINTH_PERIOD_MONEYLINE = 10029,
68
+ FIRST_PERIOD_TOTAL = 10031,
69
+ SECOND_PERIOD_TOTAL = 10032,
70
+ THIRD_PERIOD_TOTAL = 10033,
71
+ FOURTH_PERIOD_TOTAL = 10034,
72
+ FIFTH_PERIOD_TOTAL = 10035,
73
+ SIXTH_PERIOD_TOTAL = 10036,
74
+ SEVENTH_PERIOD_TOTAL = 10037,
75
+ EIGHTH_PERIOD_TOTAL = 10038,
76
+ NINTH_PERIOD_TOTAL = 10039,
77
+ FIRST_PERIOD_SPREAD = 10041,
78
+ SECOND_PERIOD_SPREAD = 10042,
79
+ THIRD_PERIOD_SPREAD = 10043,
80
+ FOURTH_PERIOD_SPREAD = 10044,
81
+ FIFTH_PERIOD_SPREAD = 10045,
82
+ SIXTH_PERIOD_SPREAD = 10046,
83
+ SEVENTH_PERIOD_SPREAD = 10047,
84
+ EIGHTH_PERIOD_SPREAD = 10048,
85
+ NINTH_PERIOD_SPREAD = 10049,
86
+ FIRST_PERIOD_MONEYLINE_SECONDARY_3WAY = 10050,
87
+ FIRST_PERIOD_MONEYLINE_SECONDARY = 10051,
88
+ SECOND_PERIOD_MONEYLINE_SECONDARY = 10052,
89
+ THIRD_PERIOD_MONEYLINE_SECONDARY = 10053,
90
+ FOURTH_PERIOD_MONEYLINE_SECONDARY = 10054,
91
+ FIFTH_PERIOD_MONEYLINE_SECONDARY = 10055,
92
+ SIXTH_PERIOD_MONEYLINE_SECONDARY = 10056,
93
+ SEVENTH_PERIOD_MONEYLINE_SECONDARY = 10057,
94
+ EIGHTH_PERIOD_MONEYLINE_SECONDARY = 10058,
95
+ NINTH_PERIOD_MONEYLINE_SECONDARY = 10059,
96
+ FIRST_PERIOD_TOTAL_SECONDARY = 10061,
97
+ SECOND_PERIOD_TOTAL_SECONDARY = 10062,
98
+ THIRD_PERIOD_TOTAL_SECONDARY = 10063,
99
+ FOURTH_PERIOD_TOTAL_SECONDARY = 10064,
100
+ FIFTH_PERIOD_TOTAL_SECONDARY = 10065,
101
+ SIXTH_PERIOD_TOTAL_SECONDARY = 10066,
102
+ SEVENTH_PERIOD_TOTAL_SECONDARY = 10067,
103
+ EIGHTH_PERIOD_TOTAL_SECONDARY = 10068,
104
+ NINTH_PERIOD_TOTAL_SECONDARY = 10069,
105
+ FIRST_PERIOD_SPREAD_SECONDARY = 10071,
106
+ SECOND_PERIOD_SPREAD_SECONDARY = 10072,
107
+ THIRD_PERIOD_SPREAD_SECONDARY = 10073,
108
+ FOURTH_PERIOD_SPREAD_SECONDARY = 10074,
109
+ FIFTH_PERIOD_SPREAD_SECONDARY = 10075,
110
+ SIXTH_PERIOD_SPREAD_SECONDARY = 10076,
111
+ SEVENTH_PERIOD_SPREAD_SECONDARY = 10077,
112
+ EIGHTH_PERIOD_SPREAD_SECONDARY = 10078,
113
+ NINTH_PERIOD_SPREAD_SECONDARY = 10079,
114
+ FIRST_PERIOD_ODD_EVEN = 10081,
115
+ SECOND_PERIOD_ODD_EVEN = 10082,
116
+ THIRD_PERIOD_ODD_EVEN = 10083,
117
+ FOURTH_PERIOD_ODD_EVEN = 10084,
118
+ FIFTH_PERIOD_ODD_EVEN = 10085,
119
+ SIXTH_PERIOD_ODD_EVEN = 10086,
120
+ SEVENTH_PERIOD_ODD_EVEN = 10087,
121
+ EIGHTH_PERIOD_ODD_EVEN = 10088,
122
+ NINTH_PERIOD_ODD_EVEN = 10089,
123
+ FIRST_PERIOD_ODD_EVEN_SECONDARY = 10091,
124
+ SECOND_PERIOD_ODD_EVEN_SECONDARY = 10092,
125
+ THIRD_PERIOD_ODD_EVEN_SECONDARY = 10093,
126
+ FOURTH_PERIOD_ODD_EVEN_SECONDARY = 10094,
127
+ FIFTH_PERIOD_ODD_EVEN_SECONDARY = 10095,
128
+ SIXTH_PERIOD_ODD_EVEN_SECONDARY = 10096,
129
+ SEVENTH_PERIOD_ODD_EVEN_SECONDARY = 10097,
130
+ EIGHTH_PERIOD_ODD_EVEN_SECONDARY = 10098,
131
+ NINTH_PERIOD_ODD_EVEN_SECONDARY = 10099,
132
+ CORRECT_SCORE = 10100,
133
+ FIRST_PERIOD_SCORE_SCORE = 10101,
134
+ SECOND_PERIOD_SCORE_SCORE = 10102,
135
+ THIRD_PERIOD_SCORE_SCORE = 10103,
136
+ FOURTH_PERIOD_SCORE_SCORE = 10104,
137
+ FIFTH_PERIOD_SCORE_SCORE = 10105,
138
+ SIXTH_PERIOD_SCORE_SCORE = 10106,
139
+ SEVENTH_PERIOD_SCORE_SCORE = 10107,
140
+ EIGHTH_PERIOD_SCORE_SCORE = 10108,
141
+ NINTH_PERIOD_SCORE_SCORE = 10109,
142
+ FIRST_PERIOD_HOME_TEAM_SCORE = 10111,
143
+ FIRST_PERIOD_AWAY_TEAM_SCORE = 10112,
144
+ FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE = 10118,
145
+ FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE = 10119,
146
+ FIRST_PERIOD_DRAW_NO_BET = 10121,
147
+ SECOND_PERIOD_DRAW_NO_BET = 10122,
148
+ THIRD_PERIOD_DRAW_NO_BET = 10123,
149
+ FOURTH_PERIOD_DRAW_NO_BET = 10124,
150
+ WHO_WILL_QUALIFY = 10130,
151
+ WILL_THERE_BE_OVERTIME = 10131,
152
+ NO_RUNS_FIRST_INNING = 10132,
153
+ WILL_THERE_BE_CENTURY = 10133,
154
+ WILL_THERE_BE_FIFTY = 10134,
155
+ WILL_THERE_BE_SAFETY = 10135,
156
+ HOME_TEAM_CLEAN_SHEET = 10141,
157
+ AWAY_TEAM_CLEAN_SHEET = 10142,
158
+ HOME_TEAM_EXACT_TOTAL = 10143,
159
+ AWAY_TEAM_EXACT_TOTAL = 10144,
160
+ HOME_TEAM_EXACT_TOTAL_FIRST_PERIOD = 10145,
161
+ AWAY_TEAM_EXACT_TOTAL_FIRST_PERIOD = 10146,
162
+ HOME_TEAM_EXACT_TOTAL_SECOND_PERIOD = 10147,
163
+ AWAY_TEAM_EXACT_TOTAL_SECOND_PERIOD = 10148,
164
+ WINNING_ROUNDS = 10151,
165
+ GO_THE_DISTANCE = 10154,
166
+ FIRST_MINUTE_STOPPAGE = 10155,
167
+ WILL_POINT_BE_DEDUCTED = 10156,
168
+ WINNING_METHOD = 10157,
169
+ VICTORY_METHOD = 10158,
170
+ TOTAL_TIEBREAKS = 10160,
171
+ TOTAL_ACES = 10161,
172
+ WILL_THERE_BE_TIEBREAK = 10162,
173
+ CORRECT_SCORE_PERIOD_ONE = 10163,
174
+ CORRECT_SCORE_PERIOD_TWO = 10164,
175
+ CORRECT_SCORE_PERIOD_THREE = 10165,
176
+ CORRECT_SCORE_PERIOD_FOUR = 10166,
177
+ CORRECT_SCORE_PERIOD_FIVE = 10167,
178
+ CORRECT_SCORE_PERIOD_SIX = 10168,
179
+ CORRECT_SCORE_PERIOD_SEVEN = 10169,
180
+ MONEYLINE_FIRST_THREE_INNINGS = 10170,
181
+ TOTALS_FIRST_THREE_INNINGS = 10171,
182
+ SPREAD_FIRST_THREE_INNINGS = 10172,
183
+ TOTAL_HOME_TEAM_TO_SCORE_FIRST_THREE_INNINGS = 10173,
184
+ TOTAL_AWAY_TEAM_TO_SCORE_FIRST_THREE_INNINGS = 10174,
185
+ MONEYLINE_FIRST_SEVEN_INNINGS = 10175,
186
+ TOTALS_FIRST_SEVEN_INNINGS = 10176,
187
+ SPREAD_FIRST_SEVEN_INNINGS = 10177,
188
+ TOTAL_HOME_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS = 10178,
189
+ TOTAL_AWAY_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS = 10179,
190
+ TOTAL_SIXES = 10180,
191
+ TOTAL_FOURS = 10181,
192
+ TOTAL_RUNS_OUTS = 10182,
193
+ TOTAL_HOME_TEAM_SIXES = 10183,
194
+ TOTAL_AWAY_TEAM_SIXES = 10184,
195
+ TOTAL_HOME_TEAM_FOURS = 10185,
196
+ TOTAL_AWAY_TEAM_FOURS = 10186,
197
+ TOTAL_HOME_TEAM_RUNS_OUTS = 10187,
198
+ TOTAL_AWAY_TEAM_RUNS_OUTS = 10188,
199
+ MOST_FOURS = 10189,
200
+ MOST_SIXES = 10190,
201
+ MOST_RUNS_OUTS = 10191,
202
+ TOTAL_FIELD_GOALS = 10192,
203
+ TOTAL_PUNTS = 10193,
204
+ TOTAL_TOUCHDOWNS = 10194,
205
+ TOTAL_TOUCHDOWNS_HOME_TEAM = 10195,
206
+ TOTAL_TOUCHDOWNS_AWAY_TEAM = 10196,
207
+ CORRECT_SCORE_PERIOD_EIGHT = 10197,
208
+ CORRECT_SCORE_PERIOD_NINE = 10198,
209
+ FIRST_PERIOD_CORRECT_SCORE_SECONDARY = 10200,
210
+ SECOND_PERIOD_CORRECT_SCORE_SECONDARY = 10201,
211
+ SEVENTH_PERIOD_CORRECT_SCORE_SECONDARY = 10202,
212
+ HOME_TEAM_TO_SCORE = 10204,
213
+ AWAY_TEAM_TO_SCORE = 10205,
214
+ HOME_TEAM_TO_WIN_WITH_NIL = 10206,
215
+ AWAY_TEAM_TO_WIN_WITH_NIL = 10207,
216
+ SECOND_PERIOD_HOME_TEAM_SCORE = 10211,
217
+ SECOND_PERIOD_AWAY_TEAM_SCORE = 10212,
218
+ SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE = 10218,
219
+ SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE = 10219,
220
+ SPREAD_CORNERS = 10221,
221
+ TOTAL_CORNERS = 10222,
222
+ TOTAL_HOME_TEAM_CORNERS = 10223,
223
+ TOTAL_AWAY_TEAM_CORNERS = 10224,
224
+ TOTAL_CORNERS_ODD_EVEN = 10225,
225
+ TOTAL_CORNERS_FIRST_PERIOD = 10226,
226
+ TOTAL_CORNERS_SECOND_PERIOD = 10227,
227
+ TOTAL_HOME_TEAM_CORNERS_FIRST_PERIOD = 10228,
228
+ TOTAL_AWAY_TEAM_CORNERS_FIRST_PERIOD = 10229,
229
+ TOTAL_HOME_TEAM_CORNERS_SECOND_PERIOD = 10230,
230
+ TOTAL_AWAY_TEAM_CORNERS_SECOND_PERIOD = 10231,
231
+ SPREAD_CORNERS_FIRST_PERIOD = 10232,
232
+ SPREAD_CORNERS_SECOND_PERIOD = 10233,
233
+ MOST_CORNERS = 10234,
234
+ MOST_CORNERS_FIRST_PERIOD = 10235,
235
+ MOST_CORNERS_SECOND_PERIOD = 10236,
236
+ SPREAD_CARDS_POINTS = 10241,
237
+ TOTAL_CARDS_POINTS = 10242,
238
+ TOTAL_HOME_TEAM_CARD_POINTS = 10243,
239
+ TOTAL_AWAY_TEAM_CARD_POINTS = 10244,
240
+ TOTAL_RED_CARDS = 10245,
241
+ MOST_CARDS = 10246,
242
+ FIRST_CARD = 10247,
243
+ LAST_CARD = 10248,
244
+ TOTAL_180 = 10250,
245
+ CHECKOUTS_100_PLUS = 10251,
246
+ MOST_180 = 10252,
247
+ HIGHEST_MATCH_CHECKOUT_PLAYER = 10253,
248
+ HIGHEST_MATCH_CHECKOUT_POINTS = 10254,
249
+ TOTAL_STEALS = 10268,
250
+ TOTAL_BLOCKS = 10269,
251
+ TOTAL_ASSISTS = 10270,
252
+ TOTAL_MADE_THREES = 10271,
253
+ TOTAL_MADE_THREES_HOME_TEAM = 10272,
254
+ TOTAL_MADE_THREES_AWAY_TEAM = 10273,
255
+ THIRD_PERIOD_HOME_TEAM_SCORE = 10311,
256
+ THIRD_PERIOD_AWAY_TEAM_SCORE = 10312,
257
+ SPREAD_KILLS = 10320,
258
+ TOTAL_KILLS = 10321,
259
+ TOTAL_HOME_TEAM_KILLS = 10322,
260
+ TOTAL_AWAY_TEAM_KILLS = 10323,
261
+ TOTAL_KILLS_ODD_EVEN = 10324,
262
+ FIRST_PERIOD_SPREAD_KILLS = 10325,
263
+ FIRST_PERIOD_TOTAL_KILLS = 10326,
264
+ FIRST_PERIOD_TOTAL_HOME_TEAM_KILLS = 10327,
265
+ FIRST_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10328,
266
+ FIRST_PERIOD_TOTAL_KILLS_ODD_EVEN = 10329,
267
+ SECOND_PERIOD_SPREAD_KILLS = 10330,
268
+ SECOND_PERIOD_TOTAL_KILLS = 10331,
269
+ SECOND_PERIOD_TOTAL_HOME_TEAM_KILLS = 10332,
270
+ SECOND_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10333,
271
+ SECOND_PERIOD_TOTAL_KILLS_ODD_EVEN = 10334,
272
+ THIRD_PERIOD_SPREAD_KILLS = 10335,
273
+ THIRD_PERIOD_TOTAL_KILLS = 10336,
274
+ THIRD_PERIOD_TOTAL_HOME_TEAM_KILLS = 10337,
275
+ THIRD_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10338,
276
+ THIRD_PERIOD_TOTAL_KILLS_ODD_EVEN = 10339,
277
+ FOURTH_PERIOD_SPREAD_KILLS = 10340,
278
+ FOURTH_PERIOD_TOTAL_KILLS = 10341,
279
+ FOURTH_PERIOD_TOTAL_HOME_TEAM_KILLS = 10342,
280
+ FOURTH_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10343,
281
+ FOURTH_PERIOD_TOTAL_KILLS_ODD_EVEN = 10344,
282
+ FIFTH_PERIOD_SPREAD_KILLS = 10345,
283
+ FIFTH_PERIOD_TOTAL_KILLS = 10346,
284
+ FIFTH_PERIOD_TOTAL_HOME_TEAM_KILLS = 10347,
285
+ FIFTH_PERIOD_TOTAL_AWAY_TEAM_KILLS = 10348,
286
+ FIFTH_PERIOD_TOTAL_KILLS_ODD_EVEN = 10349,
287
+ FOURTH_PERIOD_HOME_TEAM_SCORE = 10411,
288
+ FOURTH_PERIOD_AWAY_TEAM_SCORE = 10412,
289
+ FIRST_PERIOD_TOTAL_FIELD_GOALS = 10413,
290
+ FIRST_PERIOD_TOTAL_TOUCHDOWNS = 10414,
291
+ FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10415,
292
+ FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10416,
293
+ FIRST_PERIOD_TOTAL_FIELD_GOALS_SECONDARY = 10417,
294
+ FIRST_PERIOD_TOTAL_TOUCHDOWNS_SECONDARY = 10418,
295
+ FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM_SECONDARY = 10419,
296
+ FIRST_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM_SECONDARY = 10420,
297
+ SECOND_PERIOD_TOTAL_FIELD_GOALS = 10421,
298
+ SECOND_PERIOD_TOTAL_TOUCHDOWNS = 10422,
299
+ SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10423,
300
+ SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10424,
301
+ SECOND_PERIOD_TOTAL_FIELD_GOALS_SECONDARY = 10425,
302
+ SECOND_PERIOD_TOTAL_TOUCHDOWNS_SECONDARY = 10426,
303
+ SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM_SECONDARY = 10427,
304
+ SECOND_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM_SECONDARY = 10428,
305
+ THIRD_PERIOD_TOTAL_FIELD_GOALS = 10429,
306
+ THIRD_PERIOD_TOTAL_TOUCHDOWNS = 10430,
307
+ THIRD_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10431,
308
+ THIRD_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10432,
309
+ FOURTH_PERIOD_TOTAL_FIELD_GOALS = 10433,
310
+ FOURTH_PERIOD_TOTAL_TOUCHDOWNS = 10434,
311
+ FOURTH_PERIOD_TEAM_TOTAL_TOUCHDOWNS_HOME_TEAM = 10435,
312
+ FOURTH_PERIOD_TEAM_TOTAL_TOUCHDOWNS_AWAY_TEAM = 10436,
313
+ FIFTH_PERIOD_HOME_TEAM_SCORE = 10511,
314
+ FIFTH_PERIOD_AWAY_TEAM_SCORE = 10512,
315
+ SIXTH_PERIOD_HOME_TEAM_SCORE = 10611,
316
+ SIXTH_PERIOD_AWAY_TEAM_SCORE = 10612,
317
+ SEVENTH_PERIOD_HOME_TEAM_SCORE = 10711,
318
+ SEVENTH_PERIOD_AWAY_TEAM_SCORE = 10712,
319
+ EIGHTH_PERIOD_HOME_TEAM_SCORE = 10811,
320
+ EIGHTH_PERIOD_AWAY_TEAM_SCORE = 10812,
321
+ POPULAR_VOTES = 10900,
322
+ WINNING_PARTY = 10901,
323
+ WINNING_PARTY_AR = 10902,
324
+ WINNING_PARTY_GE = 10903,
325
+ WINNING_PARTY_MI = 10904,
326
+ WINNING_PARTY_NE = 10905,
327
+ WINNING_PARTY_PE = 10906,
328
+ WINNING_PARTY_WI = 10907,
329
+ WINNING_PARTY_NC = 10908,
330
+ PLAYER_PROPS = 11000,
331
+ }
332
+
333
+ /**
334
+ * Halves-based sports period-to-typeId mapping (Soccer, NCAAB)
335
+ * Period 1 = 1st half
336
+ * Period 2 = 2nd half
337
+ */
338
+ export const HALVES_PERIOD_TYPE_ID_MAPPING: { [period: number]: number[] } = {
339
+ 1: [
340
+ MarketTypeId.FIRST_PERIOD_MONEYLINE,
341
+ MarketTypeId.FIRST_PERIOD_TOTAL,
342
+ MarketTypeId.FIRST_PERIOD_SPREAD,
343
+ MarketTypeId.FIRST_PERIOD_MONEYLINE_SECONDARY,
344
+ MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
345
+ MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
346
+ MarketTypeId.FIRST_PERIOD_ODD_EVEN,
347
+ MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
348
+ MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
349
+ MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
350
+ MarketTypeId.FIRST_PERIOD_CORRECT_SCORE_SECONDARY,
351
+ MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
352
+ MarketTypeId.FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE,
353
+ MarketTypeId.FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
354
+ MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
355
+ ], // 1st half
356
+ 2: [
357
+ MarketTypeId.SECOND_PERIOD_MONEYLINE,
358
+ MarketTypeId.SECOND_PERIOD_TOTAL,
359
+ MarketTypeId.SECOND_PERIOD_SPREAD,
360
+ MarketTypeId.SECOND_PERIOD_MONEYLINE_SECONDARY,
361
+ MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
362
+ MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
363
+ MarketTypeId.SECOND_PERIOD_ODD_EVEN,
364
+ MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
365
+ MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
366
+ MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
367
+ MarketTypeId.SECOND_PERIOD_CORRECT_SCORE_SECONDARY,
368
+ MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
369
+ MarketTypeId.SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE,
370
+ MarketTypeId.SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
371
+ MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
372
+ ], // 2nd half
373
+ };
374
+
375
+ /**
376
+ * Quarters-based sports period-to-typeId mapping (NFL, NBA)
377
+ * Period 1 = 1st quarter
378
+ * Period 2 = 2nd quarter (also completes 1st half - typeId 10051)
379
+ * Period 3 = 3rd quarter
380
+ * Period 4 = 4th quarter (also completes 2nd half - typeId 10052)
381
+ * Period 5+ = Overtime
382
+ */
383
+ export const QUARTERS_PERIOD_TYPE_ID_MAPPING: { [period: number]: number[] } = {
384
+ 1: [
385
+ MarketTypeId.FIRST_PERIOD_MONEYLINE,
386
+ MarketTypeId.FIRST_PERIOD_TOTAL,
387
+ MarketTypeId.FIRST_PERIOD_SPREAD,
388
+ MarketTypeId.FIRST_PERIOD_ODD_EVEN,
389
+ MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
390
+ MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
391
+ MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
392
+ MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
393
+ MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
394
+ ], // 1st quarter
395
+ 2: [
396
+ MarketTypeId.SECOND_PERIOD_MONEYLINE,
397
+ MarketTypeId.SECOND_PERIOD_TOTAL,
398
+ MarketTypeId.SECOND_PERIOD_SPREAD,
399
+ MarketTypeId.SECOND_PERIOD_ODD_EVEN,
400
+ MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
401
+ MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
402
+ MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
403
+ MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
404
+ MarketTypeId.FIRST_PERIOD_MONEYLINE_SECONDARY,
405
+ MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
406
+ MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
407
+ MarketTypeId.FIRST_PERIOD_ODD_EVEN_SECONDARY,
408
+ MarketTypeId.FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE,
409
+ MarketTypeId.FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
410
+ MarketTypeId.FIRST_PERIOD_CORRECT_SCORE_SECONDARY,
411
+ MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
412
+ MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
413
+ ], // 2nd quarter + 1st half
414
+ 3: [
415
+ MarketTypeId.THIRD_PERIOD_MONEYLINE,
416
+ MarketTypeId.THIRD_PERIOD_TOTAL,
417
+ MarketTypeId.THIRD_PERIOD_SPREAD,
418
+ MarketTypeId.THIRD_PERIOD_ODD_EVEN,
419
+ MarketTypeId.THIRD_PERIOD_HOME_TEAM_SCORE,
420
+ MarketTypeId.THIRD_PERIOD_AWAY_TEAM_SCORE,
421
+ MarketTypeId.THIRD_PERIOD_DRAW_NO_BET,
422
+ MarketTypeId.THIRD_PERIOD_SCORE_SCORE,
423
+ MarketTypeId.CORRECT_SCORE_PERIOD_THREE,
424
+ ], // 3rd quarter
425
+ 4: [
426
+ MarketTypeId.FOURTH_PERIOD_MONEYLINE,
427
+ MarketTypeId.FOURTH_PERIOD_TOTAL,
428
+ MarketTypeId.FOURTH_PERIOD_SPREAD,
429
+ MarketTypeId.FOURTH_PERIOD_ODD_EVEN,
430
+ MarketTypeId.FOURTH_PERIOD_HOME_TEAM_SCORE,
431
+ MarketTypeId.FOURTH_PERIOD_AWAY_TEAM_SCORE,
432
+ MarketTypeId.FOURTH_PERIOD_DRAW_NO_BET,
433
+ MarketTypeId.FOURTH_PERIOD_SCORE_SCORE,
434
+ MarketTypeId.SECOND_PERIOD_MONEYLINE_SECONDARY,
435
+ MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
436
+ MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
437
+ MarketTypeId.SECOND_PERIOD_ODD_EVEN_SECONDARY,
438
+ MarketTypeId.SECOND_PERIOD_CORRECT_SCORE_SECONDARY,
439
+ MarketTypeId.SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE,
440
+ MarketTypeId.SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
441
+ MarketTypeId.CORRECT_SCORE_PERIOD_FOUR,
442
+ ], // 4th quarter + 2nd half
443
+ 5: [
444
+ ], // Overtime/5th period
445
+ };
446
+
447
+ /**
448
+ * Innings-based sports period-to-typeId mapping (MLB, NPB, KBO, College Baseball)
449
+ * Period 1-5 = Innings 1-5 (period 5 completes 1st half - typeId 10051)
450
+ * Period 6-9 = Innings 6-9 (period 9 completes 2nd half - typeId 10052)
451
+ */
452
+ export const INNINGS_PERIOD_TYPE_ID_MAPPING: { [period: number]: number[] } = {
453
+ 1: [
454
+ MarketTypeId.FIRST_PERIOD_MONEYLINE,
455
+ MarketTypeId.FIRST_PERIOD_TOTAL,
456
+ MarketTypeId.FIRST_PERIOD_SPREAD,
457
+ MarketTypeId.FIRST_PERIOD_ODD_EVEN,
458
+ MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
459
+ MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
460
+ MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
461
+ MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
462
+ MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
463
+ ], // 1st inning
464
+ 2: [
465
+ MarketTypeId.SECOND_PERIOD_MONEYLINE,
466
+ MarketTypeId.SECOND_PERIOD_TOTAL,
467
+ MarketTypeId.SECOND_PERIOD_SPREAD,
468
+ MarketTypeId.SECOND_PERIOD_ODD_EVEN,
469
+ MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
470
+ MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
471
+ MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
472
+ MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
473
+ MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
474
+ ], // 2nd inning
475
+ 3: [
476
+ MarketTypeId.THIRD_PERIOD_MONEYLINE,
477
+ MarketTypeId.THIRD_PERIOD_TOTAL,
478
+ MarketTypeId.THIRD_PERIOD_SPREAD,
479
+ MarketTypeId.THIRD_PERIOD_ODD_EVEN,
480
+ MarketTypeId.THIRD_PERIOD_HOME_TEAM_SCORE,
481
+ MarketTypeId.THIRD_PERIOD_AWAY_TEAM_SCORE,
482
+ MarketTypeId.THIRD_PERIOD_DRAW_NO_BET,
483
+ MarketTypeId.THIRD_PERIOD_SCORE_SCORE,
484
+ MarketTypeId.MONEYLINE_FIRST_THREE_INNINGS,
485
+ MarketTypeId.TOTALS_FIRST_THREE_INNINGS,
486
+ MarketTypeId.SPREAD_FIRST_THREE_INNINGS,
487
+ MarketTypeId.TOTAL_HOME_TEAM_TO_SCORE_FIRST_THREE_INNINGS,
488
+ MarketTypeId.TOTAL_AWAY_TEAM_TO_SCORE_FIRST_THREE_INNINGS,
489
+ MarketTypeId.SECOND_PERIOD_CORRECT_SCORE_SECONDARY,
490
+ MarketTypeId.CORRECT_SCORE_PERIOD_THREE,
491
+ ], // 3rd inning + first 3 innings
492
+ 4: [
493
+ MarketTypeId.FOURTH_PERIOD_MONEYLINE,
494
+ MarketTypeId.FOURTH_PERIOD_TOTAL,
495
+ MarketTypeId.FOURTH_PERIOD_SPREAD,
496
+ MarketTypeId.FOURTH_PERIOD_ODD_EVEN,
497
+ MarketTypeId.FOURTH_PERIOD_HOME_TEAM_SCORE,
498
+ MarketTypeId.FOURTH_PERIOD_AWAY_TEAM_SCORE,
499
+ MarketTypeId.FOURTH_PERIOD_DRAW_NO_BET,
500
+ MarketTypeId.FOURTH_PERIOD_SCORE_SCORE,
501
+ MarketTypeId.CORRECT_SCORE_PERIOD_FOUR,
502
+ ], // 4th inning
503
+ 5: [
504
+ MarketTypeId.FIFTH_PERIOD_MONEYLINE,
505
+ MarketTypeId.FIFTH_PERIOD_TOTAL,
506
+ MarketTypeId.FIFTH_PERIOD_SPREAD,
507
+ MarketTypeId.FIFTH_PERIOD_ODD_EVEN,
508
+ MarketTypeId.FIFTH_PERIOD_HOME_TEAM_SCORE,
509
+ MarketTypeId.FIFTH_PERIOD_AWAY_TEAM_SCORE,
510
+ MarketTypeId.FIFTH_PERIOD_SCORE_SCORE,
511
+ MarketTypeId.FIRST_PERIOD_MONEYLINE_SECONDARY,
512
+ MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
513
+ MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
514
+ MarketTypeId.FIRST_PERIOD_CORRECT_SCORE_SECONDARY,
515
+ MarketTypeId.FIRST_PERIOD_SECONDARY_HOME_TEAM_SCORE,
516
+ MarketTypeId.FIRST_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
517
+ MarketTypeId.CORRECT_SCORE_PERIOD_FIVE,
518
+ ], // 5th inning + 1st half (first 5 innings)
519
+ 6: [
520
+ MarketTypeId.SIXTH_PERIOD_MONEYLINE,
521
+ MarketTypeId.SIXTH_PERIOD_TOTAL,
522
+ MarketTypeId.SIXTH_PERIOD_SPREAD,
523
+ MarketTypeId.SIXTH_PERIOD_ODD_EVEN,
524
+ MarketTypeId.SIXTH_PERIOD_HOME_TEAM_SCORE,
525
+ MarketTypeId.SIXTH_PERIOD_AWAY_TEAM_SCORE,
526
+ MarketTypeId.SIXTH_PERIOD_SCORE_SCORE,
527
+ MarketTypeId.CORRECT_SCORE_PERIOD_SIX,
528
+ ], // 6th inning
529
+ 7: [
530
+ MarketTypeId.SEVENTH_PERIOD_MONEYLINE,
531
+ MarketTypeId.SEVENTH_PERIOD_TOTAL,
532
+ MarketTypeId.SEVENTH_PERIOD_SPREAD,
533
+ MarketTypeId.SEVENTH_PERIOD_ODD_EVEN,
534
+ MarketTypeId.SEVENTH_PERIOD_HOME_TEAM_SCORE,
535
+ MarketTypeId.SEVENTH_PERIOD_AWAY_TEAM_SCORE,
536
+ MarketTypeId.SEVENTH_PERIOD_CORRECT_SCORE_SECONDARY,
537
+ MarketTypeId.SEVENTH_PERIOD_SCORE_SCORE,
538
+ MarketTypeId.MONEYLINE_FIRST_SEVEN_INNINGS,
539
+ MarketTypeId.TOTALS_FIRST_SEVEN_INNINGS,
540
+ MarketTypeId.SPREAD_FIRST_SEVEN_INNINGS,
541
+ MarketTypeId.TOTAL_HOME_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS,
542
+ MarketTypeId.TOTAL_AWAY_TEAM_TO_SCORE_FIRST_SEVEN_INNINGS,
543
+ MarketTypeId.CORRECT_SCORE_PERIOD_SEVEN,
544
+ ], // 7th inning + first 7 innings
545
+ 8: [
546
+ MarketTypeId.EIGHTH_PERIOD_MONEYLINE,
547
+ MarketTypeId.EIGHTH_PERIOD_TOTAL,
548
+ MarketTypeId.EIGHTH_PERIOD_SPREAD,
549
+ MarketTypeId.EIGHTH_PERIOD_ODD_EVEN,
550
+ MarketTypeId.EIGHTH_PERIOD_HOME_TEAM_SCORE,
551
+ MarketTypeId.EIGHTH_PERIOD_AWAY_TEAM_SCORE,
552
+ MarketTypeId.EIGHTH_PERIOD_SCORE_SCORE,
553
+ MarketTypeId.CORRECT_SCORE_PERIOD_EIGHT,
554
+ ], // 8th inning
555
+ 9: [
556
+ MarketTypeId.NINTH_PERIOD_MONEYLINE,
557
+ MarketTypeId.NINTH_PERIOD_TOTAL,
558
+ MarketTypeId.NINTH_PERIOD_SPREAD,
559
+ MarketTypeId.NINTH_PERIOD_ODD_EVEN,
560
+ MarketTypeId.NINTH_PERIOD_SCORE_SCORE,
561
+ MarketTypeId.SECOND_PERIOD_MONEYLINE_SECONDARY,
562
+ MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
563
+ MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
564
+ MarketTypeId.SECOND_PERIOD_SECONDARY_HOME_TEAM_SCORE,
565
+ MarketTypeId.SECOND_PERIOD_SECONDARY_AWAY_TEAM_SCORE,
566
+ MarketTypeId.CORRECT_SCORE_PERIOD_NINE,
567
+ ], // 9th inning
568
+ };
569
+
570
+ /**
571
+ * Period-based sports period-to-typeId mapping (9 periods)
572
+ * Excludes halves types (10051, 10052) and secondary moneyline types (ending in 11/12)
573
+ */
574
+ export const PERIOD_BASED_TYPE_ID_MAPPING: { [period: number]: number[] } = {
575
+ 1: [
576
+ MarketTypeId.FIRST_PERIOD_MONEYLINE,
577
+ MarketTypeId.FIRST_PERIOD_TOTAL,
578
+ MarketTypeId.FIRST_PERIOD_SPREAD,
579
+ MarketTypeId.FIRST_PERIOD_TOTAL_SECONDARY,
580
+ MarketTypeId.FIRST_PERIOD_SPREAD_SECONDARY,
581
+ MarketTypeId.FIRST_PERIOD_ODD_EVEN,
582
+ MarketTypeId.FIRST_PERIOD_DRAW_NO_BET,
583
+ MarketTypeId.FIRST_PERIOD_HOME_TEAM_SCORE,
584
+ MarketTypeId.FIRST_PERIOD_AWAY_TEAM_SCORE,
585
+ MarketTypeId.CORRECT_SCORE_PERIOD_ONE,
586
+ MarketTypeId.FIRST_PERIOD_SCORE_SCORE,
587
+ ], // 1st period
588
+ 2: [
589
+ MarketTypeId.SECOND_PERIOD_MONEYLINE,
590
+ MarketTypeId.SECOND_PERIOD_TOTAL,
591
+ MarketTypeId.SECOND_PERIOD_SPREAD,
592
+ MarketTypeId.SECOND_PERIOD_TOTAL_SECONDARY,
593
+ MarketTypeId.SECOND_PERIOD_SPREAD_SECONDARY,
594
+ MarketTypeId.SECOND_PERIOD_ODD_EVEN,
595
+ MarketTypeId.SECOND_PERIOD_DRAW_NO_BET,
596
+ MarketTypeId.SECOND_PERIOD_HOME_TEAM_SCORE,
597
+ MarketTypeId.SECOND_PERIOD_AWAY_TEAM_SCORE,
598
+ MarketTypeId.CORRECT_SCORE_PERIOD_TWO,
599
+ MarketTypeId.SECOND_PERIOD_SCORE_SCORE,
600
+ ], // 2nd period
601
+ 3: [
602
+ MarketTypeId.THIRD_PERIOD_MONEYLINE,
603
+ MarketTypeId.THIRD_PERIOD_TOTAL,
604
+ MarketTypeId.THIRD_PERIOD_SPREAD,
605
+ MarketTypeId.THIRD_PERIOD_TOTAL_SECONDARY,
606
+ MarketTypeId.THIRD_PERIOD_SPREAD_SECONDARY,
607
+ MarketTypeId.THIRD_PERIOD_ODD_EVEN,
608
+ MarketTypeId.THIRD_PERIOD_DRAW_NO_BET,
609
+ MarketTypeId.THIRD_PERIOD_HOME_TEAM_SCORE,
610
+ MarketTypeId.THIRD_PERIOD_AWAY_TEAM_SCORE,
611
+ MarketTypeId.CORRECT_SCORE_PERIOD_THREE,
612
+ MarketTypeId.THIRD_PERIOD_SCORE_SCORE,
613
+ ], // 3rd period
614
+ 4: [
615
+ MarketTypeId.FOURTH_PERIOD_MONEYLINE,
616
+ MarketTypeId.FOURTH_PERIOD_TOTAL,
617
+ MarketTypeId.FOURTH_PERIOD_SPREAD,
618
+ MarketTypeId.FOURTH_PERIOD_TOTAL_SECONDARY,
619
+ MarketTypeId.FOURTH_PERIOD_SPREAD_SECONDARY,
620
+ MarketTypeId.FOURTH_PERIOD_ODD_EVEN,
621
+ MarketTypeId.FOURTH_PERIOD_DRAW_NO_BET,
622
+ MarketTypeId.FOURTH_PERIOD_HOME_TEAM_SCORE,
623
+ MarketTypeId.FOURTH_PERIOD_AWAY_TEAM_SCORE,
624
+ MarketTypeId.CORRECT_SCORE_PERIOD_FOUR,
625
+ MarketTypeId.FOURTH_PERIOD_SCORE_SCORE,
626
+ ], // 4th period
627
+ 5: [
628
+ MarketTypeId.FIFTH_PERIOD_MONEYLINE,
629
+ MarketTypeId.FIFTH_PERIOD_TOTAL,
630
+ MarketTypeId.FIFTH_PERIOD_SPREAD,
631
+ MarketTypeId.FIFTH_PERIOD_TOTAL_SECONDARY,
632
+ MarketTypeId.FIFTH_PERIOD_SPREAD_SECONDARY,
633
+ MarketTypeId.FIFTH_PERIOD_ODD_EVEN,
634
+ MarketTypeId.FIFTH_PERIOD_HOME_TEAM_SCORE,
635
+ MarketTypeId.FIFTH_PERIOD_AWAY_TEAM_SCORE,
636
+ MarketTypeId.CORRECT_SCORE_PERIOD_FIVE,
637
+ MarketTypeId.FIFTH_PERIOD_SCORE_SCORE,
638
+ ], // 5th period
639
+ };
640
+
641
+ /**
642
+ * Full game type IDs that should NOT be resolved during live games
643
+ * These can only be resolved when the game status is "completed"
644
+ */
645
+ export const FULL_GAME_TYPE_IDS: number[] = [
646
+ MarketTypeId.WINNER,
647
+ MarketTypeId.SPREAD,
648
+ MarketTypeId.TOTALS,
649
+ MarketTypeId.DOUBLE_CHANCE,
650
+ MarketTypeId.MONEYLINE_TOTAL,
651
+ MarketTypeId.DRAW_NO_BET,
652
+ MarketTypeId.SECOND_MONEYLINE,
653
+ MarketTypeId.THIRD_MONEYLINE,
654
+ ];
655
+
656
+