be-components 2.4.7 → 2.4.9

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 (134) hide show
  1. package/lib/commonjs/LocationTracker/LocationStatus.js.map +1 -1
  2. package/lib/commonjs/LocationTracker/api/index.js +14 -0
  3. package/lib/commonjs/LocationTracker/api/index.js.map +1 -1
  4. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js +91 -3
  5. package/lib/commonjs/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
  6. package/lib/commonjs/MarketMaker/api/index.js +1307 -0
  7. package/lib/commonjs/MarketMaker/api/index.js.map +1 -0
  8. package/lib/commonjs/MarketMaker/components/Contest.js +150 -0
  9. package/lib/commonjs/MarketMaker/components/Contest.js.map +1 -0
  10. package/lib/commonjs/MarketMaker/components/ContestMarkets.js +300 -0
  11. package/lib/commonjs/MarketMaker/components/ContestMarkets.js.map +1 -0
  12. package/lib/commonjs/MarketMaker/components/ContestSelector.js +111 -0
  13. package/lib/commonjs/MarketMaker/components/ContestSelector.js.map +1 -0
  14. package/lib/commonjs/MarketMaker/components/Dashboard.js +164 -0
  15. package/lib/commonjs/MarketMaker/components/Dashboard.js.map +1 -0
  16. package/lib/commonjs/MarketMaker/components/FundActions.js +232 -0
  17. package/lib/commonjs/MarketMaker/components/FundActions.js.map +1 -0
  18. package/lib/commonjs/MarketMaker/components/FundOwnershipList.js +94 -0
  19. package/lib/commonjs/MarketMaker/components/FundOwnershipList.js.map +1 -0
  20. package/lib/commonjs/MarketMaker/components/FundSelector.js +99 -0
  21. package/lib/commonjs/MarketMaker/components/FundSelector.js.map +1 -0
  22. package/lib/commonjs/MarketMaker/components/FundingRequestList.js +112 -0
  23. package/lib/commonjs/MarketMaker/components/FundingRequestList.js.map +1 -0
  24. package/lib/commonjs/MarketMaker/components/ManageFundForm.js +122 -0
  25. package/lib/commonjs/MarketMaker/components/ManageFundForm.js.map +1 -0
  26. package/lib/commonjs/MarketMaker/components/MarketSelector.js +81 -0
  27. package/lib/commonjs/MarketMaker/components/MarketSelector.js.map +1 -0
  28. package/lib/commonjs/MarketMaker/components/SetMarketForm.js +305 -0
  29. package/lib/commonjs/MarketMaker/components/SetMarketForm.js.map +1 -0
  30. package/lib/commonjs/MarketMaker/components/WeightProgress.js +40 -0
  31. package/lib/commonjs/MarketMaker/components/WeightProgress.js.map +1 -0
  32. package/lib/commonjs/MarketMaker/index.js +452 -0
  33. package/lib/commonjs/MarketMaker/index.js.map +1 -0
  34. package/lib/commonjs/SocialComponents/api/index.js +0 -1
  35. package/lib/commonjs/SocialComponents/api/index.js.map +1 -1
  36. package/lib/commonjs/index.js +7 -0
  37. package/lib/commonjs/index.js.map +1 -1
  38. package/lib/commonjs/types.d.js +4 -0
  39. package/lib/module/LocationTracker/LocationStatus.js.map +1 -1
  40. package/lib/module/LocationTracker/api/index.js +14 -0
  41. package/lib/module/LocationTracker/api/index.js.map +1 -1
  42. package/lib/module/MarketComponents/components/TeamEventMarket/index.js +91 -3
  43. package/lib/module/MarketComponents/components/TeamEventMarket/index.js.map +1 -1
  44. package/lib/module/MarketMaker/api/index.js +1301 -0
  45. package/lib/module/MarketMaker/api/index.js.map +1 -0
  46. package/lib/module/MarketMaker/components/Contest.js +143 -0
  47. package/lib/module/MarketMaker/components/Contest.js.map +1 -0
  48. package/lib/module/MarketMaker/components/ContestMarkets.js +291 -0
  49. package/lib/module/MarketMaker/components/ContestMarkets.js.map +1 -0
  50. package/lib/module/MarketMaker/components/ContestSelector.js +102 -0
  51. package/lib/module/MarketMaker/components/ContestSelector.js.map +1 -0
  52. package/lib/module/MarketMaker/components/Dashboard.js +155 -0
  53. package/lib/module/MarketMaker/components/Dashboard.js.map +1 -0
  54. package/lib/module/MarketMaker/components/FundActions.js +223 -0
  55. package/lib/module/MarketMaker/components/FundActions.js.map +1 -0
  56. package/lib/module/MarketMaker/components/FundOwnershipList.js +87 -0
  57. package/lib/module/MarketMaker/components/FundOwnershipList.js.map +1 -0
  58. package/lib/module/MarketMaker/components/FundSelector.js +92 -0
  59. package/lib/module/MarketMaker/components/FundSelector.js.map +1 -0
  60. package/lib/module/MarketMaker/components/FundingRequestList.js +105 -0
  61. package/lib/module/MarketMaker/components/FundingRequestList.js.map +1 -0
  62. package/lib/module/MarketMaker/components/ManageFundForm.js +113 -0
  63. package/lib/module/MarketMaker/components/ManageFundForm.js.map +1 -0
  64. package/lib/module/MarketMaker/components/MarketSelector.js +74 -0
  65. package/lib/module/MarketMaker/components/MarketSelector.js.map +1 -0
  66. package/lib/module/MarketMaker/components/SetMarketForm.js +297 -0
  67. package/lib/module/MarketMaker/components/SetMarketForm.js.map +1 -0
  68. package/lib/module/MarketMaker/components/WeightProgress.js +33 -0
  69. package/lib/module/MarketMaker/components/WeightProgress.js.map +1 -0
  70. package/lib/module/MarketMaker/index.js +442 -0
  71. package/lib/module/MarketMaker/index.js.map +1 -0
  72. package/lib/module/SocialComponents/api/index.js +0 -1
  73. package/lib/module/SocialComponents/api/index.js.map +1 -1
  74. package/lib/module/index.js +2 -1
  75. package/lib/module/index.js.map +1 -1
  76. package/lib/module/types.d.js +1 -1
  77. package/lib/typescript/src/LocationTracker/LocationStatus.d.ts.map +1 -1
  78. package/lib/typescript/src/LocationTracker/api/index.d.ts.map +1 -1
  79. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts +2 -2
  80. package/lib/typescript/src/MarketComponents/components/TeamEventMarket/index.d.ts.map +1 -1
  81. package/lib/typescript/src/MarketComponents/index.d.ts +2 -2
  82. package/lib/typescript/src/MarketComponents/index.d.ts.map +1 -1
  83. package/lib/typescript/src/MarketMaker/api/index.d.ts +131 -0
  84. package/lib/typescript/src/MarketMaker/api/index.d.ts.map +1 -0
  85. package/lib/typescript/src/MarketMaker/components/Contest.d.ts +25 -0
  86. package/lib/typescript/src/MarketMaker/components/Contest.d.ts.map +1 -0
  87. package/lib/typescript/src/MarketMaker/components/ContestMarkets.d.ts +26 -0
  88. package/lib/typescript/src/MarketMaker/components/ContestMarkets.d.ts.map +1 -0
  89. package/lib/typescript/src/MarketMaker/components/ContestSelector.d.ts +19 -0
  90. package/lib/typescript/src/MarketMaker/components/ContestSelector.d.ts.map +1 -0
  91. package/lib/typescript/src/MarketMaker/components/Dashboard.d.ts +25 -0
  92. package/lib/typescript/src/MarketMaker/components/Dashboard.d.ts.map +1 -0
  93. package/lib/typescript/src/MarketMaker/components/FundActions.d.ts +12 -0
  94. package/lib/typescript/src/MarketMaker/components/FundActions.d.ts.map +1 -0
  95. package/lib/typescript/src/MarketMaker/components/FundOwnershipList.d.ts +9 -0
  96. package/lib/typescript/src/MarketMaker/components/FundOwnershipList.d.ts.map +1 -0
  97. package/lib/typescript/src/MarketMaker/components/FundSelector.d.ts +13 -0
  98. package/lib/typescript/src/MarketMaker/components/FundSelector.d.ts.map +1 -0
  99. package/lib/typescript/src/MarketMaker/components/FundingRequestList.d.ts +11 -0
  100. package/lib/typescript/src/MarketMaker/components/FundingRequestList.d.ts.map +1 -0
  101. package/lib/typescript/src/MarketMaker/components/ManageFundForm.d.ts +10 -0
  102. package/lib/typescript/src/MarketMaker/components/ManageFundForm.d.ts.map +1 -0
  103. package/lib/typescript/src/MarketMaker/components/MarketSelector.d.ts +12 -0
  104. package/lib/typescript/src/MarketMaker/components/MarketSelector.d.ts.map +1 -0
  105. package/lib/typescript/src/MarketMaker/components/SetMarketForm.d.ts +15 -0
  106. package/lib/typescript/src/MarketMaker/components/SetMarketForm.d.ts.map +1 -0
  107. package/lib/typescript/src/MarketMaker/components/WeightProgress.d.ts +10 -0
  108. package/lib/typescript/src/MarketMaker/components/WeightProgress.d.ts.map +1 -0
  109. package/lib/typescript/src/MarketMaker/index.d.ts +7 -0
  110. package/lib/typescript/src/MarketMaker/index.d.ts.map +1 -0
  111. package/lib/typescript/src/SocialComponents/api/index.d.ts.map +1 -1
  112. package/lib/typescript/src/index.d.ts +2 -1
  113. package/lib/typescript/src/index.d.ts.map +1 -1
  114. package/package.json +1 -1
  115. package/src/LocationTracker/LocationStatus.tsx +0 -1
  116. package/src/LocationTracker/api/index.tsx +16 -0
  117. package/src/MarketComponents/components/TeamEventMarket/index.tsx +54 -4
  118. package/src/MarketMaker/api/index.ts +1023 -0
  119. package/src/MarketMaker/components/Contest.tsx +106 -0
  120. package/src/MarketMaker/components/ContestMarkets.tsx +174 -0
  121. package/src/MarketMaker/components/ContestSelector.tsx +84 -0
  122. package/src/MarketMaker/components/Dashboard.tsx +112 -0
  123. package/src/MarketMaker/components/FundActions.tsx +149 -0
  124. package/src/MarketMaker/components/FundOwnershipList.tsx +54 -0
  125. package/src/MarketMaker/components/FundSelector.tsx +65 -0
  126. package/src/MarketMaker/components/FundingRequestList.tsx +71 -0
  127. package/src/MarketMaker/components/ManageFundForm.tsx +83 -0
  128. package/src/MarketMaker/components/MarketSelector.tsx +50 -0
  129. package/src/MarketMaker/components/SetMarketForm.tsx +213 -0
  130. package/src/MarketMaker/components/WeightProgress.tsx +25 -0
  131. package/src/MarketMaker/index.tsx +378 -0
  132. package/src/SocialComponents/api/index.ts +0 -1
  133. package/src/index.tsx +2 -1
  134. package/src/types.d.ts +135 -0
@@ -0,0 +1,1301 @@
1
+ import axios from "axios";
2
+ import { APIOverrides } from "../../ApiOverrides";
3
+ import moment from "moment-mini";
4
+ import Colors from "../../constants/colors";
5
+ let EVENT_SVC_API = '';
6
+ let MK_SVC_API = '';
7
+ let AUTH_SVC_API = '';
8
+ export { MarketMakerApi, MarketMaketHelpers };
9
+ const MarketMakerApi = {
10
+ setEnvironment: () => {
11
+ const endpoints = APIOverrides.getEndpoints();
12
+ EVENT_SVC_API = endpoints['EVENT_SVC_API'];
13
+ MK_SVC_API = endpoints['MK_SVC_API'];
14
+ AUTH_SVC_API = endpoints['AUTH_SVC_API'];
15
+ },
16
+ getPlayersByIds: async player_ids => {
17
+ try {
18
+ if (player_ids.length == 0) {
19
+ return [];
20
+ }
21
+ const resp = await axios.post(`${AUTH_SVC_API}/v1/players/bulk/get`, {
22
+ player_ids
23
+ });
24
+ return resp.data.players;
25
+ } catch (e) {
26
+ console.log(e);
27
+ return [];
28
+ }
29
+ },
30
+ getMyActiveFunds: async offset => {
31
+ try {
32
+ const resp = await axios.get(`${MK_SVC_API}/v1/funds/me/active?offset=${offset}`);
33
+ return resp.data.funds;
34
+ } catch (e) {
35
+ console.log(e);
36
+ return [];
37
+ }
38
+ },
39
+ createFund: async (name, minimum_investment, market_type) => {
40
+ try {
41
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/fund/create`, {
42
+ name,
43
+ minimum_investment,
44
+ market_type
45
+ });
46
+ return resp.data.fund;
47
+ } catch (e) {
48
+ console.log(e);
49
+ return undefined;
50
+ }
51
+ },
52
+ udpateFundName: async (fund_id, name) => {
53
+ try {
54
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/fund/update/name`, {
55
+ fund_id,
56
+ name
57
+ });
58
+ return resp.data.fund;
59
+ } catch (e) {
60
+ console.log(e);
61
+ return undefined;
62
+ }
63
+ },
64
+ udpateFundMinimum: async (fund_id, minimum_investment) => {
65
+ try {
66
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/fund/update/min`, {
67
+ fund_id,
68
+ minimum_investment
69
+ });
70
+ return resp.data.fund;
71
+ } catch (e) {
72
+ console.log(e);
73
+ return undefined;
74
+ }
75
+ },
76
+ getFundById: async fund_id => {
77
+ try {
78
+ const resp = await axios.get(`${MK_SVC_API}/v1/funds/fund/${fund_id}`);
79
+ return resp.data;
80
+ } catch (e) {
81
+ console.log(e);
82
+ return undefined;
83
+ }
84
+ },
85
+ getFundingRequestsByFundId: async fund_id => {
86
+ try {
87
+ const resp = await axios.get(`${MK_SVC_API}/v1/funds/requests/fund/${fund_id}`);
88
+ return resp.data.funding_requests;
89
+ } catch (e) {
90
+ console.log(e);
91
+ return [];
92
+ }
93
+ },
94
+ depositRequest: async (fund_id, amount) => {
95
+ try {
96
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/deposit/request/create`, {
97
+ fund_id,
98
+ amount
99
+ });
100
+ return resp.data.fund;
101
+ } catch (e) {
102
+ console.log(e);
103
+ return undefined;
104
+ }
105
+ },
106
+ approveRequest: async funding_request_id => {
107
+ try {
108
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/deposit/request/approve`, {
109
+ funding_request_id
110
+ });
111
+ return resp.data;
112
+ } catch (e) {
113
+ console.log(e);
114
+ return undefined;
115
+ }
116
+ },
117
+ declineRequest: async funding_request_id => {
118
+ try {
119
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/deposit/request/decline`, {
120
+ funding_request_id
121
+ });
122
+ return resp.data.funding_request;
123
+ } catch (e) {
124
+ console.log(e);
125
+ return undefined;
126
+ }
127
+ },
128
+ workCapital: async (fund_id, amount) => {
129
+ try {
130
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/capital/work`, {
131
+ fund_id,
132
+ amount
133
+ });
134
+ return resp.data;
135
+ } catch (e) {
136
+ console.log(e);
137
+ return undefined;
138
+ }
139
+ },
140
+ layoffCapital: async (fund_id, amount) => {
141
+ try {
142
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/capital/layoff`, {
143
+ fund_id,
144
+ amount
145
+ });
146
+ return resp.data;
147
+ } catch (e) {
148
+ console.log(e);
149
+ return undefined;
150
+ }
151
+ },
152
+ addOrdersToFund: async (fund_id, orders) => {
153
+ try {
154
+ const resp = await axios.post(`${MK_SVC_API}/v1/funds/fund/orders/add`, {
155
+ fund_id,
156
+ orders
157
+ });
158
+ console.log(resp.data);
159
+ return resp.data.orders;
160
+ } catch (e) {
161
+ return [];
162
+ }
163
+ },
164
+ getLeagues: async () => {
165
+ try {
166
+ const resp = await axios.get(`${EVENT_SVC_API}/v1/leagues`);
167
+ return resp.data.leagues;
168
+ } catch (e) {
169
+ return [];
170
+ }
171
+ },
172
+ getMarkets: async () => {
173
+ try {
174
+ const resp = await axios.get(`${MK_SVC_API}/v1/markets/all`);
175
+ return resp.data.markets;
176
+ } catch (e) {
177
+ return [];
178
+ }
179
+ },
180
+ getMyAction: async () => {
181
+ try {
182
+ const resp = await axios.get(`${MK_SVC_API}/v1/orders/action/me`);
183
+ return resp.data.orders;
184
+ } catch (e) {
185
+ return [];
186
+ }
187
+ },
188
+ getActiveEvents: async () => {
189
+ try {
190
+ const resp = await axios.get(`${EVENT_SVC_API}/v1/events/active?expanded=true`);
191
+ return resp.data.events;
192
+ } catch (e) {
193
+ return [];
194
+ }
195
+ },
196
+ getEventsByEventIds: async event_ids => {
197
+ if (event_ids.length == 0) {
198
+ return [];
199
+ }
200
+ try {
201
+ const resp = await axios.post(`${EVENT_SVC_API}/v1/events/bulk/get`, {
202
+ attribute: 'event_id',
203
+ values: event_ids
204
+ });
205
+ return resp.data.events;
206
+ } catch (e) {
207
+ return [];
208
+ }
209
+ },
210
+ getBestAvailableOrders: async () => {
211
+ try {
212
+ const resp = await axios.get(`${MK_SVC_API}/v1/orders/available`);
213
+ return resp.data;
214
+ } catch (e) {
215
+ return {
216
+ events: [],
217
+ tournaments: [],
218
+ matches: []
219
+ };
220
+ }
221
+ },
222
+ getPricesByEvents: async (event_type, event_ids) => {
223
+ if (event_ids.length == 0) {
224
+ return [];
225
+ }
226
+ try {
227
+ const resp = await axios.post(`${EVENT_SVC_API}/v1/prices/latest/bulk/get`, {
228
+ event_type,
229
+ event_ids
230
+ });
231
+ return resp.data.prices;
232
+ } catch (e) {
233
+ console.log(e);
234
+ return [];
235
+ }
236
+ },
237
+ getPricesByEvent: async (event_id, event_type) => {
238
+ try {
239
+ const resp = await axios.get(`${EVENT_SVC_API}/v1/prices/latest/${event_id}/${event_type}`);
240
+ return resp.data.prices;
241
+ } catch (e) {
242
+ console.log(e);
243
+ return [];
244
+ }
245
+ },
246
+ getLatestTradesByEvents: async (event_type, event_ids) => {
247
+ try {
248
+ if (event_ids.length == 0) {
249
+ return [];
250
+ }
251
+ const resp = await axios.post(`${MK_SVC_API}/v1/trades/event/latest/bulk/get`, {
252
+ event_type,
253
+ event_ids
254
+ });
255
+ return resp.data.trades;
256
+ } catch (e) {
257
+ console.log(e);
258
+ return [];
259
+ }
260
+ },
261
+ cancelOrders: async order_ids => {
262
+ if (order_ids.length == 0) {
263
+ return [];
264
+ }
265
+ try {
266
+ const resp = await axios.post(`${MK_SVC_API}/v1/orders/bulk/cancel`, {
267
+ order_ids
268
+ });
269
+ return resp.data.orders;
270
+ } catch (e) {
271
+ alert('Unable to process cancellation');
272
+ return [];
273
+ }
274
+ }
275
+ };
276
+ const MarketMaketHelpers = {
277
+ getOrderStats: orders => {
278
+ let called_amt = 0,
279
+ open_amt = 0,
280
+ open_potential_winnings = 0,
281
+ stake_amt = 0,
282
+ stake_potential_winnings = 0;
283
+ let open_probability = 0,
284
+ open_odds = 0,
285
+ cash_rcvd = 0,
286
+ delayed_cash = 0,
287
+ winnings = 0,
288
+ net_winnings = 0,
289
+ commission = 0;
290
+ let stake_earnings = 0;
291
+ orders.map(o => {
292
+ if (o.status == 'approved') {
293
+ open_amt += o.open_amt;
294
+ open_potential_winnings += o.potential_winnings;
295
+ }
296
+ called_amt += o.called_amt;
297
+ if (o.positions) {
298
+ o.positions.map(p => {
299
+ stake_amt += p.stake;
300
+ stake_potential_winnings += p.potential_winnings;
301
+ cash_rcvd += p.cash_rcvd;
302
+ delayed_cash += p.delayed_cash;
303
+ winnings += p.winnings;
304
+ net_winnings += p.net_winnings;
305
+ commission += p.commission;
306
+ });
307
+ }
308
+ });
309
+ stake_earnings = stake_potential_winnings - stake_amt;
310
+ if (open_potential_winnings > 0) {
311
+ open_probability = open_amt / open_potential_winnings;
312
+ open_odds = MarketMaketHelpers.calcAmericanOddsFromProbability(open_probability);
313
+ }
314
+ return {
315
+ open_amt,
316
+ stake_earnings,
317
+ open_odds,
318
+ called_amt,
319
+ open_potential_winnings,
320
+ stake_amt,
321
+ stake_potential_winnings,
322
+ open_probability,
323
+ cash_rcvd,
324
+ delayed_cash,
325
+ winnings,
326
+ net_winnings,
327
+ commission
328
+ };
329
+ },
330
+ getWeight: (o_side_potential_winnings, trade_side_potential_winnings, market) => {
331
+ const total = o_side_potential_winnings + trade_side_potential_winnings;
332
+ let weighted_pct = 0;
333
+ const difference = trade_side_potential_winnings - o_side_potential_winnings;
334
+ const direction = difference > 0 ? market.trade_side : difference == 0 ? 'neutral' : market.side_options.find(so => so.side != market.trade_side)?.side;
335
+ if (total > 0) {
336
+ weighted_pct = difference / total;
337
+ }
338
+ return {
339
+ direction,
340
+ weighted_pct,
341
+ difference
342
+ };
343
+ },
344
+ sortContests: (events, tournaments, matches, markets) => {
345
+ let contests = [];
346
+ events.map(e => {
347
+ let e_markets = e.supported_markets ? markets.filter(m => e.supported_markets?.map(sm => sm.market_id.toString()).includes(m.market_id.toString())) : [];
348
+ contests.push({
349
+ league_id: e.league_id,
350
+ id: e.event_id,
351
+ title: e.event_title,
352
+ contest_type: 'team',
353
+ time_detail: e.time_detail == 'scheduled' ? moment(e.scheduled_datetime).format('MMM DD : hh:mm a') : e.time_detail ?? '',
354
+ scheduled_datetime: moment(e.scheduled_datetime),
355
+ markets: e_markets
356
+ });
357
+ });
358
+ tournaments.map(t => {
359
+ let t_markets = t.supported_markets ? markets.filter(m => t.supported_markets?.map(sm => sm.market_id.toString()).includes(m.market_id.toString())) : [];
360
+ contests.push({
361
+ markets: t_markets,
362
+ league_id: t.league_id,
363
+ id: t.tournament_id,
364
+ title: t.tournament_name,
365
+ contest_type: 'tournament',
366
+ time_detail: moment(t.scheduled_datetime).format('MMM DD : hh:mm a'),
367
+ scheduled_datetime: moment(t.scheduled_datetime)
368
+ });
369
+ });
370
+ matches.map(m => {
371
+ const tourney = tournaments.find(t => t.tournament_id == m.tournament_id);
372
+ let m_markets = m.supported_markets ? markets.filter(mk => m.supported_markets?.map(sm => sm.market_id.toString()).includes(mk.market_id.toString())) : [];
373
+ contests.push({
374
+ markets: m_markets,
375
+ league_id: tourney?.league_id,
376
+ id: m.match_id,
377
+ title: m.match_title,
378
+ contest_type: 'match',
379
+ time_detail: moment(m.scheduled_datetime).format('MMM DD : hh:mm a'),
380
+ scheduled_datetime: moment(m.scheduled_datetime)
381
+ });
382
+ });
383
+ return contests;
384
+ },
385
+ calcAmericanOddsFromProbability: probability => {
386
+ let p = probability * 100; //Convert to whole number
387
+ if (p >= 100) {
388
+ return -99999;
389
+ }
390
+ if (p === 0) {
391
+ return 9999;
392
+ }
393
+ if (p === 50) {
394
+ return 100;
395
+ }
396
+ if (p < 50) {
397
+ return 100 / (p / 100) - 100;
398
+ }
399
+ return p / (1 - p / 100) * -1;
400
+ },
401
+ getSelectableMarkets: (events, tournaments, matches, markets) => {
402
+ let market_ids = [];
403
+ events.map(e => {
404
+ if (e.supported_markets) {
405
+ market_ids = market_ids.concat(e.supported_markets.map(sm => sm.market_id));
406
+ }
407
+ });
408
+ tournaments.map(e => {
409
+ if (e.supported_markets) {
410
+ market_ids = market_ids.concat(e.supported_markets.map(sm => sm.market_id));
411
+ }
412
+ });
413
+ matches.map(e => {
414
+ if (e.supported_markets) {
415
+ market_ids = market_ids.concat(e.supported_markets.map(sm => sm.market_id));
416
+ }
417
+ });
418
+ market_ids = [...new Set(market_ids.map(id => id.toString()))];
419
+ return markets.filter(m => market_ids.includes(m.market_id.toString()));
420
+ },
421
+ getMarketDataFromBestAvailable: ba => {
422
+ let updated = false;
423
+ let event_order_stats = [];
424
+ let available_orders = [];
425
+ let latest_trades = [];
426
+ ba.events.map(ba_event => {
427
+ if (!ba_event.supported_markets) {
428
+ return;
429
+ }
430
+ updated = true;
431
+ ba_event.supported_markets.map(sm => {
432
+ if (sm.available_orders) {
433
+ available_orders = available_orders.concat(sm.available_orders);
434
+ }
435
+ if (sm.order_stats) {
436
+ event_order_stats = event_order_stats.concat(sm.order_stats);
437
+ }
438
+ if (sm.latest_trades) {
439
+ latest_trades = latest_trades.concat(sm.latest_trades);
440
+ }
441
+ });
442
+ });
443
+ ba.tournaments.map(ba_event => {
444
+ if (!ba_event.supported_markets) {
445
+ return;
446
+ }
447
+ updated = true;
448
+ ba_event.supported_markets.map(sm => {
449
+ if (sm.available_orders) {
450
+ available_orders = available_orders.concat(sm.available_orders);
451
+ }
452
+ if (sm.order_stats) {
453
+ event_order_stats = event_order_stats.concat(sm.order_stats);
454
+ }
455
+ if (sm.latest_trades) {
456
+ latest_trades = latest_trades.concat(sm.latest_trades);
457
+ }
458
+ });
459
+ });
460
+ ba.matches.map(ba_event => {
461
+ if (!ba_event.supported_markets) {
462
+ return;
463
+ }
464
+ updated = true;
465
+ ba_event.supported_markets.map(sm => {
466
+ if (sm.available_orders) {
467
+ available_orders = available_orders.concat(sm.available_orders);
468
+ }
469
+ if (sm.order_stats) {
470
+ event_order_stats = event_order_stats.concat(sm.order_stats);
471
+ }
472
+ if (sm.latest_trades) {
473
+ latest_trades = latest_trades.concat(sm.latest_trades);
474
+ }
475
+ });
476
+ });
477
+ return {
478
+ updated,
479
+ event_order_stats,
480
+ available_orders,
481
+ latest_trades
482
+ };
483
+ },
484
+ getSideMarketData: (orders, best_available_orders, trades, market, side_type, side_id) => {
485
+ console.log(side_type, side_id);
486
+ let trade_side_orders = orders.filter(o => o.side == market.trade_side);
487
+ let o_side_orders = orders.filter(o => o.side != market.trade_side);
488
+ let trade_side_ba = best_available_orders.find(o => o.side == market.trade_side);
489
+ let o_side_ba = best_available_orders.find(o => o.side != market.trade_side);
490
+ let trade_side_trades = trades.filter(t => t.side == market.trade_side);
491
+ let o_side_trades = trades.filter(t => t.side != market.trade_side);
492
+ const o_side = market.side_options.find(so => so.side != market.trade_side)?.side;
493
+ return {
494
+ trade_side: market.trade_side,
495
+ o_side,
496
+ trade_side_orders,
497
+ o_side_orders,
498
+ trade_side_ba,
499
+ o_side_ba,
500
+ trade_side_trades,
501
+ o_side_trades
502
+ };
503
+ },
504
+ getOrderColor: order => {
505
+ if (!order.grade) {
506
+ return Colors.shades.shade600;
507
+ }
508
+ if (order.grade > 98) {
509
+ return Colors.highlights.highlight400Faded;
510
+ }
511
+ return Colors.highlights.highlight300Faded;
512
+ },
513
+ getOrderFromTrade: (trade, unit_size, ba_order_id) => {
514
+ let open_amt = 10;
515
+ if (unit_size) {
516
+ open_amt = unit_size;
517
+ }
518
+ let draft_liquidity = 0;
519
+ if (trade.draft_liquidity) {
520
+ draft_liquidity = trade.draft_liquidity;
521
+ }
522
+ return {
523
+ order_id: '',
524
+ player_id: '',
525
+ be_type: 'market',
526
+ //TODO - Make this dynamic,
527
+ open_amt,
528
+ called_amt: 0,
529
+ buy_sell_ind: 'buy',
530
+ rejections: 0,
531
+ commission_pct: 0,
532
+ available_for_parlays: false,
533
+ event_id: trade.event_id,
534
+ draft_liquidity,
535
+ event_type: trade.event_type,
536
+ side: trade.side,
537
+ side_type: trade.side_type,
538
+ resolution_status: 'inprogress',
539
+ side_id: trade.side_id,
540
+ order_type: trade.limit_override ? 'limit' : 'market',
541
+ potential_winnings: 0,
542
+ collar_pct: .01,
543
+ positions: [],
544
+ market_id: trade.market_id,
545
+ title: '',
546
+ probability: trade.probability,
547
+ odds: trade.odds,
548
+ var_1: trade.var_1,
549
+ market_type: trade.market_type,
550
+ position_ids: [],
551
+ status: 'approved',
552
+ expire_datetime: moment().add(1, 'hours'),
553
+ reference_order_id: ba_order_id
554
+ };
555
+ },
556
+ getTeamEventSideIds: (event, market, side_option, athlete, team) => {
557
+ const o_side = market.side_options.find(so => so.side != side_option.side);
558
+ if (!o_side) {
559
+ return undefined;
560
+ }
561
+ switch (side_option.id_source) {
562
+ case 'side':
563
+ return {
564
+ side_id: side_option.side,
565
+ reversed_side_id: o_side.side
566
+ };
567
+ case 'athlete':
568
+ if (!athlete) {
569
+ return undefined;
570
+ }
571
+ return {
572
+ side_id: athlete.athlete_id,
573
+ reversed_side_id: athlete.athlete_id
574
+ };
575
+ case 'team':
576
+ if (market.level == 'event') {
577
+ let side_id = event[side_option.side]?.team_id;
578
+ let reversed_side_id = event[o_side.side]?.team_id;
579
+ if (!side_id || !reversed_side_id) {
580
+ return undefined;
581
+ }
582
+ return {
583
+ side_id,
584
+ reversed_side_id
585
+ };
586
+ }
587
+ if (market.level == 'team') {
588
+ if (!team) {
589
+ return undefined;
590
+ }
591
+ return {
592
+ side_id: team.team_id,
593
+ reversed_side_id: team.team_id
594
+ };
595
+ }
596
+ return undefined;
597
+ default:
598
+ return undefined;
599
+ }
600
+ },
601
+ getTournamentSideIds: (market, side_option, athlete, team) => {
602
+ const o_side = market.side_options.find(so => so.side != side_option.side);
603
+ if (!o_side) {
604
+ return undefined;
605
+ }
606
+ switch (side_option.id_source) {
607
+ case 'side':
608
+ return {
609
+ side_id: side_option.side,
610
+ reversed_side_id: o_side.side
611
+ };
612
+ case 'athlete':
613
+ if (!athlete) {
614
+ return undefined;
615
+ }
616
+ return {
617
+ side_id: athlete.athlete_id,
618
+ reversed_side_id: athlete.athlete_id
619
+ };
620
+ case 'team':
621
+ if (market.level == 'team') {
622
+ if (!team) {
623
+ return undefined;
624
+ }
625
+ return {
626
+ side_id: team.team_id,
627
+ reversed_side_id: team.team_id
628
+ };
629
+ }
630
+ return undefined;
631
+ default:
632
+ return undefined;
633
+ }
634
+ },
635
+ getTradeFromAvailableOrder: (ba, reversed_side_id) => {
636
+ return {
637
+ trade_id: '',
638
+ event_id: ba.event_id,
639
+ event_type: ba.event_type,
640
+ cumulative_amt: 0,
641
+ trade_amt: 0,
642
+ create_datetime: '',
643
+ last_update_datetime: '',
644
+ market_id: ba.market_id,
645
+ var_1: ba.var_1,
646
+ side: ba.side,
647
+ side_id: ba.side_id,
648
+ draft_liquidity: ba.open_amt,
649
+ reversed_side_id,
650
+ probability: ba.probability,
651
+ odds: ba.odds,
652
+ side_type: ba.side_type,
653
+ market_type: 'FOR_MONEY',
654
+ latest: true,
655
+ position_ids: []
656
+ };
657
+ },
658
+ reverseBAOrder: (order, market, side_id) => {
659
+ const side_option = market.side_options.find(so => so.side != order.side);
660
+ if (!side_option) {
661
+ return undefined;
662
+ }
663
+ return {
664
+ ...order,
665
+ side: side_option.side,
666
+ side_id: side_id,
667
+ odds: order.odds * -1,
668
+ var_1: market.type == 'Spread' ? order.var_1 * -1 : order.var_1,
669
+ probability: 1 - order.probability,
670
+ title: '',
671
+ open_amt: 0,
672
+ called_amt: 0,
673
+ potential_winnings: 0
674
+ };
675
+ },
676
+ getTradeFromPrice: (price, reversed_side_id) => {
677
+ return {
678
+ trade_id: '',
679
+ event_type: price.event_type,
680
+ trade_amt: 0,
681
+ side_type: price.participant_type,
682
+ cumulative_amt: 0,
683
+ side: price.side,
684
+ odds: price.odds,
685
+ reversed_side_id: reversed_side_id,
686
+ probability: price.probability,
687
+ side_id: price.participant_id,
688
+ position_ids: [],
689
+ market_type: 'FOR_MONEY',
690
+ market_id: price.market_id,
691
+ event_id: price.event_id,
692
+ var_1: price.var_1,
693
+ latest: true,
694
+ create_datetime: '',
695
+ last_update_datetime: ''
696
+ };
697
+ },
698
+ getVisibleTrade: (default_price_view, market, side_option, latest_trades, best_available_orders, side_id, reversed_side_id) => {
699
+ const order = best_available_orders.find(o => o.market_id == market.market_id && o.side == side_option.side && o.show);
700
+ const o_side_order = best_available_orders.find(o => o.market_id == market.market_id && o.side != side_option.side && o.show);
701
+ let trade = latest_trades.find(t => t.market_type == 'FOR_MONEY' && t.market_id == market.market_id && t.side == side_option.side);
702
+ switch (default_price_view) {
703
+ case 'best_available':
704
+ if (order) {
705
+ return MarketMaketHelpers.getTradeFromAvailableOrder(order, reversed_side_id);
706
+ }
707
+ if (o_side_order) {
708
+ //Now lets reverse this order and get a trade for it
709
+ const reversed_order = MarketMaketHelpers.reverseBAOrder(o_side_order, market, side_id);
710
+ if (!reversed_order) {
711
+ return undefined;
712
+ }
713
+ return MarketMaketHelpers.getTradeFromAvailableOrder(reversed_order, reversed_side_id);
714
+ }
715
+ if (trade) {
716
+ return trade;
717
+ }
718
+ return undefined;
719
+ case 'last_trade':
720
+ if (trade) {
721
+ return trade;
722
+ }
723
+ return undefined;
724
+ default:
725
+ return undefined;
726
+ }
727
+ },
728
+ getHedgesFromPositions: (orders, markets) => {
729
+ //1) Set up arrays to store hedges
730
+ let hedges = [];
731
+ let hedgeable_positions = [];
732
+ //Only allow real money orders for hedging
733
+ orders = orders.filter(o => o.market_type === 'FOR_MONEY' && o.resolution_status !== 'closed');
734
+
735
+ //2) Get the unique markets (and common var_1s) that are eligible to be hedged
736
+ let orders_with_positions = orders.filter(o => o.positions[0]);
737
+ let unique_markets = [...new Set(orders_with_positions.map(o => `${o.event_id}:${o.event_type}:${o.market_id}:${Math.abs(o.var_1)}`))];
738
+
739
+ //3) For each unique market and var_1 combo, determin if there are positions on the opposite side of each other
740
+ //If so, then store them into an array of orders
741
+ unique_markets.map(id => {
742
+ //1) Get orders that are associated with the market
743
+ let market_orders = orders_with_positions.filter(o => `${o.event_id}:${o.event_type}:${o.market_id}:${Math.abs(o.var_1)}` == id);
744
+ if (market_orders.length < 2) {
745
+ return;
746
+ } //Impossible to hedge with less than 2 orders
747
+ let unique_sides = [...new Set(market_orders.map(o => o.side))];
748
+ if (unique_sides.length < 0) {
749
+ return;
750
+ } //Must have more than 1 side
751
+
752
+ hedgeable_positions.push(market_orders);
753
+ });
754
+
755
+ //Return nothing if there are no hedgeable positions
756
+ if (hedgeable_positions.length === 0) {
757
+ return [];
758
+ }
759
+
760
+ //Awesome! We have some hedgeable positions
761
+ hedgeable_positions.map(hp => {
762
+ if (!hp[0]) {
763
+ return;
764
+ }
765
+ //Get an empty hedge object to store our hedges
766
+ let hedge = MarketMaketHelpers.getEmptyHedge();
767
+ let market = markets.find(m => m.market_id == hp[0]?.market_id);
768
+ if (!market) {
769
+ return;
770
+ } //Error out if there is no market
771
+ if (market.level !== 'event') {
772
+ return;
773
+ } //Dont if level is not event
774
+
775
+ let trade_side_orders = hp.filter(o => o.side == market?.trade_side);
776
+ let o_side_orders = hp.filter(o => o.side != market?.trade_side);
777
+
778
+ //New
779
+ if (market.type == 'Spread') {
780
+ if (!trade_side_orders[0]) {
781
+ return;
782
+ } //Make sure there is at least 1 trade side order
783
+ let trade_side_o = trade_side_orders[0];
784
+ if (!trade_side_o) {
785
+ return;
786
+ }
787
+ o_side_orders = o_side_orders.filter(o => o.var_1 == trade_side_o.var_1 * -1);
788
+ }
789
+ if (trade_side_orders.length === 0 || o_side_orders.length === 0) {
790
+ return;
791
+ }
792
+ hedge.market_id = market.market_id;
793
+ hedge.market_type = hp[0].market_type;
794
+ hedge.var_1 = Math.abs(hp[0].var_1);
795
+ hedge.player_id = hp[0].player_id;
796
+ hedge.event_id = hp[0].event_id;
797
+ hedge.event_type = hp[0].event_type;
798
+ hedge.market_id = hp[0].market_id;
799
+
800
+ //Set up arrays to store the positions on each side of the hedge
801
+ let trade_side_positions = [];
802
+ let o_side_positions = [];
803
+ trade_side_orders.map(o => {
804
+ trade_side_positions = trade_side_positions.concat(o.positions);
805
+ });
806
+ o_side_orders.map(o => {
807
+ o_side_positions = o_side_positions.concat(o.positions);
808
+ });
809
+
810
+ //Calculate the winnings from each outcome (side a wins, side b wins, or draw)
811
+ let trade_side_pot_winnings = trade_side_positions.reduce((a, b) => a + b.potential_winnings, 0);
812
+ let o_side_pot_winnings = o_side_positions.reduce((a, b) => a + b.potential_winnings, 0);
813
+ let draw_winnings = trade_side_positions.concat(o_side_positions).reduce((a, b) => a + b.stake, 0);
814
+
815
+ //Get the minimum payout possible of the 3 outcomes which is the hedged amount
816
+ let hedged_amt = Math.min(trade_side_pot_winnings, o_side_pot_winnings);
817
+ if (isNaN(hedged_amt)) {
818
+ return;
819
+ }
820
+ hedge.hedged_amt = hedged_amt;
821
+
822
+ //Now lets cals out hedged positions
823
+ let hedged_positions = [];
824
+ trade_side_positions.map(p => {
825
+ //Need to determine the weight of the position on the total potential winnings and reduce the stake proportionately
826
+ let pct = p.potential_winnings / trade_side_pot_winnings;
827
+ //console.log(hedged_amt, pct, p.probability)
828
+ let stake_from_hedge = hedged_amt * pct * p.probability;
829
+ hedge.stake_reduction += stake_from_hedge;
830
+ let new_stake = p.stake - stake_from_hedge;
831
+ hedged_positions.push({
832
+ hedge_id: '',
833
+ hedged_position_id: '',
834
+ position_id: p.position_id,
835
+ original_stake: p.stake,
836
+ new_stake,
837
+ delayed_cash_draw: 0,
838
+ delayed_cash_no_draw: 0,
839
+ original_potential_winnings: p.potential_winnings,
840
+ new_potential_winnings: new_stake / p.probability,
841
+ status: 'pending',
842
+ create_datetime: '',
843
+ last_update_datetime: ''
844
+ });
845
+ });
846
+ o_side_positions.map(p => {
847
+ let pct = p.potential_winnings / o_side_pot_winnings;
848
+ let stake_from_hedge = hedged_amt * pct * p.probability;
849
+ hedge.stake_reduction += stake_from_hedge;
850
+ let new_stake = p.stake - stake_from_hedge;
851
+ hedged_positions.push({
852
+ hedge_id: '',
853
+ hedged_position_id: '',
854
+ position_id: p.position_id,
855
+ original_stake: p.stake,
856
+ new_stake,
857
+ delayed_cash_draw: 0,
858
+ delayed_cash_no_draw: 0,
859
+ original_potential_winnings: p.potential_winnings,
860
+ new_potential_winnings: new_stake / p.probability,
861
+ status: 'pending',
862
+ create_datetime: '',
863
+ last_update_datetime: ''
864
+ });
865
+ });
866
+
867
+ //Cash rcvd will be the lower of the hedged amount or the reduction in stake
868
+ let cash_rcvd = Math.min(hedge.stake_reduction, hedged_amt, draw_winnings);
869
+ if (isNaN(cash_rcvd) || cash_rcvd < 0.01) {
870
+ return;
871
+ }
872
+ hedge.cash_rcvd = cash_rcvd;
873
+ let delayed_cash = hedged_amt - hedge.stake_reduction;
874
+ let total_og_stake = hedged_positions.reduce((a, b) => a + b.original_stake, 0);
875
+ let delayed_cash_draw = 0,
876
+ delayed_cash_no_draw = 0;
877
+ if (delayed_cash < 0) {
878
+ delayed_cash_draw = delayed_cash * -1;
879
+ //hedge.delayed_cash_draw = delayed_cash * -1 //Need to make positive
880
+ } else {
881
+ delayed_cash_no_draw = delayed_cash;
882
+ //hedge.delayed_cash_no_draw = delayed_cash
883
+ }
884
+ hedge.delayed_cash_draw = delayed_cash_draw;
885
+ hedge.delayed_cash_no_draw = delayed_cash_no_draw;
886
+ hedged_positions.map(hp => {
887
+ let pct_of_total = hp.original_stake / total_og_stake;
888
+ hp.delayed_cash_draw = pct_of_total * delayed_cash_draw;
889
+ hp.delayed_cash_no_draw = pct_of_total * delayed_cash_no_draw;
890
+ return hp;
891
+ });
892
+ hedges.push({
893
+ ...hedge,
894
+ hedged_positions: hedged_positions
895
+ });
896
+ });
897
+ return hedges;
898
+ },
899
+ getEmptyHedge: () => {
900
+ return {
901
+ hedge_id: '',
902
+ hedged_amt: 0,
903
+ event_id: '',
904
+ event_type: '',
905
+ market_id: '',
906
+ var_1: 0,
907
+ delayed_cash_draw: 0,
908
+ delayed_cash_no_draw: 0,
909
+ cash_rcvd: 0,
910
+ stake_reduction: 0,
911
+ market_type: 'FOR_MONEY',
912
+ create_datetime: '',
913
+ last_udpate_datetime: '',
914
+ player_id: '',
915
+ status: 'pending'
916
+ };
917
+ },
918
+ getVar1Label: (market, var_1, side) => {
919
+ if (side == 'over') {
920
+ return `O ${var_1}`;
921
+ }
922
+ if (side == 'under') {
923
+ return `U ${var_1}`;
924
+ }
925
+ if (market.type != 'Spread') {
926
+ return `${var_1}`;
927
+ }
928
+ if (var_1 < 0) {
929
+ return `${var_1}`;
930
+ }
931
+ return `+${var_1}`;
932
+ },
933
+ getOddsLabel: (odds, decimals) => {
934
+ let new_odds = odds.toFixed();
935
+ if (decimals) {
936
+ new_odds = odds.toFixed(decimals);
937
+ }
938
+ if (odds < 0) {
939
+ return `${new_odds}`;
940
+ }
941
+ return `+${new_odds}`;
942
+ },
943
+ getOrderTitleForTeamEvent: (order, market, event, athlete, exotic) => {
944
+ let market_side = market.side_options.find(o => o.side == order.side);
945
+ if (!market_side) {
946
+ return undefined;
947
+ }
948
+ var re = /({.*?})/;
949
+ let parsed_text = market_side.parseable_title.split(re);
950
+ let new_title = '';
951
+ parsed_text.map(t => {
952
+ if (t === '') {
953
+ return;
954
+ }
955
+ if (t[0] !== '{') {
956
+ return new_title += t;
957
+ }
958
+ let variable = t.slice(1);
959
+ variable = variable.slice(0, variable.length - 1);
960
+ switch (variable) {
961
+ case 'team':
962
+ let team = event[order.side];
963
+ return new_title += team.market_name;
964
+ case 'var_1':
965
+ return new_title += MarketMaketHelpers.getVar1Label(market, order.var_1);
966
+ case 'athlete':
967
+ return new_title += athlete?.abbr_name;
968
+ case 'stat':
969
+ return new_title += market.stat_label ?? market.stat;
970
+ case 'exotic':
971
+ return new_title += exotic?.name;
972
+ default:
973
+ return;
974
+ }
975
+ });
976
+ return new_title;
977
+ },
978
+ getOrderTitleForTournament: (order, market, tournament, athlete, team) => {
979
+ if (!tournament) {
980
+ return undefined;
981
+ }
982
+ let market_side = market.side_options.find(o => o.side == order.side);
983
+ if (!market_side) {
984
+ return order.side;
985
+ }
986
+ var re = /({.*?})/;
987
+ let parsed_text = market_side.parseable_title.split(re);
988
+ let new_title = '';
989
+ parsed_text.map(t => {
990
+ if (t === '') {
991
+ return;
992
+ }
993
+ if (t[0] !== '{') {
994
+ return new_title += t;
995
+ }
996
+ let variable = t.slice(1);
997
+ variable = variable.slice(0, variable.length - 1);
998
+ switch (variable) {
999
+ case 'team':
1000
+ return new_title += `${team?.market_name} ${team?.name}`;
1001
+ case 'var_1':
1002
+ return new_title += MarketMaketHelpers.getVar1Label(market, order.var_1);
1003
+ case 'athlete':
1004
+ return new_title += athlete?.abbr_name;
1005
+ case 'stat':
1006
+ return new_title += market.stat;
1007
+ default:
1008
+ return;
1009
+ }
1010
+ });
1011
+ return new_title;
1012
+ },
1013
+ getOrderTitleForMatch: (order, market, match, athlete, team) => {
1014
+ if (!match) {
1015
+ return undefined;
1016
+ }
1017
+ let market_side = market.side_options.find(o => o.side == order.side);
1018
+ if (!market_side) {
1019
+ return order.side;
1020
+ }
1021
+ var re = /({.*?})/;
1022
+ let parsed_text = market_side.parseable_title.split(re);
1023
+ let new_title = '';
1024
+ parsed_text.map(t => {
1025
+ if (t === '') {
1026
+ return;
1027
+ }
1028
+ if (t[0] !== '{') {
1029
+ return new_title += t;
1030
+ }
1031
+ let variable = t.slice(1);
1032
+ variable = variable.slice(0, variable.length - 1);
1033
+ switch (variable) {
1034
+ case 'team':
1035
+ return new_title += `${team?.market_name} ${team?.name}`;
1036
+ case 'var_1':
1037
+ return new_title += MarketMaketHelpers.getVar1Label(market, order.var_1);
1038
+ case 'athlete':
1039
+ return new_title += athlete?.abbr_name;
1040
+ case 'stat':
1041
+ return new_title += market.stat;
1042
+ default:
1043
+ return;
1044
+ }
1045
+ });
1046
+ return new_title;
1047
+ },
1048
+ setMarkets: (fund, best_available, external_prices, market, margin, event) => {
1049
+ let orders = [];
1050
+ market.side_options.map(so => {
1051
+ let side_id_response = MarketMaketHelpers.getTeamEventSideIds(event, market, so);
1052
+ if (!side_id_response) {
1053
+ return;
1054
+ }
1055
+ let ba = best_available.find(ba => ba.side == so.side);
1056
+ let o_ba = best_available.find(ba => ba.side != so.side);
1057
+ if (ba && o_ba) {
1058
+ let ba_trade = MarketMaketHelpers.getTradeFromAvailableOrder(ba, side_id_response.reversed_side_id);
1059
+ let ba_order = MarketMaketHelpers.getOrderFromTrade(ba_trade, 10, ba.order_id);
1060
+ let ba_title = MarketMaketHelpers.getOrderTitleForTeamEvent(ba_order, market, event);
1061
+ if (!ba_title) {
1062
+ return;
1063
+ }
1064
+ return orders.push({
1065
+ ...ba_order,
1066
+ title: ba_title
1067
+ });
1068
+ }
1069
+ let ep = external_prices.find(p => p.side == so.side);
1070
+ let o_ep = external_prices.find(p => p.side != so.side);
1071
+ if (ep && o_ep) {
1072
+ let ep_trade = MarketMaketHelpers.getTradeFromPrice(ep, side_id_response.reversed_side_id);
1073
+ let ep_order = MarketMaketHelpers.getOrderFromTrade(ep_trade, 10);
1074
+ let ep_title = MarketMaketHelpers.getOrderTitleForTeamEvent(ep_order, market, event);
1075
+ if (!ep_title) {
1076
+ return;
1077
+ }
1078
+ return orders.push({
1079
+ ...ep_order,
1080
+ title: ep_title
1081
+ });
1082
+ }
1083
+ return;
1084
+ });
1085
+ if (orders.length != 2) {
1086
+ return [];
1087
+ }
1088
+
1089
+ //OK!! Lets figured out the buffer odds!
1090
+ let no_vig_trade_price = .5;
1091
+ let no_vig_o_price = .5;
1092
+ let no_vig_data = MarketMaketHelpers.getNoVigPrice(external_prices, market);
1093
+ if (no_vig_data) {
1094
+ no_vig_o_price = no_vig_data.o_side_prob;
1095
+ no_vig_trade_price = no_vig_data.trade_side_prob;
1096
+ }
1097
+
1098
+ //Now lets add a buffer to each one based on the margin provided!
1099
+ no_vig_trade_price -= margin * 0.5;
1100
+ let novig_trade_side_odds = Math.round(MarketMaketHelpers.calcAmericanOddsFromProbability(no_vig_trade_price));
1101
+ no_vig_o_price -= margin * 0.5;
1102
+ let novig_o_side_odds = Math.round(MarketMaketHelpers.calcAmericanOddsFromProbability(no_vig_o_price));
1103
+
1104
+ //OK!!! Now lets add the propbabilities to the orders!
1105
+ let trade_side_order = orders.find(o => o.side == market.trade_side);
1106
+ let o_side_order = orders.find(o => o.side != market.trade_side);
1107
+ if (!trade_side_order || !o_side_order) {
1108
+ return [];
1109
+ }
1110
+ let higher_probability_order = no_vig_trade_price >= no_vig_o_price ? 'trade' : 'other';
1111
+ let trade_side_stake = 0,
1112
+ o_side_stake = 0;
1113
+ if (higher_probability_order == 'trade') {
1114
+ console.log('min was trade side');
1115
+ trade_side_stake = fund.working_capital;
1116
+ //If that is the stake, then the potential winnigns is
1117
+ let pot_win = MarketMaketHelpers.calcPotentialWinnings(trade_side_stake, novig_trade_side_odds);
1118
+ o_side_stake = MarketMaketHelpers.calcSaleValue(novig_o_side_odds, pot_win);
1119
+ } else {
1120
+ console.log('min was o side!!');
1121
+ o_side_stake = fund.working_capital;
1122
+ //If that is the stake, then the potential winnigns is
1123
+ let pot_win = MarketMaketHelpers.calcPotentialWinnings(o_side_stake, novig_o_side_odds);
1124
+ trade_side_stake = MarketMaketHelpers.calcSaleValue(novig_trade_side_odds, pot_win);
1125
+ }
1126
+ let o_side_working = o_side_stake / fund.working_capital;
1127
+ let t_side_working = trade_side_stake / fund.working_capital;
1128
+ o_side_order = {
1129
+ ...o_side_order,
1130
+ probability: no_vig_o_price,
1131
+ odds: novig_o_side_odds,
1132
+ fulfill_action: 'drain',
1133
+ working_pct: o_side_working,
1134
+ potential_winnings: MarketMaketHelpers.calcPotentialWinnings(o_side_stake, novig_o_side_odds),
1135
+ open_amt: o_side_stake
1136
+ };
1137
+ trade_side_order = {
1138
+ ...trade_side_order,
1139
+ probability: no_vig_trade_price,
1140
+ odds: novig_trade_side_odds,
1141
+ fulfill_action: 'drain',
1142
+ working_pct: t_side_working,
1143
+ potential_winnings: MarketMaketHelpers.calcPotentialWinnings(trade_side_stake, novig_trade_side_odds),
1144
+ open_amt: trade_side_stake
1145
+ };
1146
+ return [o_side_order, trade_side_order];
1147
+ },
1148
+ calcSaleValue: (odds, potential_winnings) => {
1149
+ potential_winnings = parseInt(potential_winnings);
1150
+ if (isNaN(potential_winnings)) {
1151
+ return 0;
1152
+ }
1153
+ let cash;
1154
+ if (odds > 0) {
1155
+ var earningsMultiplyer = odds / 100 + 1;
1156
+ cash = potential_winnings / earningsMultiplyer;
1157
+ } else {
1158
+ var earningsMultiplyer = 100 / Math.abs(odds) + 1;
1159
+ cash = potential_winnings / earningsMultiplyer;
1160
+ }
1161
+ return cash;
1162
+ },
1163
+ getNoVigPrice: (prices, market) => {
1164
+ if (!prices || prices.length != 2) {
1165
+ return undefined;
1166
+ }
1167
+ let external_name = prices[0]?.external_name;
1168
+ if (!external_name) {
1169
+ return undefined;
1170
+ }
1171
+ let total_probability = prices.reduce((a, b) => a + b.probability, 0);
1172
+ let vig_pct = total_probability - 1;
1173
+ let trade_side_prob = prices.find(p => p.side == market.trade_side)?.probability;
1174
+ let o_side_prob = prices.find(p => p.side != market.trade_side)?.probability;
1175
+ if (!trade_side_prob || !o_side_prob) {
1176
+ return undefined;
1177
+ }
1178
+ trade_side_prob -= vig_pct * 0.5;
1179
+ o_side_prob -= vig_pct * 0.5;
1180
+ let trade_side_odds = MarketMaketHelpers.calcAmericanOddsFromProbability(trade_side_prob);
1181
+ let o_side_odds = MarketMaketHelpers.calcAmericanOddsFromProbability(o_side_prob);
1182
+ return {
1183
+ external_name,
1184
+ trade_side_prob,
1185
+ o_side_prob,
1186
+ trade_side_odds,
1187
+ o_side_odds
1188
+ };
1189
+ },
1190
+ getAvailableVar1s: (my_orders, available_orders, prices, market) => {
1191
+ let default_var_1 = 0;
1192
+ if (!market.var_1_required) {
1193
+ return {
1194
+ unique_var_1: [0],
1195
+ default_var_1
1196
+ };
1197
+ }
1198
+ let trade_side_my_orders = my_orders.filter(o => o.side == market.trade_side);
1199
+ let o_side_my_orders = my_orders.filter(o => o.side != market.trade_side);
1200
+ let trade_side_avail = available_orders.filter(o => o.side == market.trade_side);
1201
+ let o_side_avail = available_orders.filter(o => o.side != market.trade_side);
1202
+ let trade_side_prices = prices.filter(p => p.side == market.trade_side);
1203
+ let o_side_prices = prices.filter(p => p.side != market.trade_side);
1204
+ let trade_side_var_1 = trade_side_my_orders.map(o => o.var_1).concat(trade_side_avail.map(o => o.var_1)).concat(trade_side_prices.map(p => p.var_1));
1205
+ let o_side_var_1 = o_side_my_orders.map(o => o.var_1).concat(o_side_avail.map(a => a.var_1)).concat(o_side_prices.map(p => p.var_1));
1206
+ if (market.type == 'Spread') {
1207
+ o_side_var_1 = o_side_var_1.map(var_1 => var_1 * -1);
1208
+ }
1209
+ let all_var_1 = trade_side_var_1.concat(o_side_var_1);
1210
+ let unique_var_1 = [...new Set(all_var_1.map(var_1 => var_1))];
1211
+
1212
+ //Grade latest my order
1213
+ let my_order = my_orders.filter(o => o.status == 'approved').sort((a, b) => moment(b.create_datetime).unix() - moment(a.create_datetime).unix())[0];
1214
+ if (my_order) {
1215
+ default_var_1 = my_order.var_1;
1216
+ //Determin if we need to swap
1217
+ if (my_order.side != market.trade_side && market.type == 'Spread') {
1218
+ default_var_1 = default_var_1 * -1;
1219
+ }
1220
+ } else {
1221
+ let price = trade_side_prices[0];
1222
+ if (price) {
1223
+ default_var_1 = price.var_1;
1224
+ } else if (unique_var_1[0]) {
1225
+ default_var_1 = unique_var_1[0];
1226
+ }
1227
+ }
1228
+ return {
1229
+ unique_var_1,
1230
+ default_var_1
1231
+ };
1232
+ },
1233
+ filterByVar1: (var_1, my_orders, available_orders, prices, market, backup_prices) => {
1234
+ let o_var_1 = market.type == 'Spread' ? var_1 * -1 : var_1;
1235
+ let trade_side_my_orders = my_orders.filter(o => o.side == market.trade_side && o.var_1 == var_1);
1236
+ let o_side_my_orders = my_orders.filter(o => o.side != market.trade_side && o.var_1 == o_var_1);
1237
+ let trade_side_avail = available_orders.filter(o => o.side == market.trade_side && o.var_1 == var_1);
1238
+ let o_side_avail = available_orders.filter(o => o.side != market.trade_side && o.var_1 == o_var_1);
1239
+ let trade_side_prices = prices.filter(p => p.side == market.trade_side && p.var_1 == var_1);
1240
+ let o_side_prices = prices.filter(p => p.side != market.trade_side && p.var_1 == o_var_1);
1241
+ if (trade_side_prices.length == 0 && backup_prices) {
1242
+ console.log('in here!!');
1243
+ trade_side_prices = backup_prices.filter(p => p.side == market.trade_side && p.var_1 == var_1);
1244
+ o_side_prices = backup_prices.filter(p => p.side != market.trade_side && p.var_1 == o_var_1);
1245
+ }
1246
+ return {
1247
+ var_1_orders: trade_side_my_orders.concat(o_side_my_orders),
1248
+ var_1_available: trade_side_avail.concat(o_side_avail),
1249
+ var_1_prices: trade_side_prices.concat(o_side_prices)
1250
+ };
1251
+ },
1252
+ calcPotentialWinnings: (amt, odds) => {
1253
+ if (odds > 0) {
1254
+ var earningsMultiplyer = odds / 100 + 1;
1255
+ return earningsMultiplyer * amt;
1256
+ } else {
1257
+ var earningsMultiplyer = 100 / Math.abs(odds) + 1;
1258
+ return earningsMultiplyer * amt;
1259
+ }
1260
+ },
1261
+ calcProbabilityFromOdds: odds => {
1262
+ let prob;
1263
+ if (odds < 0) {
1264
+ odds = Math.abs(odds);
1265
+ prob = odds / (odds + 100) * 100;
1266
+ return prob / 100;
1267
+ } else {
1268
+ prob = 100 / (odds + 100) * 100;
1269
+ return prob / 100;
1270
+ }
1271
+ },
1272
+ getAvailableSideIds: (my_orders, available_orders, prices, market) => {
1273
+ let default_side_id = '0';
1274
+ if (!['athlete', 'team', 'exotic'].includes(market.level)) {
1275
+ return {
1276
+ side_type: market.level,
1277
+ unique_side_ids: [],
1278
+ default_side_id
1279
+ };
1280
+ }
1281
+ let o_sides = my_orders.map(o => o.side_id);
1282
+ let avail_sides = available_orders.map(o => o.side_id);
1283
+ let price_sides = prices.map(p => p.participant_id);
1284
+ let unique_side_ids = o_sides.concat(avail_sides).concat(price_sides);
1285
+ unique_side_ids = [...new Set(unique_side_ids.map(id => id))];
1286
+ let my_order = my_orders[0];
1287
+ if (my_order) {
1288
+ default_side_id = my_order.side_id;
1289
+ } else if (available_orders[0]) {
1290
+ default_side_id = available_orders[0].side_id;
1291
+ } else if (prices[0]) {
1292
+ default_side_id = prices[0].participant_id;
1293
+ }
1294
+ return {
1295
+ side_type: market.level,
1296
+ unique_side_ids,
1297
+ default_side_id
1298
+ };
1299
+ }
1300
+ };
1301
+ //# sourceMappingURL=index.js.map