fansunited-data-layer 0.13.0 → 0.14.2

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 (242) hide show
  1. package/api/fansunited/constants.js +5 -0
  2. package/api/fansunited/constants.js.map +1 -0
  3. package/api/fansunited/football/competition/index.js +21 -0
  4. package/api/fansunited/football/competition/index.js.map +1 -0
  5. package/api/fansunited/football/competition/transformer.js +41 -0
  6. package/api/fansunited/football/competition/transformer.js.map +1 -0
  7. package/api/fansunited/football/competitions/index.js +56 -0
  8. package/api/fansunited/football/competitions/index.js.map +1 -0
  9. package/api/fansunited/football/competitions/transformer.js +68 -0
  10. package/api/fansunited/football/competitions/transformer.js.map +1 -0
  11. package/api/fansunited/football/http.js +7 -0
  12. package/api/fansunited/football/http.js.map +1 -0
  13. package/api/fansunited/football/matches/index.js +132 -0
  14. package/api/fansunited/football/matches/index.js.map +1 -0
  15. package/api/fansunited/football/matches/transformer.js +148 -0
  16. package/api/fansunited/football/matches/transformer.js.map +1 -0
  17. package/api/fansunited/football/players/index.js +60 -0
  18. package/api/fansunited/football/players/index.js.map +1 -0
  19. package/api/fansunited/football/players/transformer.js +85 -0
  20. package/api/fansunited/football/players/transformer.js.map +1 -0
  21. package/api/fansunited/football/search/index.js +64 -0
  22. package/api/fansunited/football/search/index.js.map +1 -0
  23. package/api/fansunited/football/search/transformer.js +114 -0
  24. package/api/fansunited/football/search/transformer.js.map +1 -0
  25. package/api/fansunited/football/teams/index.js +66 -0
  26. package/api/fansunited/football/teams/index.js.map +1 -0
  27. package/api/fansunited/football/teams/transformer.js +53 -0
  28. package/api/fansunited/football/teams/transformer.js.map +1 -0
  29. package/api/fansunited/http.d.ts.map +1 -1
  30. package/api/fansunited/http.js +70 -0
  31. package/api/fansunited/http.js.map +1 -0
  32. package/api/fansunited/search/constants.js +5 -0
  33. package/api/fansunited/search/constants.js.map +1 -0
  34. package/api/fansunited/search/http.js +7 -0
  35. package/api/fansunited/search/http.js.map +1 -0
  36. package/api/fansunited/search/index.js +308 -0
  37. package/api/fansunited/search/index.js.map +1 -0
  38. package/api/fansunited/search/transformer.js +374 -0
  39. package/api/fansunited/search/transformer.js.map +1 -0
  40. package/api/fansunited-sdk/loyalty/matches.js +21 -0
  41. package/api/fansunited-sdk/loyalty/matches.js.map +1 -0
  42. package/api/fansunited-sdk/loyalty/template.js +52 -0
  43. package/api/fansunited-sdk/loyalty/template.js.map +1 -0
  44. package/api/fansunited-sdk/odds/matches.js +109 -0
  45. package/api/fansunited-sdk/odds/matches.js.map +1 -0
  46. package/api/sportal365-sports/basketball/games/index.js +32 -0
  47. package/api/sportal365-sports/basketball/games/index.js.map +1 -0
  48. package/api/sportal365-sports/basketball/games/transformers/game.js +137 -0
  49. package/api/sportal365-sports/basketball/games/transformers/game.js.map +1 -0
  50. package/api/sportal365-sports/basketball/http.js +7 -0
  51. package/api/sportal365-sports/basketball/http.js.map +1 -0
  52. package/api/sportal365-sports/constants.js +15 -0
  53. package/api/sportal365-sports/constants.js.map +1 -0
  54. package/api/sportal365-sports/football/competitions/index.js +52 -0
  55. package/api/sportal365-sports/football/competitions/index.js.map +1 -0
  56. package/api/sportal365-sports/football/competitions/utils.js +92 -0
  57. package/api/sportal365-sports/football/competitions/utils.js.map +1 -0
  58. package/api/sportal365-sports/football/http.js +7 -0
  59. package/api/sportal365-sports/football/http.js.map +1 -0
  60. package/api/sportal365-sports/football/matches/index.js +206 -0
  61. package/api/sportal365-sports/football/matches/index.js.map +1 -0
  62. package/api/sportal365-sports/football/matches/transformers/commentary.js +27 -0
  63. package/api/sportal365-sports/football/matches/transformers/commentary.js.map +1 -0
  64. package/api/sportal365-sports/football/matches/transformers/lineup.js +74 -0
  65. package/api/sportal365-sports/football/matches/transformers/lineup.js.map +1 -0
  66. package/api/sportal365-sports/football/matches/transformers/match-event.js +60 -0
  67. package/api/sportal365-sports/football/matches/transformers/match-event.js.map +1 -0
  68. package/api/sportal365-sports/football/matches/transformers/match.js +195 -0
  69. package/api/sportal365-sports/football/matches/transformers/match.js.map +1 -0
  70. package/api/sportal365-sports/football/matches/transformers/odds.js +11 -0
  71. package/api/sportal365-sports/football/matches/transformers/odds.js.map +1 -0
  72. package/api/sportal365-sports/football/matches/transformers/statistics.js +41 -0
  73. package/api/sportal365-sports/football/matches/transformers/statistics.js.map +1 -0
  74. package/api/sportal365-sports/football/search/index.js +42 -0
  75. package/api/sportal365-sports/football/search/index.js.map +1 -0
  76. package/api/sportal365-sports/football/search/search.transformer.js +166 -0
  77. package/api/sportal365-sports/football/search/search.transformer.js.map +1 -0
  78. package/api/sportal365-sports/football/standings/index.js +28 -0
  79. package/api/sportal365-sports/football/standings/index.js.map +1 -0
  80. package/api/sportal365-sports/football/standings/standing.transformer.js +107 -0
  81. package/api/sportal365-sports/football/standings/standing.transformer.js.map +1 -0
  82. package/api/sportal365-sports/football/statistics/index.js +154 -0
  83. package/api/sportal365-sports/football/statistics/index.js.map +1 -0
  84. package/api/sportal365-sports/football/statistics/player-career.transformer.js +77 -0
  85. package/api/sportal365-sports/football/statistics/player-career.transformer.js.map +1 -0
  86. package/api/sportal365-sports/football/statistics/player-recent.transformer.js +54 -0
  87. package/api/sportal365-sports/football/statistics/player-recent.transformer.js.map +1 -0
  88. package/api/sportal365-sports/football/statistics/player-season.transformer.js +147 -0
  89. package/api/sportal365-sports/football/statistics/player-season.transformer.js.map +1 -0
  90. package/api/sportal365-sports/football/teams/index.js +73 -0
  91. package/api/sportal365-sports/football/teams/index.js.map +1 -0
  92. package/api/sportal365-sports/football/teams/utils.js +196 -0
  93. package/api/sportal365-sports/football/teams/utils.js.map +1 -0
  94. package/api/sportal365-sports/http.js +58 -0
  95. package/api/sportal365-sports/http.js.map +1 -0
  96. package/api/sportal365-sports/search/http.js +7 -0
  97. package/api/sportal365-sports/search/http.js.map +1 -0
  98. package/api/sportal365-sports/search/index.js +61 -0
  99. package/api/sportal365-sports/search/index.js.map +1 -0
  100. package/api/sportal365-sports/search/search.transformer.js +254 -0
  101. package/api/sportal365-sports/search/search.transformer.js.map +1 -0
  102. package/api/sportal365-sports/shared/odds.transformer.js +65 -0
  103. package/api/sportal365-sports/shared/odds.transformer.js.map +1 -0
  104. package/api/sportal365-sports/shared/providerRef.helper.js +31 -0
  105. package/api/sportal365-sports/shared/providerRef.helper.js.map +1 -0
  106. package/api/sportal365-sports/standings/http.js +7 -0
  107. package/api/sportal365-sports/standings/http.js.map +1 -0
  108. package/api/sportal365-sports/standings/index.js +29 -0
  109. package/api/sportal365-sports/standings/index.js.map +1 -0
  110. package/api/sportal365-sports/standings/standing.transformer.js +185 -0
  111. package/api/sportal365-sports/standings/standing.transformer.js.map +1 -0
  112. package/api/sportal365-sports/statistics/http.js +7 -0
  113. package/api/sportal365-sports/statistics/http.js.map +1 -0
  114. package/api/sportal365-sports/statistics/index.js +25 -0
  115. package/api/sportal365-sports/statistics/index.js.map +1 -0
  116. package/api/sportal365-sports/statistics/team-stats.transformer.js +16 -0
  117. package/api/sportal365-sports/statistics/team-stats.transformer.js.map +1 -0
  118. package/api/sportal365-sports/tennis/http.js +7 -0
  119. package/api/sportal365-sports/tennis/http.js.map +1 -0
  120. package/api/sportal365-sports/tennis/matches/index.js +34 -0
  121. package/api/sportal365-sports/tennis/matches/index.js.map +1 -0
  122. package/api/sportal365-sports/tennis/matches/transformers/match.js +193 -0
  123. package/api/sportal365-sports/tennis/matches/transformers/match.js.map +1 -0
  124. package/cache/cache-manager.js +136 -0
  125. package/cache/cache-manager.js.map +1 -0
  126. package/cache/memory-store.js +29 -0
  127. package/cache/memory-store.js.map +1 -0
  128. package/client.js +38 -12337
  129. package/client.js.map +1 -0
  130. package/config/index.js +20 -0
  131. package/config/index.js.map +1 -0
  132. package/fansunited-data-layer.js +146 -3553
  133. package/fansunited-data-layer.js.map +1 -0
  134. package/helpers/competition.helpers.js +11 -0
  135. package/helpers/competition.helpers.js.map +1 -0
  136. package/helpers/player.helpers.js +165 -0
  137. package/helpers/player.helpers.js.map +1 -0
  138. package/helpers/player.hooks.js +34 -0
  139. package/helpers/player.hooks.js.map +1 -0
  140. package/helpers/team.helpers.js +216 -0
  141. package/helpers/team.helpers.js.map +1 -0
  142. package/package.json +6 -8
  143. package/providers/competition/hooks/useCompetitionStats.js +10 -0
  144. package/providers/competition/hooks/useCompetitionStats.js.map +1 -0
  145. package/providers/competition/hooks/useGoalDistribution.js +23 -0
  146. package/providers/competition/hooks/useGoalDistribution.js.map +1 -0
  147. package/providers/competition/hooks/useMatchHelpers.js +85 -0
  148. package/providers/competition/hooks/useMatchHelpers.js.map +1 -0
  149. package/providers/competition/hooks/useStandingsCalculations.js +89 -0
  150. package/providers/competition/hooks/useStandingsCalculations.js.map +1 -0
  151. package/providers/competition/hooks/useStandingsHelpers.js +61 -0
  152. package/providers/competition/hooks/useStandingsHelpers.js.map +1 -0
  153. package/providers/competition/hooks/useTeamPosition.js +15 -0
  154. package/providers/competition/hooks/useTeamPosition.js.map +1 -0
  155. package/providers/competition/hooks/useTeamResultsTable.js +86 -0
  156. package/providers/competition/hooks/useTeamResultsTable.js.map +1 -0
  157. package/providers/competition/utils/competitionStats.js +109 -0
  158. package/providers/competition/utils/competitionStats.js.map +1 -0
  159. package/providers/competition/utils/goalDistribution.js +64 -0
  160. package/providers/competition/utils/goalDistribution.js.map +1 -0
  161. package/providers/competition/utils/standingsCalculations.js +152 -0
  162. package/providers/competition/utils/standingsCalculations.js.map +1 -0
  163. package/providers/competition.context.js +14 -0
  164. package/providers/competition.context.js.map +1 -0
  165. package/providers/competition.provider.js +187 -0
  166. package/providers/competition.provider.js.map +1 -0
  167. package/providers/fansunited-config.context.js +6 -0
  168. package/providers/fansunited-config.context.js.map +1 -0
  169. package/providers/fansunited-config.hooks.js +20 -0
  170. package/providers/fansunited-config.hooks.js.map +1 -0
  171. package/providers/fansunited-config.provider.js +9 -0
  172. package/providers/fansunited-config.provider.js.map +1 -0
  173. package/providers/fansunited-sdk.hook.js +50 -0
  174. package/providers/fansunited-sdk.hook.js.map +1 -0
  175. package/providers/leaderboard/hooks/useMatchHelpers.js +30 -0
  176. package/providers/leaderboard/hooks/useMatchHelpers.js.map +1 -0
  177. package/providers/leaderboard/hooks/useTemplateHelpers.js +39 -0
  178. package/providers/leaderboard/hooks/useTemplateHelpers.js.map +1 -0
  179. package/providers/leaderboard.context.js +14 -0
  180. package/providers/leaderboard.context.js.map +1 -0
  181. package/providers/leaderboard.provider.js +98 -0
  182. package/providers/leaderboard.provider.js.map +1 -0
  183. package/providers/match/hooks/useBatchMatchOdds.js +72 -0
  184. package/providers/match/hooks/useBatchMatchOdds.js.map +1 -0
  185. package/providers/match/hooks/useEventHelpers.js +46 -0
  186. package/providers/match/hooks/useEventHelpers.js.map +1 -0
  187. package/providers/match/hooks/useHeadToHeadHelpers.js +52 -0
  188. package/providers/match/hooks/useHeadToHeadHelpers.js.map +1 -0
  189. package/providers/match/hooks/useLineupHelpers.js +53 -0
  190. package/providers/match/hooks/useLineupHelpers.js.map +1 -0
  191. package/providers/match/hooks/useMatchStandingsCalculations.js +332 -0
  192. package/providers/match/hooks/useMatchStandingsCalculations.js.map +1 -0
  193. package/providers/match/hooks/useMatchStatus.js +37 -0
  194. package/providers/match/hooks/useMatchStatus.js.map +1 -0
  195. package/providers/match/hooks/useOddsHelpers.js +54 -0
  196. package/providers/match/hooks/useOddsHelpers.js.map +1 -0
  197. package/providers/match/hooks/useScoreHelpers.js +34 -0
  198. package/providers/match/hooks/useScoreHelpers.js.map +1 -0
  199. package/providers/match/hooks/useStandingsHelpers.js +53 -0
  200. package/providers/match/hooks/useStandingsHelpers.js.map +1 -0
  201. package/providers/match/hooks/useStatisticsHelpers.js +40 -0
  202. package/providers/match/hooks/useStatisticsHelpers.js.map +1 -0
  203. package/providers/match/hooks/useTeamHelpers.js +38 -0
  204. package/providers/match/hooks/useTeamHelpers.js.map +1 -0
  205. package/providers/match/hooks/useTeamStatsHelpers.js +141 -0
  206. package/providers/match/hooks/useTeamStatsHelpers.js.map +1 -0
  207. package/providers/match.context.js +14 -0
  208. package/providers/match.context.js.map +1 -0
  209. package/providers/match.provider.js +176 -0
  210. package/providers/match.provider.js.map +1 -0
  211. package/providers/team/hooks/useFormStats.js +116 -0
  212. package/providers/team/hooks/useFormStats.js.map +1 -0
  213. package/providers/team/hooks/useMatchHelpers.js +46 -0
  214. package/providers/team/hooks/useMatchHelpers.js.map +1 -0
  215. package/providers/team/hooks/useSquadHelpers.js +67 -0
  216. package/providers/team/hooks/useSquadHelpers.js.map +1 -0
  217. package/providers/team.context.js +14 -0
  218. package/providers/team.context.js.map +1 -0
  219. package/providers/team.provider.js +98 -0
  220. package/providers/team.provider.js.map +1 -0
  221. package/utilities/stats/core/helpers.js +105 -0
  222. package/utilities/stats/core/helpers.js.map +1 -0
  223. package/utilities/stats/core/types.js +5 -0
  224. package/utilities/stats/core/types.js.map +1 -0
  225. package/utilities/stats/match/headToHead.js +83 -0
  226. package/utilities/stats/match/headToHead.js.map +1 -0
  227. package/utilities/stats/match/homeVsAway.js +140 -0
  228. package/utilities/stats/match/homeVsAway.js.map +1 -0
  229. package/utilities/stats/match/overUnder.js +91 -0
  230. package/utilities/stats/match/overUnder.js.map +1 -0
  231. package/utilities/stats/match/result.js +21 -0
  232. package/utilities/stats/match/result.js.map +1 -0
  233. package/utilities/stats/team/commonOpponents.js +77 -0
  234. package/utilities/stats/team/commonOpponents.js.map +1 -0
  235. package/utilities/stats/team/goalStats.js +50 -0
  236. package/utilities/stats/team/goalStats.js.map +1 -0
  237. package/utilities/stats/team/streaks.js +183 -0
  238. package/utilities/stats/team/streaks.js.map +1 -0
  239. package/client.cjs +0 -8
  240. package/fansunited-data-layer.cjs +0 -1
  241. package/matches-BvHU-bP0.js +0 -1795
  242. package/matches-Ci0Ci_Mw.cjs +0 -1
@@ -0,0 +1,61 @@
1
+ import { getConfig } from "../../../config/index.js";
2
+ import { sportsSearchHttp } from "./http.js";
3
+ import { transformSportsSearchResult } from "./search.transformer.js";
4
+ async function search(options = {}, config) {
5
+ const activeConfig = config ?? getConfig();
6
+ const params = {};
7
+ if (options.name) {
8
+ params.name = options.name;
9
+ }
10
+ if (options.entityTypes && options.entityTypes.length > 0) {
11
+ params.entity_type = options.entityTypes.join(",");
12
+ }
13
+ if (options.sports && options.sports.length > 0) {
14
+ params.sport = options.sports.join(",");
15
+ }
16
+ if (options.eventStartTime) {
17
+ params.event_start_time = options.eventStartTime;
18
+ }
19
+ if (options.ids && options.ids.length > 0) {
20
+ params.ids = options.ids.join(",");
21
+ }
22
+ if (options.competitionIds && options.competitionIds.length > 0) {
23
+ params.competition_ids = options.competitionIds.join(",");
24
+ }
25
+ if (options.domain) {
26
+ params.domain = options.domain;
27
+ }
28
+ if (options.inputLanguage) {
29
+ params.input_language = options.inputLanguage;
30
+ }
31
+ if (options.translationLanguage) {
32
+ params.translation_language = options.translationLanguage;
33
+ }
34
+ if (options.limit !== void 0) {
35
+ params.limit = options.limit.toString();
36
+ }
37
+ if (options.offset !== void 0) {
38
+ params.offset = options.offset.toString();
39
+ }
40
+ const response = await sportsSearchHttp.get({
41
+ path: "/suggest",
42
+ params,
43
+ next: options.next,
44
+ config: activeConfig
45
+ });
46
+ if (!response.results || response.results.length === 0) {
47
+ return {
48
+ results: [],
49
+ query: options.name
50
+ };
51
+ }
52
+ const transformedResults = response.results.map(transformSportsSearchResult);
53
+ return {
54
+ results: transformedResults,
55
+ query: options.name
56
+ };
57
+ }
58
+ export {
59
+ search
60
+ };
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/lib/api/sportal365-sports/search/index.ts"],"sourcesContent":["/**\n * Sports Search API endpoints for Sportal365\n * Cross-sport search across all entities\n */\n\nimport type { FUSportsSportsSearchResults } from \"../../../types/canonical/sports-search.types\";\nimport { getConfig, type DataLayerConfig } from \"../../../config\";\nimport { sportsSearchHttp } from \"./http\";\nimport type { GetSportsSearchOptions, RawSportsSearchResponse } from \"./search.types\";\nimport { transformSportsSearchResult } from \"./search.transformer\";\n\n// Re-export types\nexport type { GetSportsSearchOptions, SportType, SportsSearchEntityType } from \"./search.types\";\n\n/**\n * Search across all sports and entity types\n *\n * @param options - Search options\n * @param config - Optional data layer config (uses global config if not provided)\n * @returns Promise resolving to canonical search results\n *\n * @example\n * ```typescript\n * // Search for \"Barcelona\" across all sports\n * const results = await search({ name: 'Barcelona' });\n *\n * // Search for teams only\n * const teams = await search({\n * name: 'Barcelona',\n * entityTypes: ['team']\n * });\n *\n * // Search for football teams only\n * const footballTeams = await search({\n * name: 'Barcelona',\n * entityTypes: ['team'],\n * sports: ['football']\n * });\n *\n * // Search with pagination\n * const page1 = await search({\n * name: 'Barcelona',\n * limit: 10,\n * offset: 0\n * });\n * ```\n */\nexport async function search(\n options: GetSportsSearchOptions = {},\n config?: DataLayerConfig\n): Promise<FUSportsSportsSearchResults> {\n const activeConfig = config ?? getConfig();\n\n // Build query parameters\n const params: Record<string, string> = {};\n\n // Add name parameter (defaults to '*' if not provided)\n if (options.name) {\n params.name = options.name;\n }\n\n // Add entity types as comma-separated string\n if (options.entityTypes && options.entityTypes.length > 0) {\n params.entity_type = options.entityTypes.join(\",\");\n }\n\n // Add sports as comma-separated string\n if (options.sports && options.sports.length > 0) {\n params.sport = options.sports.join(\",\");\n }\n\n // Add event start time\n if (options.eventStartTime) {\n params.event_start_time = options.eventStartTime;\n }\n\n // Add IDs as comma-separated string\n if (options.ids && options.ids.length > 0) {\n params.ids = options.ids.join(\",\");\n }\n\n // Add competition IDs as comma-separated string\n if (options.competitionIds && options.competitionIds.length > 0) {\n params.competition_ids = options.competitionIds.join(\",\");\n }\n\n // Add domain\n if (options.domain) {\n params.domain = options.domain;\n }\n\n // Add input language\n if (options.inputLanguage) {\n params.input_language = options.inputLanguage;\n }\n\n // Add translation language\n if (options.translationLanguage) {\n params.translation_language = options.translationLanguage;\n }\n\n // Add limit\n if (options.limit !== undefined) {\n params.limit = options.limit.toString();\n }\n\n // Add offset\n if (options.offset !== undefined) {\n params.offset = options.offset.toString();\n }\n\n // Make API request\n const response = await sportsSearchHttp.get<RawSportsSearchResponse>({\n path: \"/suggest\",\n params,\n next: options.next,\n config: activeConfig,\n });\n\n // Return empty results if no results\n if (!response.results || response.results.length === 0) {\n return {\n results: [],\n query: options.name,\n };\n }\n\n // Transform results to canonical format\n const transformedResults = response.results.map(transformSportsSearchResult);\n\n return {\n results: transformedResults,\n query: options.name,\n };\n}\n"],"names":[],"mappings":";;;AA+CA,eAAsB,OAClB,UAAkC,CAAA,GAClC,QACoC;AACpC,QAAM,eAAe,UAAU,UAAA;AAG/B,QAAM,SAAiC,CAAA;AAGvC,MAAI,QAAQ,MAAM;AACd,WAAO,OAAO,QAAQ;AAAA,EAC1B;AAGA,MAAI,QAAQ,eAAe,QAAQ,YAAY,SAAS,GAAG;AACvD,WAAO,cAAc,QAAQ,YAAY,KAAK,GAAG;AAAA,EACrD;AAGA,MAAI,QAAQ,UAAU,QAAQ,OAAO,SAAS,GAAG;AAC7C,WAAO,QAAQ,QAAQ,OAAO,KAAK,GAAG;AAAA,EAC1C;AAGA,MAAI,QAAQ,gBAAgB;AACxB,WAAO,mBAAmB,QAAQ;AAAA,EACtC;AAGA,MAAI,QAAQ,OAAO,QAAQ,IAAI,SAAS,GAAG;AACvC,WAAO,MAAM,QAAQ,IAAI,KAAK,GAAG;AAAA,EACrC;AAGA,MAAI,QAAQ,kBAAkB,QAAQ,eAAe,SAAS,GAAG;AAC7D,WAAO,kBAAkB,QAAQ,eAAe,KAAK,GAAG;AAAA,EAC5D;AAGA,MAAI,QAAQ,QAAQ;AAChB,WAAO,SAAS,QAAQ;AAAA,EAC5B;AAGA,MAAI,QAAQ,eAAe;AACvB,WAAO,iBAAiB,QAAQ;AAAA,EACpC;AAGA,MAAI,QAAQ,qBAAqB;AAC7B,WAAO,uBAAuB,QAAQ;AAAA,EAC1C;AAGA,MAAI,QAAQ,UAAU,QAAW;AAC7B,WAAO,QAAQ,QAAQ,MAAM,SAAA;AAAA,EACjC;AAGA,MAAI,QAAQ,WAAW,QAAW;AAC9B,WAAO,SAAS,QAAQ,OAAO,SAAA;AAAA,EACnC;AAGA,QAAM,WAAW,MAAM,iBAAiB,IAA6B;AAAA,IACjE,MAAM;AAAA,IACN;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,QAAQ;AAAA,EAAA,CACX;AAGD,MAAI,CAAC,SAAS,WAAW,SAAS,QAAQ,WAAW,GAAG;AACpD,WAAO;AAAA,MACH,SAAS,CAAA;AAAA,MACT,OAAO,QAAQ;AAAA,IAAA;AAAA,EAEvB;AAGA,QAAM,qBAAqB,SAAS,QAAQ,IAAI,2BAA2B;AAE3E,SAAO;AAAA,IACH,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EAAA;AAEvB;"}
@@ -0,0 +1,254 @@
1
+ function transformTranslation(raw) {
2
+ return {
3
+ language: raw.language,
4
+ name: raw.name,
5
+ shortName: raw.short_name ?? void 0,
6
+ threeLetterCode: raw.three_letter_code ?? void 0
7
+ };
8
+ }
9
+ function transformDisplayAsset(raw) {
10
+ if (!raw || !raw.url) {
11
+ return void 0;
12
+ }
13
+ return {
14
+ url: raw.url
15
+ };
16
+ }
17
+ function transformCountry(raw) {
18
+ if (!raw) {
19
+ return void 0;
20
+ }
21
+ return {
22
+ id: raw.id,
23
+ legacyId: raw.legacy_id ?? void 0,
24
+ name: raw.name,
25
+ shortName: raw.short_name ?? void 0,
26
+ threeLetterCode: raw.three_letter_code ?? void 0,
27
+ translations: raw.translations.map(transformTranslation),
28
+ displayAsset: transformDisplayAsset(raw.display_asset),
29
+ slug: raw.slug,
30
+ providerRef: raw.id
31
+ };
32
+ }
33
+ function transformTeam(raw) {
34
+ return {
35
+ entityType: "team",
36
+ id: raw.id,
37
+ legacyId: raw.legacy_id ?? void 0,
38
+ name: raw.name,
39
+ shortName: raw.short_name ?? void 0,
40
+ threeLetterCode: raw.three_letter_code ?? void 0,
41
+ translations: raw.translations.map(transformTranslation),
42
+ displayAsset: transformDisplayAsset(raw.display_asset),
43
+ slug: raw.slug,
44
+ tagScore: raw.tag_score ?? void 0,
45
+ sport: raw.sport,
46
+ country: transformCountry(raw.country),
47
+ gender: raw.gender,
48
+ competitionIds: raw.competition_ids,
49
+ type: raw.type,
50
+ national: raw.national,
51
+ undecided: raw.undecided,
52
+ providerRef: raw.id
53
+ };
54
+ }
55
+ function transformCity(raw) {
56
+ return {
57
+ entityType: "city",
58
+ id: raw.id,
59
+ legacyId: raw.legacy_id ?? void 0,
60
+ name: raw.name,
61
+ shortName: raw.short_name ?? void 0,
62
+ threeLetterCode: raw.three_letter_code ?? void 0,
63
+ translations: raw.translations.map(transformTranslation),
64
+ displayAsset: transformDisplayAsset(raw.display_asset),
65
+ slug: raw.slug,
66
+ tagScore: raw.tag_score ?? void 0,
67
+ sport: raw.sport,
68
+ country: transformCountry(raw.country),
69
+ providerRef: raw.id
70
+ };
71
+ }
72
+ function transformHorse(raw) {
73
+ return {
74
+ entityType: "horse",
75
+ id: raw.id,
76
+ legacyId: raw.legacy_id ?? void 0,
77
+ name: raw.name,
78
+ shortName: raw.short_name ?? void 0,
79
+ threeLetterCode: raw.three_letter_code ?? void 0,
80
+ translations: raw.translations.map(transformTranslation),
81
+ displayAsset: transformDisplayAsset(raw.display_asset),
82
+ slug: raw.slug,
83
+ tagScore: raw.tag_score ?? void 0,
84
+ sport: raw.sport,
85
+ country: transformCountry(raw.country),
86
+ gender: raw.gender,
87
+ providerRef: raw.id
88
+ };
89
+ }
90
+ function transformPlayer(raw) {
91
+ return {
92
+ entityType: "player",
93
+ id: raw.id,
94
+ legacyId: raw.legacy_id ?? void 0,
95
+ name: raw.name,
96
+ shortName: raw.short_name ?? void 0,
97
+ threeLetterCode: raw.three_letter_code ?? void 0,
98
+ translations: raw.translations.map(transformTranslation),
99
+ displayAsset: transformDisplayAsset(raw.display_asset),
100
+ slug: raw.slug,
101
+ tagScore: raw.tag_score ?? void 0,
102
+ sport: raw.sport,
103
+ country: transformCountry(raw.country),
104
+ gender: raw.gender,
105
+ birthdate: raw.birthdate ?? void 0,
106
+ position: raw.position ?? void 0,
107
+ providerRef: raw.id
108
+ };
109
+ }
110
+ function transformCoach(raw) {
111
+ return {
112
+ entityType: "coach",
113
+ id: raw.id,
114
+ legacyId: raw.legacy_id ?? void 0,
115
+ name: raw.name,
116
+ shortName: raw.short_name ?? void 0,
117
+ threeLetterCode: raw.three_letter_code ?? void 0,
118
+ translations: raw.translations.map(transformTranslation),
119
+ displayAsset: transformDisplayAsset(raw.display_asset),
120
+ slug: raw.slug,
121
+ tagScore: raw.tag_score ?? void 0,
122
+ sport: raw.sport,
123
+ country: transformCountry(raw.country),
124
+ gender: raw.gender,
125
+ birthdate: raw.birthdate ?? void 0,
126
+ providerRef: raw.id
127
+ };
128
+ }
129
+ function transformReferee(raw) {
130
+ return {
131
+ entityType: "referee",
132
+ id: raw.id,
133
+ legacyId: raw.legacy_id ?? void 0,
134
+ name: raw.name,
135
+ shortName: raw.short_name ?? void 0,
136
+ threeLetterCode: raw.three_letter_code ?? void 0,
137
+ translations: raw.translations.map(transformTranslation),
138
+ displayAsset: transformDisplayAsset(raw.display_asset),
139
+ slug: raw.slug,
140
+ tagScore: raw.tag_score ?? void 0,
141
+ sport: raw.sport,
142
+ country: transformCountry(raw.country),
143
+ gender: raw.gender,
144
+ birthdate: raw.birthdate ?? void 0,
145
+ providerRef: raw.id
146
+ };
147
+ }
148
+ function transformVenue(raw) {
149
+ return {
150
+ entityType: "venue",
151
+ id: raw.id,
152
+ legacyId: raw.legacy_id ?? void 0,
153
+ name: raw.name,
154
+ shortName: raw.short_name ?? void 0,
155
+ threeLetterCode: raw.three_letter_code ?? void 0,
156
+ translations: raw.translations.map(transformTranslation),
157
+ displayAsset: transformDisplayAsset(raw.display_asset),
158
+ slug: raw.slug,
159
+ tagScore: raw.tag_score ?? void 0,
160
+ sport: raw.sport,
161
+ country: transformCountry(raw.country),
162
+ city: raw.city ? transformCity(raw.city) : void 0,
163
+ providerRef: raw.id
164
+ };
165
+ }
166
+ function transformTournament(raw) {
167
+ return {
168
+ entityType: raw.entity_type,
169
+ id: raw.id,
170
+ legacyId: raw.legacy_id ?? void 0,
171
+ name: raw.name,
172
+ shortName: raw.short_name ?? void 0,
173
+ threeLetterCode: raw.three_letter_code ?? void 0,
174
+ translations: raw.translations.map(transformTranslation),
175
+ displayAsset: transformDisplayAsset(raw.display_asset),
176
+ slug: raw.slug,
177
+ tagScore: raw.tag_score ?? void 0,
178
+ sport: raw.sport,
179
+ country: transformCountry(raw.country),
180
+ gender: raw.gender,
181
+ type: raw.type ?? void 0,
182
+ region: raw.region ?? void 0,
183
+ providerRef: raw.id
184
+ };
185
+ }
186
+ function transformMatch(raw) {
187
+ return {
188
+ entityType: "match",
189
+ id: raw.id,
190
+ legacyId: raw.legacy_id ?? void 0,
191
+ name: raw.name,
192
+ shortName: raw.short_name ?? void 0,
193
+ threeLetterCode: raw.three_letter_code ?? void 0,
194
+ translations: raw.translations.map(transformTranslation),
195
+ displayAsset: transformDisplayAsset(raw.display_asset),
196
+ slug: raw.slug,
197
+ tagScore: raw.tag_score ?? void 0,
198
+ sport: raw.sport,
199
+ competitionId: raw.competition_id ?? void 0,
200
+ startTime: raw.start_time ?? void 0,
201
+ homeTeam: raw.home_team ? transformTeam(raw.home_team) : void 0,
202
+ awayTeam: raw.away_team ? transformTeam(raw.away_team) : void 0,
203
+ providerRef: raw.id
204
+ };
205
+ }
206
+ function transformCountryResult(raw) {
207
+ return {
208
+ entityType: "country",
209
+ id: raw.id,
210
+ legacyId: raw.legacy_id ?? void 0,
211
+ name: raw.name,
212
+ shortName: raw.short_name ?? void 0,
213
+ threeLetterCode: raw.three_letter_code ?? void 0,
214
+ translations: raw.translations.map(transformTranslation),
215
+ displayAsset: transformDisplayAsset(raw.display_asset),
216
+ slug: raw.slug,
217
+ tagScore: raw.tag_score ?? void 0,
218
+ sport: raw.sport,
219
+ providerRef: raw.id
220
+ };
221
+ }
222
+ function transformSportsSearchResult(raw) {
223
+ switch (raw.entity_type) {
224
+ case "team":
225
+ return transformTeam(raw);
226
+ case "city":
227
+ return transformCity(raw);
228
+ case "horse":
229
+ return transformHorse(raw);
230
+ case "player":
231
+ return transformPlayer(raw);
232
+ case "coach":
233
+ return transformCoach(raw);
234
+ case "referee":
235
+ return transformReferee(raw);
236
+ case "venue":
237
+ return transformVenue(raw);
238
+ case "tournament":
239
+ case "competition":
240
+ return transformTournament(raw);
241
+ case "match":
242
+ return transformMatch(raw);
243
+ case "country":
244
+ return transformCountryResult(raw);
245
+ default: {
246
+ const _exhaustiveCheck = raw;
247
+ throw new Error(`Unknown entity type: ${_exhaustiveCheck.entity_type}`);
248
+ }
249
+ }
250
+ }
251
+ export {
252
+ transformSportsSearchResult
253
+ };
254
+ //# sourceMappingURL=search.transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.transformer.js","sources":["../../../../src/lib/api/sportal365-sports/search/search.transformer.ts"],"sourcesContent":["/**\n * Transformers for Sports Search API responses\n */\n\nimport type {\n FUSportsSportsSearchResult,\n FUSportsSportsSearchCountry,\n FUSportsTranslation,\n FUSportsDisplayAsset,\n FUSportsTeamSportsSearchResult,\n FUSportsCitySportsSearchResult,\n FUSportsHorseSportsSearchResult,\n FUSportsPlayerSportsSearchResult,\n FUSportsCoachSportsSearchResult,\n FUSportsRefereeSportsSearchResult,\n FUSportsVenueSportsSearchResult,\n FUSportsTournamentSportsSearchResult,\n FUSportsMatchSportsSearchResult,\n FUSportsCountrySportsSearchResult,\n} from \"../../../types/canonical/sports-search.types\";\nimport type {\n RawSportsSearchResult,\n RawSportsSearchCountry,\n RawTranslation,\n RawDisplayAsset,\n RawSportsSearchTeam,\n RawSportsSearchCity,\n RawSportsSearchHorse,\n RawSportsSearchPlayer,\n RawSportsSearchCoach,\n RawSportsSearchReferee,\n RawSportsSearchVenue,\n RawSportsSearchTournament,\n RawSportsSearchMatch,\n RawSportsSearchCountryResult,\n} from \"./search.types\";\n\n/**\n * Transform raw translation to canonical format\n */\nfunction transformTranslation(raw: RawTranslation): FUSportsTranslation {\n return {\n language: raw.language,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n };\n}\n\n/**\n * Transform raw display asset to canonical format\n */\nfunction transformDisplayAsset(raw: RawDisplayAsset | null): FUSportsDisplayAsset | undefined {\n if (!raw || !raw.url) {\n return undefined;\n }\n return {\n url: raw.url,\n };\n}\n\n/**\n * Transform raw country to canonical format\n */\nfunction transformCountry(raw: RawSportsSearchCountry | null): FUSportsSportsSearchCountry | undefined {\n if (!raw) {\n return undefined;\n }\n return {\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw team search result\n */\nfunction transformTeam(raw: RawSportsSearchTeam): FUSportsTeamSportsSearchResult {\n return {\n entityType: \"team\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n gender: raw.gender,\n competitionIds: raw.competition_ids,\n type: raw.type,\n national: raw.national,\n undecided: raw.undecided,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw city search result\n */\nfunction transformCity(raw: RawSportsSearchCity): FUSportsCitySportsSearchResult {\n return {\n entityType: \"city\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw horse search result\n */\nfunction transformHorse(raw: RawSportsSearchHorse): FUSportsHorseSportsSearchResult {\n return {\n entityType: \"horse\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n gender: raw.gender,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw player search result\n */\nfunction transformPlayer(raw: RawSportsSearchPlayer): FUSportsPlayerSportsSearchResult {\n return {\n entityType: \"player\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n gender: raw.gender,\n birthdate: raw.birthdate ?? undefined,\n position: raw.position ?? undefined,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw coach search result\n */\nfunction transformCoach(raw: RawSportsSearchCoach): FUSportsCoachSportsSearchResult {\n return {\n entityType: \"coach\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n gender: raw.gender,\n birthdate: raw.birthdate ?? undefined,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw referee search result\n */\nfunction transformReferee(raw: RawSportsSearchReferee): FUSportsRefereeSportsSearchResult {\n return {\n entityType: \"referee\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n gender: raw.gender,\n birthdate: raw.birthdate ?? undefined,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw venue search result\n */\nfunction transformVenue(raw: RawSportsSearchVenue): FUSportsVenueSportsSearchResult {\n return {\n entityType: \"venue\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n city: raw.city ? transformCity(raw.city) : undefined,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw tournament search result\n */\nfunction transformTournament(raw: RawSportsSearchTournament): FUSportsTournamentSportsSearchResult {\n return {\n entityType: raw.entity_type,\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n country: transformCountry(raw.country),\n gender: raw.gender,\n type: raw.type ?? undefined,\n region: raw.region ?? undefined,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw match search result\n */\nfunction transformMatch(raw: RawSportsSearchMatch): FUSportsMatchSportsSearchResult {\n return {\n entityType: \"match\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n competitionId: raw.competition_id ?? undefined,\n startTime: raw.start_time ?? undefined,\n homeTeam: raw.home_team ? transformTeam(raw.home_team) : undefined,\n awayTeam: raw.away_team ? transformTeam(raw.away_team) : undefined,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw country search result\n */\nfunction transformCountryResult(raw: RawSportsSearchCountryResult): FUSportsCountrySportsSearchResult {\n return {\n entityType: \"country\",\n id: raw.id,\n legacyId: raw.legacy_id ?? undefined,\n name: raw.name,\n shortName: raw.short_name ?? undefined,\n threeLetterCode: raw.three_letter_code ?? undefined,\n translations: raw.translations.map(transformTranslation),\n displayAsset: transformDisplayAsset(raw.display_asset),\n slug: raw.slug,\n tagScore: raw.tag_score ?? undefined,\n sport: raw.sport,\n providerRef: raw.id,\n };\n}\n\n/**\n * Transform raw search result to canonical format\n */\nexport function transformSportsSearchResult(raw: RawSportsSearchResult): FUSportsSportsSearchResult {\n switch (raw.entity_type) {\n case \"team\":\n return transformTeam(raw);\n case \"city\":\n return transformCity(raw);\n case \"horse\":\n return transformHorse(raw);\n case \"player\":\n return transformPlayer(raw);\n case \"coach\":\n return transformCoach(raw);\n case \"referee\":\n return transformReferee(raw);\n case \"venue\":\n return transformVenue(raw);\n case \"tournament\":\n case \"competition\":\n return transformTournament(raw);\n case \"match\":\n return transformMatch(raw);\n case \"country\":\n return transformCountryResult(raw);\n default: {\n const _exhaustiveCheck: never = raw;\n throw new Error(`Unknown entity type: ${(_exhaustiveCheck as any).entity_type}`);\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ function transformOddSelection(raw) {
2
+ const url = raw.urls?.find((u) => u.app_type === "desktop")?.url;
3
+ return {
4
+ id: raw.id,
5
+ name: raw.name,
6
+ code: raw.code,
7
+ value: raw.value ?? void 0,
8
+ odds: raw.odds,
9
+ oddsOld: raw.odds_old,
10
+ movement: raw.movement === "STABLE" ? "NONE" : raw.movement,
11
+ url,
12
+ providerSelectionId: raw.provider_info?.selection_id
13
+ };
14
+ }
15
+ function transformOddMarket(raw) {
16
+ return {
17
+ type: {
18
+ id: raw.type.id,
19
+ code: raw.type.code,
20
+ name: raw.type.name
21
+ },
22
+ period: {
23
+ id: raw.scope.id,
24
+ type: raw.scope.type,
25
+ name: raw.scope.name
26
+ },
27
+ selections: raw.selections.map(transformOddSelection)
28
+ };
29
+ }
30
+ function isDarkColor(hexColor) {
31
+ if (!hexColor) return true;
32
+ const hex = hexColor.replace("#", "");
33
+ const r = parseInt(hex.substring(0, 2), 16);
34
+ const g = parseInt(hex.substring(2, 4), 16);
35
+ const b = parseInt(hex.substring(4, 6), 16);
36
+ const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
37
+ return luminance < 0.5;
38
+ }
39
+ function transformBettingOperatorOdds(raw) {
40
+ const firstAsset = raw.bookmaker.assets?.[0];
41
+ const hasBrandingData = raw.bookmaker.branding || firstAsset;
42
+ const backgroundColor = raw.bookmaker.branding?.background_color || firstAsset?.background_color;
43
+ const textColor = raw.bookmaker.branding?.text_color || (isDarkColor(backgroundColor) ? "#FFFFFF" : "#000000");
44
+ return {
45
+ operator: {
46
+ id: raw.bookmaker.id,
47
+ name: raw.bookmaker.name,
48
+ url: raw.bookmaker.url,
49
+ branding: hasBrandingData ? {
50
+ backgroundColor,
51
+ textColor,
52
+ logo: firstAsset?.logo
53
+ } : void 0
54
+ },
55
+ type: raw.type,
56
+ markets: raw.markets.map(transformOddMarket)
57
+ };
58
+ }
59
+ function transformOdds(raw) {
60
+ return raw.map(transformBettingOperatorOdds);
61
+ }
62
+ export {
63
+ transformOdds
64
+ };
65
+ //# sourceMappingURL=odds.transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odds.transformer.js","sources":["../../../../src/lib/api/sportal365-sports/shared/odds.transformer.ts"],"sourcesContent":["/**\n * Shared odds transformation utilities\n * Transforms raw Sportal365 odds responses to canonical FUSports types\n */\n\nimport type {\n FUSportsBettingOperatorOdds,\n FUSportsOddMarket,\n FUSportsOddSelection,\n} from \"../../../types/canonical\";\nimport type { RawMatchOdd, RawOddsMarket, RawOddsSelection } from \"./odds.types\";\n\n/**\n * Transform raw selection to canonical format\n */\nfunction transformOddSelection(raw: RawOddsSelection): FUSportsOddSelection {\n const url = raw.urls?.find((u) => u.app_type === \"desktop\")?.url;\n\n return {\n id: raw.id,\n name: raw.name,\n code: raw.code,\n value: raw.value ?? undefined,\n odds: raw.odds,\n oddsOld: raw.odds_old,\n movement: raw.movement === \"STABLE\" ? \"NONE\" : raw.movement,\n url,\n providerSelectionId: raw.provider_info?.selection_id,\n };\n}\n\n/**\n * Transform raw market to canonical format\n */\nfunction transformOddMarket(raw: RawOddsMarket): FUSportsOddMarket {\n return {\n type: {\n id: raw.type.id,\n code: raw.type.code,\n name: raw.type.name,\n },\n period: {\n id: raw.scope.id,\n type: raw.scope.type,\n name: raw.scope.name,\n },\n selections: raw.selections.map(transformOddSelection),\n };\n}\n\n/**\n * Determine if a color is light or dark based on luminance\n * Returns true if the color is dark (needs light text)\n */\nfunction isDarkColor(hexColor?: string): boolean {\n if (!hexColor) return true;\n\n const hex = hexColor.replace(\"#\", \"\");\n const r = parseInt(hex.substring(0, 2), 16);\n const g = parseInt(hex.substring(2, 4), 16);\n const b = parseInt(hex.substring(4, 6), 16);\n const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n\n return luminance < 0.5;\n}\n\n/**\n * Transform raw betting operator odds entry to canonical format\n */\nfunction transformBettingOperatorOdds(raw: RawMatchOdd): FUSportsBettingOperatorOdds {\n const firstAsset = raw.bookmaker.assets?.[0];\n const hasBrandingData = raw.bookmaker.branding || firstAsset;\n const backgroundColor = raw.bookmaker.branding?.background_color || firstAsset?.background_color;\n const textColor = raw.bookmaker.branding?.text_color || (isDarkColor(backgroundColor) ? \"#FFFFFF\" : \"#000000\");\n\n return {\n operator: {\n id: raw.bookmaker.id,\n name: raw.bookmaker.name,\n url: raw.bookmaker.url,\n branding: hasBrandingData\n ? {\n backgroundColor,\n textColor,\n logo: firstAsset?.logo,\n }\n : undefined,\n },\n type: raw.type,\n markets: raw.markets.map(transformOddMarket),\n };\n}\n\n/**\n * Transform raw odds array to canonical format\n * Returns just the operators array (no matchId wrapper)\n */\nexport function transformOdds(raw: RawMatchOdd[]): FUSportsBettingOperatorOdds[] {\n return raw.map(transformBettingOperatorOdds);\n}\n"],"names":[],"mappings":"AAeA,SAAS,sBAAsB,KAA6C;AACxE,QAAM,MAAM,IAAI,MAAM,KAAK,CAAC,MAAM,EAAE,aAAa,SAAS,GAAG;AAE7D,SAAO;AAAA,IACH,IAAI,IAAI;AAAA,IACR,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,IACV,OAAO,IAAI,SAAS;AAAA,IACpB,MAAM,IAAI;AAAA,IACV,SAAS,IAAI;AAAA,IACb,UAAU,IAAI,aAAa,WAAW,SAAS,IAAI;AAAA,IACnD;AAAA,IACA,qBAAqB,IAAI,eAAe;AAAA,EAAA;AAEhD;AAKA,SAAS,mBAAmB,KAAuC;AAC/D,SAAO;AAAA,IACH,MAAM;AAAA,MACF,IAAI,IAAI,KAAK;AAAA,MACb,MAAM,IAAI,KAAK;AAAA,MACf,MAAM,IAAI,KAAK;AAAA,IAAA;AAAA,IAEnB,QAAQ;AAAA,MACJ,IAAI,IAAI,MAAM;AAAA,MACd,MAAM,IAAI,MAAM;AAAA,MAChB,MAAM,IAAI,MAAM;AAAA,IAAA;AAAA,IAEpB,YAAY,IAAI,WAAW,IAAI,qBAAqB;AAAA,EAAA;AAE5D;AAMA,SAAS,YAAY,UAA4B;AAC7C,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,MAAM,SAAS,QAAQ,KAAK,EAAE;AACpC,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;AAC1C,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;AAC1C,QAAM,IAAI,SAAS,IAAI,UAAU,GAAG,CAAC,GAAG,EAAE;AAC1C,QAAM,aAAa,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK;AAE3D,SAAO,YAAY;AACvB;AAKA,SAAS,6BAA6B,KAA+C;AACjF,QAAM,aAAa,IAAI,UAAU,SAAS,CAAC;AAC3C,QAAM,kBAAkB,IAAI,UAAU,YAAY;AAClD,QAAM,kBAAkB,IAAI,UAAU,UAAU,oBAAoB,YAAY;AAChF,QAAM,YAAY,IAAI,UAAU,UAAU,eAAe,YAAY,eAAe,IAAI,YAAY;AAEpG,SAAO;AAAA,IACH,UAAU;AAAA,MACN,IAAI,IAAI,UAAU;AAAA,MAClB,MAAM,IAAI,UAAU;AAAA,MACpB,KAAK,IAAI,UAAU;AAAA,MACnB,UAAU,kBACJ;AAAA,QACI;AAAA,QACA;AAAA,QACA,MAAM,YAAY;AAAA,MAAA,IAEtB;AAAA,IAAA;AAAA,IAEV,MAAM,IAAI;AAAA,IACV,SAAS,IAAI,QAAQ,IAAI,kBAAkB;AAAA,EAAA;AAEnD;AAMO,SAAS,cAAc,KAAmD;AAC7E,SAAO,IAAI,IAAI,4BAA4B;AAC/C;"}
@@ -0,0 +1,31 @@
1
+ function toProviderRefArray(uuid, provider = "sportal365") {
2
+ if (!uuid) return void 0;
3
+ return [
4
+ {
5
+ provider,
6
+ id: uuid
7
+ }
8
+ ];
9
+ }
10
+ function getProviderRefId(providerRef, provider) {
11
+ if (!providerRef) return void 0;
12
+ const ref = providerRef.find((r) => r.provider === provider);
13
+ return ref?.id;
14
+ }
15
+ function addProviderRef(providerRef, provider, id) {
16
+ const refs = providerRef ?? [];
17
+ const existingIndex = refs.findIndex((r) => r.provider === provider);
18
+ if (existingIndex >= 0) {
19
+ const updated = [...refs];
20
+ updated[existingIndex] = { provider, id };
21
+ return updated;
22
+ } else {
23
+ return [...refs, { provider, id }];
24
+ }
25
+ }
26
+ export {
27
+ addProviderRef,
28
+ getProviderRefId,
29
+ toProviderRefArray
30
+ };
31
+ //# sourceMappingURL=providerRef.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerRef.helper.js","sources":["../../../../src/lib/api/sportal365-sports/shared/providerRef.helper.ts"],"sourcesContent":["/**\n * Provider reference helper utilities\n * Converts old string-based providerRef to new array format and provides lookup utilities\n */\n\n/**\n * Convert a provider-specific UUID/reference string to the new array format\n *\n * @param uuid - The provider-specific UUID/reference (e.g., from Sportal365)\n * @param provider - The provider name (default: \"sportal365\")\n * @returns Array with single provider reference object, or undefined if uuid is not provided\n *\n * @example\n * ```typescript\n * const ref = toProviderRefArray(\"abc-123-def\");\n * // Returns: [{ provider: \"sportal365\", id: \"abc-123-def\" }]\n * ```\n */\nexport function toProviderRefArray(\n uuid: string | undefined,\n provider: string = \"sportal365\"\n): { provider: string; id: string }[] | undefined {\n if (!uuid) return undefined;\n\n return [\n {\n provider,\n id: uuid,\n },\n ];\n}\n\n/**\n * Get provider ID from providerRef array by provider name\n *\n * @param providerRef - Array of provider references\n * @param provider - The provider name to search for (e.g., \"sportal365\", \"fans-united\", \"opta\")\n * @returns The provider-specific ID, or undefined if not found\n *\n * @example\n * ```typescript\n * const refs = [\n * { provider: \"sportal365\", id: \"abc-123\" },\n * { provider: \"fans-united\", id: \"fb:m:320180\" }\n * ];\n *\n * const sportalId = getProviderRefId(refs, \"sportal365\"); // \"abc-123\"\n * const fuId = getProviderRefId(refs, \"fans-united\"); // \"fb:m:320180\"\n * const optaId = getProviderRefId(refs, \"opta\"); // undefined\n * ```\n */\nexport function getProviderRefId(\n providerRef: { provider: string; id: string }[] | undefined,\n provider: string\n): string | undefined {\n if (!providerRef) return undefined;\n\n const ref = providerRef.find((r) => r.provider === provider);\n return ref?.id;\n}\n\n/**\n * Add or update a provider reference in the array\n *\n * @param providerRef - Existing array of provider references (can be undefined)\n * @param provider - The provider name\n * @param id - The provider-specific ID\n * @returns Updated array with the new/updated provider reference\n *\n * @example\n * ```typescript\n * let refs = [{ provider: \"sportal365\", id: \"abc-123\" }];\n *\n * // Add new provider\n * refs = addProviderRef(refs, \"fans-united\", \"fb:m:320180\");\n * // refs = [\n * // { provider: \"sportal365\", id: \"abc-123\" },\n * // { provider: \"fans-united\", id: \"fb:m:320180\" }\n * // ]\n *\n * // Update existing provider\n * refs = addProviderRef(refs, \"sportal365\", \"xyz-789\");\n * // refs = [\n * // { provider: \"sportal365\", id: \"xyz-789\" },\n * // { provider: \"fans-united\", id: \"fb:m:320180\" }\n * // ]\n * ```\n */\nexport function addProviderRef(\n providerRef: { provider: string; id: string }[] | undefined,\n provider: string,\n id: string\n): { provider: string; id: string }[] {\n const refs = providerRef ?? [];\n const existingIndex = refs.findIndex((r) => r.provider === provider);\n\n if (existingIndex >= 0) {\n // Update existing\n const updated = [...refs];\n updated[existingIndex] = { provider, id };\n return updated;\n } else {\n // Add new\n return [...refs, { provider, id }];\n }\n}\n\n"],"names":[],"mappings":"AAkBO,SAAS,mBACZ,MACA,WAAmB,cAC2B;AAC9C,MAAI,CAAC,KAAM,QAAO;AAElB,SAAO;AAAA,IACH;AAAA,MACI;AAAA,MACA,IAAI;AAAA,IAAA;AAAA,EACR;AAER;AAqBO,SAAS,iBACZ,aACA,UACkB;AAClB,MAAI,CAAC,YAAa,QAAO;AAEzB,QAAM,MAAM,YAAY,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ;AAC3D,SAAO,KAAK;AAChB;AA6BO,SAAS,eACZ,aACA,UACA,IACkC;AAClC,QAAM,OAAO,eAAe,CAAA;AAC5B,QAAM,gBAAgB,KAAK,UAAU,CAAC,MAAM,EAAE,aAAa,QAAQ;AAEnE,MAAI,iBAAiB,GAAG;AAEpB,UAAM,UAAU,CAAC,GAAG,IAAI;AACxB,YAAQ,aAAa,IAAI,EAAE,UAAU,GAAA;AACrC,WAAO;AAAA,EACX,OAAO;AAEH,WAAO,CAAC,GAAG,MAAM,EAAE,UAAU,IAAI;AAAA,EACrC;AACJ;"}
@@ -0,0 +1,7 @@
1
+ import { createHttpClient } from "../http.js";
2
+ import { SPORTAL365_STANDINGS_DOMAIN } from "../constants.js";
3
+ const standingsHttp = createHttpClient(SPORTAL365_STANDINGS_DOMAIN);
4
+ export {
5
+ standingsHttp
6
+ };
7
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sources":["../../../../src/lib/api/sportal365-sports/standings/http.ts"],"sourcesContent":["/**\n * Standings API HTTP client\n */\n\nimport { createHttpClient } from \"../http\";\nimport { SPORTAL365_STANDINGS_DOMAIN } from \"../constants\";\n\n/**\n * HTTP client configured for the Sportal365 Standings API\n */\nexport const standingsHttp = createHttpClient(SPORTAL365_STANDINGS_DOMAIN);\n"],"names":[],"mappings":";;AAUO,MAAM,gBAAgB,iBAAiB,2BAA2B;"}
@@ -0,0 +1,29 @@
1
+ import { getConfig } from "../../../config/index.js";
2
+ import { standingsHttp } from "./http.js";
3
+ import { transformStandingsApiResponse } from "./standing.transformer.js";
4
+ async function getSportal365Standings(options, config) {
5
+ const finalConfig = config || getConfig();
6
+ const { sportal365Sports } = finalConfig;
7
+ const params = {
8
+ season_id: options.seasonId,
9
+ stage_id: options.stageId,
10
+ group_id: options.groupId,
11
+ coverage_type: options.coverageType,
12
+ home_away: options.homeAway,
13
+ optional_data: options.includeForm ? "form" : void 0,
14
+ row_limit: options.rowLimit?.toString(),
15
+ row_offset: options.rowOffset?.toString(),
16
+ translation_language: options.languageCode ?? sportal365Sports?.languageCode ?? "en"
17
+ };
18
+ const raw = await standingsHttp.get({
19
+ path: `/standings/${options.sport}`,
20
+ params,
21
+ next: options.next,
22
+ config: finalConfig
23
+ });
24
+ return transformStandingsApiResponse(raw);
25
+ }
26
+ export {
27
+ getSportal365Standings
28
+ };
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/lib/api/sportal365-sports/standings/index.ts"],"sourcesContent":["/**\n * Sportal365 Standings API\n *\n * Fetches standings data from the dedicated Standings API (standing.api.sportal365.com)\n * and transforms to canonical FUSports types.\n *\n * Unlike the Football API standings endpoint, this supports:\n * - Multiple sports (football, basketball, ice_hockey)\n * - Multi-stage competitions (e.g., Bulgarian league with regular season + playoffs)\n * - Multi-group competitions (e.g., World Cup with Group A, B, C, etc.)\n * - Column-based stats format\n */\n\nimport type { FUSportsStandingsTable } from \"../../../types/canonical\";\nimport { getConfig, type DataLayerConfig } from \"../../../config\";\nimport { standingsHttp } from \"./http\";\nimport type { RawStandingsApiResponse, GetSportal365StandingsOptions } from \"./standing.types\";\nimport { transformStandingsApiResponse } from \"./standing.transformer\";\n\n// Re-export types\nexport type {\n RawStandingsApiResponse,\n RawStandingsApiStageData,\n RawStandingsApiStage,\n RawStandingsApiGroupStandings,\n RawStandingsApiGroup,\n RawStandingsApiEntry,\n RawStandingsApiTeam,\n RawStandingsApiColumn,\n RawStandingsApiColumnType,\n RawStandingsApiRule,\n GetSportal365StandingsOptions,\n StandingsSport,\n StandingsCoverageType,\n} from \"./standing.types\";\n\n/**\n * Get standings from the Sportal365 Standings API.\n *\n * Returns an array of standings tables, one per stage/group/coverageType combination.\n * For a simple league (e.g., Premier League), this will typically return 1-2 tables\n * (LIVE and/or FINISHED for the single Overall group).\n * For complex competitions (e.g., World Cup), it may return many tables\n * (one per group per coverage type).\n *\n * @param options - Options including sport, seasonId/stageId, coverageType, etc.\n * @param config - Optional data layer config (uses singleton if not provided)\n * @returns Array of FUSportsStandingsTable objects\n *\n * @example\n * ```typescript\n * // Get all standings for a Premier League season\n * const tables = await getSportal365Standings({\n * sport: 'football',\n * seasonId: 'bfa3f13b-5ab1-476c-9ca4-26ce707e8733',\n * coverageType: 'ALL',\n * includeForm: true,\n * });\n *\n * // Filter to just LIVE standings\n * const liveTables = tables.filter(t => t.coverageType === 'LIVE');\n *\n * // Group by stage for multi-stage competitions\n * const byStage = Map.groupBy(tables, t => t.stage.id);\n * ```\n */\nexport async function getSportal365Standings(\n options: GetSportal365StandingsOptions,\n config?: DataLayerConfig\n): Promise<FUSportsStandingsTable[]> {\n const finalConfig = config || getConfig();\n const { sportal365Sports } = finalConfig;\n\n const params: Record<string, string | undefined> = {\n season_id: options.seasonId,\n stage_id: options.stageId,\n group_id: options.groupId,\n coverage_type: options.coverageType,\n home_away: options.homeAway,\n optional_data: options.includeForm ? \"form\" : undefined,\n row_limit: options.rowLimit?.toString(),\n row_offset: options.rowOffset?.toString(),\n translation_language: options.languageCode ?? sportal365Sports?.languageCode ?? \"en\",\n };\n\n const raw = await standingsHttp.get<RawStandingsApiResponse>({\n path: `/standings/${options.sport}`,\n params,\n next: options.next,\n config: finalConfig,\n });\n\n return transformStandingsApiResponse(raw);\n}\n"],"names":[],"mappings":";;;AAkEA,eAAsB,uBAClB,SACA,QACiC;AACjC,QAAM,cAAc,UAAU,UAAA;AAC9B,QAAM,EAAE,qBAAqB;AAE7B,QAAM,SAA6C;AAAA,IAC/C,WAAW,QAAQ;AAAA,IACnB,UAAU,QAAQ;AAAA,IAClB,UAAU,QAAQ;AAAA,IAClB,eAAe,QAAQ;AAAA,IACvB,WAAW,QAAQ;AAAA,IACnB,eAAe,QAAQ,cAAc,SAAS;AAAA,IAC9C,WAAW,QAAQ,UAAU,SAAA;AAAA,IAC7B,YAAY,QAAQ,WAAW,SAAA;AAAA,IAC/B,sBAAsB,QAAQ,gBAAgB,kBAAkB,gBAAgB;AAAA,EAAA;AAGpF,QAAM,MAAM,MAAM,cAAc,IAA6B;AAAA,IACzD,MAAM,cAAc,QAAQ,KAAK;AAAA,IACjC;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,QAAQ;AAAA,EAAA,CACX;AAED,SAAO,8BAA8B,GAAG;AAC5C;"}