shufflecom-calculations 2.2.29 → 2.2.31
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/lib/games/blackjack.d.ts +0 -24
- package/lib/games/blackjack.js +4 -53
- package/lib/games/blackjack.js.map +1 -1
- package/lib/games/keno.d.ts +0 -1
- package/lib/games/keno.js +6 -10
- package/lib/games/keno.js.map +1 -1
- package/lib/games/plinko.d.ts +0 -1
- package/lib/games/plinko.js +21 -14
- package/lib/games/plinko.js.map +1 -1
- package/lib/games/roulette.d.ts +1 -2
- package/lib/games/roulette.js +11 -15
- package/lib/games/roulette.js.map +1 -1
- package/lib/games/wheel.d.ts +0 -1
- package/lib/games/wheel.js +9 -19
- package/lib/games/wheel.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/sports-competition-fixture.types.d.ts +4 -1
- package/lib/utils/sports-competition-fixture.types.js +4 -1
- package/lib/utils/sports-competition-fixture.types.js.map +1 -1
- package/lib/utils/sports.types.d.ts +2 -0
- package/lib/utils/sports.types.js +2 -0
- package/lib/utils/sports.types.js.map +1 -1
- package/package.json +2 -2
- package/src/games/blackjack.ts +8 -139
- package/src/games/keno.ts +6 -12
- package/src/games/plinko.ts +24 -18
- package/src/games/roulette.ts +13 -36
- package/src/games/wheel.ts +9 -20
- package/src/utils/sports-competition-fixture.types.ts +5 -0
- package/src/utils/sports.types.ts +5 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SportsMatchPhaseLabel } from './sports-match-state.types';
|
|
2
|
-
import { EventState, Sports, SportsDefaultMarketInfo, SportsFixtureBannerType, SportsFixtureStatus, SportsMarketProvider, SportsMatchPhase, SportsMatchPhaseHomeAway, SportsMatchPhaseWinner } from './sports.types';
|
|
2
|
+
import { EventState, Sports, SportsDefaultMarketInfo, SportsFixtureBannerType, SportsFixtureStatus, SportsMarketGroup, SportsMarketProvider, SportsMatchPhase, SportsMatchPhaseHomeAway, SportsMatchPhaseWinner } from './sports.types';
|
|
3
3
|
export declare class DefaultMarketInfo {
|
|
4
4
|
defaultMarket: SportsDefaultMarketInfo | null;
|
|
5
5
|
threewayDefaultMarkets: SportsDefaultMarketInfo[];
|
|
@@ -110,6 +110,9 @@ export declare class SportsFixtureInfo {
|
|
|
110
110
|
export declare class SportsFixtureInfoWithCompetition extends SportsFixtureInfo {
|
|
111
111
|
competition: SportsCompetitionWithCategoryInfo;
|
|
112
112
|
}
|
|
113
|
+
export declare class SportsFixtureInfoWithAvailableMarketGroups extends SportsFixtureInfoWithCompetition {
|
|
114
|
+
marketGroups: SportsMarketGroup[];
|
|
115
|
+
}
|
|
113
116
|
export declare class PaginatedSportsFixturesInfo {
|
|
114
117
|
nodes: SportsFixtureInfo[];
|
|
115
118
|
nextCursor: string | null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SportsCompetitionFixture = exports.PopularSportsCompetitionsV2Info = exports.PopularSportsCompetitionInfo = exports.PaginatedSportsCompetitionsInfo = exports.SportsCompetitionWithFixturesInfo = exports.PaginatedSportsFixturesInfoWithCompetition = exports.PaginatedSportsFixturesInfo = exports.SportsFixtureInfoWithCompetition = exports.SportsFixtureInfo = exports.SportsCompetitionWithCategoryInfo = exports.MatchStateInfo = exports.CompetitorInfo = exports.WidgetInfo = exports.DefaultMarketInfo = void 0;
|
|
3
|
+
exports.SportsCompetitionFixture = exports.PopularSportsCompetitionsV2Info = exports.PopularSportsCompetitionInfo = exports.PaginatedSportsCompetitionsInfo = exports.SportsCompetitionWithFixturesInfo = exports.PaginatedSportsFixturesInfoWithCompetition = exports.PaginatedSportsFixturesInfo = exports.SportsFixtureInfoWithAvailableMarketGroups = exports.SportsFixtureInfoWithCompetition = exports.SportsFixtureInfo = exports.SportsCompetitionWithCategoryInfo = exports.MatchStateInfo = exports.CompetitorInfo = exports.WidgetInfo = exports.DefaultMarketInfo = void 0;
|
|
4
4
|
class DefaultMarketInfo {
|
|
5
5
|
}
|
|
6
6
|
exports.DefaultMarketInfo = DefaultMarketInfo;
|
|
@@ -22,6 +22,9 @@ exports.SportsFixtureInfo = SportsFixtureInfo;
|
|
|
22
22
|
class SportsFixtureInfoWithCompetition extends SportsFixtureInfo {
|
|
23
23
|
}
|
|
24
24
|
exports.SportsFixtureInfoWithCompetition = SportsFixtureInfoWithCompetition;
|
|
25
|
+
class SportsFixtureInfoWithAvailableMarketGroups extends SportsFixtureInfoWithCompetition {
|
|
26
|
+
}
|
|
27
|
+
exports.SportsFixtureInfoWithAvailableMarketGroups = SportsFixtureInfoWithAvailableMarketGroups;
|
|
25
28
|
class PaginatedSportsFixturesInfo {
|
|
26
29
|
}
|
|
27
30
|
exports.PaginatedSportsFixturesInfo = PaginatedSportsFixturesInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sports-competition-fixture.types.js","sourceRoot":"","sources":["../../src/utils/sports-competition-fixture.types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"sports-competition-fixture.types.js","sourceRoot":"","sources":["../../src/utils/sports-competition-fixture.types.ts"],"names":[],"mappings":";;;AAcA,MAAa,iBAAiB;CAG7B;AAHD,8CAGC;AAED,MAAa,UAAU;CAGtB;AAHD,gCAGC;AAED,MAAa,cAAc;CAO1B;AAPD,wCAOC;AAED,MAAa,cAAc;CAyD1B;AAzDD,wCAyDC;AAED,MAAa,iCAAiC;CAY7C;AAZD,8EAYC;AAED,MAAa,iBAAiB;CAmB7B;AAnBD,8CAmBC;AAED,MAAa,gCAAiC,SAAQ,iBAAiB;CAEtE;AAFD,4EAEC;AAED,MAAa,0CAA2C,SAAQ,gCAAgC;CAE/F;AAFD,gGAEC;AAED,MAAa,2BAA2B;CAGvC;AAHD,kEAGC;AAED,MAAa,0CAA0C;CAGtD;AAHD,gGAGC;AAED,MAAa,iCAAkC,SAAQ,iCAAiC;CAGvF;AAHD,8EAGC;AAED,MAAa,+BAA+B;CAG3C;AAHD,0EAGC;AAED,MAAa,4BAA6B,SAAQ,+BAA+B;CAEhF;AAFD,oEAEC;AAED,MAAa,+BAA+B;CAG3C;AAHD,0EAGC;AAED,MAAa,wBAAwB;CAKpC;AALD,4DAKC"}
|
|
@@ -32,6 +32,8 @@ var SportsMarketDisplayType;
|
|
|
32
32
|
var SportsFixtureStatus;
|
|
33
33
|
(function (SportsFixtureStatus) {
|
|
34
34
|
SportsFixtureStatus["SCHEDULED"] = "SCHEDULED";
|
|
35
|
+
SportsFixtureStatus["PREMATCH"] = "PREMATCH";
|
|
36
|
+
SportsFixtureStatus["LIVE"] = "LIVE";
|
|
35
37
|
SportsFixtureStatus["SUSPENDED"] = "SUSPENDED";
|
|
36
38
|
SportsFixtureStatus["ENDED"] = "ENDED";
|
|
37
39
|
SportsFixtureStatus["DELETED"] = "DELETED";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sports.types.js","sourceRoot":"","sources":["../../src/utils/sports.types.ts"],"names":[],"mappings":";;;;AAEA,IAAY,oBASX;AATD,WAAY,oBAAoB;IAC9B,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,6CAAqB,CAAA;IAKrB,yCAAiB,CAAA;AACnB,CAAC,EATW,oBAAoB,oCAApB,oBAAoB,QAS/B;AAED,IAAY,uBAkBX;AAlBD,WAAY,uBAAuB;IACjC,wCAAa,CAAA;IACb,0DAA+B,CAAA;IAC/B,0CAAe,CAAA;IACf,4DAAiC,CAAA;IACjC,8DAAmC,CAAA;IACnC,0DAA+B,CAAA;IAC/B,sDAA2B,CAAA;IAC3B,wDAA6B,CAAA;IAC7B,4DAAiC,CAAA;IACjC,8FAAmE,CAAA;IACnE,4EAAiD,CAAA;IACjD,kEAAuC,CAAA;IACvC,sDAA2B,CAAA;IAC3B,0DAA+B,CAAA;IAC/B,sDAA2B,CAAA;IAC3B,4CAAiB,CAAA;IACjB,gDAAqB,CAAA;AACvB,CAAC,EAlBW,uBAAuB,uCAAvB,uBAAuB,QAkBlC;AAED,IAAY,
|
|
1
|
+
{"version":3,"file":"sports.types.js","sourceRoot":"","sources":["../../src/utils/sports.types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shufflecom-calculations",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.31",
|
|
4
4
|
"description": "",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
},
|
|
15
15
|
"author": "",
|
|
16
16
|
"license": "ISC",
|
|
17
|
-
"gitHead": "
|
|
17
|
+
"gitHead": "8301ae763b116eefb5fb12b7cc3f65f39f39822c"
|
|
18
18
|
}
|
package/src/games/blackjack.ts
CHANGED
|
@@ -156,11 +156,7 @@ export class Blackjack {
|
|
|
156
156
|
return true;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
static getHandOutcome(
|
|
160
|
-
dealerCards: readonly number[],
|
|
161
|
-
playerCards: readonly number[],
|
|
162
|
-
hasSplit: boolean,
|
|
163
|
-
): { multiplier: BigNumber; outcome: HandOutcome } {
|
|
159
|
+
static getHandOutcome(dealerCards: readonly number[], playerCards: readonly number[], hasSplit: boolean): { multiplier: BigNumber; outcome: HandOutcome } {
|
|
164
160
|
const dealerBlackjack = this.isBlackjack(dealerCards);
|
|
165
161
|
const playerBlackjack = this.isBlackjack(playerCards);
|
|
166
162
|
|
|
@@ -198,10 +194,7 @@ export class Blackjack {
|
|
|
198
194
|
}
|
|
199
195
|
}
|
|
200
196
|
|
|
201
|
-
static calcSideBetWins(
|
|
202
|
-
dealerUpCard: number,
|
|
203
|
-
playerCards: readonly number[],
|
|
204
|
-
): { perfectPair?: PerfectPairType; twentyOnePlusThree?: TwentyOnePlusThreeType } {
|
|
197
|
+
static calcSideBetWins(dealerUpCard: number, playerCards: readonly number[]): { perfectPair?: PerfectPairType; twentyOnePlusThree?: TwentyOnePlusThreeType } {
|
|
205
198
|
const results: { perfectPair?: PerfectPairType; twentyOnePlusThree?: TwentyOnePlusThreeType } = {};
|
|
206
199
|
const dealerCardDetails = CardGames.getCardDetails(dealerUpCard);
|
|
207
200
|
const playerCard0 = CardGames.getCardDetails(playerCards[0]);
|
|
@@ -237,9 +230,7 @@ export class Blackjack {
|
|
|
237
230
|
A: [14, 1],
|
|
238
231
|
};
|
|
239
232
|
|
|
240
|
-
const cardValues = [...cardValueMap[playerCard0.value], ...cardValueMap[playerCard1.value], ...cardValueMap[dealerCardDetails.value]].sort(
|
|
241
|
-
(a, b) => a - b,
|
|
242
|
-
);
|
|
233
|
+
const cardValues = [...cardValueMap[playerCard0.value], ...cardValueMap[playerCard1.value], ...cardValueMap[dealerCardDetails.value]].sort((a, b) => a - b);
|
|
243
234
|
|
|
244
235
|
const isFlush = dealerCardDetails.suit === playerCard0.suit && playerCard0.suit === playerCard1.suit;
|
|
245
236
|
const firstThreeCards = cardValues.slice(0, 3) as [number, number, number];
|
|
@@ -284,7 +275,7 @@ export class Blackjack {
|
|
|
284
275
|
K: 10,
|
|
285
276
|
};
|
|
286
277
|
|
|
287
|
-
let aceCount = CardGames.getCardDetailsArr(cards).filter(card => card.value === 'A').length;
|
|
278
|
+
let aceCount = CardGames.getCardDetailsArr(cards).filter((card) => card.value === 'A').length;
|
|
288
279
|
let cardSum = CardGames.getCardDetailsArr(cards).reduce((acc, cur) => acc + cardValueMap[cur.value], 0);
|
|
289
280
|
|
|
290
281
|
if (aceCount === 0) {
|
|
@@ -349,124 +340,12 @@ export class Blackjack {
|
|
|
349
340
|
return newDealerHand;
|
|
350
341
|
}
|
|
351
342
|
|
|
352
|
-
static getMaxPotentialPayout({
|
|
353
|
-
mainBetAmount,
|
|
354
|
-
twentyOnePlusThreeAmount,
|
|
355
|
-
perfectPairAmount,
|
|
356
|
-
}: {
|
|
357
|
-
mainBetAmount: BigNumber;
|
|
358
|
-
twentyOnePlusThreeAmount: BigNumber;
|
|
359
|
-
perfectPairAmount: BigNumber;
|
|
360
|
-
mainHandDoubleDown?: boolean;
|
|
361
|
-
}) {
|
|
362
|
-
const mainHandPayout = mainBetAmount.times(2.5);
|
|
363
|
-
|
|
364
|
-
const twentyOnePlusThreeMaxPayout = BigNumber.max(...Object.values(twentyOnePlusThreePayout)).times(twentyOnePlusThreeAmount);
|
|
365
|
-
|
|
366
|
-
const perfectPairMaxPayout = BigNumber.max(...Object.values(perfectPairPayout)).times(perfectPairAmount);
|
|
367
|
-
|
|
368
|
-
return mainHandPayout.plus(twentyOnePlusThreeMaxPayout).plus(perfectPairMaxPayout);
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
static getDoubleDownPotentialPayout({
|
|
372
|
-
mainBetAmount,
|
|
373
|
-
twentyOnePlusThreeAmount,
|
|
374
|
-
perfectPairAmount,
|
|
375
|
-
dealerHand,
|
|
376
|
-
mainPlayerHand,
|
|
377
|
-
splitPlayerHand,
|
|
378
|
-
hasSplit,
|
|
379
|
-
mainHandDoubleDown,
|
|
380
|
-
splitHandDoubleDown,
|
|
381
|
-
}: {
|
|
382
|
-
mainBetAmount: BigNumber;
|
|
383
|
-
twentyOnePlusThreeAmount: BigNumber;
|
|
384
|
-
perfectPairAmount: BigNumber;
|
|
385
|
-
dealerHand: readonly number[];
|
|
386
|
-
mainPlayerHand: readonly number[];
|
|
387
|
-
splitPlayerHand: readonly number[];
|
|
388
|
-
hasSplit: boolean;
|
|
389
|
-
mainHandDoubleDown: boolean;
|
|
390
|
-
splitHandDoubleDown: boolean;
|
|
391
|
-
}) {
|
|
392
|
-
// calculate sidebet payouts
|
|
393
|
-
let perfectPairPayoutAmt = new BigNumber(0);
|
|
394
|
-
let twentyOnePlusThreePayoutAmt = new BigNumber(0);
|
|
395
|
-
|
|
396
|
-
const originalMainPlayerHand = hasSplit ? [mainPlayerHand[0], splitPlayerHand[0]] : [mainPlayerHand[0], mainPlayerHand[1]];
|
|
397
|
-
|
|
398
|
-
const { perfectPair, twentyOnePlusThree } = Blackjack.calcSideBetWins(dealerHand[0], originalMainPlayerHand);
|
|
399
|
-
|
|
400
|
-
if (perfectPair && perfectPairPayout[perfectPair] && perfectPairAmount.gt(0)) {
|
|
401
|
-
perfectPairPayoutAmt = perfectPairAmount.times(perfectPairPayout[perfectPair]);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
if (twentyOnePlusThree && twentyOnePlusThreePayout[twentyOnePlusThree] && twentyOnePlusThreeAmount.gt(0)) {
|
|
405
|
-
twentyOnePlusThreePayoutAmt = twentyOnePlusThreeAmount.times(twentyOnePlusThreePayout[twentyOnePlusThree]);
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
let totalBetAmount = mainBetAmount;
|
|
409
|
-
|
|
410
|
-
if (hasSplit) {
|
|
411
|
-
totalBetAmount = totalBetAmount.times(2);
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
if (mainHandDoubleDown) {
|
|
415
|
-
totalBetAmount = totalBetAmount.plus(mainBetAmount);
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
if (splitHandDoubleDown) {
|
|
419
|
-
totalBetAmount = totalBetAmount.plus(mainBetAmount);
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
const mainBetPotentialPayout = totalBetAmount.times(2); // double down pays 2:1 on doubled bet
|
|
423
|
-
|
|
424
|
-
return mainBetPotentialPayout.plus(perfectPairPayoutAmt).plus(twentyOnePlusThreePayoutAmt);
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
static getSplitHandlePotentialPayout({
|
|
428
|
-
mainBetAmount,
|
|
429
|
-
twentyOnePlusThreeAmount,
|
|
430
|
-
perfectPairAmount,
|
|
431
|
-
dealerHand,
|
|
432
|
-
playerHand,
|
|
433
|
-
}: {
|
|
434
|
-
mainBetAmount: BigNumber;
|
|
435
|
-
twentyOnePlusThreeAmount: BigNumber;
|
|
436
|
-
perfectPairAmount: BigNumber;
|
|
437
|
-
dealerHand: readonly number[];
|
|
438
|
-
playerHand: readonly number[];
|
|
439
|
-
}) {
|
|
440
|
-
// calculate sidebet payouts
|
|
441
|
-
let perfectPairPayoutAmt = new BigNumber(0);
|
|
442
|
-
let twentyOnePlusThreePayoutAmt = new BigNumber(0);
|
|
443
|
-
|
|
444
|
-
const { perfectPair, twentyOnePlusThree } = Blackjack.calcSideBetWins(dealerHand[0], playerHand);
|
|
445
|
-
|
|
446
|
-
if (perfectPair && perfectPairPayout[perfectPair] && perfectPairAmount.gt(0)) {
|
|
447
|
-
perfectPairPayoutAmt = perfectPairAmount.times(perfectPairPayout[perfectPair]);
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
if (twentyOnePlusThree && twentyOnePlusThreePayout[twentyOnePlusThree] && twentyOnePlusThreeAmount.gt(0)) {
|
|
451
|
-
twentyOnePlusThreePayoutAmt = twentyOnePlusThreeAmount.times(twentyOnePlusThreePayout[twentyOnePlusThree]);
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
const mainBetPotentialPayout = mainBetAmount.times(2).times(2); // split hand pays 2:1 on doubled bet
|
|
455
|
-
|
|
456
|
-
return mainBetPotentialPayout.plus(perfectPairPayoutAmt).plus(twentyOnePlusThreePayoutAmt);
|
|
457
|
-
}
|
|
458
|
-
|
|
459
343
|
/**
|
|
460
344
|
*
|
|
461
345
|
* Called after bet ends. Players can still win insurance or sidebets even if they lose the main bet
|
|
462
346
|
* @returns total payout amount
|
|
463
347
|
*/
|
|
464
|
-
static getGameOutcome(data: SettleBetVars): {
|
|
465
|
-
payout: BigNumber;
|
|
466
|
-
multiplier: BigNumber;
|
|
467
|
-
mainHandOutcome: HandOutcome;
|
|
468
|
-
splitHandOutcome: HandOutcome;
|
|
469
|
-
} {
|
|
348
|
+
static getGameOutcome(data: SettleBetVars): { payout: BigNumber; multiplier: BigNumber; mainHandOutcome: HandOutcome; splitHandOutcome: HandOutcome } {
|
|
470
349
|
if (data.dealerHand.length < 2) {
|
|
471
350
|
throw new Error('Dealer hole card is missing');
|
|
472
351
|
}
|
|
@@ -481,15 +360,9 @@ export class Blackjack {
|
|
|
481
360
|
let perfectPairPayoutAmt = new BigNumber(0);
|
|
482
361
|
let twentyOnePlusThreePayoutAmt = new BigNumber(0);
|
|
483
362
|
|
|
484
|
-
const {
|
|
485
|
-
mainHandOutcome,
|
|
486
|
-
payout: mainBetPayout,
|
|
487
|
-
splitHandOutcome,
|
|
488
|
-
} = Blackjack.getMainBetPayout({ ...data, mainHandBetAmount, splitHandBetAmount });
|
|
363
|
+
const { mainHandOutcome, payout: mainBetPayout, splitHandOutcome } = Blackjack.getMainBetPayout({ ...data, mainHandBetAmount, splitHandBetAmount });
|
|
489
364
|
|
|
490
|
-
const playerHand: [number, number] = data.hasSplit
|
|
491
|
-
? [data.mainPlayerHand[0], data.splitPlayerHand[0]]
|
|
492
|
-
: [data.mainPlayerHand[0], data.mainPlayerHand[1]];
|
|
365
|
+
const playerHand: [number, number] = data.hasSplit ? [data.mainPlayerHand[0], data.splitPlayerHand[0]] : [data.mainPlayerHand[0], data.mainPlayerHand[1]];
|
|
493
366
|
|
|
494
367
|
const { perfectPair, twentyOnePlusThree } = Blackjack.calcSideBetWins(data.dealerHand[0], playerHand);
|
|
495
368
|
|
|
@@ -503,11 +376,7 @@ export class Blackjack {
|
|
|
503
376
|
|
|
504
377
|
const payout = mainBetPayout.plus(perfectPairPayoutAmt).plus(twentyOnePlusThreePayoutAmt);
|
|
505
378
|
const insuranceCost = data.boughtInsurance ? data.mainBetAmount.dividedBy(2) : new BigNumber(0); // insurance costs half of the main bet
|
|
506
|
-
const totalBetAmount = mainHandBetAmount
|
|
507
|
-
.plus(splitHandBetAmount)
|
|
508
|
-
.plus(data.perfectPairAmount)
|
|
509
|
-
.plus(data.twentyOnePlusThreeAmount)
|
|
510
|
-
.plus(insuranceCost);
|
|
379
|
+
const totalBetAmount = mainHandBetAmount.plus(splitHandBetAmount).plus(data.perfectPairAmount).plus(data.twentyOnePlusThreeAmount).plus(insuranceCost);
|
|
511
380
|
|
|
512
381
|
let multiplier = payout.dividedBy(totalBetAmount);
|
|
513
382
|
|
package/src/games/keno.ts
CHANGED
|
@@ -127,16 +127,6 @@ export class Keno {
|
|
|
127
127
|
return new BigNumber(config.payout[risk][matchedTiles.length] ?? 0);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
static getMaxMultiplier(risk: KenoRiskLevel, selectedTiles: number[]) {
|
|
131
|
-
const config = this.configs().find(config => config.tiles === selectedTiles.length);
|
|
132
|
-
|
|
133
|
-
if (!config) {
|
|
134
|
-
throw new Error(`No configuration found for ${selectedTiles.length} tiles`);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return new BigNumber(config.payout[risk][selectedTiles.length] ?? 0);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
130
|
static getResults(hexStr: string[], rows: number): number[] {
|
|
141
131
|
const results: number[] = [];
|
|
142
132
|
const grids = Array.from(Array(TOTAL_TILES.toNumber()).keys());
|
|
@@ -153,7 +143,9 @@ export class Keno {
|
|
|
153
143
|
position = position.plus(new BigNumber(value).dividedBy(BYTE_TOTAL.pow(j + 1)));
|
|
154
144
|
}
|
|
155
145
|
|
|
156
|
-
position = position
|
|
146
|
+
position = position
|
|
147
|
+
.multipliedBy(TOTAL_TILES.minus(new BigNumber(8 * counter + i)))
|
|
148
|
+
.integerValue(BigNumber.ROUND_DOWN);
|
|
157
149
|
|
|
158
150
|
results.push(grids.splice(position.toNumber(), 1)[0] + 1); // (0 to 39) + 1 = 1 + 40
|
|
159
151
|
}
|
|
@@ -163,6 +155,8 @@ export class Keno {
|
|
|
163
155
|
}
|
|
164
156
|
|
|
165
157
|
static getChance({ correctPicks, picked }: { correctPicks: number; picked: number }) {
|
|
166
|
-
return new BigNumber(nCr(10, correctPicks))
|
|
158
|
+
return new BigNumber(nCr(10, correctPicks))
|
|
159
|
+
.multipliedBy(nCr(30, picked - correctPicks))
|
|
160
|
+
.dividedBy(new BigNumber(nCr(40, picked)));
|
|
167
161
|
}
|
|
168
162
|
}
|
package/src/games/plinko.ts
CHANGED
|
@@ -67,25 +67,39 @@ const plinkoConfigs: PlinkConfig[] = [
|
|
|
67
67
|
{
|
|
68
68
|
rows: 14,
|
|
69
69
|
payout: {
|
|
70
|
-
[PlinkoRiskLevel.LOW_RISK]: [
|
|
70
|
+
[PlinkoRiskLevel.LOW_RISK]: [
|
|
71
|
+
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,
|
|
72
|
+
],
|
|
71
73
|
[PlinkoRiskLevel.MEDIUM_RISK]: [58, 15, 7, 4, 1.9, 1, 0.5, 0.2, 0.5, 1, 1.9, 4, 7, 15, 58],
|
|
72
|
-
[PlinkoRiskLevel.HIGH_RISK]: [
|
|
74
|
+
[PlinkoRiskLevel.HIGH_RISK]: [
|
|
75
|
+
420, 56, 18, 5, 1.9, 0.3, 0.2, 0.2, 0.2, 0.3, 1.9, 5, 18, 56, 420,
|
|
76
|
+
],
|
|
73
77
|
},
|
|
74
78
|
},
|
|
75
79
|
{
|
|
76
80
|
rows: 15,
|
|
77
81
|
payout: {
|
|
78
82
|
[PlinkoRiskLevel.LOW_RISK]: [15, 8, 3, 2, 1.5, 1.1, 1, 0.7, 0.7, 1, 1.1, 1.5, 2, 3, 8, 15],
|
|
79
|
-
[PlinkoRiskLevel.MEDIUM_RISK]: [
|
|
80
|
-
|
|
83
|
+
[PlinkoRiskLevel.MEDIUM_RISK]: [
|
|
84
|
+
88, 18, 11, 5, 3, 1.3, 0.5, 0.3, 0.3, 0.5, 1.3, 3, 5, 11, 18, 88,
|
|
85
|
+
],
|
|
86
|
+
[PlinkoRiskLevel.HIGH_RISK]: [
|
|
87
|
+
620, 83, 27, 8, 3, 0.5, 0.2, 0.2, 0.2, 0.2, 0.5, 3, 8, 27, 83, 620,
|
|
88
|
+
],
|
|
81
89
|
},
|
|
82
90
|
},
|
|
83
91
|
{
|
|
84
92
|
rows: 16,
|
|
85
93
|
payout: {
|
|
86
|
-
[PlinkoRiskLevel.LOW_RISK]: [
|
|
87
|
-
|
|
88
|
-
|
|
94
|
+
[PlinkoRiskLevel.LOW_RISK]: [
|
|
95
|
+
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,
|
|
96
|
+
],
|
|
97
|
+
[PlinkoRiskLevel.MEDIUM_RISK]: [
|
|
98
|
+
110, 41, 10, 5, 3, 1.5, 1, 0.5, 0.3, 0.5, 1, 1.5, 3, 5, 10, 41, 110,
|
|
99
|
+
],
|
|
100
|
+
[PlinkoRiskLevel.HIGH_RISK]: [
|
|
101
|
+
1000, 130, 26, 9, 4, 2, 0.2, 0.2, 0.2, 0.2, 0.2, 2, 4, 9, 26, 130, 1000,
|
|
102
|
+
],
|
|
89
103
|
},
|
|
90
104
|
},
|
|
91
105
|
];
|
|
@@ -103,7 +117,9 @@ export class Plinko {
|
|
|
103
117
|
}
|
|
104
118
|
|
|
105
119
|
static calculateChances(rows: number): BigNumber[] {
|
|
106
|
-
return Object.keys(Array(rows + 1)).map(position =>
|
|
120
|
+
return Object.keys(Array(rows + 1)).map(position =>
|
|
121
|
+
this.calculateChance(rows, parseInt(position)),
|
|
122
|
+
);
|
|
107
123
|
}
|
|
108
124
|
|
|
109
125
|
static calculateMultiplier(risk: PlinkoRiskLevel, rows: number, results: number[]) {
|
|
@@ -117,16 +133,6 @@ export class Plinko {
|
|
|
117
133
|
return new BigNumber(config.payout[risk][position]);
|
|
118
134
|
}
|
|
119
135
|
|
|
120
|
-
static getMaxMultiplier(risk: PlinkoRiskLevel, rows: number) {
|
|
121
|
-
const config = this.configs().find(config => config.rows === rows);
|
|
122
|
-
|
|
123
|
-
if (!config) {
|
|
124
|
-
throw new Error(`No configuration found for ${rows} rows`);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return new BigNumber(Math.max(...config.payout[risk]));
|
|
128
|
-
}
|
|
129
|
-
|
|
130
136
|
static getResults(hexStr: string[], rows: number): number[] {
|
|
131
137
|
const results: number[] = [];
|
|
132
138
|
hexStr.map(hexToBytes).every(gameResultBytes => {
|
package/src/games/roulette.ts
CHANGED
|
@@ -144,9 +144,7 @@ const isValidStraight = (num: number): boolean => {
|
|
|
144
144
|
export const isValidStreet = (street: streetValue): boolean => {
|
|
145
145
|
const sortedStreet = (street as unknown as number[]).sort((a, b) => a - b);
|
|
146
146
|
|
|
147
|
-
return (
|
|
148
|
-
sortedStreet.length === 3 && STREET_VALUES.some(val => val[0] === sortedStreet[0] && val[1] === sortedStreet[1] && val[2] === sortedStreet[2])
|
|
149
|
-
);
|
|
147
|
+
return sortedStreet.length === 3 && STREET_VALUES.some((val) => val[0] === sortedStreet[0] && val[1] === sortedStreet[1] && val[2] === sortedStreet[2]);
|
|
150
148
|
};
|
|
151
149
|
|
|
152
150
|
// for corners (up, down, left, right, and diagonally adjacent)
|
|
@@ -176,7 +174,7 @@ export const cornerNumbers = (num: straightValue): straightValue[] => {
|
|
|
176
174
|
possibleCornerNumbers = [num - 4, num - 3, num - 1, num + 2, num + 3];
|
|
177
175
|
}
|
|
178
176
|
|
|
179
|
-
return possibleCornerNumbers.filter(num => isValidStraight(num)) as straightValue[];
|
|
177
|
+
return possibleCornerNumbers.filter((num) => isValidStraight(num)) as straightValue[];
|
|
180
178
|
};
|
|
181
179
|
|
|
182
180
|
// up, down, left, right
|
|
@@ -195,7 +193,7 @@ export const isValidSplit = (firstNumber: straightValue, secondNumber: straightV
|
|
|
195
193
|
possibleSplitNumbers = [firstNumber - 3, firstNumber - 1, firstNumber + 3];
|
|
196
194
|
}
|
|
197
195
|
|
|
198
|
-
const filteredPossibleSplitNumbers = possibleSplitNumbers.filter(num => isValidStraight(num)) as straightValue[];
|
|
196
|
+
const filteredPossibleSplitNumbers = possibleSplitNumbers.filter((num) => isValidStraight(num)) as straightValue[];
|
|
199
197
|
|
|
200
198
|
if (firstNumber !== 0 && secondNumber !== 0) {
|
|
201
199
|
return filteredPossibleSplitNumbers.includes(secondNumber);
|
|
@@ -208,12 +206,7 @@ export const isValidSplit = (firstNumber: straightValue, secondNumber: straightV
|
|
|
208
206
|
return false; // should never reach here
|
|
209
207
|
};
|
|
210
208
|
|
|
211
|
-
export const isValidCorner = (
|
|
212
|
-
firstNumber: straightValue,
|
|
213
|
-
secondNumber: straightValue,
|
|
214
|
-
thirdNumber: straightValue,
|
|
215
|
-
fourthNumber: straightValue,
|
|
216
|
-
): boolean => {
|
|
209
|
+
export const isValidCorner = (firstNumber: straightValue, secondNumber: straightValue, thirdNumber: straightValue, fourthNumber: straightValue): boolean => {
|
|
217
210
|
// all 4 numbers MUST be adjacent to every other number
|
|
218
211
|
const numbersAdjacentToFirstNumber = cornerNumbers(firstNumber);
|
|
219
212
|
const numbersAdjacentToSecondNumber = cornerNumbers(secondNumber);
|
|
@@ -423,8 +416,8 @@ export class Roulette {
|
|
|
423
416
|
return resultNum;
|
|
424
417
|
}
|
|
425
418
|
|
|
426
|
-
static getPayout(inputs: RouletteInput, result: straightValue
|
|
427
|
-
if (!
|
|
419
|
+
static getPayout(inputs: RouletteInput, result: straightValue): BigNumber {
|
|
420
|
+
if (!this.validateInputs(inputs)) {
|
|
428
421
|
throw new Error('Invalid inputs');
|
|
429
422
|
}
|
|
430
423
|
|
|
@@ -498,25 +491,9 @@ export class Roulette {
|
|
|
498
491
|
return totalPayout;
|
|
499
492
|
}
|
|
500
493
|
|
|
501
|
-
static getMaxMultiplier(inputs: RouletteInput, betAmount: BigNumber): BigNumber {
|
|
502
|
-
const maxPotentialPayout = BigNumber.max(...STRAIGHT_VALUES.map(possibleResult => this.getPayout(inputs, possibleResult, true)));
|
|
503
|
-
|
|
504
|
-
return maxPotentialPayout.dividedBy(betAmount).decimalPlaces(4);
|
|
505
|
-
}
|
|
506
|
-
|
|
507
494
|
static validateInputs(inputs: RouletteInput): boolean {
|
|
508
|
-
const {
|
|
509
|
-
|
|
510
|
-
splitValues,
|
|
511
|
-
streetValues,
|
|
512
|
-
cornerValues,
|
|
513
|
-
doubleStreetValues,
|
|
514
|
-
parityValues,
|
|
515
|
-
colorValues,
|
|
516
|
-
columnValues,
|
|
517
|
-
dozenValues,
|
|
518
|
-
halfValues,
|
|
519
|
-
} = inputs;
|
|
495
|
+
const { straightValues, splitValues, streetValues, cornerValues, doubleStreetValues, parityValues, colorValues, columnValues, dozenValues, halfValues } =
|
|
496
|
+
inputs;
|
|
520
497
|
// user must bet on at least one thing
|
|
521
498
|
if (
|
|
522
499
|
straightValues.length === 0 &&
|
|
@@ -533,11 +510,11 @@ export class Roulette {
|
|
|
533
510
|
return false;
|
|
534
511
|
}
|
|
535
512
|
|
|
536
|
-
const straightsValid = straightValues.every(input => isValidStraight(input.straightNumber));
|
|
537
|
-
const splitsValid = splitValues.every(input => isValidSplit(input.firstNumber, input.secondNumber));
|
|
538
|
-
const streetsValid = streetValues.every(input => isValidStreet(input.street));
|
|
539
|
-
const cornersValid = cornerValues.every(input => isValidCorner(input.firstNumber, input.secondNumber, input.thirdNumber, input.fourthNumber));
|
|
540
|
-
const doubleStreetsValid = doubleStreetValues.every(input => isValidDoubleStreet(input.firstStreet, input.secondStreet));
|
|
513
|
+
const straightsValid = straightValues.every((input) => isValidStraight(input.straightNumber));
|
|
514
|
+
const splitsValid = splitValues.every((input) => isValidSplit(input.firstNumber, input.secondNumber));
|
|
515
|
+
const streetsValid = streetValues.every((input) => isValidStreet(input.street));
|
|
516
|
+
const cornersValid = cornerValues.every((input) => isValidCorner(input.firstNumber, input.secondNumber, input.thirdNumber, input.fourthNumber));
|
|
517
|
+
const doubleStreetsValid = doubleStreetValues.every((input) => isValidDoubleStreet(input.firstStreet, input.secondStreet));
|
|
541
518
|
|
|
542
519
|
return straightsValid && splitsValid && streetsValid && cornersValid && doubleStreetsValid;
|
|
543
520
|
}
|
package/src/games/wheel.ts
CHANGED
|
@@ -38,28 +38,25 @@ export const WHEEL_MULTIPLIERS: Record<WheelSegments, Record<WheelRiskLevel, num
|
|
|
38
38
|
},
|
|
39
39
|
[WheelSegments.FORTY]: {
|
|
40
40
|
[WheelRiskLevel.LOW]: [
|
|
41
|
-
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,
|
|
42
|
-
1.2,
|
|
41
|
+
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,
|
|
42
|
+
1.2, 0, 1.2, 1.2, 1.2, 1.2, 0,
|
|
43
43
|
],
|
|
44
44
|
[WheelRiskLevel.MEDIUM]: [
|
|
45
45
|
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,
|
|
46
46
|
],
|
|
47
|
-
[WheelRiskLevel.HIGH]: [
|
|
48
|
-
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,
|
|
49
|
-
],
|
|
47
|
+
[WheelRiskLevel.HIGH]: [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],
|
|
50
48
|
},
|
|
51
49
|
[WheelSegments.FIFTY]: {
|
|
52
50
|
[WheelRiskLevel.LOW]: [
|
|
53
|
-
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,
|
|
54
|
-
1.2,
|
|
51
|
+
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,
|
|
52
|
+
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,
|
|
55
53
|
],
|
|
56
54
|
[WheelRiskLevel.MEDIUM]: [
|
|
57
|
-
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,
|
|
58
|
-
|
|
55
|
+
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,
|
|
56
|
+
1.5, 0, 2, 0, 1.5, 0,
|
|
59
57
|
],
|
|
60
58
|
[WheelRiskLevel.HIGH]: [
|
|
61
|
-
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,
|
|
62
|
-
0, 49.5,
|
|
59
|
+
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,
|
|
63
60
|
],
|
|
64
61
|
},
|
|
65
62
|
};
|
|
@@ -74,10 +71,7 @@ export const WHEEL_SEGMENTS_TO_NUMBER: Record<WheelSegments, number> = {
|
|
|
74
71
|
|
|
75
72
|
export class Wheel {
|
|
76
73
|
static getResult(hexStr: string, segments: WheelSegments, risk: WheelRiskLevel): { resultSegment: number; multiplier: BigNumber } {
|
|
77
|
-
const resultSegment = this.getRandomNumberFromHexStr(hexStr)
|
|
78
|
-
.multipliedBy(WHEEL_SEGMENTS_TO_NUMBER[segments])
|
|
79
|
-
.integerValue(BigNumber.ROUND_DOWN)
|
|
80
|
-
.toNumber();
|
|
74
|
+
const resultSegment = this.getRandomNumberFromHexStr(hexStr).multipliedBy(WHEEL_SEGMENTS_TO_NUMBER[segments]).integerValue(BigNumber.ROUND_DOWN).toNumber();
|
|
81
75
|
const multiplier = BigNumber(WHEEL_MULTIPLIERS[segments][risk][resultSegment]);
|
|
82
76
|
return { resultSegment, multiplier };
|
|
83
77
|
}
|
|
@@ -97,9 +91,4 @@ export class Wheel {
|
|
|
97
91
|
|
|
98
92
|
return result;
|
|
99
93
|
}
|
|
100
|
-
|
|
101
|
-
static getMaxMultiplier(segments: WheelSegments, risk: WheelRiskLevel): BigNumber {
|
|
102
|
-
const maxMultiplier = BigNumber.max(...WHEEL_MULTIPLIERS[segments][risk]);
|
|
103
|
-
return maxMultiplier;
|
|
104
|
-
}
|
|
105
94
|
}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
SportsDefaultMarketInfo,
|
|
6
6
|
SportsFixtureBannerType,
|
|
7
7
|
SportsFixtureStatus,
|
|
8
|
+
SportsMarketGroup,
|
|
8
9
|
SportsMarketProvider,
|
|
9
10
|
SportsMatchPhase,
|
|
10
11
|
SportsMatchPhaseHomeAway,
|
|
@@ -128,6 +129,10 @@ export class SportsFixtureInfoWithCompetition extends SportsFixtureInfo {
|
|
|
128
129
|
competition: SportsCompetitionWithCategoryInfo;
|
|
129
130
|
}
|
|
130
131
|
|
|
132
|
+
export class SportsFixtureInfoWithAvailableMarketGroups extends SportsFixtureInfoWithCompetition {
|
|
133
|
+
marketGroups: SportsMarketGroup[];
|
|
134
|
+
}
|
|
135
|
+
|
|
131
136
|
export class PaginatedSportsFixturesInfo {
|
|
132
137
|
nodes: SportsFixtureInfo[];
|
|
133
138
|
nextCursor: string | null;
|
|
@@ -32,7 +32,12 @@ export enum SportsMarketDisplayType {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export enum SportsFixtureStatus {
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated use PREMATCH instead
|
|
37
|
+
*/
|
|
35
38
|
SCHEDULED = 'SCHEDULED',
|
|
39
|
+
PREMATCH = 'PREMATCH',
|
|
40
|
+
LIVE = 'LIVE',
|
|
36
41
|
SUSPENDED = 'SUSPENDED',
|
|
37
42
|
ENDED = 'ENDED',
|
|
38
43
|
DELETED = 'DELETED',
|