overtime-live-trading-utils 0.0.22 → 0.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main.js +1 -1
- package/package.json +1 -1
- package/src/utils/sports.ts +72 -81
package/main.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.thalesUtils=r():e.thalesUtils=r()}(this,(()=>(()=>{"use strict";var e={d:(r,a)=>{for(var _ in a)e.o(a,_)&&!e.o(r,_)&&Object.defineProperty(r,_,{enumerable:!0,get:a[_]})},o:(e,r)=>Object.prototype.hasOwnProperty.call(e,r),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};e.r(r),e.d(r,{adjustSpreadOnOdds:()=>F,allowGameSportWithPeriodConstraint:()=>v,allowSoccerGame:()=>g,allowTennisMatch:()=>D,calculateImpliedOddsDifference:()=>I,checkGameContraints:()=>V,checkOddsFromBookmakers:()=>N,extractOddsForGamePerProvider:()=>G,gamesDatesMatching:()=>f,getBookmakersArray:()=>s,getLeagueSport:()=>b,getSpreadData:()=>h,teamNamesMatching:()=>R}),"function"!=typeof Object.assign&&(Object.assign=function(e,r){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var a=Object(e),_=1;_<arguments.length;_++){var t=arguments[_];if(null!=t)for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(a[o]=t[o])}return a});var a=function(e){return parseFloat(e.toPrecision(12))};function _(e,r,a){return void 0===a||0==+a?Math[e](r):(r=+r,a=+a,isNaN(r)||"number"!=typeof a||a%1!=0?NaN:r<0?-_(e,-r,a):(r=r.toString().split("e"),+((r=(r=Math[e](+(r[0]+"e"+(r[1]?+r[1]-a:-a)))).toString().split("e"))[0]+"e"+(r[1]?+r[1]+a:a))))}var t,o,i={decimal:{from:function(e){if((e=parseFloat(e))<=1)throw new Error("Outside valid range.");return e},to:function(){return this.decimalValue}},moneyline:{from:function(e){return(e=parseFloat(e))>=0?e/100+1:100/-e+1},to:function(){return this.decimalValue>=2?a(100*(this.decimalValue-1)):a(-100/(this.decimalValue-1))}},hongKong:{from:function(e){if((e=parseFloat(e))<0)throw new Error("Outside valid range.");return e+1},to:function(){return a(this.decimalValue-1)}},impliedProbability:{from:function(e){if((e="string"==typeof e&&"%"==e.slice(-1)?parseFloat(e)/100:parseFloat(e))<=0||e>=1)throw new Error("Outside valid range");return 1/e},to:function(e){if(e.percentage){var r=a(100/this.decimalValue);return null!==e.precision&&(r=_("round",r,-e.precision)),r.toString()+"%"}return a(1/this.decimalValue)}},fractional:{from:function(e){var r,a=e.toString().split("/");if(e=parseFloat(a[0]),2===a.length)r=parseFloat(a[1]);else{if(1!==a.length)throw new Error("Invalid fraction");r=1}if(0===e||0===r||e/r<=0)throw new Error("Outside valid range");return 1+e/r},to:function(e){return function(e,r){for(var a,_=[0,1],t=[1,0],o=function(e){var r=null,a=e.toString().indexOf("E");-1==a&&(a=e.toString().indexOf("e"));var _=null,t=(r=-1==a?e.toString():e.toString().substring(0,a)).toString().indexOf(".");-1==t?_=r:0===t?_=r.substring(1,r.length):t<r.length&&(_=r.substring(0,t)+r.substring(t+1,r.length));var o=_,i=o.toString().length,A=e,n=A.toString().length;0===A&&(n=0);var E,s=i-n;for(E=s;E>0&&o%2==0;E--)o/=2;for(E=s;E>0&&o%5==0;E--)o/=5;return o}(e),i=e,A=Math.pow(10,-r)/2,n=2;n<1e3;n++){var E=Math.floor(i);if(_[n]=E*_[n-1]+_[n-2],Math.abs(_[n])>o)return;if(t[n]=E*t[n-1]+t[n-2],a=_[n]/t[n],Math.abs(a-e)<A||NaN==a)return _[n].toString()+"/"+t[n].toString();i=1/(i-E)}}(this.decimalValue-1,e.precision||12)}},malay:{from:function(e){if((e=parseFloat(e))<=-1||e>1)throw new Error("Outside valid range.");return e<0&&(e=-1/e),e+1},to:function(){return this.decimalValue<=2?a(this.decimalValue-1):a(-1/(this.decimalValue-1))}},indonesian:{from:function(e){if(0===(e=parseFloat(e)))throw new Error("Outside valid range.");return e>=1?e+1:-1/e+1},to:function(){return this.decimalValue<2?a(-1/(this.decimalValue-1)):a(this.decimalValue-1)}}},A=((o=function(e){if("number"!=typeof e||isNaN(e))throw new Error("Invalid odds");this.decimalValue=a(e)}).prototype=(t=function(){throw new Error("This constructor is private, please use the from* functions")}).prototype,t.from=function(e,r){if(!i.hasOwnProperty(e))throw new Error("Unknown format "+e+".");var a=i[e].from(r);return new o(a)},t);A.prototype.to=function(e,r){if(!i.hasOwnProperty(e))throw new Error("Unknown format "+e+".");r=Object.assign({precision:null,percentage:!1},r);var a=i[e].to.call(this,r);return"number"==typeof a&&null!==r.precision&&(a=_("round",a,-r.precision)),a};var n,E=A.from,s=function(e,r,a){var _=e.find((function(e){return Number(e.sportId)===Number(r)}));if(_){if(""==_.primaryBookmaker)return a;var t=[];return _.primaryBookmaker&&t.push(_.primaryBookmaker),_.secondaryBookmaker&&t.push(_.secondaryBookmaker),_.tertiaryBookmaker&&t.push(_.tertiaryBookmaker),t}return a},N=function(e,r,a,_,t){var o=r.some((function(r){var _=e.get(r);return!!_&&(0===_.homeOdds||0===_.awayOdds||!a&&0===_.drawOdds||1===_.homeOdds||1===_.awayOdds||!a&&1===_.drawOdds)}));if(1==r.length){if(o)return[{homeOdds:0,awayOdds:0,drawOdds:0}];var i=r[0],A=e.get(i);return[{homeOdds:A.homeOdds,awayOdds:A.awayOdds,drawOdds:a?0:A.drawOdds}]}if(o)return[{homeOdds:0,awayOdds:0,drawOdds:0}];var n=e.get(r[0]),s=n.homeOdds,N=n.awayOdds,l=n.drawOdds;if(r.slice(1).some((function(r){var o=e[r];if(o){var i=o.homeOdds,A=o.awayOdds,n=o.drawOdds,S=E("decimal",s).to("impliedProbability"),L=E("decimal",N).to("impliedProbability"),d=a?0:E("decimal",l).to("impliedProbability"),u=E("decimal",i).to("impliedProbability"),M=E("decimal",A).to("impliedProbability"),c=a?0:E("decimal",n).to("impliedProbability"),O=I(S,u),P=I(L,M),m=a?0:I(d,c);if(O>_&&S>t&&u>t||P>_&&L>t&&M>t||!a&&m>_&&d>t&&c>t)return!0}return!1})))return console.log("Returning zero odds due to percentage difference"),[{homeOdds:0,awayOdds:0,drawOdds:0}];var S=[];return r.forEach((function(r){return S.push(e.get(r))})),null!=S[0]?S.map((function(e){return{homeOdds:e.homeOdds,awayOdds:e.awayOdds,drawOdds:a?0:e.drawOdds}})):(console.log("Returning zero odds cause no matching bookmakers have been found"),[{homeOdds:0,awayOdds:0,drawOdds:0}])},I=function(e,r){var a=Math.abs(e-r)/e*100;return console.log("% diff: "+a),a},l="Soccer",S="Football",L="Basketball",d="Baseball",u="Hockey",M="Fighting",c="Tennis",O="eSports",P="Volleyball",m="Cricket",w="Motosport",T="Golf",C={NCAAF:1,NFL:2,MLB:3,NBA:4,NCAAB:5,NHL:6,UFC:7,WNBA:8,MLS:10,EPL:11,LIGUE_ONE:12,BUNDESLIGA:13,LA_LIGA:14,SERIE_A:15,UEFA_CL:16,UEFA_EL:17,FIFA_WC:18,J1_LEAGUE:19,IPL:20,T20_BLAST:21,IIHF_WORLD_CHAMPIONSHIP:33,COPA_AMERICA:44,COPA_LIBERTADORES:45,UEFA_EURO:50,EREDIVISIE:57,PRIMEIRA_LIGA:61,SUMMER_OLYMPICS_SOCCER_WOMEN:65,SUMMER_OLYMPICS_SOCCER:66,FIFA_WC_WOMEN:76,ENGLAND_CUP:132,FRANCE_CUP:134,SPAIN_CUP:138,ITALY_CUP:141,TENNIS_GS:153,TENNIS_MASTERS:156,GERMANY_CUP:209,LIGA_MX:230,BRAZIL_1:268,UEFA_EURO_U21:288,FIFA_WORLD_CUP_U20:296,SUMMER_OLYMPICS_HANDBALL_WOMEN:380,SUMMER_OLYMPICS_HANDBALL:381,EUROLEAGUE:399,SUMMER_OLYMPICS_BASKETBALL:406,SUMMER_OLYMPICS_BASKETBALL_WOMEN:407,FIBA_WORLD_CUP:409,FORMULA1:445,MOTOGP:497,SAUDI_PROFESSIONAL_LEAGUE:536,SUMMER_OLYMPICS_WATERPOLO:8881,SUMMER_OLYMPICS_VOLEYBALL_WOMEN:8893,SUMMER_OLYMPICS_VOLEYBALL:8894,BOXING:9196,SUMMER_OLYMPICS_RUGBY:9578,SUMMER_OLYMPICS_RUGBY_WOMEN:9588,UEFA_NATIONS_LEAGUE:9806,CONCACAF_NATIONS_LEAGUE:9821,CSGO:9977,DOTA2:9983,SUMMER_OLYMPICS_BASKETBALL_3X3:10071,SUMMER_OLYMPICS_BASKETBALL_3X3_WOMEN:10072,SUMMER_OLYMPICS_QUALIFICATION:10502,LOL:10138,CONMEBOL_WC_QUALIFICATIONS:10199,UEFA_CONFERENCE_LEAGUE:10216,NON_TITLE_BOXING:10595,UEFA_CHAMPIONS_LEAGUE_QUALIFICATION:10611,UEFA_EUROPA_LEAGUE_QUALIFICATION:10613,UEFA_CONFERENCE_LEAGUE_QUALIFICATION:10615,GOLF_H2H:100021,GOLF_WINNER:100121,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_1:15312,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_2:15313,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_3:15314,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_4:15315,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_5:15316,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_6:15317,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_7:15318,TENNIS_MASTERS_LIVE_MAPPING_V2_1:15622,TENNIS_MASTERS_LIVE_MAPPING_V2_2:15623,TENNIS_MASTERS_LIVE_MAPPING_V2_3:15624,TENNIS_MASTERS_LIVE_MAPPING_V2_4:15625,TENNIS_MASTERS_LIVE_MAPPING_V2_5:15626,TENNIS_MASTERS_LIVE_MAPPING_V2_6:15627,TENNIS_MASTERS_LIVE_MAPPING_V2_7:15628,TENNIS_MASTERS_LIVE_MAPPING_V2_8:15632,TENNIS_MASTERS_LIVE_MAPPING_V2_9:15633,TENNIS_MASTERS_LIVE_MAPPING_V2_10:15634,TENNIS_MASTERS_LIVE_MAPPING_V2_11:15635,TENNIS_MASTERS_LIVE_MAPPING_V2_12:15636,TENNIS_MASTERS_LIVE_MAPPING_V2_13:15637,TENNIS_MASTERS_LIVE_MAPPING_V2_14:15638,TENNIS_MASTERS_LIVE_MAPPING_V2_15:15641,TENNIS_MASTERS_LIVE_MAPPING_V2_16:15642,TENNIS_MASTERS_LIVE_MAPPING_V2_17:15643,TENNIS_MASTERS_LIVE_MAPPING_V2_18:15644,TENNIS_MASTERS_LIVE_MAPPING_V2_19:15645,TENNIS_MASTERS_LIVE_MAPPING_V2_20:15646,TENNIS_MASTERS_LIVE_MAPPING_V2_21:15647,TENNIS_MASTERS_LIVE_MAPPING_V2_22:15648},p=[C.CSGO,C.DOTA2,C.LOL,C.TENNIS_GS,C.TENNIS_MASTERS,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_1,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_2,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_3,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_4,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_5,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_6,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_7,C.TENNIS_MASTERS_LIVE_MAPPING_V2_1,C.TENNIS_MASTERS_LIVE_MAPPING_V2_2,C.TENNIS_MASTERS_LIVE_MAPPING_V2_3,C.TENNIS_MASTERS_LIVE_MAPPING_V2_4,C.TENNIS_MASTERS_LIVE_MAPPING_V2_5,C.TENNIS_MASTERS_LIVE_MAPPING_V2_6,C.TENNIS_MASTERS_LIVE_MAPPING_V2_7,C.TENNIS_MASTERS_LIVE_MAPPING_V2_8,C.TENNIS_MASTERS_LIVE_MAPPING_V2_9,C.TENNIS_MASTERS_LIVE_MAPPING_V2_10,C.TENNIS_MASTERS_LIVE_MAPPING_V2_11,C.TENNIS_MASTERS_LIVE_MAPPING_V2_12,C.TENNIS_MASTERS_LIVE_MAPPING_V2_13,C.TENNIS_MASTERS_LIVE_MAPPING_V2_14,C.TENNIS_MASTERS_LIVE_MAPPING_V2_15,C.TENNIS_MASTERS_LIVE_MAPPING_V2_16,C.TENNIS_MASTERS_LIVE_MAPPING_V2_17,C.TENNIS_MASTERS_LIVE_MAPPING_V2_18,C.TENNIS_MASTERS_LIVE_MAPPING_V2_19,C.TENNIS_MASTERS_LIVE_MAPPING_V2_20,C.TENNIS_MASTERS_LIVE_MAPPING_V2_21,C.TENNIS_MASTERS_LIVE_MAPPING_V2_22],R=function(e,r,a,_,t,o){var i,A;if(p.includes(e)?(i=_.toLowerCase()==r.toLowerCase()||_.toLowerCase()==a.toLowerCase(),A=t.toLowerCase()==r.toLowerCase()||t.toLowerCase()==a.toLowerCase()):(i=_.toLowerCase()==r.toLowerCase(),A=t.toLowerCase()==a.toLowerCase()),!0!==i){var n=o.get(_.toLowerCase()),E=o.get(r.toLowerCase()),s=o.get(a.toLowerCase());if([n,E].some((function(e){return null==e})))return!1;i=p.includes(e)?n==E||n==s:n==E}if(!0!==A){var N=o.get(t.toLowerCase());if(E=o.get(r.toLowerCase()),[N,s=o.get(a.toLowerCase())].some((function(e){return null==e})))return!1;A=p.includes(e)&&N==E||N==s}return i&&A},f=function(e,r,a,_){var t;if(a.toString().startsWith(C.TENNIS_GS.toString())||a.toString().startsWith(C.TENNIS_MASTERS.toString())){var o=r.getTime(),i=e.getTime();t=Math.abs(i-o)<=Number(60*_*1e3)}else t=r.toUTCString()==e.toUTCString();return t},G=function(e,r,a,_,t){var o=new Map;return e.forEach((function(e){var i,A,n=r.odds.filter((function(r){return r.sports_book_name.toLowerCase()==e.toLowerCase()})),E=_.get(a.homeTeam.toLowerCase()),s=_.get(a.awayTeam.toLowerCase()),N=0;null!=(i=null==E?n.find((function(e){var r=_.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==a.homeTeam.toLowerCase():r==a.homeTeam.toLowerCase()})):n.find((function(e){var r=_.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==E:r==E})))&&(N=i.price);var I=0;null!=(A=null==s?n.find((function(e){var r=_.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==a.awayTeam.toLowerCase():r==a.awayTeam.toLowerCase()})):n.find((function(e){var r=_.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==s:r==s})))&&(I=A.price);var l=0;if(t){var S=n.find((function(e){return"draw"==e.name.toLowerCase()}));null!=S&&(l=S.price)}o.set(e.toLowerCase(),{homeOdds:N,awayOdds:I,drawOdds:l})})),o},U=((n={})[C.NCAAF]={sport:S,id:C.NCAAF,isDrawAvailable:!1},n[C.NFL]={sport:S,id:C.NFL,isDrawAvailable:!1},n[C.MLB]={sport:d,id:C.MLB,isDrawAvailable:!1},n[C.NBA]={sport:L,id:C.NBA,isDrawAvailable:!1},n[C.NCAAB]={sport:L,id:C.NCAAB,isDrawAvailable:!1},n[C.NHL]={sport:u,id:C.NHL,isDrawAvailable:!1},n[C.UFC]={sport:M,id:C.UFC,isDrawAvailable:!1},n[C.WNBA]={sport:L,id:C.WNBA,isDrawAvailable:!1},n[C.MLS]={sport:l,id:C.MLS,isDrawAvailable:!0},n[C.EPL]={sport:l,id:C.EPL,isDrawAvailable:!0},n[C.LIGUE_ONE]={sport:l,id:C.LIGUE_ONE,isDrawAvailable:!0},n[C.BUNDESLIGA]={sport:l,id:C.BUNDESLIGA,isDrawAvailable:!0},n[C.LA_LIGA]={sport:l,id:C.LA_LIGA,isDrawAvailable:!0},n[C.SERIE_A]={sport:l,id:C.SERIE_A,isDrawAvailable:!0},n[C.UEFA_CL]={sport:l,id:C.UEFA_CL,isDrawAvailable:!0},n[C.UEFA_EL]={sport:l,id:C.UEFA_EL,isDrawAvailable:!0},n[C.FIFA_WC]={sport:l,id:C.FIFA_WC,isDrawAvailable:!0},n[C.J1_LEAGUE]={sport:l,id:C.J1_LEAGUE,isDrawAvailable:!0},n[C.IPL]={sport:m,id:C.IPL,isDrawAvailable:!1},n[C.T20_BLAST]={sport:m,id:C.T20_BLAST,isDrawAvailable:!1},n[C.IIHF_WORLD_CHAMPIONSHIP]={sport:u,id:C.IIHF_WORLD_CHAMPIONSHIP,isDrawAvailable:!0},n[C.COPA_AMERICA]={sport:l,id:C.COPA_AMERICA,isDrawAvailable:!0},n[C.COPA_LIBERTADORES]={sport:l,id:C.COPA_LIBERTADORES,isDrawAvailable:!0},n[C.UEFA_EURO]={sport:l,id:C.UEFA_EURO,isDrawAvailable:!0},n[C.EREDIVISIE]={sport:l,id:C.EREDIVISIE,isDrawAvailable:!0},n[C.PRIMEIRA_LIGA]={sport:l,id:C.PRIMEIRA_LIGA,isDrawAvailable:!0},n[C.FIFA_WC_WOMEN]={sport:l,id:C.FIFA_WC_WOMEN,isDrawAvailable:!0},n[C.ENGLAND_CUP]={sport:l,id:C.ENGLAND_CUP,isDrawAvailable:!0},n[C.FRANCE_CUP]={sport:l,isDrawAvailable:!0},n[C.SPAIN_CUP]={sport:l,id:C.SPAIN_CUP,isDrawAvailable:!0},n[C.ITALY_CUP]={sport:l,isDrawAvailable:!0},n[C.TENNIS_GS]={sport:c,id:C.TENNIS_GS,isDrawAvailable:!1},n[C.TENNIS_MASTERS]={sport:c,id:C.TENNIS_MASTERS,isDrawAvailable:!1},n[C.GERMANY_CUP]={sport:l,id:C.GERMANY_CUP,isDrawAvailable:!0},n[C.BRAZIL_1]={sport:l,id:C.BRAZIL_1,isDrawAvailable:!0},n[C.UEFA_EURO_U21]={sport:l,id:C.UEFA_EURO_U21,isDrawAvailable:!0},n[C.FIFA_WORLD_CUP_U20]={sport:l,id:C.FIFA_WORLD_CUP_U20,isDrawAvailable:!0},n[C.EUROLEAGUE]={sport:L,id:C.EUROLEAGUE,isDrawAvailable:!1},n[C.FIBA_WORLD_CUP]={sport:L,id:C.FIBA_WORLD_CUP,isDrawAvailable:!1},n[C.FORMULA1]={sport:w,id:C.FORMULA1,isDrawAvailable:!1},n[C.MOTOGP]={sport:w,id:C.MOTOGP,isDrawAvailable:!1},n[C.SAUDI_PROFESSIONAL_LEAGUE]={sport:l,id:C.SAUDI_PROFESSIONAL_LEAGUE,isDrawAvailable:!0},n[C.BOXING]={sport:M,id:C.BOXING,isDrawAvailable:!1},n[C.UEFA_NATIONS_LEAGUE]={sport:l,id:C.UEFA_NATIONS_LEAGUE,isDrawAvailable:!0},n[C.CONCACAF_NATIONS_LEAGUE]={sport:l,id:C.CONCACAF_NATIONS_LEAGUE,isDrawAvailable:!0},n[C.CSGO]={sport:O,id:C.CSGO,isDrawAvailable:!1},n[C.DOTA2]={sport:O,id:C.DOTA2,isDrawAvailable:!1},n[C.SUMMER_OLYMPICS_QUALIFICATION]={sport:L,id:C.SUMMER_OLYMPICS_QUALIFICATION,isDrawAvailable:!1},n[C.LOL]={sport:O,id:C.LOL,isDrawAvailable:!1},n[C.CONMEBOL_WC_QUALIFICATIONS]={sport:l,id:C.CONMEBOL_WC_QUALIFICATIONS,isDrawAvailable:!0},n[C.UEFA_CONFERENCE_LEAGUE]={sport:l,id:C.UEFA_CONFERENCE_LEAGUE,isDrawAvailable:!0},n[C.NON_TITLE_BOXING]={sport:M,isDrawAvailable:!1},n[C.UEFA_CHAMPIONS_LEAGUE_QUALIFICATION]={sport:l,id:C.UEFA_CHAMPIONS_LEAGUE_QUALIFICATION,isDrawAvailable:!0},n[C.UEFA_EUROPA_LEAGUE_QUALIFICATION]={sport:l,id:C.UEFA_EUROPA_LEAGUE_QUALIFICATION,isDrawAvailable:!0},n[C.UEFA_CONFERENCE_LEAGUE_QUALIFICATION]={sport:l,isDrawAvailable:!0},n[C.GOLF_H2H]={sport:T,id:C.GOLF_H2H,isDrawAvailable:!1},n[C.GOLF_WINNER]={sport:T,id:C.GOLF_WINNER,isDrawAvailable:!1},n[C.LIGA_MX]={sport:l,id:C.LIGA_MX,isDrawAvailable:!0},n[C.SUMMER_OLYMPICS_SOCCER_WOMEN]={sport:l,id:C.SUMMER_OLYMPICS_SOCCER_WOMEN,isDrawAvailable:!0},n[C.SUMMER_OLYMPICS_SOCCER]={sport:l,id:C.SUMMER_OLYMPICS_SOCCER,isDrawAvailable:!0},n[C.SUMMER_OLYMPICS_BASKETBALL]={sport:L,id:C.SUMMER_OLYMPICS_BASKETBALL,isDrawAvailable:!1},n[C.SUMMER_OLYMPICS_BASKETBALL_WOMEN]={sport:L,id:C.SUMMER_OLYMPICS_BASKETBALL_WOMEN,isDrawAvailable:!1},n[C.SUMMER_OLYMPICS_VOLEYBALL_WOMEN]={sport:P,id:C.SUMMER_OLYMPICS_VOLEYBALL_WOMEN,isDrawAvailable:!1},n[C.SUMMER_OLYMPICS_VOLEYBALL]={sport:P,isDrawAvailable:!1},n),b=function(e){var r=U[e];return r?r.sport:""},V=function(e,r,a){var _,t=e.score_home_total,o=e.score_away_total,i=e.clock,A=e.period,n=e.status,E=e.home_team,s=e.away_team,N=b(r);return"completed"==n.toLowerCase()?(console.log("Blocking game ".concat(E," - ").concat(s," because it is no longer live.")),null):(N===L&&(_=v(E,s,A,a.get(L))),N===u&&(_=v(E,s,A,a.get(u))),N===d&&(_=v(E,s,A,a.get(d))),N===l&&(_=g(E,s,i,A,a.get(l))),N===c&&(_=D(e,E,s,A,t,o,r)),N===P&&(_=v(E,s,A,a.get(P))),_)},v=function(e,r,a,_){return Number(a)>=_?{allow:!1,message:"Blocking game ".concat(e," - ").concat(r," due to period: ").concat(a,". period")}:{allow:!0,message:""}},g=function(e,r,a,_,t){var o=Number(a);return!Number.isNaN(o)&&o>=t||Number.isNaN(o)&&"HALF"!=_?{allow:!1,message:"Blocking game ".concat(e," - ").concat(r," due to clock: ").concat(a,"min")}:{allow:!0,message:""}},D=function(e,r,a,_,t,o,i){var A,n,E=Number(_),s="atp"==e.league.toLowerCase();if(i==C.TENNIS_GS&&s){if(2==Number(t)||2==Number(o)){switch(E){case 3:A=Number(e.score_home_period_3),n=Number(e.score_away_period_3);break;case 4:A=Number(e.score_home_period_4),n=Number(e.score_away_period_4);break;case 5:A=Number(e.score_home_period_5),n=Number(e.score_away_period_5)}return 2==Number(t)&&A>=5||2==Number(o)&&n>=5?{allow:!1,message:"Blocking game ".concat(r," - ").concat(a," due to current result: ").concat(t," - ").concat(o," (").concat(A," - ").concat(n,")")}:{allow:!0,message:"",currentHomeGameScore:A,currentAwayGameScore:n}}return{allow:!0,message:"",currentHomeGameScore:A,currentAwayGameScore:n}}if(1==Number(t)||1==Number(o)){switch(E){case 2:A=Number(e.score_home_period_2),n=Number(e.score_away_period_2);break;case 3:A=Number(e.score_home_period_3),n=Number(e.score_away_period_3)}return 1==Number(t)&&A>=5||1==Number(o)&&n>=5?{allow:!1,message:"Blocking game ".concat(r," - ").concat(a," due to current result: ").concat(t," - ").concat(o," (").concat(A," - ").concat(n,")")}:{allow:!0,message:"",currentHomeGameScore:A,currentAwayGameScore:n}}return{allow:!0,message:"",currentHomeGameScore:A,currentAwayGameScore:n}},F=function(e,r,a){if(e.some((function(e){return 0===e})))return e;var _=e.reduce((function(e,r){return e+r}),0);if(_<=1)return Array(e.length).fill(0);if(0===a){if(!(r>100*(_-1)))return e;a=r}var t=1+a/100,o=t/_,i=e.map((function(e){return e*o}));if(i.some((function(e){return e>=1})))return Array(e.length).fill(0);var A=i.reduce((function(e,r){return e+r}),0);if(A<1)return Array(e.length).fill(0);var n=t/A;return i.map((function(e){return e*n}))},h=function(e,r,a,_){var t=e.find((function(e){return Number(e.typeId)===Number(a)&&Number(e.sportId)===Number(r)}));return t?{minSpread:t.minSpread?Number(t.minSpread):_,targetSpread:t.targetSpread?Number(t.targetSpread):0}:{minSpread:_,targetSpread:0}};return r})()));
|
|
1
|
+
!function(r,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.thalesUtils=e():r.thalesUtils=e()}(this,(()=>(()=>{"use strict";var r={d:(e,a)=>{for(var _ in a)r.o(a,_)&&!r.o(e,_)&&Object.defineProperty(e,_,{enumerable:!0,get:a[_]})},o:(r,e)=>Object.prototype.hasOwnProperty.call(r,e),r:r=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})}},e={};r.r(e),r.d(e,{adjustSpreadOnOdds:()=>y,allowGameSportWithPeriodConstraint:()=>v,allowGameSportWithResultConstraint:()=>D,allowSoccerGame:()=>g,calculateImpliedOddsDifference:()=>I,checkGameContraints:()=>V,checkOddsFromBookmakers:()=>N,extractOddsForGamePerProvider:()=>G,gamesDatesMatching:()=>f,getBookmakersArray:()=>s,getLeagueSport:()=>b,getSpreadData:()=>B,teamNamesMatching:()=>R}),"function"!=typeof Object.assign&&(Object.assign=function(r,e){if(null==r)throw new TypeError("Cannot convert undefined or null to object");for(var a=Object(r),_=1;_<arguments.length;_++){var t=arguments[_];if(null!=t)for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(a[o]=t[o])}return a});var a=function(r){return parseFloat(r.toPrecision(12))};function _(r,e,a){return void 0===a||0==+a?Math[r](e):(e=+e,a=+a,isNaN(e)||"number"!=typeof a||a%1!=0?NaN:e<0?-_(r,-e,a):(e=e.toString().split("e"),+((e=(e=Math[r](+(e[0]+"e"+(e[1]?+e[1]-a:-a)))).toString().split("e"))[0]+"e"+(e[1]?+e[1]+a:a))))}var t,o,i={decimal:{from:function(r){if((r=parseFloat(r))<=1)throw new Error("Outside valid range.");return r},to:function(){return this.decimalValue}},moneyline:{from:function(r){return(r=parseFloat(r))>=0?r/100+1:100/-r+1},to:function(){return this.decimalValue>=2?a(100*(this.decimalValue-1)):a(-100/(this.decimalValue-1))}},hongKong:{from:function(r){if((r=parseFloat(r))<0)throw new Error("Outside valid range.");return r+1},to:function(){return a(this.decimalValue-1)}},impliedProbability:{from:function(r){if((r="string"==typeof r&&"%"==r.slice(-1)?parseFloat(r)/100:parseFloat(r))<=0||r>=1)throw new Error("Outside valid range");return 1/r},to:function(r){if(r.percentage){var e=a(100/this.decimalValue);return null!==r.precision&&(e=_("round",e,-r.precision)),e.toString()+"%"}return a(1/this.decimalValue)}},fractional:{from:function(r){var e,a=r.toString().split("/");if(r=parseFloat(a[0]),2===a.length)e=parseFloat(a[1]);else{if(1!==a.length)throw new Error("Invalid fraction");e=1}if(0===r||0===e||r/e<=0)throw new Error("Outside valid range");return 1+r/e},to:function(r){return function(r,e){for(var a,_=[0,1],t=[1,0],o=function(r){var e=null,a=r.toString().indexOf("E");-1==a&&(a=r.toString().indexOf("e"));var _=null,t=(e=-1==a?r.toString():r.toString().substring(0,a)).toString().indexOf(".");-1==t?_=e:0===t?_=e.substring(1,e.length):t<e.length&&(_=e.substring(0,t)+e.substring(t+1,e.length));var o=_,i=o.toString().length,A=r,E=A.toString().length;0===A&&(E=0);var n,s=i-E;for(n=s;n>0&&o%2==0;n--)o/=2;for(n=s;n>0&&o%5==0;n--)o/=5;return o}(r),i=r,A=Math.pow(10,-e)/2,E=2;E<1e3;E++){var n=Math.floor(i);if(_[E]=n*_[E-1]+_[E-2],Math.abs(_[E])>o)return;if(t[E]=n*t[E-1]+t[E-2],a=_[E]/t[E],Math.abs(a-r)<A||NaN==a)return _[E].toString()+"/"+t[E].toString();i=1/(i-n)}}(this.decimalValue-1,r.precision||12)}},malay:{from:function(r){if((r=parseFloat(r))<=-1||r>1)throw new Error("Outside valid range.");return r<0&&(r=-1/r),r+1},to:function(){return this.decimalValue<=2?a(this.decimalValue-1):a(-1/(this.decimalValue-1))}},indonesian:{from:function(r){if(0===(r=parseFloat(r)))throw new Error("Outside valid range.");return r>=1?r+1:-1/r+1},to:function(){return this.decimalValue<2?a(-1/(this.decimalValue-1)):a(this.decimalValue-1)}}},A=((o=function(r){if("number"!=typeof r||isNaN(r))throw new Error("Invalid odds");this.decimalValue=a(r)}).prototype=(t=function(){throw new Error("This constructor is private, please use the from* functions")}).prototype,t.from=function(r,e){if(!i.hasOwnProperty(r))throw new Error("Unknown format "+r+".");var a=i[r].from(e);return new o(a)},t);A.prototype.to=function(r,e){if(!i.hasOwnProperty(r))throw new Error("Unknown format "+r+".");e=Object.assign({precision:null,percentage:!1},e);var a=i[r].to.call(this,e);return"number"==typeof a&&null!==e.precision&&(a=_("round",a,-e.precision)),a};var E,n=A.from,s=function(r,e,a){var _=r.find((function(r){return Number(r.sportId)===Number(e)}));if(_){if(""==_.primaryBookmaker)return a;var t=[];return _.primaryBookmaker&&t.push(_.primaryBookmaker),_.secondaryBookmaker&&t.push(_.secondaryBookmaker),_.tertiaryBookmaker&&t.push(_.tertiaryBookmaker),t}return a},N=function(r,e,a,_,t){var o=e.some((function(e){var _=r.get(e);return!!_&&(0===_.homeOdds||0===_.awayOdds||!a&&0===_.drawOdds||1===_.homeOdds||1===_.awayOdds||!a&&1===_.drawOdds)}));if(1==e.length){if(o)return[{homeOdds:0,awayOdds:0,drawOdds:0}];var i=e[0],A=r.get(i);return[{homeOdds:A.homeOdds,awayOdds:A.awayOdds,drawOdds:a?0:A.drawOdds}]}if(o)return[{homeOdds:0,awayOdds:0,drawOdds:0}];var E=r.get(e[0]),s=E.homeOdds,N=E.awayOdds,S=E.drawOdds;if(e.slice(1).some((function(e){var o=r[e];if(o){var i=o.homeOdds,A=o.awayOdds,E=o.drawOdds,l=n("decimal",s).to("impliedProbability"),L=n("decimal",N).to("impliedProbability"),d=a?0:n("decimal",S).to("impliedProbability"),M=n("decimal",i).to("impliedProbability"),u=n("decimal",A).to("impliedProbability"),O=a?0:n("decimal",E).to("impliedProbability"),P=I(l,M),c=I(L,u),w=a?0:I(d,O);if(P>_&&l>t&&M>t||c>_&&L>t&&u>t||!a&&w>_&&d>t&&O>t)return!0}return!1})))return console.log("Returning zero odds due to percentage difference"),[{homeOdds:0,awayOdds:0,drawOdds:0}];var l=[];return e.forEach((function(e){return l.push(r.get(e))})),null!=l[0]?l.map((function(r){return{homeOdds:r.homeOdds,awayOdds:r.awayOdds,drawOdds:a?0:r.drawOdds}})):(console.log("Returning zero odds cause no matching bookmakers have been found"),[{homeOdds:0,awayOdds:0,drawOdds:0}])},I=function(r,e){var a=Math.abs(r-e)/r*100;return console.log("% diff: "+a),a},S="Soccer",l="Football",L="Basketball",d="Baseball",M="Hockey",u="Fighting",O="Tennis",P="eSports",c="Volleyball",w="Cricket",T="Motosport",m="Golf",C={NCAAF:1,NFL:2,MLB:3,NBA:4,NCAAB:5,NHL:6,UFC:7,WNBA:8,MLS:10,EPL:11,LIGUE_ONE:12,BUNDESLIGA:13,LA_LIGA:14,SERIE_A:15,UEFA_CL:16,UEFA_EL:17,FIFA_WC:18,J1_LEAGUE:19,IPL:20,T20_BLAST:21,IIHF_WORLD_CHAMPIONSHIP:33,COPA_AMERICA:44,COPA_LIBERTADORES:45,UEFA_EURO:50,EREDIVISIE:57,PRIMEIRA_LIGA:61,SUMMER_OLYMPICS_SOCCER_WOMEN:65,SUMMER_OLYMPICS_SOCCER:66,FIFA_WC_WOMEN:76,ENGLAND_CUP:132,FRANCE_CUP:134,SPAIN_CUP:138,ITALY_CUP:141,TENNIS_GS:153,TENNIS_MASTERS:156,GERMANY_CUP:209,LIGA_MX:230,BRAZIL_1:268,UEFA_EURO_U21:288,FIFA_WORLD_CUP_U20:296,SUMMER_OLYMPICS_HANDBALL_WOMEN:380,SUMMER_OLYMPICS_HANDBALL:381,EUROLEAGUE:399,SUMMER_OLYMPICS_BASKETBALL:406,SUMMER_OLYMPICS_BASKETBALL_WOMEN:407,FIBA_WORLD_CUP:409,FORMULA1:445,MOTOGP:497,SAUDI_PROFESSIONAL_LEAGUE:536,SUMMER_OLYMPICS_WATERPOLO:8881,SUMMER_OLYMPICS_VOLEYBALL_WOMEN:8893,SUMMER_OLYMPICS_VOLEYBALL:8894,BOXING:9196,SUMMER_OLYMPICS_RUGBY:9578,SUMMER_OLYMPICS_RUGBY_WOMEN:9588,UEFA_NATIONS_LEAGUE:9806,CONCACAF_NATIONS_LEAGUE:9821,CSGO:9977,DOTA2:9983,SUMMER_OLYMPICS_BASKETBALL_3X3:10071,SUMMER_OLYMPICS_BASKETBALL_3X3_WOMEN:10072,SUMMER_OLYMPICS_QUALIFICATION:10502,LOL:10138,CONMEBOL_WC_QUALIFICATIONS:10199,UEFA_CONFERENCE_LEAGUE:10216,NON_TITLE_BOXING:10595,UEFA_CHAMPIONS_LEAGUE_QUALIFICATION:10611,UEFA_EUROPA_LEAGUE_QUALIFICATION:10613,UEFA_CONFERENCE_LEAGUE_QUALIFICATION:10615,GOLF_H2H:100021,GOLF_WINNER:100121,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_1:15312,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_2:15313,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_3:15314,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_4:15315,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_5:15316,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_6:15317,TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_7:15318,TENNIS_MASTERS_LIVE_MAPPING_V2_1:15622,TENNIS_MASTERS_LIVE_MAPPING_V2_2:15623,TENNIS_MASTERS_LIVE_MAPPING_V2_3:15624,TENNIS_MASTERS_LIVE_MAPPING_V2_4:15625,TENNIS_MASTERS_LIVE_MAPPING_V2_5:15626,TENNIS_MASTERS_LIVE_MAPPING_V2_6:15627,TENNIS_MASTERS_LIVE_MAPPING_V2_7:15628,TENNIS_MASTERS_LIVE_MAPPING_V2_8:15632,TENNIS_MASTERS_LIVE_MAPPING_V2_9:15633,TENNIS_MASTERS_LIVE_MAPPING_V2_10:15634,TENNIS_MASTERS_LIVE_MAPPING_V2_11:15635,TENNIS_MASTERS_LIVE_MAPPING_V2_12:15636,TENNIS_MASTERS_LIVE_MAPPING_V2_13:15637,TENNIS_MASTERS_LIVE_MAPPING_V2_14:15638,TENNIS_MASTERS_LIVE_MAPPING_V2_15:15641,TENNIS_MASTERS_LIVE_MAPPING_V2_16:15642,TENNIS_MASTERS_LIVE_MAPPING_V2_17:15643,TENNIS_MASTERS_LIVE_MAPPING_V2_18:15644,TENNIS_MASTERS_LIVE_MAPPING_V2_19:15645,TENNIS_MASTERS_LIVE_MAPPING_V2_20:15646,TENNIS_MASTERS_LIVE_MAPPING_V2_21:15647,TENNIS_MASTERS_LIVE_MAPPING_V2_22:15648},p=[C.CSGO,C.DOTA2,C.LOL,C.TENNIS_GS,C.TENNIS_MASTERS,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_1,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_2,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_3,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_4,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_5,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_6,C.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_7,C.TENNIS_MASTERS_LIVE_MAPPING_V2_1,C.TENNIS_MASTERS_LIVE_MAPPING_V2_2,C.TENNIS_MASTERS_LIVE_MAPPING_V2_3,C.TENNIS_MASTERS_LIVE_MAPPING_V2_4,C.TENNIS_MASTERS_LIVE_MAPPING_V2_5,C.TENNIS_MASTERS_LIVE_MAPPING_V2_6,C.TENNIS_MASTERS_LIVE_MAPPING_V2_7,C.TENNIS_MASTERS_LIVE_MAPPING_V2_8,C.TENNIS_MASTERS_LIVE_MAPPING_V2_9,C.TENNIS_MASTERS_LIVE_MAPPING_V2_10,C.TENNIS_MASTERS_LIVE_MAPPING_V2_11,C.TENNIS_MASTERS_LIVE_MAPPING_V2_12,C.TENNIS_MASTERS_LIVE_MAPPING_V2_13,C.TENNIS_MASTERS_LIVE_MAPPING_V2_14,C.TENNIS_MASTERS_LIVE_MAPPING_V2_15,C.TENNIS_MASTERS_LIVE_MAPPING_V2_16,C.TENNIS_MASTERS_LIVE_MAPPING_V2_17,C.TENNIS_MASTERS_LIVE_MAPPING_V2_18,C.TENNIS_MASTERS_LIVE_MAPPING_V2_19,C.TENNIS_MASTERS_LIVE_MAPPING_V2_20,C.TENNIS_MASTERS_LIVE_MAPPING_V2_21,C.TENNIS_MASTERS_LIVE_MAPPING_V2_22],R=function(r,e,a,_,t,o){var i,A;if(p.includes(r)?(i=_.toLowerCase()==e.toLowerCase()||_.toLowerCase()==a.toLowerCase(),A=t.toLowerCase()==e.toLowerCase()||t.toLowerCase()==a.toLowerCase()):(i=_.toLowerCase()==e.toLowerCase(),A=t.toLowerCase()==a.toLowerCase()),!0!==i){var E=o.get(_.toLowerCase()),n=o.get(e.toLowerCase()),s=o.get(a.toLowerCase());if([E,n].some((function(r){return null==r})))return!1;i=p.includes(r)?E==n||E==s:E==n}if(!0!==A){var N=o.get(t.toLowerCase());if(n=o.get(e.toLowerCase()),[N,s=o.get(a.toLowerCase())].some((function(r){return null==r})))return!1;A=p.includes(r)&&N==n||N==s}return i&&A},f=function(r,e,a,_){var t;if(a.toString().startsWith(C.TENNIS_GS.toString())||a.toString().startsWith(C.TENNIS_MASTERS.toString())){var o=e.getTime(),i=r.getTime();t=Math.abs(i-o)<=Number(60*_*1e3)}else t=e.toUTCString()==r.toUTCString();return t},G=function(r,e,a,_,t){var o=new Map;return r.forEach((function(r){var i,A,E=e.odds.filter((function(e){return e.sports_book_name.toLowerCase()==r.toLowerCase()})),n=_.get(a.homeTeam.toLowerCase()),s=_.get(a.awayTeam.toLowerCase()),N=0;null!=(i=null==n?E.find((function(r){var e=_.get(r.name.toLowerCase());return null==e?r.name.toLowerCase()==a.homeTeam.toLowerCase():e==a.homeTeam.toLowerCase()})):E.find((function(r){var e=_.get(r.name.toLowerCase());return null==e?r.name.toLowerCase()==n:e==n})))&&(N=i.price);var I=0;null!=(A=null==s?E.find((function(r){var e=_.get(r.name.toLowerCase());return null==e?r.name.toLowerCase()==a.awayTeam.toLowerCase():e==a.awayTeam.toLowerCase()})):E.find((function(r){var e=_.get(r.name.toLowerCase());return null==e?r.name.toLowerCase()==s:e==s})))&&(I=A.price);var S=0;if(t){var l=E.find((function(r){return"draw"==r.name.toLowerCase()}));null!=l&&(S=l.price)}o.set(r.toLowerCase(),{homeOdds:N,awayOdds:I,drawOdds:S})})),o},U=((E={})[C.NCAAF]={sport:l,id:C.NCAAF,isDrawAvailable:!1},E[C.NFL]={sport:l,id:C.NFL,isDrawAvailable:!1},E[C.MLB]={sport:d,id:C.MLB,isDrawAvailable:!1},E[C.NBA]={sport:L,id:C.NBA,isDrawAvailable:!1},E[C.NCAAB]={sport:L,id:C.NCAAB,isDrawAvailable:!1},E[C.NHL]={sport:M,id:C.NHL,isDrawAvailable:!1},E[C.UFC]={sport:u,id:C.UFC,isDrawAvailable:!1},E[C.WNBA]={sport:L,id:C.WNBA,isDrawAvailable:!1},E[C.MLS]={sport:S,id:C.MLS,isDrawAvailable:!0},E[C.EPL]={sport:S,id:C.EPL,isDrawAvailable:!0},E[C.LIGUE_ONE]={sport:S,id:C.LIGUE_ONE,isDrawAvailable:!0},E[C.BUNDESLIGA]={sport:S,id:C.BUNDESLIGA,isDrawAvailable:!0},E[C.LA_LIGA]={sport:S,id:C.LA_LIGA,isDrawAvailable:!0},E[C.SERIE_A]={sport:S,id:C.SERIE_A,isDrawAvailable:!0},E[C.UEFA_CL]={sport:S,id:C.UEFA_CL,isDrawAvailable:!0},E[C.UEFA_EL]={sport:S,id:C.UEFA_EL,isDrawAvailable:!0},E[C.FIFA_WC]={sport:S,id:C.FIFA_WC,isDrawAvailable:!0},E[C.J1_LEAGUE]={sport:S,id:C.J1_LEAGUE,isDrawAvailable:!0},E[C.IPL]={sport:w,id:C.IPL,isDrawAvailable:!1},E[C.T20_BLAST]={sport:w,id:C.T20_BLAST,isDrawAvailable:!1},E[C.IIHF_WORLD_CHAMPIONSHIP]={sport:M,id:C.IIHF_WORLD_CHAMPIONSHIP,isDrawAvailable:!0},E[C.COPA_AMERICA]={sport:S,id:C.COPA_AMERICA,isDrawAvailable:!0},E[C.COPA_LIBERTADORES]={sport:S,id:C.COPA_LIBERTADORES,isDrawAvailable:!0},E[C.UEFA_EURO]={sport:S,id:C.UEFA_EURO,isDrawAvailable:!0},E[C.EREDIVISIE]={sport:S,id:C.EREDIVISIE,isDrawAvailable:!0},E[C.PRIMEIRA_LIGA]={sport:S,id:C.PRIMEIRA_LIGA,isDrawAvailable:!0},E[C.FIFA_WC_WOMEN]={sport:S,id:C.FIFA_WC_WOMEN,isDrawAvailable:!0},E[C.ENGLAND_CUP]={sport:S,id:C.ENGLAND_CUP,isDrawAvailable:!0},E[C.FRANCE_CUP]={sport:S,isDrawAvailable:!0},E[C.SPAIN_CUP]={sport:S,id:C.SPAIN_CUP,isDrawAvailable:!0},E[C.ITALY_CUP]={sport:S,isDrawAvailable:!0},E[C.TENNIS_GS]={sport:O,id:C.TENNIS_GS,isDrawAvailable:!1},E[C.TENNIS_MASTERS]={sport:O,id:C.TENNIS_MASTERS,isDrawAvailable:!1},E[C.GERMANY_CUP]={sport:S,id:C.GERMANY_CUP,isDrawAvailable:!0},E[C.BRAZIL_1]={sport:S,id:C.BRAZIL_1,isDrawAvailable:!0},E[C.UEFA_EURO_U21]={sport:S,id:C.UEFA_EURO_U21,isDrawAvailable:!0},E[C.FIFA_WORLD_CUP_U20]={sport:S,id:C.FIFA_WORLD_CUP_U20,isDrawAvailable:!0},E[C.EUROLEAGUE]={sport:L,id:C.EUROLEAGUE,isDrawAvailable:!1},E[C.FIBA_WORLD_CUP]={sport:L,id:C.FIBA_WORLD_CUP,isDrawAvailable:!1},E[C.FORMULA1]={sport:T,id:C.FORMULA1,isDrawAvailable:!1},E[C.MOTOGP]={sport:T,id:C.MOTOGP,isDrawAvailable:!1},E[C.SAUDI_PROFESSIONAL_LEAGUE]={sport:S,id:C.SAUDI_PROFESSIONAL_LEAGUE,isDrawAvailable:!0},E[C.BOXING]={sport:u,id:C.BOXING,isDrawAvailable:!1},E[C.UEFA_NATIONS_LEAGUE]={sport:S,id:C.UEFA_NATIONS_LEAGUE,isDrawAvailable:!0},E[C.CONCACAF_NATIONS_LEAGUE]={sport:S,id:C.CONCACAF_NATIONS_LEAGUE,isDrawAvailable:!0},E[C.CSGO]={sport:P,id:C.CSGO,isDrawAvailable:!1},E[C.DOTA2]={sport:P,id:C.DOTA2,isDrawAvailable:!1},E[C.SUMMER_OLYMPICS_QUALIFICATION]={sport:L,id:C.SUMMER_OLYMPICS_QUALIFICATION,isDrawAvailable:!1},E[C.LOL]={sport:P,id:C.LOL,isDrawAvailable:!1},E[C.CONMEBOL_WC_QUALIFICATIONS]={sport:S,id:C.CONMEBOL_WC_QUALIFICATIONS,isDrawAvailable:!0},E[C.UEFA_CONFERENCE_LEAGUE]={sport:S,id:C.UEFA_CONFERENCE_LEAGUE,isDrawAvailable:!0},E[C.NON_TITLE_BOXING]={sport:u,isDrawAvailable:!1},E[C.UEFA_CHAMPIONS_LEAGUE_QUALIFICATION]={sport:S,id:C.UEFA_CHAMPIONS_LEAGUE_QUALIFICATION,isDrawAvailable:!0},E[C.UEFA_EUROPA_LEAGUE_QUALIFICATION]={sport:S,id:C.UEFA_EUROPA_LEAGUE_QUALIFICATION,isDrawAvailable:!0},E[C.UEFA_CONFERENCE_LEAGUE_QUALIFICATION]={sport:S,isDrawAvailable:!0},E[C.GOLF_H2H]={sport:m,id:C.GOLF_H2H,isDrawAvailable:!1},E[C.GOLF_WINNER]={sport:m,id:C.GOLF_WINNER,isDrawAvailable:!1},E[C.LIGA_MX]={sport:S,id:C.LIGA_MX,isDrawAvailable:!0},E[C.SUMMER_OLYMPICS_SOCCER_WOMEN]={sport:S,id:C.SUMMER_OLYMPICS_SOCCER_WOMEN,isDrawAvailable:!0},E[C.SUMMER_OLYMPICS_SOCCER]={sport:S,id:C.SUMMER_OLYMPICS_SOCCER,isDrawAvailable:!0},E[C.SUMMER_OLYMPICS_BASKETBALL]={sport:L,id:C.SUMMER_OLYMPICS_BASKETBALL,isDrawAvailable:!1},E[C.SUMMER_OLYMPICS_BASKETBALL_WOMEN]={sport:L,id:C.SUMMER_OLYMPICS_BASKETBALL_WOMEN,isDrawAvailable:!1},E[C.SUMMER_OLYMPICS_VOLEYBALL_WOMEN]={sport:c,id:C.SUMMER_OLYMPICS_VOLEYBALL_WOMEN,isDrawAvailable:!1},E[C.SUMMER_OLYMPICS_VOLEYBALL]={sport:c,isDrawAvailable:!1},E),b=function(r){var e=U[r];return e?e.sport:""},V=function(r,e,a){var _,t=r.score_home_total,o=r.score_away_total,i=r.clock,A=r.period,E=r.status,n=r.home_team,s=r.away_team,N=b(e);return"completed"==E.toLowerCase()?(console.log("Blocking game ".concat(n," - ").concat(s," because it is no longer live.")),null):(N===L&&(_=v(n,s,A,a.get(L))),N===M&&(_=v(n,s,A,a.get(M))),N===d&&(_=v(n,s,A,a.get(d))),N===S&&(_=g(n,s,i,A,a.get(S))),N===O&&(_=D(r,n,s,A,t,o,e,N)),N===c&&(_=D(r,n,s,A,t,o,e,N)),_)},v=function(r,e,a,_){return Number(a)>=_?{allow:!1,message:"Blocking game ".concat(r," - ").concat(e," due to period: ").concat(a,". period")}:{allow:!0,message:""}},g=function(r,e,a,_,t){var o=Number(a);return!Number.isNaN(o)&&o>=t||Number.isNaN(o)&&"HALF"!=_?{allow:!1,message:"Blocking game ".concat(r," - ").concat(e," due to clock: ").concat(a,"min")}:{allow:!0,message:""}},D=function(r,e,a,_,t,o,i,A){var E=Number(_),n=F(E,r),s="atp"==r.league.toLowerCase(),N={home:t,away:o};return A==c?h(e,a,n,N,2,20):i.startsWith(C.TENNIS_GS)&&s?h(e,a,n,N,2,5):i.startsWith(C.TENNIS_GS)&&!s||i.startsWith(C.TENNIS_MASTERS)?h(e,a,n,N,1,5):void 0},F=function(r,e){var a=0,_=0;switch(r){case 2:a=Number(e.score_home_period_2),_=Number(e.score_away_period_2);break;case 3:a=Number(e.score_home_period_3),_=Number(e.score_away_period_3);break;case 4:a=Number(e.score_home_period_4),_=Number(e.score_away_period_4);break;case 5:a=Number(e.score_home_period_5),_=Number(e.score_away_period_5)}return{home:a,away:_}},h=function(r,e,a,_,t,o){return Number(_.home)!=t&&Number(_.away)!=t||!(2==Number(_.home)&&a.home>=o||2==Number(_.away)&&a.away>=o)?{allow:!0,message:"",currentHomeGameScore:a.home,currentAwayGameScore:a.away}:{allow:!1,message:"Blocking game ".concat(r," - ").concat(e," due to current result: ").concat(_.home," - ").concat(_.away," (").concat(a.home," - ").concat(a.away,")")}},y=function(r,e,a){if(r.some((function(r){return 0===r})))return r;var _=r.reduce((function(r,e){return r+e}),0);if(_<=1)return Array(r.length).fill(0);if(0===a){if(!(e>100*(_-1)))return r;a=e}var t=1+a/100,o=t/_,i=r.map((function(r){return r*o}));if(i.some((function(r){return r>=1})))return Array(r.length).fill(0);var A=i.reduce((function(r,e){return r+e}),0);if(A<1)return Array(r.length).fill(0);var E=t/A;return i.map((function(r){return r*E}))},B=function(r,e,a,_){var t=r.find((function(r){return Number(r.typeId)===Number(a)&&Number(r.sportId)===Number(e)}));return t?{minSpread:t.minSpread?Number(t.minSpread):_,targetSpread:t.targetSpread?Number(t.targetSpread):0}:{minSpread:_,targetSpread:0}};return e})()));
|
package/package.json
CHANGED
package/src/utils/sports.ts
CHANGED
|
@@ -61,23 +61,28 @@ export const checkGameContraints = (opticOddsScoresApiResponse, marketLeague, co
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
if (marketSport === Sport.TENNIS) {
|
|
64
|
-
allowedObject =
|
|
64
|
+
allowedObject = allowGameSportWithResultConstraint(
|
|
65
65
|
opticOddsScoresApiResponse,
|
|
66
66
|
homeTeam,
|
|
67
67
|
awayTeam,
|
|
68
68
|
currentPeriod,
|
|
69
69
|
currentScoreHome,
|
|
70
70
|
currentScoreAway,
|
|
71
|
-
marketLeague
|
|
71
|
+
marketLeague,
|
|
72
|
+
marketSport
|
|
72
73
|
);
|
|
73
74
|
}
|
|
74
75
|
|
|
75
76
|
if (marketSport === Sport.VOLLEYBALL) {
|
|
76
|
-
allowedObject =
|
|
77
|
+
allowedObject = allowGameSportWithResultConstraint(
|
|
78
|
+
opticOddsScoresApiResponse,
|
|
77
79
|
homeTeam,
|
|
78
80
|
awayTeam,
|
|
79
81
|
currentPeriod,
|
|
80
|
-
|
|
82
|
+
currentScoreHome,
|
|
83
|
+
currentScoreAway,
|
|
84
|
+
marketLeague,
|
|
85
|
+
marketSport
|
|
81
86
|
);
|
|
82
87
|
}
|
|
83
88
|
|
|
@@ -106,101 +111,87 @@ export const allowSoccerGame = (homeTeam, awayTeam, currentClock, currentPeriod,
|
|
|
106
111
|
return { allow: true, message: '' };
|
|
107
112
|
};
|
|
108
113
|
|
|
109
|
-
export const
|
|
114
|
+
export const allowGameSportWithResultConstraint = (
|
|
110
115
|
opticOddsScoresApiResponse,
|
|
111
116
|
homeTeam,
|
|
112
117
|
awayTeam,
|
|
113
118
|
currentPeriod,
|
|
114
119
|
currentScoreHome,
|
|
115
120
|
currentScoreAway,
|
|
116
|
-
marketLeague
|
|
121
|
+
marketLeague,
|
|
122
|
+
marketSport
|
|
117
123
|
) => {
|
|
118
124
|
const setInProgress = Number(currentPeriod);
|
|
119
|
-
|
|
120
|
-
let currentAwayGameScore;
|
|
121
|
-
|
|
125
|
+
const currentResultInSet = fetchResultInCurrentSet(setInProgress, opticOddsScoresApiResponse);
|
|
122
126
|
const atpGrandSlamMatch = opticOddsScoresApiResponse.league.toLowerCase() == 'atp';
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
127
|
+
const currentSetsScore = { home: currentScoreHome, away: currentScoreAway };
|
|
128
|
+
|
|
129
|
+
if (marketSport == Sport.VOLLEYBALL) {
|
|
130
|
+
return checkResultConstraint(homeTeam, awayTeam, currentResultInSet, currentSetsScore, 2, 20);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (marketLeague.startsWith(League.TENNIS_GS) && atpGrandSlamMatch) {
|
|
134
|
+
return checkResultConstraint(homeTeam, awayTeam, currentResultInSet, currentSetsScore, 2, 5);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (
|
|
138
|
+
(marketLeague.startsWith(League.TENNIS_GS) && !atpGrandSlamMatch) ||
|
|
139
|
+
marketLeague.startsWith(League.TENNIS_MASTERS)
|
|
140
|
+
) {
|
|
141
|
+
return checkResultConstraint(homeTeam, awayTeam, currentResultInSet, currentSetsScore, 1, 5);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const fetchResultInCurrentSet = (currentSet: number, opticOddsScoresApiResponse) => {
|
|
146
|
+
let currentHomeGameScore = 0;
|
|
147
|
+
let currentAwayGameScore = 0;
|
|
148
|
+
switch (currentSet) {
|
|
149
|
+
case 2:
|
|
150
|
+
currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_2);
|
|
151
|
+
currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_2);
|
|
152
|
+
break;
|
|
153
|
+
case 3:
|
|
154
|
+
currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_3);
|
|
155
|
+
currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_3);
|
|
156
|
+
break;
|
|
157
|
+
case 4:
|
|
158
|
+
currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_4);
|
|
159
|
+
currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_4);
|
|
160
|
+
break;
|
|
161
|
+
case 5:
|
|
162
|
+
currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_5);
|
|
163
|
+
currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_5);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
return { home: currentHomeGameScore, away: currentAwayGameScore };
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const checkResultConstraint = (homeTeam, awayTeam, currentResultInSet, currentSetsWon, setThreshold, resultLimit) => {
|
|
170
|
+
if (Number(currentSetsWon.home) == setThreshold || Number(currentSetsWon.away) == setThreshold) {
|
|
171
|
+
if (Number(currentSetsWon.home) == 2 && currentResultInSet.home >= resultLimit) {
|
|
152
172
|
return {
|
|
153
|
-
allow:
|
|
154
|
-
message:
|
|
155
|
-
currentHomeGameScore: currentHomeGameScore,
|
|
156
|
-
currentAwayGameScore: currentAwayGameScore,
|
|
173
|
+
allow: false,
|
|
174
|
+
message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentSetsWon.home} - ${currentSetsWon.away} (${currentResultInSet.home} - ${currentResultInSet.away})`,
|
|
157
175
|
};
|
|
158
176
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
allow: true,
|
|
162
|
-
message: '',
|
|
163
|
-
currentHomeGameScore: currentHomeGameScore,
|
|
164
|
-
currentAwayGameScore: currentAwayGameScore,
|
|
165
|
-
};
|
|
166
|
-
} else {
|
|
167
|
-
if (Number(currentScoreHome) == 1 || Number(currentScoreAway) == 1) {
|
|
168
|
-
switch (setInProgress) {
|
|
169
|
-
case 2:
|
|
170
|
-
currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_2);
|
|
171
|
-
currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_2);
|
|
172
|
-
break;
|
|
173
|
-
case 3:
|
|
174
|
-
currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_3);
|
|
175
|
-
currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_3);
|
|
176
|
-
break;
|
|
177
|
-
}
|
|
178
|
-
if (Number(currentScoreHome) == 1 && currentHomeGameScore >= 5) {
|
|
179
|
-
return {
|
|
180
|
-
allow: false,
|
|
181
|
-
message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentScoreHome} - ${currentScoreAway} (${currentHomeGameScore} - ${currentAwayGameScore})`,
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (Number(currentScoreAway) == 1 && currentAwayGameScore >= 5) {
|
|
186
|
-
return {
|
|
187
|
-
allow: false,
|
|
188
|
-
message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentScoreHome} - ${currentScoreAway} (${currentHomeGameScore} - ${currentAwayGameScore})`,
|
|
189
|
-
};
|
|
190
|
-
}
|
|
177
|
+
|
|
178
|
+
if (Number(currentSetsWon.away) == 2 && currentResultInSet.away >= resultLimit) {
|
|
191
179
|
return {
|
|
192
|
-
allow:
|
|
193
|
-
message:
|
|
194
|
-
currentHomeGameScore: currentHomeGameScore,
|
|
195
|
-
currentAwayGameScore: currentAwayGameScore,
|
|
180
|
+
allow: false,
|
|
181
|
+
message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentSetsWon.home} - ${currentSetsWon.away} (${currentResultInSet.home} - ${currentResultInSet.away})`,
|
|
196
182
|
};
|
|
197
183
|
}
|
|
198
|
-
// RETURN TRUE IF NO PLAYER HAS STILL WON A SET
|
|
199
184
|
return {
|
|
200
185
|
allow: true,
|
|
201
186
|
message: '',
|
|
202
|
-
currentHomeGameScore:
|
|
203
|
-
currentAwayGameScore:
|
|
187
|
+
currentHomeGameScore: currentResultInSet.home,
|
|
188
|
+
currentAwayGameScore: currentResultInSet.away,
|
|
204
189
|
};
|
|
205
190
|
}
|
|
191
|
+
return {
|
|
192
|
+
allow: true,
|
|
193
|
+
message: '',
|
|
194
|
+
currentHomeGameScore: currentResultInSet.home,
|
|
195
|
+
currentAwayGameScore: currentResultInSet.away,
|
|
196
|
+
};
|
|
206
197
|
};
|