shufflecom-calculations 1.0.11 → 1.0.13

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 (63) hide show
  1. package/lib/enums/chain.d.ts +8 -0
  2. package/lib/enums/chain.js +13 -0
  3. package/lib/enums/chain.js.map +1 -0
  4. package/lib/games/dice.d.ts +20 -0
  5. package/lib/games/dice.js +95 -0
  6. package/lib/games/dice.js.map +1 -0
  7. package/lib/games/dice.spec.d.ts +1 -0
  8. package/lib/games/dice.spec.js +58 -0
  9. package/lib/games/dice.spec.js.map +1 -0
  10. package/lib/games/mines.d.ts +10 -0
  11. package/lib/games/mines.js +44 -0
  12. package/lib/games/mines.js.map +1 -0
  13. package/lib/games/mines.spec.d.ts +1 -0
  14. package/lib/games/mines.spec.js +24 -0
  15. package/lib/games/mines.spec.js.map +1 -0
  16. package/lib/games/plinko.d.ts +20 -0
  17. package/lib/games/plinko.js +131 -0
  18. package/lib/games/plinko.js.map +1 -0
  19. package/lib/games/plinko.spec.d.ts +1 -0
  20. package/lib/games/plinko.spec.js +32 -0
  21. package/lib/games/plinko.spec.js.map +1 -0
  22. package/lib/index.d.ts +6 -0
  23. package/lib/index.js +31 -0
  24. package/lib/index.js.map +1 -0
  25. package/lib/regex/index.d.ts +3 -0
  26. package/lib/regex/index.js +7 -0
  27. package/lib/regex/index.js.map +1 -0
  28. package/lib/regex/regex.spec.d.ts +1 -0
  29. package/lib/regex/regex.spec.js +64 -0
  30. package/lib/regex/regex.spec.js.map +1 -0
  31. package/lib/tsconfig.tsbuildinfo +1 -0
  32. package/lib/utils/edge.d.ts +2 -0
  33. package/lib/utils/edge.js +17 -0
  34. package/lib/utils/edge.js.map +1 -0
  35. package/lib/utils/factorial.d.ts +2 -0
  36. package/lib/utils/factorial.js +20 -0
  37. package/lib/utils/factorial.js.map +1 -0
  38. package/lib/utils/factorial.spec.d.ts +1 -0
  39. package/lib/utils/factorial.spec.js +19 -0
  40. package/lib/utils/factorial.spec.js.map +1 -0
  41. package/lib/utils/generate-concurrency-id.d.ts +1 -0
  42. package/lib/utils/generate-concurrency-id.js +9 -0
  43. package/lib/utils/generate-concurrency-id.js.map +1 -0
  44. package/lib/utils/hex-to-bytes.d.ts +1 -0
  45. package/lib/utils/hex-to-bytes.js +15 -0
  46. package/lib/utils/hex-to-bytes.js.map +1 -0
  47. package/lib/utils/index.d.ts +4 -0
  48. package/lib/utils/index.js +12 -0
  49. package/lib/utils/index.js.map +1 -0
  50. package/lib/utils/is-valid-address.d.ts +2 -0
  51. package/lib/utils/is-valid-address.js +25 -0
  52. package/lib/utils/is-valid-address.js.map +1 -0
  53. package/lib/utils/is-valid-address.spec.d.ts +1 -0
  54. package/lib/utils/is-valid-address.spec.js +26 -0
  55. package/lib/utils/is-valid-address.spec.js.map +1 -0
  56. package/lib/utils/ncr.d.ts +2 -0
  57. package/lib/utils/ncr.js +15 -0
  58. package/lib/utils/ncr.js.map +1 -0
  59. package/lib/utils/ncr.spec.d.ts +1 -0
  60. package/lib/utils/ncr.spec.js +21 -0
  61. package/lib/utils/ncr.spec.js.map +1 -0
  62. package/package.json +5 -2
  63. package/src/enums/chain.ts +3 -0
@@ -0,0 +1,8 @@
1
+ export declare enum Chain {
2
+ BITCOIN = "BITCOIN",
3
+ ETHEREUM = "ETHEREUM",
4
+ SOLANA = "SOLANA",
5
+ LITECOIN = "LITECOIN",
6
+ TRON = "TRON",
7
+ MATIC_POLYGON = "MATIC_POLYGON"
8
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Chain = void 0;
4
+ var Chain;
5
+ (function (Chain) {
6
+ Chain["BITCOIN"] = "BITCOIN";
7
+ Chain["ETHEREUM"] = "ETHEREUM";
8
+ Chain["SOLANA"] = "SOLANA";
9
+ Chain["LITECOIN"] = "LITECOIN";
10
+ Chain["TRON"] = "TRON";
11
+ Chain["MATIC_POLYGON"] = "MATIC_POLYGON";
12
+ })(Chain = exports.Chain || (exports.Chain = {}));
13
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/enums/chain.ts"],"names":[],"mappings":";;;AAAA,IAAY,KAOX;AAPD,WAAY,KAAK;IACf,4BAAmB,CAAA;IACnB,8BAAqB,CAAA;IACrB,0BAAiB,CAAA;IACjB,8BAAqB,CAAA;IACrB,sBAAa,CAAA;IACb,wCAA+B,CAAA;AACjC,CAAC,EAPW,KAAK,GAAL,aAAK,KAAL,aAAK,QAOhB"}
@@ -0,0 +1,20 @@
1
+ import BigNumber from 'bignumber.js';
2
+ export declare enum DiceDirection {
3
+ ABOVE = "ABOVE",
4
+ BELOW = "BELOW"
5
+ }
6
+ declare class Dice {
7
+ getResult(hexStr: string): BigNumber;
8
+ private convertToBN;
9
+ isWin(direction: DiceDirection, playerBet: number, result: number): boolean;
10
+ isWinBN(direction: DiceDirection, playerBet: BigNumber, result: BigNumber): boolean;
11
+ calculateMultiplier(direction: DiceDirection, playerBet: number, edgeBps: number): number;
12
+ calculateMultiplierBN(direction: DiceDirection, playerBet: BigNumber, edgeBps: number): BigNumber;
13
+ calculateWinChance(direction: DiceDirection, playerBet: number): number;
14
+ calculateWinChanceBN(direction: DiceDirection, playerBet: BigNumber): BigNumber;
15
+ calculateBetFromMultiplier(direction: DiceDirection, multiplier: number, edgeBps: number): number;
16
+ calculateBetFromWinChance(direction: DiceDirection, winChance: number): number;
17
+ calculatePayoutBN(amount: BigNumber, multiplier: BigNumber): BigNumber;
18
+ }
19
+ declare const _default: Dice;
20
+ export default _default;
@@ -0,0 +1,95 @@
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.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
+ 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
+ convertToBN(playerBet) {
32
+ return new bignumber_js_1.default(playerBet).multipliedBy(DICE_CONVERSION_MULTIPLIER);
33
+ }
34
+ isWin(direction, playerBet, result) {
35
+ return this.isWinBN(direction, this.convertToBN(playerBet), this.convertToBN(result));
36
+ }
37
+ 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
+ calculateMultiplier(direction, playerBet, edgeBps) {
47
+ const result = this.calculateMultiplierBN(direction, this.convertToBN(playerBet), edgeBps);
48
+ return result.toNumber();
49
+ }
50
+ 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
+ calculateWinChance(direction, playerBet) {
55
+ const result = this.calculateWinChanceBN(direction, this.convertToBN(playerBet));
56
+ return result.multipliedBy(100).decimalPlaces(4).toNumber();
57
+ }
58
+ 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
+ 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
+ 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
+ calculatePayoutBN(amount, multiplier) {
91
+ return amount.multipliedBy(multiplier);
92
+ }
93
+ }
94
+ exports.default = new Dice();
95
+ //# sourceMappingURL=dice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dice.js","sourceRoot":"","sources":["../../src/games/dice.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,wCAAwD;AACxD,wDAAmD;AAEnD,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,gCAAe,CAAA;IACf,gCAAe,CAAA;AACjB,CAAC,EAHW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAGxB;AAED,MAAM,UAAU,GAAG,IAAI,sBAAS,CAAC,GAAG,CAAC,CAAC;AAGtC,MAAM,kBAAkB,GAAG,IAAI,sBAAS,CAAC,KAAK,CAAC,CAAC;AAGhD,MAAM,4BAA4B,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE,MAAM,0BAA0B,GAAG,IAAI,sBAAS,CAAC,GAAG,CAAC,CAAC;AACtD,MAAM,gCAAgC,GAAG,IAAI,sBAAS,CAAC,GAAG,CAAC,CAAC;AAE5D,MAAM,IAAI;IACR,SAAS,CAAC,MAAc;QACtB,MAAM,eAAe,GAAG,IAAA,yBAAU,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;QAED,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,sBAAS,CAAC,UAAU,CAAC,CAAC;QAEpF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,SAA0B;QAC5C,OAAO,IAAI,sBAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,SAAwB,EAAE,SAAiB,EAAE,MAAc;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,CAAC,SAAwB,EAAE,SAAoB,EAAE,MAAiB;QACvE,IAAI,SAAS,KAAK,aAAa,CAAC,KAAK,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;YACxE,OAAO,IAAI,CAAC;SACb;aAAM,IAAI,SAAS,KAAK,aAAa,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC5E,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB,CAAC,SAAwB,EAAE,SAAiB,EAAE,OAAe;QAC9E,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAE3F,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,qBAAqB,CAAC,SAAwB,EAAE,SAAoB,EAAE,OAAe;QACnF,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAElE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAA,8BAAuB,EAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,kBAAkB,CAAC,SAAwB,EAAE,SAAiB;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjF,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC;IAED,oBAAoB,CAAC,SAAwB,EAAE,SAAoB;QACjE,IAAI,gBAAgB,CAAC;QAErB,IAAI,SAAS,KAAK,aAAa,CAAC,KAAK,EAAE;YACrC,gBAAgB,GAAG,4BAA4B,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;SAClE;aAAM,IAAI,SAAS,KAAK,aAAa,CAAC,KAAK,EAAE;YAC5C,gBAAgB,GAAG,SAAS,CAAC;SAC9B;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAC;SACjE;QAED,OAAO,gBAAgB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAClE,CAAC;IAED,0BAA0B,CAAC,SAAwB,EAAE,UAAkB,EAAE,OAAe;QACtF,MAAM,oBAAoB,GAAG,IAAI,sBAAS,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,IAAA,8BAAuB,EAAC,OAAO,CAAC,CAAC,CAAC;QAEnG,MAAM,SAAS,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE7H,OAAO,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,yBAAyB,CAAC,SAAwB,EAAE,SAAiB;QACnE,MAAM,WAAW,GAAG,IAAI,sBAAS,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAEzF,IAAI,MAAM,CAAC;QACX,IAAI,SAAS,KAAK,aAAa,CAAC,KAAK,EAAE;YACrC,MAAM,GAAG,4BAA4B,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;SACjE;aAAM,IAAI,SAAS,KAAK,aAAa,CAAC,KAAK,EAAE;YAC5C,MAAM,GAAG,4BAA4B,CAAC,KAAK,CAAC,4BAA4B,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;SACrG;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,GAAG,CAAC,CAAC;SACnE;QAED,OAAO,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAClF,CAAC;IAED,iBAAiB,CAAC,MAAiB,EAAE,UAAqB;QACxD,OAAO,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;CACF;AAED,kBAAe,IAAI,IAAI,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const dice_1 = __importStar(require("./dice"));
27
+ const edgeBps = 100;
28
+ const results = [
29
+ { direction: dice_1.DiceDirection.ABOVE, multiplier: 2, bet: 50.50, winChance: 49.5 },
30
+ { direction: dice_1.DiceDirection.BELOW, multiplier: 1.9412, bet: 51, winChance: 51 },
31
+ { direction: dice_1.DiceDirection.BELOW, multiplier: 2.3571, bet: 42, winChance: 42 },
32
+ { direction: dice_1.DiceDirection.BELOW, multiplier: 6.7762, bet: 14.61, winChance: 14.61 }
33
+ ];
34
+ describe('Dice', () => {
35
+ results.forEach((item) => {
36
+ describe(`${JSON.stringify(item)}`, () => {
37
+ it('be able to calculate the correct win chances', () => {
38
+ expect(dice_1.default.calculateWinChance(item.direction, item.bet)).toBe(item.winChance);
39
+ });
40
+ it('should be able to calulate the correct multiplier', () => {
41
+ expect(dice_1.default.calculateMultiplier(item.direction, item.bet, edgeBps)).toBe(item.multiplier);
42
+ });
43
+ it('should calculate the bet number based on win chance', () => {
44
+ expect(dice_1.default.calculateBetFromWinChance(item.direction, item.winChance)).toEqual(item.bet);
45
+ });
46
+ it('should calculate the bet number based on multiplier', () => {
47
+ expect(dice_1.default.calculateBetFromMultiplier(item.direction, item.multiplier, edgeBps)).toEqual(item.bet);
48
+ });
49
+ });
50
+ });
51
+ it('should be able to determine win or loss', () => {
52
+ expect(dice_1.default.isWin(dice_1.DiceDirection.ABOVE, 50, 49)).toBe(false);
53
+ expect(dice_1.default.isWin(dice_1.DiceDirection.ABOVE, 50, 51)).toBe(true);
54
+ expect(dice_1.default.isWin(dice_1.DiceDirection.BELOW, 50, 49)).toBe(true);
55
+ expect(dice_1.default.isWin(dice_1.DiceDirection.BELOW, 50, 51)).toBe(false);
56
+ });
57
+ });
58
+ //# sourceMappingURL=dice.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dice.spec.js","sourceRoot":"","sources":["../../src/games/dice.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA6C;AAE7C,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB,MAAM,OAAO,GAAG;IACd,EAAE,SAAS,EAAE,oBAAa,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;IAC9E,EAAE,SAAS,EAAE,oBAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAC9E,EAAE,SAAS,EAAE,oBAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAC9E,EAAE,SAAS,EAAE,oBAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;CACrF,CAAA;AAED,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACvB,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;YACvC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;gBACtD,MAAM,CAAC,cAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjF,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;gBAC3D,MAAM,CAAC,cAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,MAAM,CAAC,cAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAA;YAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;gBAC7D,MAAM,CAAC,cAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtG,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,cAAI,CAAC,KAAK,CAAC,oBAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,cAAI,CAAC,KAAK,CAAC,oBAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAI,CAAC,KAAK,CAAC,oBAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAI,CAAC,KAAK,CAAC,oBAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import BigNumber from 'bignumber.js';
2
+ declare class Mines {
3
+ getResults(hexStr: string[]): number[];
4
+ hitMine: (field: number, results: number[]) => boolean;
5
+ calculateMultiplierBN(diamonds: number, mines: number, edgeBps: number): BigNumber;
6
+ calculateWinChanceBN(diamonds: number, mines: number): BigNumber;
7
+ calculatePayoutBN(amount: BigNumber, multiplier: BigNumber): BigNumber;
8
+ }
9
+ declare const _default: Mines;
10
+ export default _default;
@@ -0,0 +1,44 @@
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
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
7
+ const utils_1 = require("../utils");
8
+ const ncr_1 = require("../utils/ncr");
9
+ const BYTE_TOTAL = new bignumber_js_1.default(256);
10
+ const TOTAL_TILES = new bignumber_js_1.default(25);
11
+ class Mines {
12
+ constructor() {
13
+ this.hitMine = (field, results) => {
14
+ return results.some((result) => result === field);
15
+ };
16
+ }
17
+ getResults(hexStr) {
18
+ const results = [];
19
+ const grids = Array.from(Array(TOTAL_TILES.toNumber()).keys());
20
+ hexStr
21
+ .map((hex) => (0, utils_1.hexToBytes)(hex))
22
+ .map((gameResultBytes, counter) => {
23
+ let position = new bignumber_js_1.default(0);
24
+ for (let i = 0; i < 4; i++) {
25
+ const value = gameResultBytes[i];
26
+ position = position.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(i + 1)));
27
+ }
28
+ position = position.multipliedBy(TOTAL_TILES.minus(new bignumber_js_1.default(counter))).integerValue(bignumber_js_1.default.ROUND_DOWN);
29
+ results.push(grids.splice(position.toNumber(), 1)[0]);
30
+ });
31
+ return results;
32
+ }
33
+ calculateMultiplierBN(diamonds, mines, edgeBps) {
34
+ return this.calculateWinChanceBN(diamonds, mines).pow(-1).multipliedBy((0, utils_1.calculateEdgeMultiplier)(edgeBps));
35
+ }
36
+ calculateWinChanceBN(diamonds, mines) {
37
+ return (0, ncr_1.nCr)(TOTAL_TILES.minus(mines).toNumber(), diamonds).dividedBy((0, ncr_1.nCr)(TOTAL_TILES.toNumber(), diamonds));
38
+ }
39
+ calculatePayoutBN(amount, multiplier) {
40
+ return amount.multipliedBy(multiplier);
41
+ }
42
+ }
43
+ exports.default = new Mines();
44
+ //# sourceMappingURL=mines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mines.js","sourceRoot":"","sources":["../../src/games/mines.ts"],"names":[],"mappings":";;;;;AAAA,gEAAqC;AACrC,oCAA+D;AAC/D,sCAAmC;AACnC,MAAM,UAAU,GAAG,IAAI,sBAAS,CAAC,GAAG,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAC;AACtC,MAAM,KAAK;IAAX;QAoBE,YAAO,GAAG,CAAC,KAAa,EAAE,OAAiB,EAAE,EAAE;YAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC;IAaJ,CAAC;IAlCC,UAAU,CAAC,MAAgB;QACzB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM;aACH,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,kBAAU,EAAC,GAAG,CAAC,CAAC;aAC7B,GAAG,CAAC,CAAC,eAAe,EAAE,OAAO,EAAE,EAAE;YAChC,IAAI,QAAQ,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;YAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACjC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,sBAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACjF;YACD,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,sBAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,sBAAS,CAAC,UAAU,CAAC,CAAC;YAC/G,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEL,OAAO,OAAO,CAAC;IACjB,CAAC;IAMD,qBAAqB,CAAC,QAAgB,EAAE,KAAa,EAAE,OAAe;QACpE,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAA,+BAAuB,EAAC,OAAO,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,oBAAoB,CAAC,QAAgB,EAAE,KAAa;QAClD,OAAO,IAAA,SAAG,EAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAA,SAAG,EAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7G,CAAC;IAED,iBAAiB,CAAC,MAAiB,EAAE,UAAqB;QACxD,OAAO,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;CACF;AAED,kBAAe,IAAI,KAAK,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
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
+ const mines_1 = __importDefault(require("./mines"));
7
+ const edgeBps = 100;
8
+ const results = [
9
+ { mines: 5, diamonds: 20, multiplier: 52598.7, winChance: 0.00001882 },
10
+ { mines: 4, diamonds: 6, multiplier: 3.231037, winChance: 0.30640316 },
11
+ { mines: 3, diamonds: 10, multiplier: 5.004396, winChance: 0.19782609 },
12
+ { mines: 17, diamonds: 3, multiplier: 40.660714, winChance: 0.02434783 },
13
+ ];
14
+ describe('Mines', () => {
15
+ it('be able to calculate the correct win chances', () => {
16
+ results.forEach((item) => {
17
+ expect(mines_1.default.calculateMultiplierBN(item.diamonds, item.mines, edgeBps).decimalPlaces(6).toNumber()).toBe(item.multiplier);
18
+ });
19
+ results.forEach((item) => {
20
+ expect(mines_1.default.calculateWinChanceBN(item.diamonds, item.mines).decimalPlaces(8).toNumber()).toBe(item.winChance);
21
+ });
22
+ });
23
+ });
24
+ //# sourceMappingURL=mines.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mines.spec.js","sourceRoot":"","sources":["../../src/games/mines.spec.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAE5B,MAAM,OAAO,GAAG,GAAG,CAAC;AACpB,MAAM,OAAO,GAAG;IACd,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE;IACtE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;IACtE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;IACvE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE;CACzE,CAAC;AAEF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,CAAC,eAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5H,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,CAAC,eAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import BigNumber from 'bignumber.js';
2
+ export declare enum PlinkoRiskLevel {
3
+ LOW_RISK = "LOW_RISK",
4
+ MEDIUM_RISK = "MEDIUM_RISK",
5
+ HIGH_RISK = "HIGH_RISK"
6
+ }
7
+ interface PlinkConfig {
8
+ rows: number;
9
+ payout: Record<PlinkoRiskLevel, number[]>;
10
+ }
11
+ declare class Plinko {
12
+ configs(): PlinkConfig[];
13
+ calculateChance(rows: number, position: number): BigNumber;
14
+ calculateChances(rows: number): BigNumber[];
15
+ calculateMultiplier(risk: PlinkoRiskLevel, rows: number, results: number[]): BigNumber;
16
+ getResults(hexStr: string[], rows: number): number[];
17
+ calculatePayoutBN(amount: BigNumber, multiplier: BigNumber): BigNumber;
18
+ }
19
+ declare const _default: Plinko;
20
+ export default _default;
@@ -0,0 +1,131 @@
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.PlinkoRiskLevel = void 0;
7
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
+ const ncr_1 = require("../utils/ncr");
9
+ const utils_1 = require("../utils");
10
+ var PlinkoRiskLevel;
11
+ (function (PlinkoRiskLevel) {
12
+ PlinkoRiskLevel["LOW_RISK"] = "LOW_RISK";
13
+ PlinkoRiskLevel["MEDIUM_RISK"] = "MEDIUM_RISK";
14
+ PlinkoRiskLevel["HIGH_RISK"] = "HIGH_RISK";
15
+ })(PlinkoRiskLevel = exports.PlinkoRiskLevel || (exports.PlinkoRiskLevel = {}));
16
+ const BYTE_TOTAL = new bignumber_js_1.default(256);
17
+ const plinkoConfigs = [
18
+ {
19
+ rows: 8,
20
+ payout: {
21
+ [PlinkoRiskLevel.LOW_RISK]: [5.6, 2.1, 1.1, 1, 0.5, 1, 1.1, 2.1, 5.6],
22
+ [PlinkoRiskLevel.MEDIUM_RISK]: [13, 3, 1.3, 0.7, 0.4, 0.7, 1.3, 3, 13],
23
+ [PlinkoRiskLevel.HIGH_RISK]: [29, 4, 1.5, 0.3, 0.2, 0.3, 1.5, 4, 29],
24
+ },
25
+ },
26
+ {
27
+ rows: 9,
28
+ payout: {
29
+ [PlinkoRiskLevel.LOW_RISK]: [5.6, 2, 1.6, 1, 0.7, 0.7, 1, 1.6, 2, 5.6],
30
+ [PlinkoRiskLevel.MEDIUM_RISK]: [18, 4, 1.7, 0.9, 0.5, 0.5, 0.9, 1.7, 4, 18],
31
+ [PlinkoRiskLevel.HIGH_RISK]: [43, 7, 2, 0.6, 0.2, 0.2, 0.6, 2, 7, 43],
32
+ },
33
+ },
34
+ {
35
+ rows: 10,
36
+ payout: {
37
+ [PlinkoRiskLevel.LOW_RISK]: [8.9, 3, 1.4, 1.1, 1, 0.5, 1, 1.1, 1.4, 3, 8.9],
38
+ [PlinkoRiskLevel.MEDIUM_RISK]: [22, 5, 2, 1.4, 0.6, 0.4, 0.6, 1.4, 2, 5, 22],
39
+ [PlinkoRiskLevel.HIGH_RISK]: [76, 10, 3, 0.9, 0.3, 0.2, 0.3, 0.9, 3, 10, 76],
40
+ },
41
+ },
42
+ {
43
+ rows: 11,
44
+ payout: {
45
+ [PlinkoRiskLevel.LOW_RISK]: [8.4, 3, 1.9, 1.3, 1, 0.7, 0.7, 1, 1.3, 1.9, 3, 8.4],
46
+ [PlinkoRiskLevel.MEDIUM_RISK]: [24, 6, 3, 1.8, 0.7, 0.5, 0.5, 0.7, 1.8, 3, 6, 24],
47
+ [PlinkoRiskLevel.HIGH_RISK]: [120, 14, 5.2, 1.4, 0.4, 0.2, 0.2, 0.4, 1.4, 5.2, 14, 120],
48
+ },
49
+ },
50
+ {
51
+ rows: 12,
52
+ payout: {
53
+ [PlinkoRiskLevel.LOW_RISK]: [10, 3, 1.6, 1.4, 1.1, 1, 0.5, 1, 1.1, 1.4, 1.6, 3, 10],
54
+ [PlinkoRiskLevel.MEDIUM_RISK]: [33, 11, 4, 2, 1.1, 0.6, 0.3, 0.6, 1.1, 2, 4, 11, 33],
55
+ [PlinkoRiskLevel.HIGH_RISK]: [170, 24, 8.1, 2, 0.7, 0.2, 0.2, 0.2, 0.7, 2, 8.1, 24, 170],
56
+ },
57
+ },
58
+ {
59
+ rows: 13,
60
+ payout: {
61
+ [PlinkoRiskLevel.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],
62
+ [PlinkoRiskLevel.MEDIUM_RISK]: [43, 13, 6, 3, 1.3, 0.7, 0.4, 0.4, 0.7, 1.3, 3, 6, 13, 43],
63
+ [PlinkoRiskLevel.HIGH_RISK]: [260, 37, 11, 4, 1, 0.2, 0.2, 0.2, 0.2, 1, 4, 11, 37, 260],
64
+ },
65
+ },
66
+ {
67
+ rows: 14,
68
+ payout: {
69
+ [PlinkoRiskLevel.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],
70
+ [PlinkoRiskLevel.MEDIUM_RISK]: [58, 15, 7, 4, 1.9, 1, 0.5, 0.2, 0.5, 1, 1.9, 4, 7, 15, 58],
71
+ [PlinkoRiskLevel.HIGH_RISK]: [420, 56, 18, 5, 1.9, 0.3, 0.2, 0.2, 0.2, 0.3, 1.9, 5, 18, 56, 420],
72
+ },
73
+ },
74
+ {
75
+ rows: 15,
76
+ payout: {
77
+ [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],
78
+ [PlinkoRiskLevel.MEDIUM_RISK]: [88, 18, 11, 5, 3, 1.3, 0.5, 0.3, 0.3, 0.5, 1.3, 3, 5, 11, 18, 88],
79
+ [PlinkoRiskLevel.HIGH_RISK]: [620, 83, 27, 8, 3, 0.5, 0.2, 0.2, 0.2, 0.2, 0.5, 3, 8, 27, 83, 620],
80
+ },
81
+ },
82
+ {
83
+ rows: 16,
84
+ payout: {
85
+ [PlinkoRiskLevel.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],
86
+ [PlinkoRiskLevel.MEDIUM_RISK]: [110, 41, 10, 5, 3, 1.5, 1, 0.5, 0.3, 0.5, 1, 1.5, 3, 5, 10, 41, 110],
87
+ [PlinkoRiskLevel.HIGH_RISK]: [1000, 130, 26, 9, 4, 2, 0.2, 0.2, 0.2, 0.2, 0.2, 2, 4, 9, 26, 130, 1000],
88
+ },
89
+ },
90
+ ];
91
+ class Plinko {
92
+ configs() {
93
+ return plinkoConfigs;
94
+ }
95
+ calculateChance(rows, position) {
96
+ const possibleOutcomes = (0, ncr_1.nCr)(rows, position);
97
+ const sampleSpace = new bignumber_js_1.default(2).pow(rows);
98
+ return possibleOutcomes.dividedBy(sampleSpace);
99
+ }
100
+ calculateChances(rows) {
101
+ return [...Array(rows + 1).keys()].map((position) => this.calculateChance(rows, position));
102
+ }
103
+ calculateMultiplier(risk, rows, results) {
104
+ const position = results.reduce((sum, result) => sum + result, 0);
105
+ return new bignumber_js_1.default(this.configs().find((config) => config.rows === rows).payout[risk][position]);
106
+ }
107
+ getResults(hexStr, rows) {
108
+ const results = [];
109
+ hexStr.map(utils_1.hexToBytes).every((gameResultBytes) => {
110
+ for (let i = 0; i < 8; i++) {
111
+ if (results.length >= rows) {
112
+ return false;
113
+ }
114
+ let position = new bignumber_js_1.default(0);
115
+ for (let j = 0; j < 4; j++) {
116
+ const value = gameResultBytes[3 * i + j];
117
+ position = position.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(j + 1)));
118
+ }
119
+ position = position.multipliedBy(2).integerValue(bignumber_js_1.default.ROUND_DOWN);
120
+ results.push(position.toNumber());
121
+ }
122
+ return true;
123
+ });
124
+ return results;
125
+ }
126
+ calculatePayoutBN(amount, multiplier) {
127
+ return amount.multipliedBy(multiplier);
128
+ }
129
+ }
130
+ exports.default = new Plinko();
131
+ //# sourceMappingURL=plinko.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plinko.js","sourceRoot":"","sources":["../../src/games/plinko.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,sCAAmC;AACnC,oCAAsC;AAEtC,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,wCAAqB,CAAA;IACrB,8CAA2B,CAAA;IAC3B,0CAAuB,CAAA;AACzB,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B;AAOD,MAAM,UAAU,GAAG,IAAI,sBAAS,CAAC,GAAG,CAAC,CAAC;AAEtC,MAAM,aAAa,GAAkB;IACnC;QACE,IAAI,EAAE,CAAC;QACP,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;YACrE,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACtE,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;SACrE;KACF;IACD;QACE,IAAI,EAAE,CAAC;QACP,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;YACtE,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3E,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;SACtE;KACF;IACD;QACE,IAAI,EAAE,EAAE;QACR,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;YAC3E,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5E,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;SAC7E;KACF;IACD;QACE,IAAI,EAAE,EAAE;QACR,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;YAChF,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjF,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;SACxF;KACF;IACD;QACE,IAAI,EAAE,EAAE;QACR,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACnF,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YACpF,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;SACzF;KACF;IACD;QACE,IAAI,EAAE,EAAE;QACR,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;YAC1F,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YACzF,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;SACxF;KACF;IACD;QACE,IAAI,EAAE,EAAE;QACR,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;YAC/F,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YAC1F,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;SACjG;KACF;IACD;QACE,IAAI,EAAE,EAAE;QACR,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1F,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACjG,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;SAClG;KACF;IACD;QACE,IAAI,EAAE,EAAE;QACR,MAAM,EAAE;YACN,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACnG,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;YACpG,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;SACvG;KACF;CACF,CAAC;AAEF,MAAM,MAAM;IACV,OAAO;QACL,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,eAAe,CAAC,IAAY,EAAE,QAAgB;QAC5C,MAAM,gBAAgB,GAAG,IAAA,SAAG,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,mBAAmB,CAAC,IAAqB,EAAE,IAAY,EAAE,OAAiB;QACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,sBAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrG,CAAC;IAED,UAAU,CAAC,MAAgB,EAAE,IAAY;QACvC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,kBAAU,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,EAAE;YAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;oBAC1B,OAAO,KAAK,CAAC;iBACd;gBACD,IAAI,QAAQ,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;gBAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACzC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,sBAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjF;gBAED,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,sBAAS,CAAC,UAAU,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;aACnC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,MAAiB,EAAE,UAAqB;QACxD,OAAO,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;CACF;AAED,kBAAe,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,32 @@
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
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
7
+ const plinko_1 = __importDefault(require("./plinko"));
8
+ const edgeBps = 100;
9
+ const thresholdBps = 20;
10
+ const upperThreshold = edgeBps + thresholdBps;
11
+ const lowerThreshold = edgeBps - thresholdBps;
12
+ describe('Plinko', () => {
13
+ it('ensure we we maintain enough edge', () => {
14
+ plinko_1.default.configs().forEach(({ rows, payout }) => {
15
+ Object.entries(payout).forEach(([riskLevel, riskPayout]) => {
16
+ if (riskPayout.length !== rows + 1) {
17
+ throw new Error(`rows: ${rows} riskLevel: ${riskLevel} has too many or too few payout options`);
18
+ }
19
+ let expectedPayout = new bignumber_js_1.default(0);
20
+ Object.values(riskPayout).forEach((payoutValue, position) => {
21
+ const chance = plinko_1.default.calculateChance(rows, position);
22
+ expectedPayout = expectedPayout.plus(chance.multipliedBy(payoutValue));
23
+ });
24
+ const riskLevelEdge = new bignumber_js_1.default(1).minus(expectedPayout).multipliedBy(10000).toNumber();
25
+ if (riskLevelEdge < lowerThreshold || riskLevelEdge > upperThreshold) {
26
+ throw new Error(`rows: ${rows} riskLevel: ${riskLevel} exceeding edge threshold. Currently at ${riskLevelEdge}% edge`);
27
+ }
28
+ });
29
+ });
30
+ });
31
+ });
32
+ //# sourceMappingURL=plinko.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plinko.spec.js","sourceRoot":"","sources":["../../src/games/plinko.spec.ts"],"names":[],"mappings":";;;;;AAAA,gEAAqC;AACrC,sDAA8B;AAE9B,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,MAAM,cAAc,GAAG,OAAO,GAAG,YAAY,CAAC;AAC9C,MAAM,cAAc,GAAG,OAAO,GAAG,YAAY,CAAC;AAE9C,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,gBAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE;gBACzD,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,EAAE;oBAClC,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,eAAe,SAAS,yCAAyC,CAAC,CAAC;iBACjG;gBAED,IAAI,cAAc,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE;oBAC1D,MAAM,MAAM,GAAG,gBAAM,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAEtD,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;gBACzE,CAAC,CAAC,CAAC;gBAEH,MAAM,aAAa,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,KAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAE7F,IAAI,aAAa,GAAG,cAAc,IAAI,aAAa,GAAG,cAAc,EAAE;oBACpE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,eAAe,SAAS,2CAA2C,aAAa,QAAQ,CAAC,CAAC;iBACxH;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export { default as dice } from './games/dice';
2
+ export * from './regex';
3
+ export { Chain } from './enums/chain';
4
+ export * from './utils';
5
+ export { default as mines } from './games/mines';
6
+ export { default as plinko } from './games/plinko';
package/lib/index.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.plinko = exports.mines = exports.Chain = exports.dice = void 0;
21
+ var dice_1 = require("./games/dice");
22
+ Object.defineProperty(exports, "dice", { enumerable: true, get: function () { return __importDefault(dice_1).default; } });
23
+ __exportStar(require("./regex"), exports);
24
+ var chain_1 = require("./enums/chain");
25
+ Object.defineProperty(exports, "Chain", { enumerable: true, get: function () { return chain_1.Chain; } });
26
+ __exportStar(require("./utils"), exports);
27
+ var mines_1 = require("./games/mines");
28
+ Object.defineProperty(exports, "mines", { enumerable: true, get: function () { return __importDefault(mines_1).default; } });
29
+ var plinko_1 = require("./games/plinko");
30
+ Object.defineProperty(exports, "plinko", { enumerable: true, get: function () { return __importDefault(plinko_1).default; } });
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,qCAA+C;AAAtC,6GAAA,OAAO,OAAQ;AACxB,0CAAwB;AACxB,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,0CAAwB;AACxB,uCAAiD;AAAxC,+GAAA,OAAO,OAAS;AACzB,yCAAmD;AAA1C,iHAAA,OAAO,OAAU"}
@@ -0,0 +1,3 @@
1
+ export declare const PWD_REGEX: RegExp;
2
+ export declare const USERNAME_REGEX: RegExp;
3
+ export declare const PROMOTION_CODE_REGEX: RegExp;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROMOTION_CODE_REGEX = exports.USERNAME_REGEX = exports.PWD_REGEX = void 0;
4
+ exports.PWD_REGEX = /^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S+$).{8,24}$/i;
5
+ exports.USERNAME_REGEX = /^[a-zA-Z\d]{3,16}$/i;
6
+ exports.PROMOTION_CODE_REGEX = /^[A-Z_\-\d]{3,25}$/;
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/regex/index.ts"],"names":[],"mappings":";;;AACa,QAAA,SAAS,GAAG,6CAA6C,CAAC;AAE1D,QAAA,cAAc,GAAG,qBAAqB,CAAC;AAEvC,QAAA,oBAAoB,GAAG,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};