@betorigami/game-calculations 0.0.0-sha-54481c8-20251028042938

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/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ var B;((a)=>{a.DICE="DICE";a.MINES="MINES";a.KENO="KENO";a.LIMBO="LIMBO";a.ADVANCED_DICE="ADVANCED_DICE";a.BACCARAT="BACCARAT";a.DIAMONDS="DIAMONDS";a.PLINKO="PLINKO";a.ROULETTE="ROULETTE";a.WHEEL="WHEEL"})(B||={});class u{gameId;constructor(t){this.gameId=t}getGameResult(t){return this.determineGameResult(t)}}import{Big as h}from"big.js";var z=(t,e)=>e>=t.lower&&e<=t.upper,q=(t)=>t.upper-t.lower+1,G=(t,e)=>e>t.lower&&e<t.upper,I=(t)=>t.upper-t.lower-1,E={min:0,max:1e4,effectiveRange:10001};class F extends u{constructor(){super("ADVANCED_DICE")}determineGameResult({generator:t,edge:e,gameInputs:r}){let i=t.getRandomInt(E),n=i.value;return{isFinished:!0,payoutMultiplier:(()=>{switch(r.mode){case"roll-between":return this.calculateRollBetweenPayoutMultiplier(r.bounds,n,e);case"roll-outside":return this.calculateRollOutsidePayoutMultiplier(r.bounds,n,e);case"roll-between-two":return this.calculateRollBetweenTwoPayoutMultiplier(r.firstBounds,r.secondBounds,n,e)}})(),outputs:{},randomValues:i}}calculateRollBetweenPayoutMultiplier(t,e,r){if(!G(t,e))return h(0);let i=I(t),n=h(i).div(E.effectiveRange).mul(100);return h(100-r).div(n)}calculateRollOutsidePayoutMultiplier(t,e,r){if(z(t,e))return h(0);let i=E.effectiveRange-q(t),n=h(i).div(E.effectiveRange).mul(100);return h(100-r).div(n)}calculateRollBetweenTwoPayoutMultiplier(t,e,r,i){if(!G(t,r)&&!G(e,r))return h(0);let n=I(t)+I(e),o=h(n).div(E.effectiveRange).mul(100);return h(100-i).div(o)}}import v from"big.js";var j=["Clubs","Diamonds","Hearts","Spades"],$=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"],Y;((i)=>{i.PLAYER_WIN="PLAYER_WIN";i.TIE="TIE";i.BANKER_WIN="BANKER_WIN"})(Y||={});class J extends u{constructor(){super("BACCARAT")}determineGameResult({generator:t,gameInputs:e,edge:r}){if(r!==1)throw new Error("Baccarat is only available at 1% edge.");this.validateGameInputs(e);let i=t.getRandomIntsWithReplacement({min:0,max:51,count:6}),n=i.values,o=n.slice(0,3),s=n.slice(3,6),d=[],m=0;for(let c of o.slice(0,2)){let p=this.mapRandomValueToCard(c),y=this.mapRandomValueToCardValue(c);d.push(p),m=(m+y)%10}let R=[],a=0;for(let c of s.slice(0,2)){let p=this.mapRandomValueToCard(c),y=this.mapRandomValueToCardValue(c);R.push(p),a=(a+y)%10}if(!this.isNaturalWin(m,a)){let c=this.shouldDrawThirdPlayerCard(m),p=null;if(c)p=this.mapRandomValueToCardValue(o[2]),d.push(this.mapRandomValueToCard(o[2])),m=(m+p)%10;if(this.shouldDrawThirdBankerCard(a,p))R.push(this.mapRandomValueToCard(s[2])),a=(a+this.mapRandomValueToCardValue(s[2]))%10}let f;if(m===a)f="TIE";else f=m>a?"PLAYER_WIN":"BANKER_WIN";let S=new v(0).add(e.playerBets.reduce((c,p)=>c.add(p.amount),new v(0))).add(e.tieBets.reduce((c,p)=>c.add(p.amount),new v(0))).add(e.bankerBets.reduce((c,p)=>c.add(p.amount),new v(0))),b=new v(0).add(e.playerBets.filter((c)=>f==="PLAYER_WIN").reduce((c,p)=>c.add(p.amount.mul(2)),new v(0))).add(e.tieBets.filter((c)=>f==="TIE").reduce((c,p)=>c.add(p.amount.mul(8)),new v(0))).add(e.bankerBets.filter((c)=>f==="BANKER_WIN").reduce((c,p)=>c.add(p.amount.mul(1.95)),new v(0)));return{isFinished:!0,payoutMultiplier:S.gt(0)?b.div(S):new v(0),outputs:{playerCards:d,playerHandValue:m,bankerCards:R,bankerHandValue:a,gameOutcome:f},randomValues:i}}validateGameInputs(t){if(t.playerBets.length===0&&t.tieBets.length===0&&t.bankerBets.length===0)throw new Error("Must place at least a single bet.");if(!t.playerBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid player bet.");if(!t.tieBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid tie bet.");if(!t.bankerBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid banker bet.")}mapRandomValueToCard(t){let e=j[Math.floor(t/13)],r=$[t%13];return{suit:e,rank:r}}isNaturalWin(t,e){let r=[8,9];return r.includes(t)||r.includes(e)}mapRandomValueToCardValue(t){let e=t%13;if(e===0)return 1;if(e>=10)return 10;return e+1}shouldDrawThirdPlayerCard(t){return t<=5}shouldDrawThirdBankerCard(t,e){if(e===null)return t<=5;if(t<=2)return!0;if(t===3)return e!==8;if(t===4)return[2,3,4,5,6,7].includes(e);if(t===5)return[4,5,6,7].includes(e);if(t===6)return[6,7].includes(e);return!1}}import Q from"big.js";var X;((s)=>{s.PAIR="PAIR";s.TWO_PAIR="TWO_PAIR";s.THREE_OF_A_KIND="THREE_OF_A_KIND";s.FULL_HOUSE="FULL_HOUSE";s.FOUR_OF_A_KIND="FOUR_OF_A_KIND";s.FIVE_OF_A_KIND="FIVE_OF_A_KIND"})(X||={});var Z={PAIR:0.1,TWO_PAIR:2,THREE_OF_A_KIND:3,FULL_HOUSE:4,FOUR_OF_A_KIND:4.8,FIVE_OF_A_KIND:50},ee={2:"PAIR",3:"THREE_OF_A_KIND",4:"FOUR_OF_A_KIND",5:"FIVE_OF_A_KIND"};class te extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??Z}constructor(t){super("DIAMONDS");this.multiplierOverrides=t}determineGameResult({generator:t,edge:e}){let r=t.getRandomIntsWithReplacement({min:0,max:6,count:5});if(e!==1&&!this.multiplierOverrides)throw new Error("Use multiplier overrides if an edge of 1% is not desirable");let i=r.values,n=this.calculatePayoutMultiplier(i);return{isFinished:!0,payoutMultiplier:Q(n),outputs:{},randomValues:r}}calculatePayoutMultiplier(t){let e=new Map;for(let n of t){let o=e.get(n)||0;e.set(n,o+1)}let r=[...e.values()].filter((n)=>n>1),i=this.classifyResult(r);return i===null?0:this.multipliers[i]}classifyResult(t){if(t.length>2)throw new Error(`Unexpected number of repeats ${t.length}`);let[e,r]=t;if(e===void 0)return null;if(r===void 0){let i=ee[e];if(i===void 0)throw new Error(`Unexpected single diamond repeat count: ${e}`);return i}return e===3||r===3?"FULL_HOUSE":"TWO_PAIR"}}import A from"big.js";var re;((r)=>{r.ABOVE="ABOVE";r.BELOW="BELOW"})(re||={});class ie extends u{constructor(){super("DICE")}determineGameResult({generator:t,edge:e,gameInputs:r}){let i=t.getRandomInt({min:0,max:1e4}),n=i.min,d=i.max-n+1-1,m=r.direction==="ABOVE"?d-r.selectedValue:r.selectedValue,R=new A(m).div(d).mul(100);return{isFinished:!0,payoutMultiplier:(r.direction==="ABOVE"?i.value>r.selectedValue:i.value<r.selectedValue)?new A(100-e).div(R):new A(0),outputs:{},randomValues:i}}}import T from"big.js";var ne;((n)=>{n.CLASSIC="CLASSIC";n.LOW_RISK="LOW_RISK";n.MEDIUM_RISK="MEDIUM_RISK";n.HIGH_RISK="HIGH_RISK"})(ne||={});var oe={[1]:{["CLASSIC"]:[0,3.96],["LOW_RISK"]:[0.7,1.85],["MEDIUM_RISK"]:[0.4,2.75],["HIGH_RISK"]:[0,3.96]},[2]:{["CLASSIC"]:[0,1.9,4.5],["LOW_RISK"]:[0,2,3.8],["MEDIUM_RISK"]:[0,1.8,5.1],["HIGH_RISK"]:[0,0,17.1]},[3]:{["CLASSIC"]:[0,1,3.1,10.4],["LOW_RISK"]:[0,1.1,1.38,26],["MEDIUM_RISK"]:[0,0,2.8,50],["HIGH_RISK"]:[0,0,0,81.5]},[4]:{["CLASSIC"]:[0,0.8,1.8,5,22.5],["LOW_RISK"]:[0,0,2.2,7.9,90],["MEDIUM_RISK"]:[0,0,1.7,10,100],["HIGH_RISK"]:[0,0,0,10,259]},[5]:{["CLASSIC"]:[0,0.25,1.4,4.1,16.5,36],["LOW_RISK"]:[0,0,1.5,4.2,13,300],["MEDIUM_RISK"]:[0,0,1.4,4,14,390],["HIGH_RISK"]:[0,0,0,4.5,48,450]},[6]:{["CLASSIC"]:[0,0,1,3.68,7,16.5,40],["LOW_RISK"]:[0,0,1.1,2,6.2,100,700],["MEDIUM_RISK"]:[0,0,0,3,9,180,710],["HIGH_RISK"]:[0,0,0,0,11,350,710]},[7]:{["CLASSIC"]:[0,0,0.47,3,4.5,14,31,60],["LOW_RISK"]:[0,0,1.1,1.6,3.5,15,225,700],["MEDIUM_RISK"]:[0,0,0,2,7,30,400,800],["HIGH_RISK"]:[0,0,0,0,7,90,400,800]},[8]:{["CLASSIC"]:[0,0,0,2.2,4,13,22,55,70],["LOW_RISK"]:[0,0,1.1,1.5,2,5.5,39,100,800],["MEDIUM_RISK"]:[0,0,0,2,4,11,67,400,900],["HIGH_RISK"]:[0,0,0,0,5,20,270,600,900]},[9]:{["CLASSIC"]:[0,0,0,1.55,3,8,15,44,60,85],["LOW_RISK"]:[0,0,1.1,1.3,1.7,2.5,7.5,50,250,1000],["MEDIUM_RISK"]:[0,0,0,2,2.5,5,15,100,500,1000],["HIGH_RISK"]:[0,0,0,0,4,11,56,500,800,1000]},[10]:{["CLASSIC"]:[0,0,0,1.4,2.25,4.5,8,17,50,80,100],["LOW_RISK"]:[0,0,1.1,1.2,1.3,1.8,3.5,13,50,250,1000],["MEDIUM_RISK"]:[0,0,0,1.6,2,4,7,26,100,500,1000],["HIGH_RISK"]:[0,0,0,0,3.5,8,13,63,500,800,1000]}};class le extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??oe}constructor(t){super("KENO");this.multiplierOverrides=t;if(t)this.validateMultiplierOverrides(t)}determineGameResult({generator:t,edge:e,gameInputs:r}){if(e!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(r.selectedNumbers.length===0)throw new Error("No numbers selected");if(r.selectedNumbers.length>10)throw new Error("Maximum of 10 numbers can be selected");for(let s of r.selectedNumbers){if(s%1!==0)throw new Error("Only integers can be selected");if(s<0||s>39)throw new Error("Invalid number selected")}let i=t.getUniqueRandomInts({min:0,max:39,count:10}),n=r.selectedNumbers.filter((s)=>i.values.includes(s));return{isFinished:!0,payoutMultiplier:n.length>0?new T(this.multipliers[r.selectedNumbers.length][r.riskLevel][n.length]??0):new T(0),outputs:{},randomValues:i}}validateMultiplierOverrides(t){for(let[e,r]of Object.entries(t)){let i=Number(e);for(let[n,o]of Object.entries(r))if(o.length!==i+1)throw new Error(`Invalid count of multipliers for tiles ${i} and risk level ${n}. Expected ${i+1}, but got ${o.length}`)}}}import w from"big.js";var W=(t,e)=>{return t.gt(e)?t:e};var P=(t,e)=>{return t.lt(e)?t:e};class se extends u{constructor(){super("LIMBO")}determineGameResult({generator:t,edge:e,gameInputs:r}){let i=t.getRandomInt({min:1,max:4294967295}),n=i.max,o=new w(16777216),s=new w(1),d=new w(1e6),m=i.value,R=new w(m-1).div(n),a=(100-e)/100,f=o.div(R.mul(o).plus(1)).mul(a),S=W(s,P(f,d));return{isFinished:!0,payoutMultiplier:S.gte(r.targetMultiplier)?new w(r.targetMultiplier):new w(0),outputs:{randomMultiplier:S},randomValues:i}}}import L from"big.js";var M=(t,e)=>{if(e<0||t<0||e>t)throw new Error("Invalid input: ensure 0 ≤ r ≤ n and n ≥ 0.");if(e>t-e)e=t-e;let r=1;for(let i=1;i<=e;i++)r=r*(t-i+1)/i;return r};class ae extends u{constructor(){super("MINES")}determineGameResult({generator:t,edge:e,gameInputs:r}){if(r.minesCount<=0||r.minesCount>24)throw new Error("Must select between 1 and 24 mines.");if(r.selectedTiles.length>25-r.minesCount)throw new Error("Cannot select more tiles than available safe tiles (total tiles minus mines).");let s=t.getUniqueRandomInts({min:1,max:25,count:r.minesCount}),d=s.values.some((b)=>r.selectedTiles.includes(b)),m=r.hasCashedOut||d,R=(100-e)/100,a=new L(M(25-r.minesCount,r.selectedTiles.length)).div(new L(M(25,r.selectedTiles.length))),S=r.hasCashedOut&&!d?new L(R).div(a):new L(0);return{isFinished:m,payoutMultiplier:S,outputs:{},randomValues:s}}}import{Big as ue}from"big.js";var H;((i)=>{i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})(H||={});var ce=[{rows:8,payout:{["LOW_RISK"]:[5.6,2.1,1.1,1,0.5,1,1.1,2.1,5.6],["MEDIUM_RISK"]:[13,3,1.3,0.7,0.4,0.7,1.3,3,13],["HIGH_RISK"]:[29,4,1.5,0.3,0.2,0.3,1.5,4,29]}},{rows:9,payout:{["LOW_RISK"]:[5.6,2,1.6,1,0.7,0.7,1,1.6,2,5.6],["MEDIUM_RISK"]:[18,4,1.7,0.9,0.5,0.5,0.9,1.7,4,18],["HIGH_RISK"]:[43,7,2,0.6,0.2,0.2,0.6,2,7,43]}},{rows:10,payout:{["LOW_RISK"]:[8.9,3,1.4,1.1,1,0.5,1,1.1,1.4,3,8.9],["MEDIUM_RISK"]:[22,5,2,1.4,0.6,0.4,0.6,1.4,2,5,22],["HIGH_RISK"]:[76,10,3,0.9,0.3,0.2,0.3,0.9,3,10,76]}},{rows:11,payout:{["LOW_RISK"]:[8.4,3,1.9,1.3,1,0.7,0.7,1,1.3,1.9,3,8.4],["MEDIUM_RISK"]:[24,6,3,1.8,0.7,0.5,0.5,0.7,1.8,3,6,24],["HIGH_RISK"]:[120,14,5.2,1.4,0.4,0.2,0.2,0.4,1.4,5.2,14,120]}},{rows:12,payout:{["LOW_RISK"]:[10,3,1.6,1.4,1.1,1,0.5,1,1.1,1.4,1.6,3,10],["MEDIUM_RISK"]:[33,11,4,2,1.1,0.6,0.3,0.6,1.1,2,4,11,33],["HIGH_RISK"]:[170,24,8.1,2,0.7,0.2,0.2,0.2,0.7,2,8.1,24,170]}},{rows:13,payout:{["LOW_RISK"]:[8.1,4,3,1.9,1.2,0.9,0.7,0.7,0.9,1.2,1.9,3,4,8.1],["MEDIUM_RISK"]:[43,13,6,3,1.3,0.7,0.4,0.4,0.7,1.3,3,6,13,43],["HIGH_RISK"]:[260,37,11,4,1,0.2,0.2,0.2,0.2,1,4,11,37,260]}},{rows:14,payout:{["LOW_RISK"]:[7.1,4,1.9,1.4,1.3,1.1,1,0.5,1,1.1,1.3,1.4,1.9,4,7.1],["MEDIUM_RISK"]:[58,15,7,4,1.9,1,0.5,0.2,0.5,1,1.9,4,7,15,58],["HIGH_RISK"]:[420,56,18,5,1.9,0.3,0.2,0.2,0.2,0.3,1.9,5,18,56,420]}},{rows:15,payout:{["LOW_RISK"]:[15,8,3,2,1.5,1.1,1,0.7,0.7,1,1.1,1.5,2,3,8,15],["MEDIUM_RISK"]:[88,18,11,5,3,1.3,0.5,0.3,0.3,0.5,1.3,3,5,11,18,88],["HIGH_RISK"]:[620,83,27,8,3,0.5,0.2,0.2,0.2,0.2,0.5,3,8,27,83,620]}},{rows:16,payout:{["LOW_RISK"]:[16,9,2,1.4,1.4,1.2,1.1,1,0.5,1,1.1,1.2,1.4,1.4,2,9,16],["MEDIUM_RISK"]:[110,41,10,5,3,1.5,1,0.5,0.3,0.5,1,1.5,3,5,10,41,110],["HIGH_RISK"]:[1000,130,26,9,4,2,0.2,0.2,0.2,0.2,0.2,2,4,9,26,130,1000]}}];class de extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??ce}constructor(t){super("PLINKO");this.multiplierOverrides=t;if(t)this.validateMultiplierOverrides(t)}determineGameResult({generator:t,gameInputs:e,edge:r}){if(r!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(e.numberOfRows%1>0)throw new Error("Number of rows must be an integer");if(e.numberOfRows<8||e.numberOfRows>16)throw new Error("Number of rows must be between 8 and 16");let i=t.getRandomIntsWithReplacement({min:0,max:1,count:e.numberOfRows}),o=i.values.reduce((d,m)=>d+m,0);return{isFinished:!0,payoutMultiplier:new ue(this.multipliers.find((d)=>d.rows===e.numberOfRows)?.payout[e.riskLevel][o]??0),outputs:{},randomValues:i}}validateMultiplierOverrides(t){for(let e of Array.from({length:9},(r,i)=>i+8)){if(!t.some((i)=>i.rows===e))throw new Error(`Multiplier overrides for ${e} rows is missing.`);let r=Object.values(H);for(let i of r){let n=t.find((o)=>o.rows===e&&o.payout[i]);if(!n)throw new Error(`Multiplier overrides for ${e} rows and ${i} risk level is missing.`);if(n.payout[i].length!==e+1)throw new Error(`Multiplier overrides for ${e} rows and ${i} risk level has an invalid length.`)}}}}import{Big as l}from"big.js";var g=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],pe=[37,...g],me=[[0,1],[0,2],[0,3],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],Be=[[0,1],[0,3],[0,37],[1,2],[1,4],[2,3],[2,5],[3,6],[4,5],[4,7],[5,6],[5,8],[6,9],[7,8],[7,10],[8,9],[8,11],[9,12],[10,11],[10,13],[11,12],[11,14],[12,15],[13,14],[13,16],[14,15],[14,17],[15,18],[16,17],[16,19],[17,18],[17,20],[18,21],[19,20],[19,22],[20,21],[20,23],[21,24],[22,23],[22,25],[23,24],[23,26],[24,27],[25,26],[25,28],[26,27],[26,29],[27,30],[28,29],[28,31],[29,30],[29,32],[30,33],[31,32],[31,34],[32,33],[32,35],[33,36],[34,35],[35,36]],fe=[[0,1,2],[0,2,3],[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],Re=[[0,1,2],[0,2,37],[1,2,3],[2,3,37],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18],[19,20,21],[22,23,24],[25,26,27],[28,29,30],[31,32,33],[34,35,36]],he=[[0,1,2,3],[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],ve=[[1,2,4,5],[2,3,5,6],[4,5,7,8],[5,6,8,9],[7,8,10,11],[8,9,11,12],[10,11,13,14],[11,12,14,15],[13,14,16,17],[14,15,17,18],[16,17,19,20],[17,18,20,21],[19,20,22,23],[20,21,23,24],[22,23,25,26],[23,24,26,27],[25,26,28,29],[26,27,29,30],[28,29,31,32],[29,30,32,33],[31,32,34,35],[32,33,35,36]],N=[0,1,2,3,37],Se=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],we=[[1,2,3,4,5,6],[4,5,6,7,8,9],[7,8,9,10,11,12],[10,11,12,13,14,15],[13,14,15,16,17,18],[16,17,18,19,20,21],[19,20,21,22,23,24],[22,23,24,25,26,27],[25,26,27,28,29,30],[28,29,30,31,32,33],[31,32,33,34,35,36]],k;((r)=>{r.EVEN="EVEN";r.ODD="ODD"})(k||={});var _;((r)=>{r.RED="RED";r.BLACK="BLACK"})(_||={});var O;((r)=>{r.LOW="LOW";r.HIGH="HIGH"})(O||={});var K;((i)=>{i.TOP="TOP";i.MIDDLE="MIDDLE";i.BOTTOM="BOTTOM"})(K||={});var C;((i)=>{i.FIRST="FIRST";i.SECOND="SECOND";i.THIRD="THIRD"})(C||={});class V extends u{constructor(){super("ROULETTE")}determineGameResult({generator:t,gameInputs:e}){this.validateGameInputs(e);let r=t.getRandomInt({min:0,max:36}),i=r.value,n=this.determineBetOutcomes(e,i),o=this.calculateTotalBetAmount(e),s=this.calculateTotalPayoutAmount(n),d=o.gt(0)?s.div(o):new l(0);return{outputs:{betOutcomes:n},payoutMultiplier:d,isFinished:!0,randomValues:r}}validateGameInputs(t){if(t.straightBets.length===0&&t.splitBets.length===0&&t.streetBets.length===0&&t.cornerBets.length===0&&t.doubleStreetBets.length===0&&t.parityBets.length===0&&t.colorBets.length===0&&t.halfBets.length===0&&t.columnBets.length===0&&t.dozenBets.length===0)throw new Error("Must place at least a single bet.");if(!t.straightBets.every((e)=>e.amount.gte(0)&&this.isValidStraight(e.value)))throw new Error("Invalid straight bet.");if(!t.splitBets.every((e)=>e.amount.gte(0)&&this.isValidSplit(e.values)))throw new Error("Invalid split bet.");if(!t.streetBets.every((e)=>e.amount.gte(0)&&this.isValidStreet(e.values)))throw new Error("Invalid street bet.");if(!t.cornerBets.every((e)=>e.amount.gte(0)&&this.isValidCorner(e.values)))throw new Error("Invalid corner bet.");if(!t.doubleStreetBets.every((e)=>e.amount.gte(0)&&this.isValidDoubleStreet(e.values)))throw new Error("Invalid double street bet.");if(!t.parityBets.every((e)=>e.amount.gte(0)&&Object.values(k).includes(e.parity)))throw new Error("Invalid parity bet.");if(!t.colorBets.every((e)=>e.amount.gte(0)&&Object.values(_).includes(e.color)))throw new Error("Invalid color bet.");if(!t.halfBets.every((e)=>e.amount.gte(0)&&Object.values(O).includes(e.half)))throw new Error("Invalid half bet.");if(!t.columnBets.every((e)=>e.amount.gte(0)&&Object.values(K).includes(e.column)))throw new Error("Invalid column bet.");if(!t.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(C).includes(e.dozen)))throw new Error("Invalid dozen bet.")}isValidStraight(t){return g.includes(t)}isValidSplit(t){if(t.length!==2)return!1;if(!t.every(this.isValidStraight))return!1;return me.some(([e,r])=>e===t[0]&&r===t[1])}isValidStreet(t){if(t.length!==3)return!1;if(!t.every(this.isValidStraight))return!1;return fe.some(([e,r,i])=>e===t[0]&&r===t[1]&&i===t[2])}isValidCorner(t){if(t.length!==4)return!1;if(!t.every(this.isValidStraight))return!1;return he.some(([e,r,i,n])=>e===t[0]&&r===t[1]&&i===t[2]&&n===t[3])}isValidDoubleStreet(t){if(t.length!==6)return!1;if(!t.every(this.isValidStraight))return!1;return Se.some(([e,r,i,n,o,s])=>e===t[0]&&r===t[1]&&i===t[2]&&n===t[3]&&o===t[4]&&s===t[5])}determineBetOutcomes(t,e){return{winningBets:{straightBets:t.straightBets.filter((r)=>r.value===e),splitBets:t.splitBets.filter((r)=>r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>r.values.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>this.isWinningDozenBet(r,e))},losingBets:{straightBets:t.straightBets.filter((r)=>r.value!==e),splitBets:t.splitBets.filter((r)=>!r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>!r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>!r.values.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>!r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>!this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>!this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>!this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>!this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>!this.isWinningDozenBet(r,e))}}}isWinningParityBet(t,e){if(e===0)return!1;let r=e%2===0?"EVEN":"ODD";return t.parity===r}isWinningColorBet(t,e){let r=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],i=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(r.includes(e)&&t.color==="RED")return!0;if(i.includes(e)&&t.color==="BLACK")return!0;return!1}isWinningHalfBet(t,e){if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(t,e){let r=[3,6,9,12,15,18,21,24,27,30,33,36],i=[2,5,8,11,14,17,20,23,26,29,32,35],n=[1,4,7,10,13,16,19,22,25,28,31,34];if(r.includes(e)&&t.column==="TOP")return!0;if(i.includes(e)&&t.column==="MIDDLE")return!0;if(n.includes(e)&&t.column==="BOTTOM")return!0;return!1}isWinningDozenBet(t,e){if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}calculateTotalBetAmount(t){return new l(0).add(t.straightBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.splitBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.streetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.cornerBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.doubleStreetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.parityBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.colorBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.halfBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.columnBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.dozenBets.reduce((e,r)=>e.plus(r.amount),new l(0)))}calculateTotalPayoutAmount(t){return new l(0).add(t.winningBets.straightBets.reduce((e,r)=>e.plus(r.amount.mul(36)),new l(0))).add(t.winningBets.splitBets.reduce((e,r)=>e.plus(r.amount.mul(18)),new l(0))).add(t.winningBets.streetBets.reduce((e,r)=>e.plus(r.amount.mul(12)),new l(0))).add(t.winningBets.cornerBets.reduce((e,r)=>e.plus(r.amount.mul(9)),new l(0))).add(t.winningBets.doubleStreetBets.reduce((e,r)=>e.plus(r.amount.mul(6)),new l(0))).add(t.winningBets.parityBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.colorBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.halfBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.columnBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0))).add(t.winningBets.dozenBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0)))}}class U extends u{constructor(){super("ROULETTE")}determineGameResult({generator:t,gameInputs:e}){this.validateGameInputs(e);let r=t.getRandomInt({min:0,max:37}),i=r.value,n=this.determineBetOutcomes(e,i),o=this.calculateTotalBetAmount(e),s=this.calculateTotalPayoutAmount(n),d=o.gt(0)?s.div(o):new l(0);return{outputs:{betOutcomes:n},payoutMultiplier:d,isFinished:!0,randomValues:r}}validateGameInputs(t){if(t.straightBets.length===0&&t.splitBets.length===0&&t.streetBets.length===0&&t.cornerBets.length===0&&t.basketBets.length===0&&t.doubleStreetBets.length===0&&t.parityBets.length===0&&t.colorBets.length===0&&t.halfBets.length===0&&t.columnBets.length===0&&t.dozenBets.length===0)throw new Error("Must place at least a single bet.");if(!t.straightBets.every((e)=>e.amount.gte(0)&&this.isValidStraight(e.value)))throw new Error("Invalid straight bet.");if(!t.splitBets.every((e)=>e.amount.gte(0)&&this.isValidSplit(e.values)))throw new Error("Invalid split bet.");if(!t.streetBets.every((e)=>e.amount.gte(0)&&this.isValidStreet(e.values)))throw new Error("Invalid street bet.");if(!t.cornerBets.every((e)=>e.amount.gte(0)&&this.isValidCorner(e.values)))throw new Error("Invalid corner bet.");if(!t.basketBets.every((e)=>e.amount.gte(0)))throw new Error("Invalid basket bet.");if(!t.doubleStreetBets.every((e)=>e.amount.gte(0)&&this.isValidDoubleStreet(e.values)))throw new Error("Invalid double street bet.");if(!t.parityBets.every((e)=>e.amount.gte(0)&&Object.values(k).includes(e.parity)))throw new Error("Invalid parity bet.");if(!t.colorBets.every((e)=>e.amount.gte(0)&&Object.values(_).includes(e.color)))throw new Error("Invalid color bet.");if(!t.halfBets.every((e)=>e.amount.gte(0)&&Object.values(O).includes(e.half)))throw new Error("Invalid half bet.");if(!t.columnBets.every((e)=>e.amount.gte(0)&&Object.values(K).includes(e.column)))throw new Error("Invalid column bet.");if(!t.dozenBets.every((e)=>e.amount.gte(0)&&Object.values(C).includes(e.dozen)))throw new Error("Invalid dozen bet.")}isValidStraight(t){return pe.includes(t)}isValidSplit(t){if(t.length!==2)return!1;if(!t.every(this.isValidStraight))return!1;return Be.some(([e,r])=>e===t[0]&&r===t[1])}isValidStreet(t){if(t.length!==3)return!1;if(!t.every(this.isValidStraight))return!1;return Re.some(([e,r,i])=>e===t[0]&&r===t[1]&&i===t[2])}isValidCorner(t){if(t.length!==4)return!1;if(!t.every(this.isValidStraight))return!1;return ve.some(([e,r,i,n])=>e===t[0]&&r===t[1]&&i===t[2]&&n===t[3])}isValidDoubleStreet(t){if(t.length!==6)return!1;if(!t.every(this.isValidStraight))return!1;return we.some(([e,r,i,n,o,s])=>e===t[0]&&r===t[1]&&i===t[2]&&n===t[3]&&o===t[4]&&s===t[5])}determineBetOutcomes(t,e){return{winningBets:{straightBets:t.straightBets.filter((r)=>r.value===e),splitBets:t.splitBets.filter((r)=>r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>r.values.some((i)=>i===e)),basketBets:t.basketBets.filter((r)=>N.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>this.isWinningDozenBet(r,e))},losingBets:{straightBets:t.straightBets.filter((r)=>r.value!==e),splitBets:t.splitBets.filter((r)=>!r.values.some((i)=>i===e)),streetBets:t.streetBets.filter((r)=>!r.values.some((i)=>i===e)),cornerBets:t.cornerBets.filter((r)=>!r.values.some((i)=>i===e)),basketBets:t.basketBets.filter((r)=>!N.some((i)=>i===e)),doubleStreetBets:t.doubleStreetBets.filter((r)=>!r.values.some((i)=>i===e)),parityBets:t.parityBets.filter((r)=>!this.isWinningParityBet(r,e)),colorBets:t.colorBets.filter((r)=>!this.isWinningColorBet(r,e)),halfBets:t.halfBets.filter((r)=>!this.isWinningHalfBet(r,e)),columnBets:t.columnBets.filter((r)=>!this.isWinningColumnBet(r,e)),dozenBets:t.dozenBets.filter((r)=>!this.isWinningDozenBet(r,e))}}}isWinningParityBet(t,e){if(e===0||e===37)return!1;let r=e%2===0?"EVEN":"ODD";return t.parity===r}isWinningColorBet(t,e){let r=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36],i=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35];if(r.includes(e)&&t.color==="RED")return!0;if(i.includes(e)&&t.color==="BLACK")return!0;return!1}isWinningHalfBet(t,e){if(e>0&&e<=18&&t.half==="LOW")return!0;if(e>18&&e<=36&&t.half==="HIGH")return!0;return!1}isWinningColumnBet(t,e){let r=[3,6,9,12,15,18,21,24,27,30,33,36],i=[2,5,8,11,14,17,20,23,26,29,32,35],n=[1,4,7,10,13,16,19,22,25,28,31,34];if(r.includes(e)&&t.column==="TOP")return!0;if(i.includes(e)&&t.column==="MIDDLE")return!0;if(n.includes(e)&&t.column==="BOTTOM")return!0;return!1}isWinningDozenBet(t,e){if(e>0&&e<=12&&t.dozen==="FIRST")return!0;if(e>12&&e<=24&&t.dozen==="SECOND")return!0;if(e>24&&e<=36&&t.dozen==="THIRD")return!0;return!1}calculateTotalBetAmount(t){return new l(0).add(t.straightBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.splitBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.streetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.cornerBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.basketBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.doubleStreetBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.parityBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.colorBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.halfBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.columnBets.reduce((e,r)=>e.plus(r.amount),new l(0))).add(t.dozenBets.reduce((e,r)=>e.plus(r.amount),new l(0)))}calculateTotalPayoutAmount(t){return new l(0).add(t.winningBets.straightBets.reduce((e,r)=>e.plus(r.amount.mul(36)),new l(0))).add(t.winningBets.splitBets.reduce((e,r)=>e.plus(r.amount.mul(18)),new l(0))).add(t.winningBets.streetBets.reduce((e,r)=>e.plus(r.amount.mul(12)),new l(0))).add(t.winningBets.cornerBets.reduce((e,r)=>e.plus(r.amount.mul(9)),new l(0))).add(t.winningBets.basketBets.reduce((e,r)=>e.plus(r.amount.mul(7)),new l(0))).add(t.winningBets.doubleStreetBets.reduce((e,r)=>e.plus(r.amount.mul(6)),new l(0))).add(t.winningBets.parityBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.colorBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.halfBets.reduce((e,r)=>e.plus(r.amount.mul(2)),new l(0))).add(t.winningBets.columnBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0))).add(t.winningBets.dozenBets.reduce((e,r)=>e.plus(r.amount.mul(3)),new l(0)))}}class Ee extends u{europeanGame;americanGame;constructor(){super("ROULETTE");this.europeanGame=new V,this.americanGame=new U}determineGameResult(t){let{gameInputs:e,...r}=t;if(t.edge===2.7&&e.type==="european"){let i=this.europeanGame.determineGameResult({...r,gameInputs:e.inputs}),{betOutcomes:n}=i.outputs;return{...i,outputs:{type:"european",betOutcomes:n}}}if(t.edge===5.3&&e.type==="american"){let i=this.americanGame.determineGameResult({...r,gameInputs:e.inputs}),{betOutcomes:n}=i.outputs;return{...i,outputs:{type:"american",betOutcomes:n}}}throw new Error("Only European & American Roulette games are supported")}}import{Big as be}from"big.js";var x;((i)=>{i.LOW_RISK="LOW_RISK";i.MEDIUM_RISK="MEDIUM_RISK";i.HIGH_RISK="HIGH_RISK"})(x||={});var D;((o)=>{o[o.TEN=10]="TEN";o[o.TWENTY=20]="TWENTY";o[o.THIRTY=30]="THIRTY";o[o.FORTY=40]="FORTY";o[o.FIFTY=50]="FIFTY"})(D||={});var ye=[{segments:10,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[0,1.9,0,1.5,0,2,0,1.5,0,3],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,9.9]}},{segments:20,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[1.5,0,2,0,1.8,0,2,0,2,0,1.5,0,2,0,2,0,3,0,2,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19.8]}},{segments:30,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[1.5,0,2,0,1.5,0,2,0,3,0,1.7,0,1.5,0,2,0,1.5,0,2,0,1.5,0,2,0,4,0,1.5,0,2,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29.7]}},{segments:40,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[2,0,1.5,0,3,0,2,0,1.5,0,2,0,1.5,0,3,0,2,0,1.5,0,1.6,0,1.5,0,3,0,2,0,1.5,0,2,0,1.5,0,3,0,2,0,1.5,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39.6]}},{segments:50,payout:{["LOW_RISK"]:[1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0,1.5,1.2,1.2,1.2,0,1.2,1.2,1.2,1.2,0],["MEDIUM_RISK"]:[1.5,0,2,0,1.5,0,3,0,1.5,0,2,0,1.5,0,2,0,1.5,0,3,0,1.5,0,2,0,1.5,0,2,0,1.5,0,3,0,1.5,0,2,0,1.5,0,2,0,1.5,0,5,0,1.5,0,2,0,1.5,0],["HIGH_RISK"]:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49.5]}}];class Le extends u{multiplierOverrides;get multipliers(){return this.multiplierOverrides??ye}constructor(t){super("WHEEL");this.multiplierOverrides=t;if(t)this.validateMultiplierOverrides(t)}determineGameResult({generator:t,gameInputs:e,edge:r}){if(r!==1&&!this.multiplierOverrides)throw new Error("Multiplier overrides must be specified if an edge of 1% is not desirable");if(!Object.values(D).includes(e.segments))throw new Error("Invalid segments value");if(!Object.values(x).includes(e.riskLevel))throw new Error("Invalid risk level");let i=t.getRandomInt({min:0,max:10});return{isFinished:!0,payoutMultiplier:new be(this.multipliers.find((o)=>o.segments===e.segments)?.payout[e.riskLevel][i.value]??0),outputs:{},randomValues:i}}validateMultiplierOverrides(t){let e=Object.values(D).filter((r)=>typeof r==="number");for(let r of e){if(!t.some((n)=>n.segments===r))throw new Error(`Multiplier overrides for ${r} segments is missing.`);let i=Object.values(x);for(let n of i){let o=t.find((s)=>s.segments===r&&s.payout[n]);if(!o)throw new Error(`Multiplier overrides for ${r} segments and ${n} risk level is missing.`);if(o.payout[n].length!==r)throw new Error(`Multiplier overrides for ${r} segments and ${n} risk level has an invalid length.`)}}}}export{D as WheelSegments,x as WheelRiskLevel,Le as Wheel,j as VALID_SUITS,$ as VALID_RANKS,fe as VALID_EUROPEAN_STREETS,g as VALID_EUROPEAN_STRAIGHTS,me as VALID_EUROPEAN_SPLITS,Se as VALID_EUROPEAN_DOUBLE_STREETS,he as VALID_EUROPEAN_CORNERS,Re as VALID_AMERICAN_STREETS,pe as VALID_AMERICAN_STRAIGHTS,Be as VALID_AMERICAN_SPLITS,we as VALID_AMERICAN_DOUBLE_STREETS,ve as VALID_AMERICAN_CORNERS,Ee as Roulette,H as PlinkoRiskLevel,de as Plinko,k as Parity,B as OrigamiGame,ae as Mines,se as Limbo,ne as KenoRiskLevel,le as Keno,O as Half,u as Game,C as Dozen,re as DiceDirection,ie as Dice,X as DiamondsResultType,te as Diamonds,K as Column,_ as Color,Y as BaccaratOutcome,J as Baccarat,F as AdvancedDice,N as AMERICAN_BASKET};
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@betorigami/game-calculations",
3
+ "version": "0.0.0-sha-54481c8-20251028042938",
4
+ "type": "module",
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "require": "./dist/index.cjs",
12
+ "import": "./dist/index.mjs"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "tsc": "tsc",
20
+ "build": "bun run build.ts",
21
+ "watch": "bun run --watch src/index.ts",
22
+ "test": "bun test",
23
+ "test:watch": "bun test --watch",
24
+ "bundlemon": "bundlemon --subProject game-calculations"
25
+ },
26
+ "devDependencies": {
27
+ "@betorigami/provably-fair-rng": "^1.0.0",
28
+ "@tsconfig/bun": "^1.0.8",
29
+ "@types/bun": "^1.2.17",
30
+ "bun-plugin-dts": "^0.3.0",
31
+ "typescript": "^5.8.3",
32
+ "vitest": "^3.2.4"
33
+ }
34
+ }