be-components 7.5.6 → 7.5.7

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 (142) hide show
  1. package/lib/commonjs/AdServer/api/index.js +4 -2
  2. package/lib/commonjs/AdServer/api/index.js.map +1 -1
  3. package/lib/commonjs/AdServer/index.js +26 -13
  4. package/lib/commonjs/AdServer/index.js.map +1 -1
  5. package/lib/commonjs/ApiOverrides/index.js +3 -2
  6. package/lib/commonjs/ApiOverrides/index.js.map +1 -1
  7. package/lib/commonjs/BetRouter/api/index.js +69 -0
  8. package/lib/commonjs/BetRouter/api/index.js.map +1 -1
  9. package/lib/commonjs/BetRouter/components/ContestLiquidity.js +72 -11
  10. package/lib/commonjs/BetRouter/components/ContestLiquidity.js.map +1 -1
  11. package/lib/commonjs/BetRouter/components/admin/LeagueInfo.js +233 -2
  12. package/lib/commonjs/BetRouter/components/admin/LeagueInfo.js.map +1 -1
  13. package/lib/commonjs/BetRouter/components/admin/RouterMarkets.js +1555 -0
  14. package/lib/commonjs/BetRouter/components/admin/RouterMarkets.js.map +1 -0
  15. package/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.js +16 -3
  16. package/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.js.map +1 -1
  17. package/lib/commonjs/BetRouter/layouts/MobileAdminLayout.js +31 -2
  18. package/lib/commonjs/BetRouter/layouts/MobileAdminLayout.js.map +1 -1
  19. package/lib/commonjs/BetRouter/types/api-contracts.js +77 -0
  20. package/lib/commonjs/BetRouter/types/api-contracts.js.map +1 -1
  21. package/lib/commonjs/BetRouter/types/credentials.js +4 -0
  22. package/lib/commonjs/BetRouter/types/credentials.js.map +1 -1
  23. package/lib/commonjs/Components/ViewportObserver.js +9 -0
  24. package/lib/commonjs/Components/ViewportObserver.js.map +1 -1
  25. package/lib/commonjs/ProfileManager/Components/DOBManager.js +38 -2
  26. package/lib/commonjs/ProfileManager/Components/DOBManager.js.map +1 -1
  27. package/lib/commonjs/ProfileManager/Components/EmailManager.js +40 -2
  28. package/lib/commonjs/ProfileManager/Components/EmailManager.js.map +1 -1
  29. package/lib/commonjs/ProfileManager/Components/PhoneManager.js +38 -1
  30. package/lib/commonjs/ProfileManager/Components/PhoneManager.js.map +1 -1
  31. package/lib/commonjs/ProfileManager/Components/VouchCard.js +13 -3
  32. package/lib/commonjs/ProfileManager/Components/VouchCard.js.map +1 -1
  33. package/lib/module/AdServer/api/index.js +4 -2
  34. package/lib/module/AdServer/api/index.js.map +1 -1
  35. package/lib/module/AdServer/index.js +25 -12
  36. package/lib/module/AdServer/index.js.map +1 -1
  37. package/lib/module/ApiOverrides/index.js +3 -2
  38. package/lib/module/ApiOverrides/index.js.map +1 -1
  39. package/lib/module/BetRouter/api/index.js +69 -0
  40. package/lib/module/BetRouter/api/index.js.map +1 -1
  41. package/lib/module/BetRouter/components/ContestLiquidity.js +72 -11
  42. package/lib/module/BetRouter/components/ContestLiquidity.js.map +1 -1
  43. package/lib/module/BetRouter/components/admin/LeagueInfo.js +233 -3
  44. package/lib/module/BetRouter/components/admin/LeagueInfo.js.map +1 -1
  45. package/lib/module/BetRouter/components/admin/RouterMarkets.js +1548 -0
  46. package/lib/module/BetRouter/components/admin/RouterMarkets.js.map +1 -0
  47. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js +16 -3
  48. package/lib/module/BetRouter/layouts/DesktopAdminLayout.js.map +1 -1
  49. package/lib/module/BetRouter/layouts/MobileAdminLayout.js +31 -2
  50. package/lib/module/BetRouter/layouts/MobileAdminLayout.js.map +1 -1
  51. package/lib/module/BetRouter/types/api-contracts.js +77 -0
  52. package/lib/module/BetRouter/types/api-contracts.js.map +1 -1
  53. package/lib/module/BetRouter/types/credentials.js +4 -0
  54. package/lib/module/BetRouter/types/credentials.js.map +1 -1
  55. package/lib/module/Components/ViewportObserver.js +9 -0
  56. package/lib/module/Components/ViewportObserver.js.map +1 -1
  57. package/lib/module/ProfileManager/Components/DOBManager.js +38 -2
  58. package/lib/module/ProfileManager/Components/DOBManager.js.map +1 -1
  59. package/lib/module/ProfileManager/Components/EmailManager.js +40 -2
  60. package/lib/module/ProfileManager/Components/EmailManager.js.map +1 -1
  61. package/lib/module/ProfileManager/Components/PhoneManager.js +38 -1
  62. package/lib/module/ProfileManager/Components/PhoneManager.js.map +1 -1
  63. package/lib/module/ProfileManager/Components/VouchCard.js +13 -3
  64. package/lib/module/ProfileManager/Components/VouchCard.js.map +1 -1
  65. package/lib/typescript/lib/commonjs/AdServer/api/index.d.ts.map +1 -1
  66. package/lib/typescript/lib/commonjs/AdServer/index.d.ts +1 -0
  67. package/lib/typescript/lib/commonjs/AdServer/index.d.ts.map +1 -1
  68. package/lib/typescript/lib/commonjs/ApiOverrides/index.d.ts.map +1 -1
  69. package/lib/typescript/lib/commonjs/BetRouter/api/index.d.ts +6 -0
  70. package/lib/typescript/lib/commonjs/BetRouter/api/index.d.ts.map +1 -1
  71. package/lib/typescript/lib/commonjs/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  72. package/lib/typescript/lib/commonjs/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  73. package/lib/typescript/lib/commonjs/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  74. package/lib/typescript/lib/commonjs/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  75. package/lib/typescript/lib/commonjs/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  76. package/lib/typescript/lib/commonjs/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  77. package/lib/typescript/lib/commonjs/BetRouter/types/api-contracts.d.ts +77 -0
  78. package/lib/typescript/lib/commonjs/BetRouter/types/credentials.d.ts.map +1 -1
  79. package/lib/typescript/lib/commonjs/Components/ViewportObserver.d.ts.map +1 -1
  80. package/lib/typescript/lib/commonjs/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  81. package/lib/typescript/lib/commonjs/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  82. package/lib/typescript/lib/commonjs/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  83. package/lib/typescript/lib/commonjs/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  84. package/lib/typescript/lib/module/AdServer/api/index.d.ts.map +1 -1
  85. package/lib/typescript/lib/module/AdServer/index.d.ts +9 -0
  86. package/lib/typescript/lib/module/AdServer/index.d.ts.map +1 -1
  87. package/lib/typescript/lib/module/ApiOverrides/index.d.ts.map +1 -1
  88. package/lib/typescript/lib/module/BetRouter/api/index.d.ts +6 -0
  89. package/lib/typescript/lib/module/BetRouter/api/index.d.ts.map +1 -1
  90. package/lib/typescript/lib/module/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  91. package/lib/typescript/lib/module/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  92. package/lib/typescript/lib/module/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  93. package/lib/typescript/lib/module/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  94. package/lib/typescript/lib/module/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  95. package/lib/typescript/lib/module/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  96. package/lib/typescript/lib/module/BetRouter/types/api-contracts.d.ts +77 -0
  97. package/lib/typescript/lib/module/BetRouter/types/api-contracts.d.ts.map +1 -1
  98. package/lib/typescript/lib/module/BetRouter/types/credentials.d.ts.map +1 -1
  99. package/lib/typescript/lib/module/Components/ViewportObserver.d.ts.map +1 -1
  100. package/lib/typescript/lib/module/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  101. package/lib/typescript/lib/module/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  102. package/lib/typescript/lib/module/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  103. package/lib/typescript/lib/module/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  104. package/lib/typescript/src/AdServer/api/index.d.ts.map +1 -1
  105. package/lib/typescript/src/AdServer/index.d.ts +12 -3
  106. package/lib/typescript/src/AdServer/index.d.ts.map +1 -1
  107. package/lib/typescript/src/ApiOverrides/index.d.ts.map +1 -1
  108. package/lib/typescript/src/BetRouter/api/index.d.ts +23 -2
  109. package/lib/typescript/src/BetRouter/api/index.d.ts.map +1 -1
  110. package/lib/typescript/src/BetRouter/components/ContestLiquidity.d.ts.map +1 -1
  111. package/lib/typescript/src/BetRouter/components/admin/LeagueInfo.d.ts.map +1 -1
  112. package/lib/typescript/src/BetRouter/components/admin/RouterMarkets.d.ts +4 -0
  113. package/lib/typescript/src/BetRouter/components/admin/RouterMarkets.d.ts.map +1 -0
  114. package/lib/typescript/src/BetRouter/layouts/DesktopAdminLayout.d.ts.map +1 -1
  115. package/lib/typescript/src/BetRouter/layouts/MobileAdminLayout.d.ts.map +1 -1
  116. package/lib/typescript/src/BetRouter/types/api-contracts.d.ts +93 -4
  117. package/lib/typescript/src/BetRouter/types/api-contracts.d.ts.map +1 -1
  118. package/lib/typescript/src/BetRouter/types/credentials.d.ts +1 -5
  119. package/lib/typescript/src/BetRouter/types/credentials.d.ts.map +1 -1
  120. package/lib/typescript/src/Components/ViewportObserver.d.ts.map +1 -1
  121. package/lib/typescript/src/ProfileManager/Components/DOBManager.d.ts.map +1 -1
  122. package/lib/typescript/src/ProfileManager/Components/EmailManager.d.ts.map +1 -1
  123. package/lib/typescript/src/ProfileManager/Components/PhoneManager.d.ts.map +1 -1
  124. package/lib/typescript/src/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  125. package/package.json +1 -1
  126. package/src/AdServer/api/index.ts +4 -2
  127. package/src/AdServer/index.tsx +64 -22
  128. package/src/ApiOverrides/index.ts +3 -2
  129. package/src/BetRouter/api/index.ts +101 -2
  130. package/src/BetRouter/components/ContestLiquidity.tsx +78 -11
  131. package/src/BetRouter/components/admin/LeagueInfo.tsx +231 -3
  132. package/src/BetRouter/components/admin/RouterMarkets.tsx +1238 -0
  133. package/src/BetRouter/layouts/DesktopAdminLayout.tsx +24 -1
  134. package/src/BetRouter/layouts/MobileAdminLayout.tsx +30 -2
  135. package/src/BetRouter/types/api-contracts.ts +100 -2
  136. package/src/BetRouter/types/credentials.ts +5 -6
  137. package/src/Components/ViewportObserver.tsx +13 -2
  138. package/src/ProfileManager/Components/DOBManager.tsx +14 -1
  139. package/src/ProfileManager/Components/EmailManager.tsx +16 -1
  140. package/src/ProfileManager/Components/PhoneManager.tsx +14 -0
  141. package/src/ProfileManager/Components/VouchCard.tsx +12 -4
  142. package/src/types.d.ts +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"VouchCard.d.ts","sourceRoot":"","sources":["../../../../../src/ProfileManager/Components/VouchCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOvH,KAAK,cAAc,GAAG;IAClB,MAAM,EAAC,aAAa,CAAC;IACrB,WAAW,CAAC,EAAC,OAAO,CAAC;IACrB,SAAS,CAAC,EAAC,SAAS,GAAC,QAAQ,CAAC;IAC9B,MAAM,CAAC,EAAC;QAAE,GAAG,EAAC,MAAM,CAAC;QAAC,MAAM,EAAC,MAAM,CAAC;QAAC,IAAI,CAAC,EAAC,MAAM,CAAC;QAAC,KAAK,CAAC,EAAC,MAAM,CAAA;KAAE,CAAC;IACnE,UAAU,EAAC,CAAC,MAAM,EAAC,OAAO,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE;QACV,YAAY,CAAC,EAAC,gBAAgB,CAAC;QAC/B,QAAQ,CAAC,EAAC,iBAAiB,CAAC;QAC5B,KAAK,CAAC,EAAC,UAAU,CAAC;QAClB,eAAe,CAAC,EAAC,mBAAmB,CAAA;KACvC,CAAA;IACD,cAAc,EAAC,CAAC,MAAM,EAAC,aAAa,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAC,MAAM,IAAI,CAAC;IACvB,OAAO,EAAC,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,QAAA,MAAM,SAAS,GAAI,4GAA2G,cAAc,sBAsT3I,CAAA;AAED,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"VouchCard.d.ts","sourceRoot":"","sources":["../../../../../src/ProfileManager/Components/VouchCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOvH,KAAK,cAAc,GAAG;IAClB,MAAM,EAAC,aAAa,CAAC;IACrB,WAAW,CAAC,EAAC,OAAO,CAAC;IACrB,SAAS,CAAC,EAAC,SAAS,GAAC,QAAQ,CAAC;IAC9B,MAAM,CAAC,EAAC;QAAE,GAAG,EAAC,MAAM,CAAC;QAAC,MAAM,EAAC,MAAM,CAAC;QAAC,IAAI,CAAC,EAAC,MAAM,CAAC;QAAC,KAAK,CAAC,EAAC,MAAM,CAAA;KAAE,CAAC;IACnE,UAAU,EAAC,CAAC,MAAM,EAAC,OAAO,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE;QACV,YAAY,CAAC,EAAC,gBAAgB,CAAC;QAC/B,QAAQ,CAAC,EAAC,iBAAiB,CAAC;QAC5B,KAAK,CAAC,EAAC,UAAU,CAAC;QAClB,eAAe,CAAC,EAAC,mBAAmB,CAAA;KACvC,CAAA;IACD,cAAc,EAAC,CAAC,MAAM,EAAC,aAAa,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAC,MAAM,IAAI,CAAC;IACvB,OAAO,EAAC,MAAM,IAAI,CAAA;CACrB,CAAA;AAED,QAAA,MAAM,SAAS,GAAI,4GAA2G,cAAc,sBA8T3I,CAAA;AAED,eAAe,SAAS,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "be-components",
3
- "version": "7.5.6",
3
+ "version": "7.5.7",
4
4
  "description": "Components for BettorEdge Apps",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -10,11 +10,13 @@ const AdServerApi = {
10
10
  SOCIAL_SVC_API = endpoints['SOCIAL_SVC_API'] as string;
11
11
  },
12
12
  getAdTypes: async():Promise<AdTypeProps[]> => {
13
- const resp = await axios.get(`${SOCIAL_SVC_API}/v2/ads/types`);
13
+ const url = `${SOCIAL_SVC_API}/v2/ads/types`;
14
+ const resp = await axios.get(url);
14
15
  return resp.data.ad_types
15
16
  },
16
17
  findAds : async():Promise<AdPlacementProps[]> => {
17
- const resp = await axios.get(`${SOCIAL_SVC_API}/v2/ads/find`)
18
+ const url = `${SOCIAL_SVC_API}/v2/ads/find`;
19
+ const resp = await axios.get(url);
18
20
  return resp.data.ad_placements
19
21
  }
20
22
  }
@@ -10,11 +10,11 @@ type AdServerProps = {
10
10
  ad_type:string,
11
11
  role?:string,
12
12
  device_width:number,
13
- onViewAd: (be_event:BEEventProps) => void,
14
- onClickAd: (be_event:BEEventProps) => void,
13
+ onViewAd?: (be_event:BEEventProps) => void,
14
+ onClickAd?: (be_event:BEEventProps) => void,
15
15
  }
16
16
 
17
- const AdContext = createContext({
17
+ export const AdContext = createContext({
18
18
  loading:false,
19
19
  ads_loaded: false as boolean,
20
20
  role: undefined as string | undefined,
@@ -32,6 +32,7 @@ type AdProviderProps = {
32
32
  }
33
33
 
34
34
  export const AdProvider = ({ children, role, distinct_id, session_id }:AdProviderProps) => {
35
+
35
36
  const [ ads_loaded, setAdsLoaded ] = useState(false);
36
37
  const [ ads_data, setData ] = useState<{
37
38
  loading:boolean,
@@ -52,20 +53,28 @@ export const AdProvider = ({ children, role, distinct_id, session_id }:AdProvide
52
53
  },[role])
53
54
 
54
55
  useEffect(() => {
56
+ if(ads_loaded) {
57
+ return;
58
+ }
55
59
  AdServerApi.setEnvironment();
56
60
  getAds()
57
- },[])
61
+ },[ads_loaded])
58
62
 
59
63
  const getAds = async() => {
60
- const ad_plcm = await AdServerApi.findAds();
61
- const typs = await AdServerApi.getAdTypes();
62
- setData({
63
- ...ads_data,
64
- ad_types:typs,
65
- role,
66
- ad_placements:ad_plcm
67
- })
68
- setAdsLoaded(true)
64
+ try {
65
+ const ad_plcm = await AdServerApi.findAds();
66
+ const typs = await AdServerApi.getAdTypes();
67
+
68
+ setData({
69
+ ...ads_data,
70
+ ad_types:typs,
71
+ role,
72
+ ad_placements:ad_plcm
73
+ })
74
+ setAdsLoaded(true)
75
+ } catch(error) {
76
+ console.error('[AdProvider] Failed to load ads:', error);
77
+ }
69
78
  }
70
79
 
71
80
 
@@ -85,28 +94,59 @@ const AdServer = ({ placement, device_width, ad_type, role, onViewAd, onClickAd
85
94
  const { company_ad, active_type, active_placement } = ad;
86
95
  const data = useContext(AdContext);
87
96
 
88
-
97
+
89
98
  useEffect(() => {
90
- if(!data?.ads_loaded){ return }
91
- if(!placement || !ad_type){ return }
99
+
100
+
101
+ if(!data?.ads_loaded){
102
+ return;
103
+ }
104
+ if(!placement || !ad_type){
105
+ return;
106
+ }
92
107
  getNewAd()
93
108
  },[data?.ads_loaded, placement, ad_type])
94
109
 
95
110
  const getNewAd = () => {
111
+
96
112
  let my_role = role;
97
- if(!my_role){ role = data.role }
98
- if(my_role == 'premium'){ return }
113
+ if(!my_role){ my_role = data.role }
114
+
115
+
116
+ if(my_role == 'premium'){
117
+ return;
118
+ }
119
+
99
120
  const active_type = data.ad_types.find(t => t.ad_type == ad_type)
121
+
122
+
100
123
  const active_placement = data.ad_placements.filter(p => p.ad_buys && p.ad_buys.length > 0).find(p => p.placement == placement)
101
- if(!active_placement?.ad_buys){ return }
124
+
125
+
126
+ if(!active_placement?.ad_buys){
127
+ return;
128
+ }
129
+
102
130
  const ad_buys_with_ads = active_placement.ad_buys.filter(b => b.company_ads && b.company_ads.length > 0)
131
+
103
132
  const active_ad_buy = ad_buys_with_ads[Math.floor(Math.random()*(ad_buys_with_ads.length-1))]
104
- if(!active_ad_buy){ return }
133
+ if(!active_ad_buy){
134
+ return;
135
+ }
136
+
105
137
  let selectedable_ads = active_ad_buy.company_ads
106
- if(!selectedable_ads || selectedable_ads.length == 0){ return }
138
+
139
+ if(!selectedable_ads || selectedable_ads.length == 0){
140
+ return;
141
+ }
142
+
107
143
  selectedable_ads = selectedable_ads.filter(ad => ad.ad_type_id == active_type?.ad_type_id);
144
+
108
145
  const new_ad = selectedable_ads[Math.floor(Math.random()*(selectedable_ads.length-1))]
109
- if(!new_ad){ return }
146
+
147
+ if(!new_ad){
148
+ return;
149
+ }
110
150
  setAd({
111
151
  company_ad: new_ad,
112
152
  active_type,
@@ -125,6 +165,7 @@ const AdServer = ({ placement, device_width, ad_type, role, onViewAd, onClickAd
125
165
  ad_type={active_type}
126
166
  size={{ width:device_width, height:200 }}
127
167
  onViewAd={(ad) => {
168
+ if(!onViewAd){ return }
128
169
  onViewAd({
129
170
  event_name:'ad_view',
130
171
  level:2,
@@ -139,6 +180,7 @@ const AdServer = ({ placement, device_width, ad_type, role, onViewAd, onClickAd
139
180
  })
140
181
  }}
141
182
  onClickAd={(ad) => {
183
+ if(!onClickAd){ return }
142
184
  onClickAd({
143
185
  event_name:'ad_click',
144
186
  level:1,
@@ -50,7 +50,7 @@ const ENVIRONMENT_ENDPOINTS = {
50
50
  VOUCHED_SANDBOX: false,
51
51
  BOT_SVC_API: 'https://api.bot.bettoredge.com',
52
52
  EVENT_SVC_API: 'https://api.events.bettoredge.com',
53
- BR_SVC_API: 'http://localhost:5001',
53
+ BR_SVC_API: 'https://betrouter.bettoredge.com',
54
54
  MK_SVC_API: 'https://api.markets.bettoredge.com',
55
55
  TP_SVC_API: 'https://be-tp-svc.herokuapp.com',
56
56
  SOCIAL_SVC_API: 'https://api.social.bettoredge.com',
@@ -63,7 +63,7 @@ const ENVIRONMENT_ENDPOINTS = {
63
63
  PRODUCTION_PROXY: {
64
64
  AUTH_SVC_API: 'https://proxy.bettoredge.com/players',
65
65
  CLIENT_API_KEY: 'mlOfTJPp4TdmppP9ajBmMVo2bO50O2G9',
66
- BR_SVC_API: 'http://localhost:5001',
66
+ BR_SVC_API: 'https://betrouter.bettoredge.com',
67
67
  VOUCH_ID: 'Q3tmJ3r9FnkN*n-MqS-!j0NS*k!mdo',
68
68
  VOUCHED_CALLBACK_URL: 'https://be-auth-svc.herokuapp.com/v1/players/vouch/hook',
69
69
  VOUCHED_SANDBOX: false,
@@ -214,6 +214,7 @@ const APIOverrides = {
214
214
  return resp.data
215
215
  } catch (e) {
216
216
  console.log('THERE WAS AN ERROR!!!')
217
+ alert(e)
217
218
  return undefined
218
219
  }
219
220
  },
@@ -620,6 +620,105 @@ export const BetRouterApi = {
620
620
  } catch (e) {
621
621
  throw e;
622
622
  }
623
+ },
624
+ // POST /markets/router
625
+ createRouterMarket: async(
626
+ market_key: string,
627
+ market_label: string,
628
+ market_description: string,
629
+ category: 'game_result' | 'team_stat' | 'player_stat' | 'game_stat',
630
+ variable_required: boolean,
631
+ default_variable_type: 'total' | 'spread',
632
+ allow_multiple_participants: boolean,
633
+ participant_type: 'team' | 'player' | 'event',
634
+ status: 'active' | 'inactive'
635
+ ): Promise<ExtractSuccessResponse<'POST /markets/router'> | any> => {
636
+ try {
637
+ const resp = await axios.post(`${BR_SVC_API}/markets/router`, {
638
+ market_key,
639
+ market_label,
640
+ market_description,
641
+ category,
642
+ variable_required,
643
+ default_variable_type,
644
+ allow_multiple_participants,
645
+ participant_type,
646
+ status
647
+ });
648
+ return resp.data;
649
+ } catch (e) {
650
+ throw e;
651
+ }
652
+ },
653
+ // PATCH /markets/router/:router_market_id
654
+ updateRouterMarket: async(router_market_id: string, updates: Partial<{
655
+ market_key: string;
656
+ market_label: string;
657
+ market_description: string;
658
+ category: 'game_result' | 'team_stat' | 'player_stat' | 'game_stat';
659
+ variable_required: boolean;
660
+ default_variable_type: 'total' | 'spread';
661
+ allow_multiple_participants: boolean;
662
+ participant_type: 'team' | 'player' | 'event';
663
+ status: 'active' | 'inactive';
664
+ }>): Promise<ExtractSuccessResponse<'PATCH /markets/router/:router_market_id'>> => {
665
+ try {
666
+ const resp = await axios.patch(`${BR_SVC_API}/markets/router/${router_market_id}`, updates);
667
+ return resp.data;
668
+ } catch (e) {
669
+ throw e;
670
+ }
671
+ },
672
+ // DELETE /markets/router/:router_market_id
673
+ deleteRouterMarket: async(router_market_id: string): Promise<ExtractSuccessResponse<'DELETE /markets/router/:router_market_id'>> => {
674
+ try {
675
+ const resp = await axios.delete(`${BR_SVC_API}/markets/router/${router_market_id}`);
676
+ return resp.data;
677
+ } catch (e) {
678
+ throw e;
679
+ }
680
+ },
681
+ // POST /markets/sides
682
+ createMarketSide: async(
683
+ router_market_id: string,
684
+ side_type: string,
685
+ side_key: string,
686
+ renderer: string
687
+ ): Promise<ExtractSuccessResponse<'POST /markets/sides'> | any> => {
688
+ try {
689
+ const resp = await axios.post(`${BR_SVC_API}/markets/sides`, {
690
+ router_market_id,
691
+ side_type,
692
+ side_key,
693
+ renderer
694
+ });
695
+ return resp.data;
696
+ } catch (e) {
697
+ throw e;
698
+ }
699
+ },
700
+ // PATCH /markets/sides/:market_side_id
701
+ updateMarketSide: async(market_side_id: string, updates: Partial<{
702
+ router_market_id: string;
703
+ side_type: string;
704
+ side_key: string;
705
+ renderer: string;
706
+ }>): Promise<ExtractSuccessResponse<'PATCH /markets/sides/:market_side_id'>> => {
707
+ try {
708
+ const resp = await axios.patch(`${BR_SVC_API}/markets/sides/${market_side_id}`, updates);
709
+ return resp.data;
710
+ } catch (e) {
711
+ throw e;
712
+ }
713
+ },
714
+ // DELETE /markets/sides/:market_side_id
715
+ deleteMarketSide: async(market_side_id: string): Promise<ExtractSuccessResponse<'DELETE /markets/sides/:market_side_id'>> => {
716
+ try {
717
+ const resp = await axios.delete(`${BR_SVC_API}/markets/sides/${market_side_id}`);
718
+ return resp.data;
719
+ } catch (e) {
720
+ throw e;
721
+ }
623
722
  }
624
723
  },
625
724
  LiquidityApi: {
@@ -721,7 +820,7 @@ export const BetRouterApi = {
721
820
  }
722
821
  },
723
822
  // POST /jobs/create
724
- createJob: async(job_key: string, name: string, description: string, frequency: number, frequency_type: 'seconds' | 'minutes' | 'hours' | 'days'): Promise<ExtractSuccessResponse<'POST /jobs/create'>> => {
823
+ createJob: async(job_key: string, name: string, description: string, frequency: number, frequency_type: 'seconds' | 'minutes' | 'hours' | 'days'): Promise<ExtractSuccessResponse<'POST /jobs/create'> | any> => {
725
824
  try {
726
825
  const resp = await axios.post(`${BR_SVC_API}/jobs/create`, {
727
826
  job_key,
@@ -815,7 +914,7 @@ export const BetRouterApi = {
815
914
  }
816
915
  },
817
916
  // POST /config
818
- createConfig: async(config: string, value: any, config_format: 'string' | 'number' | 'boolean' | 'json'): Promise<ExtractSuccessResponse<'POST /config'>> => {
917
+ createConfig: async(config: string, value: any, config_format: 'string' | 'number' | 'boolean' | 'json'): Promise<ExtractSuccessResponse<'POST /config'> | any> => {
819
918
  try {
820
919
  const resp = await axios.post(`${BR_SVC_API}/config`, {
821
920
  config,
@@ -67,6 +67,7 @@ const ContestLiquidity = ({
67
67
 
68
68
  const [selectedMarketId, setSelectedMarketId] = useState<string>('');
69
69
  const [selectedVariableId, setSelectedVariableId] = useState<string>('');
70
+ const [inverseVariableId, setInverseVariableId] = useState<string>('');
70
71
  const [selectedOpportunity, setSelectedOpportunity] = useState<BuyOpportunity | null>(null);
71
72
  const [modalVisible, setModalVisible] = useState(false);
72
73
 
@@ -144,7 +145,7 @@ const ContestLiquidity = ({
144
145
  // For spread markets, only show home side variables
145
146
  // For total markets, only show under side variables
146
147
  const linkedVariableIds = new Set<string>();
147
- const uniqueVariableValues = new Map<number, string>(); // absolute value -> variable_id
148
+ const uniqueVariableValues = new Map<number, string>(); // variable value (with sign) -> variable_id
148
149
 
149
150
  // First, find the home side and under side for this market
150
151
  const homeSide = sides.find(s => s.side_key.toLowerCase() === 'home');
@@ -166,9 +167,10 @@ const ContestLiquidity = ({
166
167
  : true;
167
168
 
168
169
  if (isCorrectSide) {
169
- const absValue = Math.abs(variable.variable);
170
- if (!uniqueVariableValues.has(absValue)) {
171
- uniqueVariableValues.set(absValue, variable.router_market_variable_id);
170
+ // Use the actual variable value (with sign) as the key to preserve both positive and negative values
171
+ const variableValue = variable.variable;
172
+ if (!uniqueVariableValues.has(variableValue)) {
173
+ uniqueVariableValues.set(variableValue, variable.router_market_variable_id);
172
174
  }
173
175
  }
174
176
  }
@@ -180,11 +182,30 @@ const ContestLiquidity = ({
180
182
  .map(id => data.router_market_variables.find(v => v.router_market_variable_id === id))
181
183
  .filter(v => v !== undefined) as RouterMarketVariableProps[];
182
184
 
185
+ // Sort variables ascending by value
186
+ variables.sort((a, b) => Number(a.variable) - Number(b.variable));
187
+
183
188
  // Auto-select first variable if not selected
184
189
  let currentVariableId = selectedVariableId;
190
+ let currentInverseVariableId = inverseVariableId;
185
191
  if (variables[0] && router_market.variable_required && variables.length > 0 && !currentVariableId) {
186
192
  currentVariableId = variables[0].router_market_variable_id;
187
193
  setSelectedVariableId(currentVariableId);
194
+
195
+ // For spread markets, find and store the inverse variable
196
+ const selectedVar = data.router_market_variables.find(v => v.router_market_variable_id === currentVariableId);
197
+ if (selectedVar && selectedVar.variable_type === 'spread') {
198
+ const inverseValue = -Number(selectedVar.variable);
199
+ const inverseVar = data.router_market_variables.find(v =>
200
+ v.router_market_id === selectedMarketId &&
201
+ Number(v.variable) === inverseValue &&
202
+ v.variable_type === 'spread'
203
+ );
204
+ if (inverseVar) {
205
+ currentInverseVariableId = inverseVar.router_market_variable_id;
206
+ setInverseVariableId(currentInverseVariableId);
207
+ }
208
+ }
188
209
  }
189
210
 
190
211
  // Build partner rows
@@ -200,14 +221,27 @@ const ContestLiquidity = ({
200
221
  const currentVariable = data.router_market_variables.find(v => v.router_market_variable_id === partner_market.router_market_variable_id);
201
222
 
202
223
  if (selectedVariable && currentVariable) {
203
- // For spread markets, match both +/- versions (e.g., -7 and +7)
204
224
  if (selectedVariable.variable_type === 'spread') {
205
- if (Math.abs(selectedVariable.variable) !== Math.abs(currentVariable.variable)) {
206
- return; // Different absolute values, skip
225
+ // For spread markets, match using stored variable IDs
226
+ // Get the side for this partner market
227
+ const currentSide = sides.find(s => s.market_side_id === partner_market.market_side_id);
228
+ const homeSide = sides.find(s => s.side_key.toLowerCase() === 'home');
229
+ const isHomeSide = currentSide?.market_side_id === homeSide?.market_side_id;
230
+
231
+ if (isHomeSide) {
232
+ // For home side, must match selected variable ID
233
+ if (partner_market.router_market_variable_id !== currentVariableId) {
234
+ return;
235
+ }
236
+ } else {
237
+ // For away side, must match inverse variable ID
238
+ if (!currentInverseVariableId || partner_market.router_market_variable_id !== currentInverseVariableId) {
239
+ return;
240
+ }
207
241
  }
208
242
  } else {
209
- // For totals, must match exactly
210
- if (selectedVariable.variable !== currentVariable.variable) {
243
+ // For totals and other markets, must match exactly by variable ID
244
+ if (partner_market.router_market_variable_id !== currentVariableId) {
211
245
  return;
212
246
  }
213
247
  }
@@ -217,6 +251,9 @@ const ContestLiquidity = ({
217
251
  const partner = data.partners.find(p => p.partner_id === partner_market.partner_id);
218
252
  if (!partner) return;
219
253
 
254
+ // Use the title from the liquidity object
255
+ const title = liq.title;
256
+
220
257
  if (!partnerRowsMap.has(partner.partner_id)) {
221
258
  partnerRowsMap.set(partner.partner_id, {
222
259
  partner,
@@ -226,7 +263,7 @@ const ContestLiquidity = ({
226
263
 
227
264
  partnerRowsMap.get(partner.partner_id)!.sidePrices.set(
228
265
  partner_market.market_side_id,
229
- { title: liq.title, price: liq.price, available: liq.available }
266
+ { title, price: liq.price, available: liq.available }
230
267
  );
231
268
  });
232
269
 
@@ -463,6 +500,7 @@ const ContestLiquidity = ({
463
500
  if (market) {
464
501
  setSelectedMarketId(market.router_market_id);
465
502
  setSelectedVariableId(''); // Reset variable selection
503
+ setInverseVariableId(''); // Reset inverse variable
466
504
  }
467
505
  }}
468
506
  />
@@ -499,7 +537,36 @@ const ContestLiquidity = ({
499
537
  borderColor: isSelected ? Colors.text.success : Colors.borders.light,
500
538
  backgroundColor: isSelected ? Colors.views.header : 'transparent'
501
539
  }}
502
- onPress={() => setSelectedVariableId(variable.router_market_variable_id)}
540
+ onPress={() => {
541
+ console.log('Variable button clicked:', variable);
542
+ setSelectedVariableId(variable.router_market_variable_id);
543
+
544
+ // For spread markets, find and store the inverse variable
545
+ if (variable.variable_type === 'spread' && data) {
546
+ const inverseValue = -Number(variable.variable);
547
+ console.log('Button click - Looking for inverse:', { selectedValue: variable.variable, inverseValue });
548
+ console.log('Button click - All market variables:', data.router_market_variables.filter(v => v.router_market_id === variable.router_market_id).map(v => ({
549
+ id: v.router_market_variable_id,
550
+ value: v.variable,
551
+ type: v.variable_type
552
+ })));
553
+ const inverseVar = data.router_market_variables.find(v =>
554
+ v.router_market_id === variable.router_market_id &&
555
+ Number(v.variable) === inverseValue &&
556
+ v.variable_type === 'spread'
557
+ );
558
+ console.log('Button click - Found inverse var?', inverseVar);
559
+ if (inverseVar) {
560
+ console.log('Setting inverse variable ID:', inverseVar.router_market_variable_id);
561
+ setInverseVariableId(inverseVar.router_market_variable_id);
562
+ } else {
563
+ console.warn('Button click - Inverse variable NOT found!');
564
+ setInverseVariableId('');
565
+ }
566
+ } else {
567
+ setInverseVariableId('');
568
+ }
569
+ }}
503
570
  >
504
571
  <Text
505
572
  theme='h2'