shufflecom-calculations 1.1.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/lib/games/crash.d.ts +4 -4
  2. package/lib/games/crash.js +22 -0
  3. package/lib/games/crash.js.map +1 -0
  4. package/lib/games/dice.d.ts +17 -17
  5. package/lib/games/dice.js +92 -0
  6. package/lib/games/dice.js.map +1 -0
  7. package/lib/games/hilo.d.ts +31 -31
  8. package/lib/games/hilo.js +134 -0
  9. package/lib/games/hilo.js.map +1 -0
  10. package/lib/games/keno.d.ts +21 -21
  11. package/lib/games/keno.js +145 -0
  12. package/lib/games/keno.js.map +1 -0
  13. package/lib/games/limbo.d.ts +4 -4
  14. package/lib/games/limbo.js +26 -0
  15. package/lib/games/limbo.js.map +1 -0
  16. package/lib/games/mines.d.ts +7 -7
  17. package/lib/games/mines.js +44 -0
  18. package/lib/games/mines.js.map +1 -0
  19. package/lib/games/plinko.d.ts +18 -18
  20. package/lib/games/plinko.js +128 -0
  21. package/lib/games/plinko.js.map +1 -0
  22. package/lib/index.d.ts +9 -9
  23. package/lib/index.js +39 -2
  24. package/lib/index.js.map +1 -1
  25. package/lib/regex/index.d.ts +6 -6
  26. package/lib/regex/index.js +10 -0
  27. package/lib/regex/index.js.map +1 -0
  28. package/lib/tsconfig.tsbuildinfo +1 -0
  29. package/lib/utils/calculate-payout.d.ts +2 -2
  30. package/lib/utils/calculate-payout.js +8 -0
  31. package/lib/utils/calculate-payout.js.map +1 -0
  32. package/lib/utils/chat-message.type.d.ts +26 -26
  33. package/lib/utils/chat-message.type.js +10 -0
  34. package/lib/utils/chat-message.type.js.map +1 -0
  35. package/lib/utils/dates-calculator.d.ts +5 -5
  36. package/lib/utils/dates-calculator.js +37 -0
  37. package/lib/utils/dates-calculator.js.map +1 -0
  38. package/lib/utils/derive-vip-bonus.d.ts +4 -4
  39. package/lib/utils/derive-vip-bonus.js +53 -0
  40. package/lib/utils/derive-vip-bonus.js.map +1 -0
  41. package/lib/utils/edge.d.ts +2 -2
  42. package/lib/utils/edge.js +17 -0
  43. package/lib/utils/edge.js.map +1 -0
  44. package/lib/utils/factorial.d.ts +2 -2
  45. package/lib/utils/factorial.js +20 -0
  46. package/lib/utils/factorial.js.map +1 -0
  47. package/lib/utils/getChatMessageLength.d.ts +2 -2
  48. package/lib/utils/getChatMessageLength.js +19 -0
  49. package/lib/utils/getChatMessageLength.js.map +1 -0
  50. package/lib/utils/hex-to-bytes.d.ts +1 -1
  51. package/lib/utils/hex-to-bytes.js +15 -0
  52. package/lib/utils/hex-to-bytes.js.map +1 -0
  53. package/lib/utils/index.d.ts +7 -7
  54. package/lib/utils/index.js +19 -0
  55. package/lib/utils/index.js.map +1 -0
  56. package/lib/utils/ncr.d.ts +2 -2
  57. package/lib/utils/ncr.js +15 -0
  58. package/lib/utils/ncr.js.map +1 -0
  59. package/lib/utils/odds.d.ts +2 -2
  60. package/lib/utils/odds.js +12 -0
  61. package/lib/utils/odds.js.map +1 -0
  62. package/lib/utils/uuid-converter.d.ts +2 -0
  63. package/lib/utils/uuid-converter.js +34 -0
  64. package/lib/utils/uuid-converter.js.map +1 -0
  65. package/lib/utils/vip-bonus.type.d.ts +30 -30
  66. package/lib/utils/vip-bonus.type.js +17 -0
  67. package/lib/utils/vip-bonus.type.js.map +1 -0
  68. package/package.json +4 -5
  69. package/src/utils/uuid-converter.spec.ts +21 -0
  70. package/src/utils/uuid-converter.ts +32 -0
  71. package/lib/index.modern.js +0 -2
  72. package/lib/index.modern.js.map +0 -1
  73. package/lib/index.modern.mjs +0 -2
  74. package/lib/index.modern.mjs.map +0 -1
  75. package/lib/index.umd.js +0 -2
  76. package/lib/index.umd.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import BigNumber from 'bignumber.js';
2
- export declare class Crash {
3
- static getResult(hexStr: string): BigNumber;
4
- }
1
+ import BigNumber from 'bignumber.js';
2
+ export declare class Crash {
3
+ static getResult(hexStr: string): BigNumber;
4
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Crash = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const MAX_FACTOR = new bignumber_js_1.default(4294967296);
9
+ const EDGE = 0.01;
10
+ class Crash {
11
+ static getResult(hexStr) {
12
+ let result = new bignumber_js_1.default(0);
13
+ for (let i = 0; i < 8; i++) {
14
+ const value = hexStr[i];
15
+ result = result.plus(new bignumber_js_1.default(16).pow(7 - i).multipliedBy(parseInt(value, 16)));
16
+ }
17
+ result = MAX_FACTOR.dividedBy(result.plus(1)).multipliedBy(1 - EDGE);
18
+ return bignumber_js_1.default.max(result, 1);
19
+ }
20
+ }
21
+ exports.Crash = Crash;
22
+ //# sourceMappingURL=crash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crash.js","sourceRoot":"","sources":["../../src/games/crash.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AAErC,MAAM,UAAU,GAAG,IAAI,sBAAS,CAAC,UAAU,CAAC,CAAC;AAC7C,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB,MAAa,KAAK;IAChB,MAAM,CAAC,SAAS,CAAC,MAAc;QAC7B,IAAI,MAAM,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;QAG9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;SACtF;QAED,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,OAAO,sBAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC;CACF;AAbD,sBAaC"}
@@ -1,17 +1,17 @@
1
- import BigNumber from 'bignumber.js';
2
- export declare enum DiceDirection {
3
- ABOVE = "ABOVE",
4
- BELOW = "BELOW"
5
- }
6
- export declare class Dice {
7
- static getResult(hexStr: string): BigNumber;
8
- private static convertToBN;
9
- static isWin(direction: DiceDirection, playerBet: number, result: number): boolean;
10
- static isWinBN(direction: DiceDirection, playerBet: BigNumber, result: BigNumber): boolean;
11
- static calculateMultiplier(direction: DiceDirection, playerBet: number, edgeBps: number): number;
12
- static calculateMultiplierBN(direction: DiceDirection, playerBet: BigNumber, edgeBps: number): BigNumber;
13
- static calculateWinChance(direction: DiceDirection, playerBet: number): number;
14
- static calculateWinChanceBN(direction: DiceDirection, playerBet: BigNumber): BigNumber;
15
- static calculateBetFromMultiplier(direction: DiceDirection, multiplier: number, edgeBps: number): number;
16
- static calculateBetFromWinChance(direction: DiceDirection, winChance: number): number;
17
- }
1
+ import BigNumber from 'bignumber.js';
2
+ export declare enum DiceDirection {
3
+ ABOVE = "ABOVE",
4
+ BELOW = "BELOW"
5
+ }
6
+ export declare class Dice {
7
+ static getResult(hexStr: string): BigNumber;
8
+ private static convertToBN;
9
+ static isWin(direction: DiceDirection, playerBet: number, result: number): boolean;
10
+ static isWinBN(direction: DiceDirection, playerBet: BigNumber, result: BigNumber): boolean;
11
+ static calculateMultiplier(direction: DiceDirection, playerBet: number, edgeBps: number): number;
12
+ static calculateMultiplierBN(direction: DiceDirection, playerBet: BigNumber, edgeBps: number): BigNumber;
13
+ static calculateWinChance(direction: DiceDirection, playerBet: number): number;
14
+ static calculateWinChanceBN(direction: DiceDirection, playerBet: BigNumber): BigNumber;
15
+ static calculateBetFromMultiplier(direction: DiceDirection, multiplier: number, edgeBps: number): number;
16
+ static calculateBetFromWinChance(direction: DiceDirection, winChance: number): number;
17
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Dice = exports.DiceDirection = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const edge_1 = require("../utils/edge");
9
+ const hex_to_bytes_1 = require("../utils/hex-to-bytes");
10
+ var DiceDirection;
11
+ (function (DiceDirection) {
12
+ DiceDirection["ABOVE"] = "ABOVE";
13
+ DiceDirection["BELOW"] = "BELOW";
14
+ })(DiceDirection = exports.DiceDirection || (exports.DiceDirection = {}));
15
+ const BYTE_TOTAL = new bignumber_js_1.default(256);
16
+ const TOTAL_DICE_RESULTS = new bignumber_js_1.default(10001);
17
+ const TOTAL_DICE_RESULTS_EFFECTIVE = TOTAL_DICE_RESULTS.minus(1);
18
+ const DICE_CONVERSION_MULTIPLIER = new bignumber_js_1.default(100);
19
+ const WIN_CHANCE_CONVERSION_MULTIPLIER = new bignumber_js_1.default(100);
20
+ class Dice {
21
+ static getResult(hexStr) {
22
+ const gameResultBytes = (0, hex_to_bytes_1.hexToBytes)(hexStr);
23
+ let result = new bignumber_js_1.default(0);
24
+ for (let i = 0; i < 4; i++) {
25
+ const value = gameResultBytes[i];
26
+ result = result.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(i + 1)));
27
+ }
28
+ result = result.multipliedBy(TOTAL_DICE_RESULTS).integerValue(bignumber_js_1.default.ROUND_DOWN);
29
+ return result;
30
+ }
31
+ static convertToBN(playerBet) {
32
+ return new bignumber_js_1.default(playerBet).multipliedBy(DICE_CONVERSION_MULTIPLIER);
33
+ }
34
+ static isWin(direction, playerBet, result) {
35
+ return this.isWinBN(direction, this.convertToBN(playerBet), this.convertToBN(result));
36
+ }
37
+ static isWinBN(direction, playerBet, result) {
38
+ if (direction === DiceDirection.ABOVE && result.isGreaterThan(playerBet)) {
39
+ return true;
40
+ }
41
+ else if (direction === DiceDirection.BELOW && result.isLessThan(playerBet)) {
42
+ return true;
43
+ }
44
+ return false;
45
+ }
46
+ static calculateMultiplier(direction, playerBet, edgeBps) {
47
+ const result = this.calculateMultiplierBN(direction, this.convertToBN(playerBet), edgeBps);
48
+ return result.toNumber();
49
+ }
50
+ static calculateMultiplierBN(direction, playerBet, edgeBps) {
51
+ const winChance = this.calculateWinChanceBN(direction, playerBet);
52
+ return winChance.pow(-1).multipliedBy((0, edge_1.calculateEdgeMultiplier)(edgeBps)).decimalPlaces(4);
53
+ }
54
+ static calculateWinChance(direction, playerBet) {
55
+ const result = this.calculateWinChanceBN(direction, this.convertToBN(playerBet));
56
+ return result.multipliedBy(100).decimalPlaces(4).toNumber();
57
+ }
58
+ static calculateWinChanceBN(direction, playerBet) {
59
+ let possibleOutcomes;
60
+ if (direction === DiceDirection.ABOVE) {
61
+ possibleOutcomes = TOTAL_DICE_RESULTS_EFFECTIVE.minus(playerBet);
62
+ }
63
+ else if (direction === DiceDirection.BELOW) {
64
+ possibleOutcomes = playerBet;
65
+ }
66
+ else {
67
+ throw new Error(`Dice Direction does not include ${direction}`);
68
+ }
69
+ return possibleOutcomes.dividedBy(TOTAL_DICE_RESULTS_EFFECTIVE);
70
+ }
71
+ static calculateBetFromMultiplier(direction, multiplier, edgeBps) {
72
+ const multiplierBeforeEdge = new bignumber_js_1.default(multiplier).dividedBy((0, edge_1.calculateEdgeMultiplier)(edgeBps));
73
+ const winChance = new bignumber_js_1.default(1).dividedBy(multiplierBeforeEdge).multipliedBy(WIN_CHANCE_CONVERSION_MULTIPLIER).toNumber();
74
+ return this.calculateBetFromWinChance(direction, winChance);
75
+ }
76
+ static calculateBetFromWinChance(direction, winChance) {
77
+ const winChanceBN = new bignumber_js_1.default(winChance).dividedBy(WIN_CHANCE_CONVERSION_MULTIPLIER);
78
+ let result;
79
+ if (direction === DiceDirection.BELOW) {
80
+ result = TOTAL_DICE_RESULTS_EFFECTIVE.multipliedBy(winChanceBN);
81
+ }
82
+ else if (direction === DiceDirection.ABOVE) {
83
+ result = TOTAL_DICE_RESULTS_EFFECTIVE.minus(TOTAL_DICE_RESULTS_EFFECTIVE.multipliedBy(winChanceBN));
84
+ }
85
+ else {
86
+ throw new Error(`Dice Direction not acceptable - "${direction}"`);
87
+ }
88
+ return result.dividedBy(DICE_CONVERSION_MULTIPLIER).decimalPlaces(2).toNumber();
89
+ }
90
+ }
91
+ exports.Dice = Dice;
92
+ //# sourceMappingURL=dice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dice.js","sourceRoot":"","sources":["../../src/games/dice.ts"],"names":[],"mappings":"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"}
@@ -1,31 +1,31 @@
1
- import BigNumber from 'bignumber.js';
2
- export declare enum HiloGuess {
3
- SKIP = "SKIP",
4
- SAME_OR_ABOVE = "SAME_OR_ABOVE",
5
- SAME_OR_BELOW = "SAME_OR_BELOW"
6
- }
7
- export declare enum Suits {
8
- DIAMONDS = "DIAMONDS",
9
- HEARTS = "HEARTS",
10
- SPADES = "SPADES",
11
- CLUBS = "CLUBS"
12
- }
13
- export interface CardDetail {
14
- suit: Suits;
15
- value: string;
16
- }
17
- export declare class Hilo {
18
- static getResult(hexStr: string, cardNo: number): number;
19
- static getResults(hexStr: string[]): number[];
20
- static toComparableNo(result: number): number;
21
- static isGuessCorrect(previousCard: number, guess: HiloGuess, result: number): boolean;
22
- static calculateTotalMultiplierBN(actions: {
23
- guess: HiloGuess;
24
- lastCard: number;
25
- }[], edgeBps: number): BigNumber;
26
- static calculateMultiplier(guess: HiloGuess, previousCard: number, edgeBps: number): number;
27
- static calculateMultiplierBN(guess: HiloGuess, previousCard: number, edgeBps: number): BigNumber;
28
- static calculateWinChance(guess: HiloGuess, previousCard: number): number;
29
- static calculateWinChanceBN(guess: HiloGuess, previousCard: number): BigNumber;
30
- static getCardDetails(cardNum: number): CardDetail;
31
- }
1
+ import BigNumber from 'bignumber.js';
2
+ export declare enum HiloGuess {
3
+ SKIP = "SKIP",
4
+ SAME_OR_ABOVE = "SAME_OR_ABOVE",
5
+ SAME_OR_BELOW = "SAME_OR_BELOW"
6
+ }
7
+ export declare enum Suits {
8
+ DIAMONDS = "DIAMONDS",
9
+ HEARTS = "HEARTS",
10
+ SPADES = "SPADES",
11
+ CLUBS = "CLUBS"
12
+ }
13
+ export interface CardDetail {
14
+ suit: Suits;
15
+ value: string;
16
+ }
17
+ export declare class Hilo {
18
+ static getResult(hexStr: string, cardNo: number): number;
19
+ static getResults(hexStr: string[]): number[];
20
+ static toComparableNo(result: number): number;
21
+ static isGuessCorrect(previousCard: number, guess: HiloGuess, result: number): boolean;
22
+ static calculateTotalMultiplierBN(actions: {
23
+ guess: HiloGuess;
24
+ lastCard: number;
25
+ }[], edgeBps: number): BigNumber;
26
+ static calculateMultiplier(guess: HiloGuess, previousCard: number, edgeBps: number): number;
27
+ static calculateMultiplierBN(guess: HiloGuess, previousCard: number, edgeBps: number): BigNumber;
28
+ static calculateWinChance(guess: HiloGuess, previousCard: number): number;
29
+ static calculateWinChanceBN(guess: HiloGuess, previousCard: number): BigNumber;
30
+ static getCardDetails(cardNum: number): CardDetail;
31
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Hilo = exports.Suits = exports.HiloGuess = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const utils_1 = require("../utils");
9
+ const BYTE_TOTAL = new bignumber_js_1.default(256);
10
+ const TOTAL_CARD = new bignumber_js_1.default(13);
11
+ var HiloGuess;
12
+ (function (HiloGuess) {
13
+ HiloGuess["SKIP"] = "SKIP";
14
+ HiloGuess["SAME_OR_ABOVE"] = "SAME_OR_ABOVE";
15
+ HiloGuess["SAME_OR_BELOW"] = "SAME_OR_BELOW";
16
+ })(HiloGuess = exports.HiloGuess || (exports.HiloGuess = {}));
17
+ var Suits;
18
+ (function (Suits) {
19
+ Suits["DIAMONDS"] = "DIAMONDS";
20
+ Suits["HEARTS"] = "HEARTS";
21
+ Suits["SPADES"] = "SPADES";
22
+ Suits["CLUBS"] = "CLUBS";
23
+ })(Suits = exports.Suits || (exports.Suits = {}));
24
+ const suitsArr = [Suits.DIAMONDS, Suits.HEARTS, Suits.SPADES, Suits.CLUBS];
25
+ const CARD_MAP = {
26
+ '1': 'A',
27
+ '11': 'J',
28
+ '12': 'Q',
29
+ '13': 'K',
30
+ };
31
+ class Hilo {
32
+ static getResult(hexStr, cardNo) {
33
+ const bytePosition = cardNo % 8;
34
+ const bytes = (0, utils_1.hexToBytes)(hexStr);
35
+ let result = new bignumber_js_1.default(0);
36
+ for (let j = 0; j < 4; j++) {
37
+ const value = bytes[4 * bytePosition + j];
38
+ result = result.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(j + 1)));
39
+ }
40
+ return result.multipliedBy(52).integerValue(bignumber_js_1.default.ROUND_FLOOR).toNumber();
41
+ }
42
+ static getResults(hexStr) {
43
+ const results = [];
44
+ for (let i = 0; i < hexStr.length * 8; i++) {
45
+ const hexNo = Math.trunc(i / 8);
46
+ results.push(this.getResult(hexStr[hexNo], i));
47
+ }
48
+ return results;
49
+ }
50
+ static toComparableNo(result) {
51
+ const comparableNo = Math.trunc(result / 4) + 2;
52
+ if (comparableNo === 14) {
53
+ return 1;
54
+ }
55
+ else {
56
+ return comparableNo;
57
+ }
58
+ }
59
+ static isGuessCorrect(previousCard, guess, result) {
60
+ const previousCardValue = this.toComparableNo(previousCard);
61
+ const resultValue = this.toComparableNo(result);
62
+ if (guess === HiloGuess.SAME_OR_ABOVE) {
63
+ if (previousCardValue === 1) {
64
+ return resultValue > 1;
65
+ }
66
+ else if (previousCardValue === 13) {
67
+ return resultValue === 13;
68
+ }
69
+ else {
70
+ return resultValue >= previousCardValue;
71
+ }
72
+ }
73
+ if (guess === HiloGuess.SAME_OR_BELOW) {
74
+ if (previousCardValue === 1) {
75
+ return resultValue === 1;
76
+ }
77
+ else if (previousCardValue === 13) {
78
+ return resultValue < 13;
79
+ }
80
+ else {
81
+ return resultValue <= previousCardValue;
82
+ }
83
+ }
84
+ return true;
85
+ }
86
+ static calculateTotalMultiplierBN(actions, edgeBps) {
87
+ const totalWinChance = actions
88
+ .map((action) => this.calculateWinChanceBN(action.guess, action.lastCard))
89
+ .reduce((prev, curr) => prev.multipliedBy(curr), (0, bignumber_js_1.default)(1));
90
+ return totalWinChance.pow(-1).multipliedBy((0, utils_1.calculateEdgeMultiplier)(edgeBps)).decimalPlaces(4);
91
+ }
92
+ static calculateMultiplier(guess, previousCard, edgeBps) {
93
+ const result = this.calculateMultiplierBN(guess, previousCard, edgeBps);
94
+ return result.toNumber();
95
+ }
96
+ static calculateMultiplierBN(guess, previousCard, edgeBps) {
97
+ const winChance = this.calculateWinChanceBN(guess, previousCard);
98
+ return winChance.pow(-1).multipliedBy((0, utils_1.calculateEdgeMultiplier)(edgeBps)).decimalPlaces(4);
99
+ }
100
+ static calculateWinChance(guess, previousCard) {
101
+ const result = this.calculateWinChanceBN(guess, previousCard);
102
+ return result.multipliedBy(100).decimalPlaces(4).toNumber();
103
+ }
104
+ static calculateWinChanceBN(guess, previousCard) {
105
+ let possibleOutcomes = new bignumber_js_1.default(0);
106
+ const previousCardValue = this.toComparableNo(previousCard);
107
+ if ((previousCardValue === 1 && guess === HiloGuess.SAME_OR_BELOW) || (previousCardValue === 13 && guess === HiloGuess.SAME_OR_ABOVE)) {
108
+ possibleOutcomes = (0, bignumber_js_1.default)(1);
109
+ }
110
+ else if ((previousCardValue === 13 && guess === HiloGuess.SAME_OR_BELOW) || (previousCardValue === 1 && guess === HiloGuess.SAME_OR_ABOVE)) {
111
+ possibleOutcomes = new bignumber_js_1.default(12);
112
+ }
113
+ else if (guess === HiloGuess.SAME_OR_ABOVE) {
114
+ possibleOutcomes = new bignumber_js_1.default(14).minus(previousCardValue);
115
+ }
116
+ else if (guess === HiloGuess.SAME_OR_BELOW) {
117
+ possibleOutcomes = (0, bignumber_js_1.default)(previousCardValue);
118
+ }
119
+ return possibleOutcomes.dividedBy(TOTAL_CARD);
120
+ }
121
+ static getCardDetails(cardNum) {
122
+ if (cardNum > 51 || cardNum < 0 || !Number.isInteger(cardNum)) {
123
+ throw 'out of bounds';
124
+ }
125
+ const suit = suitsArr[cardNum % 4];
126
+ let value = this.toComparableNo(cardNum).toString();
127
+ if (CARD_MAP[value]) {
128
+ value = CARD_MAP[value];
129
+ }
130
+ return { suit, value };
131
+ }
132
+ }
133
+ exports.Hilo = Hilo;
134
+ //# sourceMappingURL=hilo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hilo.js","sourceRoot":"","sources":["../../src/games/hilo.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,21 @@
1
- import BigNumber from 'bignumber.js';
2
- export declare enum KenoRiskLevel {
3
- CLASSIC = "CLASSIC",
4
- LOW_RISK = "LOW_RISK",
5
- MEDIUM_RISK = "MEDIUM_RISK",
6
- HIGH_RISK = "HIGH_RISK"
7
- }
8
- interface KenoConfig {
9
- tiles: number;
10
- payout: Record<KenoRiskLevel, number[]>;
11
- }
12
- export declare class Keno {
13
- static configs(): KenoConfig[];
14
- static calculateMultiplier(risk: KenoRiskLevel, selectedTiles: number[], results: number[]): BigNumber;
15
- static getResults(hexStr: string[], rows: number): number[];
16
- static getChance({ correctPicks, picked }: {
17
- correctPicks: number;
18
- picked: number;
19
- }): BigNumber;
20
- }
21
- export {};
1
+ import BigNumber from 'bignumber.js';
2
+ export declare enum KenoRiskLevel {
3
+ CLASSIC = "CLASSIC",
4
+ LOW_RISK = "LOW_RISK",
5
+ MEDIUM_RISK = "MEDIUM_RISK",
6
+ HIGH_RISK = "HIGH_RISK"
7
+ }
8
+ interface KenoConfig {
9
+ tiles: number;
10
+ payout: Record<KenoRiskLevel, number[]>;
11
+ }
12
+ export declare class Keno {
13
+ static configs(): KenoConfig[];
14
+ static calculateMultiplier(risk: KenoRiskLevel, selectedTiles: number[], results: number[]): BigNumber;
15
+ static getResults(hexStr: string[], rows: number): number[];
16
+ static getChance({ correctPicks, picked }: {
17
+ correctPicks: number;
18
+ picked: number;
19
+ }): BigNumber;
20
+ }
21
+ export {};
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Keno = exports.KenoRiskLevel = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const utils_1 = require("../utils");
9
+ const ncr_1 = require("../utils/ncr");
10
+ var KenoRiskLevel;
11
+ (function (KenoRiskLevel) {
12
+ KenoRiskLevel["CLASSIC"] = "CLASSIC";
13
+ KenoRiskLevel["LOW_RISK"] = "LOW_RISK";
14
+ KenoRiskLevel["MEDIUM_RISK"] = "MEDIUM_RISK";
15
+ KenoRiskLevel["HIGH_RISK"] = "HIGH_RISK";
16
+ })(KenoRiskLevel = exports.KenoRiskLevel || (exports.KenoRiskLevel = {}));
17
+ const BYTE_TOTAL = new bignumber_js_1.default(256);
18
+ const TOTAL_TILES = new bignumber_js_1.default(40);
19
+ const kenoConfigs = [
20
+ {
21
+ tiles: 1,
22
+ payout: {
23
+ [KenoRiskLevel.CLASSIC]: [0.0, 3.96],
24
+ [KenoRiskLevel.LOW_RISK]: [0.7, 1.85],
25
+ [KenoRiskLevel.MEDIUM_RISK]: [0.4, 2.75],
26
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 3.96],
27
+ },
28
+ },
29
+ {
30
+ tiles: 2,
31
+ payout: {
32
+ [KenoRiskLevel.CLASSIC]: [0.0, 1.9, 4.5],
33
+ [KenoRiskLevel.LOW_RISK]: [0.0, 2, 3.8],
34
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 1.8, 5.1],
35
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 17.1],
36
+ },
37
+ },
38
+ {
39
+ tiles: 3,
40
+ payout: {
41
+ [KenoRiskLevel.CLASSIC]: [0.0, 1, 3.1, 10.4],
42
+ [KenoRiskLevel.LOW_RISK]: [0.0, 1.1, 1.38, 26],
43
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 2.8, 50],
44
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 81.5],
45
+ },
46
+ },
47
+ {
48
+ tiles: 4,
49
+ payout: {
50
+ [KenoRiskLevel.CLASSIC]: [0.0, 0.8, 1.8, 5, 22.5],
51
+ [KenoRiskLevel.LOW_RISK]: [0.0, 0.0, 2.2, 7.9, 90],
52
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 1.7, 10, 100],
53
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 10, 259],
54
+ },
55
+ },
56
+ {
57
+ tiles: 5,
58
+ payout: {
59
+ [KenoRiskLevel.CLASSIC]: [0.0, 0.25, 1.4, 4.1, 16.5, 36],
60
+ [KenoRiskLevel.LOW_RISK]: [0.0, 0.0, 1.5, 4.2, 13, 300],
61
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 1.4, 4, 14, 390],
62
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 4.5, 48, 450],
63
+ },
64
+ },
65
+ {
66
+ tiles: 6,
67
+ payout: {
68
+ [KenoRiskLevel.CLASSIC]: [0.0, 0.0, 1, 3.68, 7, 16.5, 40],
69
+ [KenoRiskLevel.LOW_RISK]: [0.0, 0.0, 1.1, 2, 6.2, 100, 700],
70
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 0.0, 3, 9, 180, 710],
71
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 0.0, 11, 350, 710],
72
+ },
73
+ },
74
+ {
75
+ tiles: 7,
76
+ payout: {
77
+ [KenoRiskLevel.CLASSIC]: [0.0, 0.0, 0.47, 3, 4.5, 14, 31, 60],
78
+ [KenoRiskLevel.LOW_RISK]: [0.0, 0.0, 1.1, 1.6, 3.5, 15, 225, 700],
79
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 0.0, 2, 7, 30, 400, 800],
80
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 0.0, 7, 90, 400, 800],
81
+ },
82
+ },
83
+ {
84
+ tiles: 8,
85
+ payout: {
86
+ [KenoRiskLevel.CLASSIC]: [0.0, 0.0, 0.0, 2.2, 4, 13, 22, 55, 70],
87
+ [KenoRiskLevel.LOW_RISK]: [0.0, 0.0, 1.1, 1.5, 2, 5.5, 39, 100, 800],
88
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 0.0, 2, 4, 11, 67, 400, 900],
89
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 0.0, 5, 20, 270, 600, 900],
90
+ },
91
+ },
92
+ {
93
+ tiles: 9,
94
+ payout: {
95
+ [KenoRiskLevel.CLASSIC]: [0.0, 0.0, 0.0, 1.55, 3, 8, 15, 44, 60, 85],
96
+ [KenoRiskLevel.LOW_RISK]: [0.0, 0.0, 1.1, 1.3, 1.7, 2.5, 7.5, 50, 250, 1000],
97
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 0.0, 2, 2.5, 5, 15, 100, 500, 1000],
98
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 0.0, 4, 11, 56, 500, 800, 1000],
99
+ },
100
+ },
101
+ {
102
+ tiles: 10,
103
+ payout: {
104
+ [KenoRiskLevel.CLASSIC]: [0.0, 0.0, 0.0, 1.4, 2.25, 4.5, 8, 17, 50, 80, 100],
105
+ [KenoRiskLevel.LOW_RISK]: [0.0, 0.0, 1.1, 1.2, 1.3, 1.8, 3.5, 13, 50, 250, 1000],
106
+ [KenoRiskLevel.MEDIUM_RISK]: [0.0, 0.0, 0.0, 1.6, 2, 4, 7, 26, 100, 500, 1000],
107
+ [KenoRiskLevel.HIGH_RISK]: [0.0, 0.0, 0.0, 0.0, 3.5, 8, 13, 63, 500, 800, 1000],
108
+ },
109
+ },
110
+ ];
111
+ class Keno {
112
+ static configs() {
113
+ return kenoConfigs;
114
+ }
115
+ static calculateMultiplier(risk, selectedTiles, results) {
116
+ var _a;
117
+ const matchedTiles = results.filter((result) => selectedTiles.includes(result));
118
+ return new bignumber_js_1.default(this.configs().find((config) => config.tiles === selectedTiles.length).payout[risk][(_a = matchedTiles === null || matchedTiles === void 0 ? void 0 : matchedTiles.length) !== null && _a !== void 0 ? _a : 0]);
119
+ }
120
+ static getResults(hexStr, rows) {
121
+ const results = [];
122
+ const grids = Array.from(Array(TOTAL_TILES.toNumber()).keys());
123
+ hexStr.map(utils_1.hexToBytes).every((gameResultBytes, counter) => {
124
+ for (let i = 0; i < 8; i++) {
125
+ if (results.length >= rows) {
126
+ return false;
127
+ }
128
+ let position = new bignumber_js_1.default(0);
129
+ for (let j = 0; j < 4; j++) {
130
+ const value = gameResultBytes[4 * i + j];
131
+ position = position.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(j + 1)));
132
+ }
133
+ position = position.multipliedBy(TOTAL_TILES.minus(new bignumber_js_1.default(8 * counter + i))).integerValue(bignumber_js_1.default.ROUND_DOWN);
134
+ results.push(grids.splice(position.toNumber(), 1)[0] + 1);
135
+ }
136
+ return true;
137
+ });
138
+ return results;
139
+ }
140
+ static getChance({ correctPicks, picked }) {
141
+ return new bignumber_js_1.default((0, ncr_1.nCr)(10, correctPicks)).multipliedBy((0, ncr_1.nCr)(30, picked - correctPicks)).dividedBy(new bignumber_js_1.default((0, ncr_1.nCr)(40, picked)));
142
+ }
143
+ }
144
+ exports.Keno = Keno;
145
+ //# sourceMappingURL=keno.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keno.js","sourceRoot":"","sources":["../../src/games/keno.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import BigNumber from 'bignumber.js';
2
- export declare class Limbo {
3
- static getResult(hexStr: string, edgeBps: number): BigNumber;
4
- }
1
+ import BigNumber from 'bignumber.js';
2
+ export declare class Limbo {
3
+ static getResult(hexStr: string, edgeBps: number): BigNumber;
4
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Limbo = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const utils_1 = require("../utils");
9
+ const MAX_FACTOR = new bignumber_js_1.default(16777216);
10
+ const BYTE_TOTAL = new bignumber_js_1.default(256);
11
+ const MAX_MULTIPLIER = 1000000;
12
+ class Limbo {
13
+ static getResult(hexStr, edgeBps) {
14
+ const gameResultBytes = (0, utils_1.hexToBytes)(hexStr);
15
+ let result = new bignumber_js_1.default(0);
16
+ for (let i = 0; i < 4; i++) {
17
+ const value = gameResultBytes[i];
18
+ result = result.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(i + 1)));
19
+ }
20
+ result = result.multipliedBy(MAX_FACTOR);
21
+ result = MAX_FACTOR.dividedBy(result.plus(1)).multipliedBy((0, utils_1.calculateEdgeMultiplier)(edgeBps));
22
+ return bignumber_js_1.default.min(bignumber_js_1.default.max(result, 1), MAX_MULTIPLIER);
23
+ }
24
+ }
25
+ exports.Limbo = Limbo;
26
+ //# sourceMappingURL=limbo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limbo.js","sourceRoot":"","sources":["../../src/games/limbo.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,oCAA+D;AAE/D,MAAM,UAAU,GAAG,IAAI,sBAAS,CAAC,QAAU,CAAC,CAAC;AAC7C,MAAM,UAAU,GAAG,IAAI,sBAAS,CAAC,GAAG,CAAC,CAAC;AACtC,MAAM,cAAc,GAAG,OAAS,CAAC;AAEjC,MAAa,KAAK;IAChB,MAAM,CAAC,SAAS,CAAC,MAAc,EAAE,OAAe;QAC9C,MAAM,eAAe,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;QAE3C,IAAI,MAAM,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;QAG9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YAEjC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,sBAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7E;QACD,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAA,+BAAuB,EAAC,OAAO,CAAC,CAAC,CAAC;QAE7F,OAAO,sBAAS,CAAC,GAAG,CAAC,sBAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;CACF;AAlBD,sBAkBC"}
@@ -1,7 +1,7 @@
1
- import BigNumber from 'bignumber.js';
2
- export declare class Mines {
3
- static getResults(hexStr: string[], rows: number): number[];
4
- static hitMine: (field: number, results: number[]) => boolean;
5
- static calculateMultiplierBN(diamonds: number, mines: number, edgeBps: number): BigNumber;
6
- static calculateWinChanceBN(diamonds: number, mines: number): BigNumber;
7
- }
1
+ import BigNumber from 'bignumber.js';
2
+ export declare class Mines {
3
+ static getResults(hexStr: string[], rows: number): number[];
4
+ static hitMine: (field: number, results: number[]) => boolean;
5
+ static calculateMultiplierBN(diamonds: number, mines: number, edgeBps: number): BigNumber;
6
+ static calculateWinChanceBN(diamonds: number, mines: number): BigNumber;
7
+ }