overtime-live-trading-utils 0.0.21 → 0.0.23

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 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 t in a)e.o(a,t)&&!e.o(r,t)&&Object.defineProperty(r,t,{enumerable:!0,get:a[t]})},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:()=>U,allowSoccerGame:()=>v,allowTennisMatch:()=>g,calculateImpliedOddsDifference:()=>l,checkGameContraints:()=>R,checkOddsFromBookmakers:()=>N,extractOddsForGamePerProvider:()=>C,gamesDatesMatching:()=>G,getBookmakersArray:()=>E,getLeagueSport:()=>V,getSpreadData:()=>D,teamNamesMatching:()=>f}),"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),t=1;t<arguments.length;t++){var o=arguments[t];if(null!=o)for(var _ in o)Object.prototype.hasOwnProperty.call(o,_)&&(a[_]=o[_])}return a});var a=function(e){return parseFloat(e.toPrecision(12))};function t(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?-t(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 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=t("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,t=[0,1],o=[1,0],_=function(e){var r=null,a=e.toString().indexOf("E");-1==a&&(a=e.toString().indexOf("e"));var t=null,o=(r=-1==a?e.toString():e.toString().substring(0,a)).toString().indexOf(".");-1==o?t=r:0===o?t=r.substring(1,r.length):o<r.length&&(t=r.substring(0,o)+r.substring(o+1,r.length));var _=t,i=_.toString().length,n=e,A=n.toString().length;0===n&&(A=0);var s,E=i-A;for(s=E;s>0&&_%2==0;s--)_/=2;for(s=E;s>0&&_%5==0;s--)_/=5;return _}(e),i=e,n=Math.pow(10,-r)/2,A=2;A<1e3;A++){var s=Math.floor(i);if(t[A]=s*t[A-1]+t[A-2],Math.abs(t[A])>_)return;if(o[A]=s*o[A-1]+o[A-2],a=t[A]/o[A],Math.abs(a-e)<n||NaN==a)return t[A].toString()+"/"+o[A].toString();i=1/(i-s)}}(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)}}},n=((_=function(e){if("number"!=typeof e||isNaN(e))throw new Error("Invalid odds");this.decimalValue=a(e)}).prototype=(o=function(){throw new Error("This constructor is private, please use the from* functions")}).prototype,o.from=function(e,r){if(!i.hasOwnProperty(e))throw new Error("Unknown format "+e+".");var a=i[e].from(r);return new _(a)},o);n.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=t("round",a,-r.precision)),a};var A,s=n.from,E=function(e,r,a){var t=e.find((function(e){return Number(e.sportId)===Number(r)}));if(t){if(""==t.primaryBookmaker)return a;var o=[];return t.primaryBookmaker&&o.push(t.primaryBookmaker),t.secondaryBookmaker&&o.push(t.secondaryBookmaker),t.tertiaryBookmaker&&o.push(t.tertiaryBookmaker),o}return a},N=function(e,r,a,t,o){var _=r.some((function(r){var t=e.get(r);return!!t&&(0===t.homeOdds||0===t.awayOdds||!a&&0===t.drawOdds||1===t.homeOdds||1===t.awayOdds||!a&&1===t.drawOdds)}));if(1==r.length){if(_)return[{homeOdds:0,awayOdds:0,drawOdds:0}];var i=r[0],n=e.get(i);return[{homeOdds:n.homeOdds,awayOdds:n.awayOdds,drawOdds:a?0:n.drawOdds}]}if(_)return[{homeOdds:0,awayOdds:0,drawOdds:0}];var A=e.get(r[0]),E=A.homeOdds,N=A.awayOdds,I=A.drawOdds;if(r.slice(1).some((function(r){var _=e[r];if(_){var i=_.homeOdds,n=_.awayOdds,A=_.drawOdds,S=s("decimal",E).to("impliedProbability"),d=s("decimal",N).to("impliedProbability"),u=a?0:s("decimal",I).to("impliedProbability"),L=s("decimal",i).to("impliedProbability"),c=s("decimal",n).to("impliedProbability"),m=a?0:s("decimal",A).to("impliedProbability"),P=l(S,L),O=l(d,c),w=a?0:l(u,m);if(P>t&&S>o&&L>o||O>t&&d>o&&c>o||!a&&w>t&&u>o&&m>o)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}])},l=function(e,r){var a=Math.abs(e-r)/e*100;return console.log("% diff: "+a),a},I="Soccer",S="Football",d="Basketball",u="Baseball",L="Hockey",c="Fighting",m="Tennis",P="eSports",O="Cricket",w="Motosport",M="Golf",T={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,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,EUROLEAGUE:399,FIBA_WORLD_CUP:409,FORMULA1:445,MOTOGP:497,SAUDI_PROFESSIONAL_LEAGUE:536,BOXING:9196,UEFA_NATIONS_LEAGUE:9806,CONCACAF_NATIONS_LEAGUE:9821,CSGO:9977,DOTA2:9983,SUMMER_OLYMPICS_QUALIFICATION:10502,LOL:10138,CONMEBOL_WC_QUALIFICATIONS:10199,UEFA_CONFERENCE_LEAGUE:10216,NON_TITLE_BOXING:10595,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,UEFA_CHAMPIONS_LEAGUE_QUALIFICATION:10611,UEFA_EUROPA_LEAGUE_QUALIFICATION:10613,UEFA_CONFERENCE_LEAGUE_QUALIFICATION:10615},p=[T.CSGO,T.DOTA2,T.LOL,T.TENNIS_GS,T.TENNIS_MASTERS,T.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_1,T.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_2,T.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_3,T.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_4,T.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_5,T.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_6,T.TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_7,T.TENNIS_MASTERS_LIVE_MAPPING_V2_1,T.TENNIS_MASTERS_LIVE_MAPPING_V2_2,T.TENNIS_MASTERS_LIVE_MAPPING_V2_3,T.TENNIS_MASTERS_LIVE_MAPPING_V2_4,T.TENNIS_MASTERS_LIVE_MAPPING_V2_5,T.TENNIS_MASTERS_LIVE_MAPPING_V2_6,T.TENNIS_MASTERS_LIVE_MAPPING_V2_7,T.TENNIS_MASTERS_LIVE_MAPPING_V2_8,T.TENNIS_MASTERS_LIVE_MAPPING_V2_9,T.TENNIS_MASTERS_LIVE_MAPPING_V2_10,T.TENNIS_MASTERS_LIVE_MAPPING_V2_11,T.TENNIS_MASTERS_LIVE_MAPPING_V2_12,T.TENNIS_MASTERS_LIVE_MAPPING_V2_13,T.TENNIS_MASTERS_LIVE_MAPPING_V2_14,T.TENNIS_MASTERS_LIVE_MAPPING_V2_15,T.TENNIS_MASTERS_LIVE_MAPPING_V2_16,T.TENNIS_MASTERS_LIVE_MAPPING_V2_17,T.TENNIS_MASTERS_LIVE_MAPPING_V2_18,T.TENNIS_MASTERS_LIVE_MAPPING_V2_19,T.TENNIS_MASTERS_LIVE_MAPPING_V2_20,T.TENNIS_MASTERS_LIVE_MAPPING_V2_21,T.TENNIS_MASTERS_LIVE_MAPPING_V2_22],f=function(e,r,a,t,o,_){var i,n;if(p.includes(e)?(i=t.toLowerCase()==r.toLowerCase()||t.toLowerCase()==a.toLowerCase(),n=o.toLowerCase()==r.toLowerCase()||o.toLowerCase()==a.toLowerCase()):(i=t.toLowerCase()==r.toLowerCase(),n=o.toLowerCase()==a.toLowerCase()),!0!==i){var A=_.get(t.toLowerCase()),s=_.get(r.toLowerCase()),E=_.get(a.toLowerCase());if([A,s].some((function(e){return null==e})))return!1;i=p.includes(e)?A==s||A==E:A==s}if(!0!==n){var N=_.get(o.toLowerCase());if(s=_.get(r.toLowerCase()),[N,E=_.get(a.toLowerCase())].some((function(e){return null==e})))return!1;n=p.includes(e)&&N==s||N==E}return i&&n},G=function(e,r,a,t){var o;if(a.toString().startsWith(T.TENNIS_GS.toString())||a.toString().startsWith(T.TENNIS_MASTERS.toString())){var _=r.getTime(),i=e.getTime();o=Math.abs(i-_)<=Number(60*t*1e3)}else o=r.toUTCString()==e.toUTCString();return o},C=function(e,r,a,t,o){var _=new Map;return e.forEach((function(e){var i,n,A=r.odds.filter((function(r){return r.sports_book_name.toLowerCase()==e.toLowerCase()})),s=t.get(a.homeTeam.toLowerCase()),E=t.get(a.awayTeam.toLowerCase()),N=0;null!=(i=null==s?A.find((function(e){var r=t.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==a.homeTeam.toLowerCase():r==a.homeTeam.toLowerCase()})):A.find((function(e){var r=t.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==s:r==s})))&&(N=i.price);var l=0;null!=(n=null==E?A.find((function(e){var r=t.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==a.awayTeam.toLowerCase():r==a.awayTeam.toLowerCase()})):A.find((function(e){var r=t.get(e.name.toLowerCase());return null==r?e.name.toLowerCase()==E:r==E})))&&(l=n.price);var I=0;if(o){var S=A.find((function(e){return"draw"==e.name.toLowerCase()}));null!=S&&(I=S.price)}_.set(e.toLowerCase(),{homeOdds:N,awayOdds:l,drawOdds:I})})),_},b=((A={})[T.NCAAF]={sport:S,id:T.NCAAF,isDrawAvailable:!1},A[T.NFL]={sport:S,id:T.NFL,isDrawAvailable:!1},A[T.MLB]={sport:u,id:T.MLB,isDrawAvailable:!1},A[T.NBA]={sport:d,id:T.NBA,isDrawAvailable:!1},A[T.NCAAB]={sport:d,id:T.NCAAB,isDrawAvailable:!1},A[T.NHL]={sport:L,id:T.NHL,isDrawAvailable:!1},A[T.UFC]={sport:c,id:T.UFC,isDrawAvailable:!1},A[T.WNBA]={sport:d,id:T.WNBA,isDrawAvailable:!1},A[T.MLS]={sport:I,id:T.MLS,isDrawAvailable:!0},A[T.EPL]={sport:I,id:T.EPL,isDrawAvailable:!0},A[T.LIGUE_ONE]={sport:I,id:T.LIGUE_ONE,isDrawAvailable:!0},A[T.BUNDESLIGA]={sport:I,id:T.BUNDESLIGA,isDrawAvailable:!0},A[T.LA_LIGA]={sport:I,id:T.LA_LIGA,isDrawAvailable:!0},A[T.SERIE_A]={sport:I,id:T.SERIE_A,isDrawAvailable:!0},A[T.UEFA_CL]={sport:I,id:T.UEFA_CL,isDrawAvailable:!0},A[T.UEFA_EL]={sport:I,id:T.UEFA_EL,isDrawAvailable:!0,priority:104},A[T.FIFA_WC]={sport:I,id:T.FIFA_WC,isDrawAvailable:!0},A[T.J1_LEAGUE]={sport:I,id:T.J1_LEAGUE,isDrawAvailable:!0},A[T.IPL]={sport:O,id:T.IPL,isDrawAvailable:!1},A[T.T20_BLAST]={sport:O,id:T.T20_BLAST,isDrawAvailable:!1},A[T.IIHF_WORLD_CHAMPIONSHIP]={sport:L,id:T.IIHF_WORLD_CHAMPIONSHIP,isDrawAvailable:!0},A[T.COPA_AMERICA]={sport:I,id:T.COPA_AMERICA,isDrawAvailable:!0},A[T.COPA_LIBERTADORES]={sport:I,id:T.COPA_LIBERTADORES,isDrawAvailable:!0},A[T.UEFA_EURO]={sport:I,id:T.UEFA_EURO,isDrawAvailable:!0},A[T.EREDIVISIE]={sport:I,id:T.EREDIVISIE,isDrawAvailable:!0},A[T.PRIMEIRA_LIGA]={sport:I,id:T.PRIMEIRA_LIGA,isDrawAvailable:!0},A[T.FIFA_WC_WOMEN]={sport:I,id:T.FIFA_WC_WOMEN,priority:112},A[T.ENGLAND_CUP]={sport:I,id:T.ENGLAND_CUP,isDrawAvailable:!0},A[T.FRANCE_CUP]={sport:I,isDrawAvailable:!0},A[T.SPAIN_CUP]={sport:I,id:T.SPAIN_CUP,isDrawAvailable:!0},A[T.ITALY_CUP]={sport:I,isDrawAvailable:!0},A[T.TENNIS_GS]={sport:m,id:T.TENNIS_GS,isDrawAvailable:!1},A[T.TENNIS_MASTERS]={sport:m,id:T.TENNIS_MASTERS,isDrawAvailable:!1},A[T.GERMANY_CUP]={sport:I,id:T.GERMANY_CUP,isDrawAvailable:!0},A[T.BRAZIL_1]={sport:I,id:T.BRAZIL_1,isDrawAvailable:!0},A[T.UEFA_EURO_U21]={sport:I,id:T.UEFA_EURO_U21,isDrawAvailable:!0},A[T.FIFA_WORLD_CUP_U20]={sport:I,id:T.FIFA_WORLD_CUP_U20,isDrawAvailable:!0},A[T.EUROLEAGUE]={sport:d,id:T.EUROLEAGUE,isDrawAvailable:!1},A[T.FIBA_WORLD_CUP]={sport:d,id:T.FIBA_WORLD_CUP,isDrawAvailable:!1},A[T.FORMULA1]={sport:w,id:T.FORMULA1,isDrawAvailable:!1},A[T.MOTOGP]={sport:w,id:T.MOTOGP,isDrawAvailable:!1},A[T.SAUDI_PROFESSIONAL_LEAGUE]={sport:I,id:T.SAUDI_PROFESSIONAL_LEAGUE,isDrawAvailable:!0},A[T.BOXING]={sport:c,id:T.BOXING,isDrawAvailable:!1},A[T.UEFA_NATIONS_LEAGUE]={sport:I,id:T.UEFA_NATIONS_LEAGUE,isDrawAvailable:!0},A[T.CONCACAF_NATIONS_LEAGUE]={sport:I,id:T.CONCACAF_NATIONS_LEAGUE,isDrawAvailable:!0},A[T.CSGO]={sport:P,id:T.CSGO,isDrawAvailable:!1},A[T.DOTA2]={sport:P,id:T.DOTA2,isDrawAvailable:!1},A[T.SUMMER_OLYMPICS_QUALIFICATION]={sport:d,id:T.SUMMER_OLYMPICS_QUALIFICATION,isDrawAvailable:!1},A[T.LOL]={sport:P,id:T.LOL,isDrawAvailable:!1},A[T.CONMEBOL_WC_QUALIFICATIONS]={sport:I,id:T.CONMEBOL_WC_QUALIFICATIONS,isDrawAvailable:!0},A[T.UEFA_CONFERENCE_LEAGUE]={sport:I,id:T.UEFA_CONFERENCE_LEAGUE,isDrawAvailable:!0},A[T.NON_TITLE_BOXING]={sport:c,isDrawAvailable:!1},A[T.UEFA_CHAMPIONS_LEAGUE_QUALIFICATION]={sport:I,id:T.UEFA_CHAMPIONS_LEAGUE_QUALIFICATION,isDrawAvailable:!0},A[T.UEFA_EUROPA_LEAGUE_QUALIFICATION]={sport:I,id:T.UEFA_EUROPA_LEAGUE_QUALIFICATION,isDrawAvailable:!0},A[T.UEFA_CONFERENCE_LEAGUE_QUALIFICATION]={sport:I,isDrawAvailable:!0},A[T.GOLF_H2H]={sport:M,id:T.GOLF_H2H,isDrawAvailable:!1},A[T.GOLF_WINNER]={sport:M,id:T.GOLF_WINNER,isDrawAvailable:!1},A[T.LIGA_MX]={sport:I,id:T.LIGA_MX,isDrawAvailable:!0},A),V=function(e){var r=b[e];return r?r.sport:""},R=function(e,r,a){var t,o=e.score_home_total,_=e.score_away_total,i=e.clock,n=e.period,A=e.status,s=e.home_team,E=e.away_team,N=V(r);return"completed"==A.toLowerCase()?(console.log("Blocking game ".concat(s," - ").concat(E," because it is no longer live.")),null):(N===d&&(t=U(s,E,n,a.get(d))),N===L&&(t=U(s,E,n,a.get(L))),N===u&&(t=U(s,E,n,a.get(u))),N===I&&(t=v(s,E,i,n,a.get(I))),N===m&&(t=g(e,s,E,n,o,_,r)),t)},U=function(e,r,a,t){return Number(a)>=t?{allow:!1,message:"Blocking game ".concat(e," - ").concat(r," due to period: ").concat(a,". period")}:{allow:!0,message:""}},v=function(e,r,a,t,o){var _=Number(a);return!Number.isNaN(_)&&_>=o||Number.isNaN(_)&&"HALF"!=t?{allow:!1,message:"Blocking game ".concat(e," - ").concat(r," due to clock: ").concat(a,"min")}:{allow:!0,message:""}},g=function(e,r,a,t,o,_,i){var n,A,s=Number(t),E="atp"==e.league.toLowerCase();if(i==T.TENNIS_GS&&E){if(2==Number(o)||2==Number(_)){switch(s){case 3:n=Number(e.score_home_period_3),A=Number(e.score_away_period_3);break;case 4:n=Number(e.score_home_period_4),A=Number(e.score_away_period_4);break;case 5:n=Number(e.score_home_period_5),A=Number(e.score_away_period_5)}return 2==Number(o)&&n>=5||2==Number(_)&&A>=5?{allow:!1,message:"Blocking game ".concat(r," - ").concat(a," due to current result: ").concat(o," - ").concat(_," (").concat(n," - ").concat(A,")")}:{allow:!0,message:"",currentHomeGameScore:n,currentAwayGameScore:A}}return{allow:!0,message:"",currentHomeGameScore:n,currentAwayGameScore:A}}if(1==Number(o)||1==Number(_)){switch(s){case 2:n=Number(e.score_home_period_2),A=Number(e.score_away_period_2);break;case 3:n=Number(e.score_home_period_3),A=Number(e.score_away_period_3)}return 1==Number(o)&&n>=5||1==Number(_)&&A>=5?{allow:!1,message:"Blocking game ".concat(r," - ").concat(a," due to current result: ").concat(o," - ").concat(_," (").concat(n," - ").concat(A,")")}:{allow:!0,message:"",currentHomeGameScore:n,currentAwayGameScore:A}}return{allow:!0,message:"",currentHomeGameScore:n,currentAwayGameScore:A}},F=function(e,r,a){if(e.some((function(e){return 0===e})))return e;var t=e.reduce((function(e,r){return e+r}),0);if(t<=1)return Array(e.length).fill(0);if(0===a){if(!(r>100*(t-1)))return e;a=r}var o=1+a/100,_=o/t,i=e.map((function(e){return e*_}));if(i.some((function(e){return e>=1})))return Array(e.length).fill(0);var n=i.reduce((function(e,r){return e+r}),0);if(n<1)return Array(e.length).fill(0);var A=o/n;return i.map((function(e){return e*A}))},D=function(e,r,a,t){var o=e.find((function(e){return Number(e.typeId)===Number(a)&&Number(e.sportId)===Number(r)}));return o?{minSpread:o.minSpread?Number(o.minSpread):t,targetSpread:o.targetSpread?Number(o.targetSpread):0}:{minSpread:t,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overtime-live-trading-utils",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "",
5
5
  "main": "main.js",
6
6
  "scripts": {
@@ -81,7 +81,6 @@ export const LeagueMap: Record<number, any> = {
81
81
  sport: Sport.SOCCER,
82
82
  id: League.UEFA_EL,
83
83
  isDrawAvailable: true,
84
- priority: 104,
85
84
  },
86
85
  [League.FIFA_WC]: {
87
86
  sport: Sport.SOCCER,
@@ -136,7 +135,7 @@ export const LeagueMap: Record<number, any> = {
136
135
  [League.FIFA_WC_WOMEN]: {
137
136
  sport: Sport.SOCCER,
138
137
  id: League.FIFA_WC_WOMEN,
139
- priority: 112,
138
+ isDrawAvailable: true,
140
139
  },
141
140
  [League.ENGLAND_CUP]: {
142
141
  sport: Sport.SOCCER,
@@ -289,4 +288,33 @@ export const LeagueMap: Record<number, any> = {
289
288
  id: League.LIGA_MX,
290
289
  isDrawAvailable: true,
291
290
  },
291
+ [League.SUMMER_OLYMPICS_SOCCER_WOMEN]: {
292
+ sport: Sport.SOCCER,
293
+ id: League.SUMMER_OLYMPICS_SOCCER_WOMEN,
294
+ isDrawAvailable: true,
295
+ },
296
+ [League.SUMMER_OLYMPICS_SOCCER]: {
297
+ sport: Sport.SOCCER,
298
+ id: League.SUMMER_OLYMPICS_SOCCER,
299
+ isDrawAvailable: true,
300
+ },
301
+ [League.SUMMER_OLYMPICS_BASKETBALL]: {
302
+ sport: Sport.BASKETBALL,
303
+ id: League.SUMMER_OLYMPICS_BASKETBALL,
304
+ isDrawAvailable: false,
305
+ },
306
+ [League.SUMMER_OLYMPICS_BASKETBALL_WOMEN]: {
307
+ sport: Sport.BASKETBALL,
308
+ id: League.SUMMER_OLYMPICS_BASKETBALL_WOMEN,
309
+ isDrawAvailable: false,
310
+ },
311
+ [League.SUMMER_OLYMPICS_VOLEYBALL_WOMEN]: {
312
+ sport: Sport.VOLLEYBALL,
313
+ id: League.SUMMER_OLYMPICS_VOLEYBALL_WOMEN,
314
+ isDrawAvailable: false,
315
+ },
316
+ [League.SUMMER_OLYMPICS_VOLEYBALL]: {
317
+ sport: Sport.VOLLEYBALL,
318
+ isDrawAvailable: false,
319
+ },
292
320
  };
@@ -7,6 +7,10 @@ export const Sport = {
7
7
  FIGHTING: 'Fighting',
8
8
  TENNIS: 'Tennis',
9
9
  ESPORTS: 'eSports',
10
+ RUGBY: 'Rugby',
11
+ VOLLEYBALL: 'Volleyball',
12
+ HANDBALL: 'Handball',
13
+ WATERPOLO: 'Waterpolo',
10
14
  CRICKET: 'Cricket',
11
15
  MOTOSPORT: 'Motosport',
12
16
  GOLF: 'Golf',
@@ -40,6 +44,8 @@ export const League = {
40
44
  UEFA_EURO: 50,
41
45
  EREDIVISIE: 57,
42
46
  PRIMEIRA_LIGA: 61,
47
+ SUMMER_OLYMPICS_SOCCER_WOMEN: 65,
48
+ SUMMER_OLYMPICS_SOCCER: 66,
43
49
  FIFA_WC_WOMEN: 76,
44
50
  ENGLAND_CUP: 132,
45
51
  FRANCE_CUP: 134,
@@ -52,21 +58,35 @@ export const League = {
52
58
  BRAZIL_1: 268,
53
59
  UEFA_EURO_U21: 288,
54
60
  FIFA_WORLD_CUP_U20: 296,
61
+ SUMMER_OLYMPICS_HANDBALL_WOMEN: 380,
62
+ SUMMER_OLYMPICS_HANDBALL: 381,
55
63
  EUROLEAGUE: 399,
64
+ SUMMER_OLYMPICS_BASKETBALL: 406,
65
+ SUMMER_OLYMPICS_BASKETBALL_WOMEN: 407,
56
66
  FIBA_WORLD_CUP: 409,
57
67
  FORMULA1: 445,
58
68
  MOTOGP: 497,
59
69
  SAUDI_PROFESSIONAL_LEAGUE: 536,
70
+ SUMMER_OLYMPICS_WATERPOLO: 8881,
71
+ SUMMER_OLYMPICS_VOLEYBALL_WOMEN: 8893,
72
+ SUMMER_OLYMPICS_VOLEYBALL: 8894,
60
73
  BOXING: 9196,
74
+ SUMMER_OLYMPICS_RUGBY: 9578,
75
+ SUMMER_OLYMPICS_RUGBY_WOMEN: 9588,
61
76
  UEFA_NATIONS_LEAGUE: 9806,
62
77
  CONCACAF_NATIONS_LEAGUE: 9821,
63
78
  CSGO: 9977,
64
79
  DOTA2: 9983,
80
+ SUMMER_OLYMPICS_BASKETBALL_3X3: 10071,
81
+ SUMMER_OLYMPICS_BASKETBALL_3X3_WOMEN: 10072,
65
82
  SUMMER_OLYMPICS_QUALIFICATION: 10502,
66
83
  LOL: 10138,
67
84
  CONMEBOL_WC_QUALIFICATIONS: 10199,
68
85
  UEFA_CONFERENCE_LEAGUE: 10216,
69
86
  NON_TITLE_BOXING: 10595,
87
+ UEFA_CHAMPIONS_LEAGUE_QUALIFICATION: 10611,
88
+ UEFA_EUROPA_LEAGUE_QUALIFICATION: 10613,
89
+ UEFA_CONFERENCE_LEAGUE_QUALIFICATION: 10615,
70
90
  GOLF_H2H: 100021,
71
91
  GOLF_WINNER: 100121,
72
92
  TENNIS_GRAND_SLAM_LIVE_MAPPING_V2_1: 15312,
@@ -98,9 +118,6 @@ export const League = {
98
118
  TENNIS_MASTERS_LIVE_MAPPING_V2_20: 15646,
99
119
  TENNIS_MASTERS_LIVE_MAPPING_V2_21: 15647,
100
120
  TENNIS_MASTERS_LIVE_MAPPING_V2_22: 15648,
101
- UEFA_CHAMPIONS_LEAGUE_QUALIFICATION: 10611,
102
- UEFA_EUROPA_LEAGUE_QUALIFICATION: 10613,
103
- UEFA_CONFERENCE_LEAGUE_QUALIFICATION: 10615,
104
121
  };
105
122
 
106
123
  export const LEAGUES_NO_FORMAL_HOME_AWAY = [
@@ -61,14 +61,28 @@ export const checkGameContraints = (opticOddsScoresApiResponse, marketLeague, co
61
61
  }
62
62
 
63
63
  if (marketSport === Sport.TENNIS) {
64
- allowedObject = allowTennisMatch(
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
73
+ );
74
+ }
75
+
76
+ if (marketSport === Sport.VOLLEYBALL) {
77
+ allowedObject = allowGameSportWithResultConstraint(
78
+ opticOddsScoresApiResponse,
79
+ homeTeam,
80
+ awayTeam,
81
+ currentPeriod,
82
+ currentScoreHome,
83
+ currentScoreAway,
84
+ marketLeague,
85
+ marketSport
72
86
  );
73
87
  }
74
88
 
@@ -97,101 +111,87 @@ export const allowSoccerGame = (homeTeam, awayTeam, currentClock, currentPeriod,
97
111
  return { allow: true, message: '' };
98
112
  };
99
113
 
100
- export const allowTennisMatch = (
114
+ export const allowGameSportWithResultConstraint = (
101
115
  opticOddsScoresApiResponse,
102
116
  homeTeam,
103
117
  awayTeam,
104
118
  currentPeriod,
105
119
  currentScoreHome,
106
120
  currentScoreAway,
107
- marketLeague
121
+ marketLeague,
122
+ marketSport
108
123
  ) => {
109
124
  const setInProgress = Number(currentPeriod);
110
- let currentHomeGameScore;
111
- let currentAwayGameScore;
112
-
125
+ const currentResultInSet = fetchResultInCurrentSet(setInProgress, opticOddsScoresApiResponse);
113
126
  const atpGrandSlamMatch = opticOddsScoresApiResponse.league.toLowerCase() == 'atp';
114
- if (marketLeague == League.TENNIS_GS && atpGrandSlamMatch) {
115
- if (Number(currentScoreHome) == 2 || Number(currentScoreAway) == 2) {
116
- switch (setInProgress) {
117
- case 3:
118
- currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_3);
119
- currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_3);
120
- break;
121
- case 4:
122
- currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_4);
123
- currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_4);
124
- break;
125
- case 5:
126
- currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_5);
127
- currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_5);
128
- break;
129
- }
130
- if (Number(currentScoreHome) == 2 && currentHomeGameScore >= 5) {
131
- return {
132
- allow: false,
133
- message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentScoreHome} - ${currentScoreAway} (${currentHomeGameScore} - ${currentAwayGameScore})`,
134
- };
135
- }
136
-
137
- if (Number(currentScoreAway) == 2 && currentAwayGameScore >= 5) {
138
- return {
139
- allow: false,
140
- message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentScoreHome} - ${currentScoreAway} (${currentHomeGameScore} - ${currentAwayGameScore})`,
141
- };
142
- }
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) {
143
172
  return {
144
- allow: true,
145
- message: '',
146
- currentHomeGameScore: currentHomeGameScore,
147
- currentAwayGameScore: currentAwayGameScore,
173
+ allow: false,
174
+ message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentSetsWon.home} - ${currentSetsWon.away} (${currentResultInSet.home} - ${currentResultInSet.away})`,
148
175
  };
149
176
  }
150
- // RETURN TRUE IF NO PLAYER HAS WON 2 SETS
151
- return {
152
- allow: true,
153
- message: '',
154
- currentHomeGameScore: currentHomeGameScore,
155
- currentAwayGameScore: currentAwayGameScore,
156
- };
157
- } else {
158
- if (Number(currentScoreHome) == 1 || Number(currentScoreAway) == 1) {
159
- switch (setInProgress) {
160
- case 2:
161
- currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_2);
162
- currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_2);
163
- break;
164
- case 3:
165
- currentHomeGameScore = Number(opticOddsScoresApiResponse.score_home_period_3);
166
- currentAwayGameScore = Number(opticOddsScoresApiResponse.score_away_period_3);
167
- break;
168
- }
169
- if (Number(currentScoreHome) == 1 && currentHomeGameScore >= 5) {
170
- return {
171
- allow: false,
172
- message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentScoreHome} - ${currentScoreAway} (${currentHomeGameScore} - ${currentAwayGameScore})`,
173
- };
174
- }
175
-
176
- if (Number(currentScoreAway) == 1 && currentAwayGameScore >= 5) {
177
- return {
178
- allow: false,
179
- message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentScoreHome} - ${currentScoreAway} (${currentHomeGameScore} - ${currentAwayGameScore})`,
180
- };
181
- }
177
+
178
+ if (Number(currentSetsWon.away) == 2 && currentResultInSet.away >= resultLimit) {
182
179
  return {
183
- allow: true,
184
- message: '',
185
- currentHomeGameScore: currentHomeGameScore,
186
- currentAwayGameScore: currentAwayGameScore,
180
+ allow: false,
181
+ message: `Blocking game ${homeTeam} - ${awayTeam} due to current result: ${currentSetsWon.home} - ${currentSetsWon.away} (${currentResultInSet.home} - ${currentResultInSet.away})`,
187
182
  };
188
183
  }
189
- // RETURN TRUE IF NO PLAYER HAS STILL WON A SET
190
184
  return {
191
185
  allow: true,
192
186
  message: '',
193
- currentHomeGameScore: currentHomeGameScore,
194
- currentAwayGameScore: currentAwayGameScore,
187
+ currentHomeGameScore: currentResultInSet.home,
188
+ currentAwayGameScore: currentResultInSet.away,
195
189
  };
196
190
  }
191
+ return {
192
+ allow: true,
193
+ message: '',
194
+ currentHomeGameScore: currentResultInSet.home,
195
+ currentAwayGameScore: currentResultInSet.away,
196
+ };
197
197
  };