@omnitronix/bonnys-fortune-game-engine 1.0.8 → 1.2.0-beta.1

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 (121) hide show
  1. package/dist/__tests__/bonnys-fortune-v1.game-engine.test.d.ts +1 -0
  2. package/dist/bonnys-fortune-v1.game-engine.d.ts +32 -0
  3. package/dist/bonnys-fortune-v1.game-engine.js +6 -2
  4. package/dist/bonnys-fortune-v1.game-engine.js.map +1 -1
  5. package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +4 -0
  6. package/dist/config/game-logic-config/game-logic-config-loader.d.ts +3 -0
  7. package/dist/config/game-logic-config/game-logic-config.d.ts +2 -0
  8. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +4 -0
  9. package/dist/config/reel-strips-config/reel-strip-option.dto.d.ts +4 -0
  10. package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +3 -0
  11. package/dist/config/reel-strips-config/reel-strips-config.dto.d.ts +5 -0
  12. package/dist/config/reel-strips-config/reel.dto.d.ts +5 -0
  13. package/dist/domain/game-round.types.d.ts +9 -0
  14. package/dist/domain/mappers/reel-strips-config.mapper.d.ts +4 -0
  15. package/dist/domain/reel-strip-option.d.ts +7 -0
  16. package/dist/domain/reel-strips-config.d.ts +9 -0
  17. package/dist/domain/reel.d.ts +8 -0
  18. package/dist/domain/types/cheat-trigger-bonus-command.d.ts +5 -0
  19. package/dist/domain/types/cheat-trigger-bonus-request.dto.d.ts +5 -0
  20. package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +5 -0
  21. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +5 -0
  22. package/dist/domain/types/game-spin-command.d.ts +8 -0
  23. package/dist/domain/types/game-spin-input.dto.d.ts +8 -0
  24. package/dist/domain/types/game-spin-output.dto.d.ts +119 -0
  25. package/dist/domain/types/game-symbols.response.dto.d.ts +10 -0
  26. package/dist/domain/types/reel-strip-option.dto.d.ts +4 -0
  27. package/dist/domain/types/reel-strips-config.dto.d.ts +5 -0
  28. package/dist/domain/types/reel.dto.d.ts +5 -0
  29. package/dist/domain/types/start-bonus-round-command.d.ts +8 -0
  30. package/dist/domain/types/start-bonus-round-input.dto.d.ts +10 -0
  31. package/dist/game-engine.interface.d.ts +41 -0
  32. package/dist/helpers/generate-hash.d.ts +1 -0
  33. package/dist/helpers/number-helper.d.ts +23 -0
  34. package/dist/helpers/optional-boolean-mapper.d.ts +1 -0
  35. package/dist/helpers/uuid-helper.d.ts +3 -0
  36. package/dist/helpers/validation-helper.d.ts +14 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/logger/logger.d.ts +22 -0
  39. package/dist/logic/bonnys-fortune.game-logic.d.ts +32 -0
  40. package/dist/logic/bonnys-fortune.spin-generator.d.ts +19 -0
  41. package/dist/logic/bonnys-fortune.types.d.ts +170 -0
  42. package/dist/logic/bonnys-fortune.win-calculator.d.ts +10 -0
  43. package/dist/logic/game-logic-config.interface.d.ts +178 -0
  44. package/dist/logic/handlers/base-game.handler.d.ts +15 -0
  45. package/dist/logic/handlers/collect-feature-bonus.handler.d.ts +13 -0
  46. package/dist/logic/handlers/free-spins-bonus.handler.d.ts +11 -0
  47. package/dist/logic/handlers/steering-to-the-fortune-bonus.handler.d.ts +11 -0
  48. package/dist/logic/handlers/treasure-hunt-bonus.handler.d.ts +15 -0
  49. package/dist/rng/DummyRngClient.d.ts +18 -0
  50. package/dist/rng/DummyRngClient.js +1 -11
  51. package/dist/rng/DummyRngClient.js.map +1 -1
  52. package/dist/rng/rng-client.factory.d.ts +7 -0
  53. package/dist/rng/rng-client.factory.js +2 -1
  54. package/dist/rng/rng-client.factory.js.map +1 -1
  55. package/dist/rng/rng-client.interface.d.ts +16 -0
  56. package/dist/rng/rng-service.d.ts +26 -0
  57. package/dist/validation/abstract-game-logic-config.validator.d.ts +4 -0
  58. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.d.ts +129 -0
  59. package/dist/validation/bonnys-fortune/bonnys-fortune-config.validator.d.ts +5 -0
  60. package/dist/validation/custom-decorators/IsNestedIntArray.d.ts +2 -0
  61. package/dist/validation/game-logic-config-validation.service.d.ts +8 -0
  62. package/dist/validation/reel-strips-config-validation.service.d.ts +5 -0
  63. package/package.json +4 -3
  64. package/src/__tests__/bonnys-fortune-v1.game-engine.test.ts +80 -0
  65. package/src/bonnys-fortune-v1.game-engine.ts +285 -0
  66. package/src/config/game-logic-config/file-system.game-logic-config-loader.ts +27 -0
  67. package/src/config/game-logic-config/game-logic-config-loader.ts +3 -0
  68. package/src/config/game-logic-config/game-logic-config.ts +380 -0
  69. package/src/config/reel-strips-config/file-system.reel-strips-config-loader.ts +43 -0
  70. package/src/config/reel-strips-config/reel-strip-option.dto.ts +13 -0
  71. package/src/config/reel-strips-config/reel-strips-config-loader.ts +9 -0
  72. package/src/config/reel-strips-config/reel-strips-config.dto.ts +16 -0
  73. package/src/config/reel-strips-config/reel.dto.ts +16 -0
  74. package/src/config/reel-strips-config/reels-BASE.csv +52 -0
  75. package/src/config/reel-strips-config/reels-BONUS.csv +52 -0
  76. package/src/domain/game-round.types.ts +10 -0
  77. package/src/domain/mappers/reel-strips-config.mapper.ts +16 -0
  78. package/src/domain/reel-strip-option.ts +15 -0
  79. package/src/domain/reel-strips-config.ts +21 -0
  80. package/src/domain/reel.ts +17 -0
  81. package/src/domain/types/cheat-trigger-bonus-command.ts +5 -0
  82. package/src/domain/types/cheat-trigger-bonus-request.dto.ts +5 -0
  83. package/src/domain/types/cheat-update-bonus-meter-progress-command.ts +6 -0
  84. package/src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts +5 -0
  85. package/src/domain/types/game-spin-command.ts +8 -0
  86. package/src/domain/types/game-spin-input.dto.ts +8 -0
  87. package/src/domain/types/game-spin-output.dto.ts +142 -0
  88. package/src/domain/types/game-symbols.response.dto.ts +11 -0
  89. package/src/domain/types/reel-strip-option.dto.ts +13 -0
  90. package/src/domain/types/reel-strips-config.dto.ts +15 -0
  91. package/src/domain/types/reel.dto.ts +15 -0
  92. package/src/domain/types/start-bonus-round-command.ts +8 -0
  93. package/src/domain/types/start-bonus-round-input.dto.ts +10 -0
  94. package/src/game-engine.interface.ts +59 -0
  95. package/src/helpers/generate-hash.ts +5 -0
  96. package/src/helpers/number-helper.ts +41 -0
  97. package/src/helpers/optional-boolean-mapper.ts +5 -0
  98. package/src/helpers/uuid-helper.ts +7 -0
  99. package/src/helpers/validation-helper.ts +27 -0
  100. package/src/index.ts +3 -0
  101. package/src/logger/logger.ts +178 -0
  102. package/src/logic/bonnys-fortune.game-logic.ts +480 -0
  103. package/src/logic/bonnys-fortune.spin-generator.ts +277 -0
  104. package/src/logic/bonnys-fortune.types.ts +223 -0
  105. package/src/logic/bonnys-fortune.win-calculator.ts +210 -0
  106. package/src/logic/game-logic-config.interface.ts +174 -0
  107. package/src/logic/handlers/base-game.handler.ts +213 -0
  108. package/src/logic/handlers/collect-feature-bonus.handler.ts +301 -0
  109. package/src/logic/handlers/free-spins-bonus.handler.ts +119 -0
  110. package/src/logic/handlers/steering-to-the-fortune-bonus.handler.ts +118 -0
  111. package/src/logic/handlers/treasure-hunt-bonus.handler.ts +232 -0
  112. package/src/rng/DummyRngClient.ts +108 -0
  113. package/src/rng/rng-client.factory.ts +27 -0
  114. package/src/rng/rng-client.interface.ts +38 -0
  115. package/src/rng/rng-service.ts +130 -0
  116. package/src/validation/abstract-game-logic-config.validator.ts +20 -0
  117. package/src/validation/bonnys-fortune/bonnys-fortune-config.dto.ts +371 -0
  118. package/src/validation/bonnys-fortune/bonnys-fortune-config.validator.ts +8 -0
  119. package/src/validation/custom-decorators/IsNestedIntArray.ts +29 -0
  120. package/src/validation/game-logic-config-validation.service.ts +28 -0
  121. package/src/validation/reel-strips-config-validation.service.ts +29 -0
@@ -0,0 +1,32 @@
1
+ import { BonnysFortunePrivateState, BonnysFortunePublicState } from './logic/bonnys-fortune.types';
2
+ import { CommandProcessingResult, GameActionCommand, GameEngine, GameEngineConfig, GameEngineInfo } from './game-engine.interface';
3
+ import { BonnysFortuneGameLogic } from './logic/bonnys-fortune.game-logic';
4
+ import { GameLogicConfigLoader } from './config/game-logic-config/game-logic-config-loader';
5
+ import { GameLogicConfigValidationService } from './validation/game-logic-config-validation.service';
6
+ import { Logger } from './logger/logger';
7
+ import { ReelStripsConfigLoader } from './config/reel-strips-config/reel-strips-config-loader';
8
+ import { ReelStripsConfigMapper } from './domain/mappers/reel-strips-config.mapper';
9
+ import { ReelStripsConfigValidationService } from './validation/reel-strips-config-validation.service';
10
+ import { RngService } from './rng/rng-service';
11
+ export declare class BonnysFortuneV1GameEngine implements GameEngine<BonnysFortunePublicState, BonnysFortunePrivateState, any> {
12
+ private readonly gameCode;
13
+ private readonly version;
14
+ private readonly rtp;
15
+ private readonly gameType;
16
+ private readonly gameName;
17
+ private readonly provider;
18
+ private config;
19
+ private reels;
20
+ readonly configOutPort: GameLogicConfigLoader;
21
+ readonly reelsOutPort: ReelStripsConfigLoader;
22
+ readonly configValidator: GameLogicConfigValidationService;
23
+ readonly reelsValidator: ReelStripsConfigValidationService;
24
+ readonly reelMapper: ReelStripsConfigMapper;
25
+ readonly gameLogic: BonnysFortuneGameLogic;
26
+ readonly rngService: RngService;
27
+ readonly logger: Logger;
28
+ constructor(config?: GameEngineConfig);
29
+ getGameEngineInfo(): GameEngineInfo;
30
+ private preload;
31
+ processCommand(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, command: GameActionCommand): Promise<CommandProcessingResult<BonnysFortunePublicState, BonnysFortunePrivateState, any>>;
32
+ }
@@ -13,15 +13,17 @@ const reel_strips_config_validation_service_1 = require("./validation/reel-strip
13
13
  const rng_client_factory_1 = require("./rng/rng-client.factory");
14
14
  const rng_service_1 = require("./rng/rng-service");
15
15
  class BonnysFortuneV1GameEngine {
16
- constructor() {
16
+ constructor(config = {}) {
17
17
  this.gameCode = 'bonnys-fortune';
18
18
  this.version = '1.0.0';
19
19
  this.rtp = 96;
20
20
  this.gameType = 'slot';
21
+ this.gameName = "Bonny's Fortune";
22
+ this.provider = 'Omnitronix';
21
23
  this.logger = new logger_1.Logger('BonnysFortuneV1Engine');
22
24
  this.configOutPort = new file_system_game_logic_config_loader_1.FileSystemGameLogicConfigLoader();
23
25
  this.reelsOutPort = new file_system_reel_strips_config_loader_1.FileSystemReelStripsConfigLoader();
24
- const rngClient = rng_client_factory_1.RngClientFactory.create();
26
+ const rngClient = rng_client_factory_1.RngClientFactory.create({ metrics: config.metrics });
25
27
  this.rngService = new rng_service_1.RngService(rngClient);
26
28
  this.configValidator = new game_logic_config_validation_service_1.GameLogicConfigValidationService();
27
29
  this.reelsValidator = new reel_strips_config_validation_service_1.ReelStripsConfigValidationService();
@@ -35,6 +37,8 @@ class BonnysFortuneV1GameEngine {
35
37
  version: this.version,
36
38
  rtp: this.rtp,
37
39
  gameType: this.gameType,
40
+ gameName: this.gameName,
41
+ provider: this.provider,
38
42
  };
39
43
  }
40
44
  async preload() {
@@ -1 +1 @@
1
- {"version":3,"file":"bonnys-fortune-v1.game-engine.js","sourceRoot":"","sources":["../src/bonnys-fortune-v1.game-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bonnys-fortune-v1.game-engine.js","sourceRoot":"","sources":["../src/bonnys-fortune-v1.game-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { GameLogicConfigLoader } from './game-logic-config-loader';
2
+ export declare class FileSystemGameLogicConfigLoader implements GameLogicConfigLoader {
3
+ loadConfig<T>(gameId: string, variantId: string): Promise<T | null>;
4
+ }
@@ -0,0 +1,3 @@
1
+ export interface GameLogicConfigLoader {
2
+ loadConfig<T>(gameId: string, variantId: string): Promise<T | null>;
3
+ }
@@ -0,0 +1,2 @@
1
+ import { BonnysFortuneGameLogicConfigInterface } from '../../logic/game-logic-config.interface';
2
+ export declare const gameLogicConfig: BonnysFortuneGameLogicConfigInterface;
@@ -0,0 +1,4 @@
1
+ import { ReelStripsConfigLoader } from './reel-strips-config-loader';
2
+ export declare class FileSystemReelStripsConfigLoader implements ReelStripsConfigLoader {
3
+ loadConfig(gameId: string, variantId: string, reelSetName: string, reelsCount: number, optionsCount: number): Promise<number[][][]>;
4
+ }
@@ -0,0 +1,4 @@
1
+ export declare class ReelStripOptionDto {
2
+ symbols: number[];
3
+ constructor(symbols: number[]);
4
+ }
@@ -0,0 +1,3 @@
1
+ export interface ReelStripsConfigLoader {
2
+ loadConfig(gameId: string, variantId: string, reelSetName: string, reelsCount: number, optionsCount: number): Promise<number[][][]>;
3
+ }
@@ -0,0 +1,5 @@
1
+ import { ReelDto } from './reel.dto';
2
+ export declare class ReelStripsConfigDto {
3
+ reels: ReelDto[];
4
+ constructor(reels: ReelDto[]);
5
+ }
@@ -0,0 +1,5 @@
1
+ import { ReelStripOptionDto } from './reel-strip-option.dto';
2
+ export declare class ReelDto {
3
+ options: ReelStripOptionDto[];
4
+ constructor(options: ReelStripOptionDto[]);
5
+ }
@@ -0,0 +1,9 @@
1
+ export declare enum GameRoundType {
2
+ BASE = "BASE",
3
+ BONUS = "BONUS"
4
+ }
5
+ export type BonusProgress = {
6
+ completed: number;
7
+ remaining: number;
8
+ total: number;
9
+ };
@@ -0,0 +1,4 @@
1
+ import { ReelStripsConfig } from '../reel-strips-config';
2
+ export declare class ReelStripsConfigMapper {
3
+ mapRawToDomain(rawReels: number[][][]): ReelStripsConfig;
4
+ }
@@ -0,0 +1,7 @@
1
+ export declare class ReelStripOption {
2
+ readonly symbols: number[];
3
+ constructor(symbols: number[]);
4
+ getSymbols(): number[];
5
+ get length(): number;
6
+ getSymbolAt(position: number): number;
7
+ }
@@ -0,0 +1,9 @@
1
+ import { Reel } from './reel';
2
+ export declare class ReelStripsConfig {
3
+ readonly reels: Reel[];
4
+ constructor(reels: Reel[]);
5
+ getReels(): Reel[];
6
+ getReel(index: number): Reel;
7
+ get reelsCount(): number;
8
+ get optionsCount(): number;
9
+ }
@@ -0,0 +1,8 @@
1
+ import { ReelStripOption } from './reel-strip-option';
2
+ export declare class Reel {
3
+ readonly options: ReelStripOption[];
4
+ constructor(options: ReelStripOption[]);
5
+ getOptions(): ReelStripOption[];
6
+ getOption(index: number): ReelStripOption;
7
+ get numberOfOptions(): number;
8
+ }
@@ -0,0 +1,5 @@
1
+ export type CheatTriggerBonusCommand = {
2
+ sessionId: string;
3
+ bonusType: string;
4
+ betAmount: number;
5
+ };
@@ -0,0 +1,5 @@
1
+ export interface CheatTriggerBonusRequestDto {
2
+ sessionId: string;
3
+ bonusType: string;
4
+ betAmount: number;
5
+ }
@@ -0,0 +1,5 @@
1
+ export type CheatUpdateBonusMeterProgressCommand = {
2
+ sessionId: string;
3
+ bonusType: string;
4
+ progress: number;
5
+ };
@@ -0,0 +1,5 @@
1
+ export interface CheatUpdateBonusMeterProgressRequestDto {
2
+ sessionId: string;
3
+ bonusType: string;
4
+ progress: number;
5
+ }
@@ -0,0 +1,8 @@
1
+ export type GameSpinCommand = {
2
+ sessionId: string;
3
+ betAmount: number;
4
+ gameCode: string;
5
+ gameVersion: string;
6
+ lines?: number;
7
+ creditsPerLine?: number;
8
+ };
@@ -0,0 +1,8 @@
1
+ export interface GameSpinInputDto {
2
+ sessionId: string;
3
+ betAmount: number;
4
+ gameCode: string;
5
+ gameVersion: string;
6
+ lines?: number;
7
+ creditsPerLine?: number;
8
+ }
@@ -0,0 +1,119 @@
1
+ export declare enum SpinType {
2
+ BASE_GAME_SPIN = "BASE_GAME_SPIN",
3
+ BONUS_GAME_1_SPIN = "BONUS_GAME_1_SPIN",
4
+ BONUS_GAME_2_SPIN = "BONUS_GAME_2_SPIN",
5
+ BONUS_GAME_3_SPIN = "BONUS_GAME_3_SPIN",
6
+ COLLECT_FEATURE_SPIN = "COLLECT_FEATURE_SPIN"
7
+ }
8
+ export declare enum PrizeType {
9
+ MULTIPLIER = "MULTIPLIER",
10
+ BONUS = "BONUS"
11
+ }
12
+ /** Triggered bonus */
13
+ export interface TriggeredBonusDto {
14
+ bonusId: string;
15
+ bonusType: string;
16
+ betAmount: number;
17
+ }
18
+ /** Winning line */
19
+ export interface WinningLineDto {
20
+ win: number;
21
+ ways: number;
22
+ symbol: number;
23
+ positions: number[][];
24
+ multiplier: number;
25
+ consecutiveReels: number;
26
+ }
27
+ /** Win result */
28
+ export interface WinResultDto {
29
+ totalWin: number;
30
+ winningLines: WinningLineDto[];
31
+ }
32
+ /** Bonus meter */
33
+ export interface BonusMeterDto {
34
+ progress: number;
35
+ symbolId: number;
36
+ threshold: number;
37
+ symbolName: string;
38
+ }
39
+ /** Public state */
40
+ export interface PublicStateDto {
41
+ bonusMeters: Record<string, BonusMeterDto>;
42
+ }
43
+ /** Base Game Spin */
44
+ export interface BaseGameSpinResultDto {
45
+ spinType: SpinType;
46
+ screen: number[][];
47
+ winResult: WinResultDto;
48
+ playerWinning: number;
49
+ nextSpinType: SpinType;
50
+ triggeredBonus?: TriggeredBonusDto;
51
+ }
52
+ /** Treasure Hunt (Bonus Game 1) */
53
+ export interface TreasureHuntSpinResultDto {
54
+ spinType: SpinType;
55
+ selection: string;
56
+ multiplier: number;
57
+ multiplierCounts: Record<string, number>;
58
+ winningMultiplier: number | null;
59
+ winningCount: number;
60
+ totalMultiplier: number;
61
+ }
62
+ /** Free Spin (Bonus Game 2) */
63
+ export interface FreeSpinResultDto {
64
+ spinType: SpinType;
65
+ screen: number[][];
66
+ playerWinning: number;
67
+ nextSpinType: SpinType;
68
+ multiplier: number;
69
+ }
70
+ /** Steering to the Fortune (Bonus Game 3) */
71
+ export interface SteeringToTheFortuneResultDto {
72
+ spinType: SpinType;
73
+ playerWinning: number;
74
+ nextSpinType: SpinType;
75
+ prizeType: PrizeType;
76
+ prizeValue?: number | string;
77
+ totalMultiplier: number;
78
+ triggeredBonus?: TriggeredBonusDto;
79
+ }
80
+ /** Collect Feature Spin */
81
+ export interface CollectFeatureSpinResultDto {
82
+ spinIndex?: number;
83
+ spinType: SpinType;
84
+ symbols?: string[];
85
+ slashed?: boolean[];
86
+ currentValues?: number;
87
+ currentMultipliers?: number;
88
+ totalValues?: number;
89
+ totalMultipliers?: number;
90
+ playerWinning: number;
91
+ totalWin?: number;
92
+ spinsLeft?: number;
93
+ nextSpinType: SpinType;
94
+ }
95
+ export interface BaseGameSpinResultWrapperDto {
96
+ result: BaseGameSpinResultDto;
97
+ }
98
+ export interface FreeSpinResultWrapperDto {
99
+ result: FreeSpinResultDto;
100
+ }
101
+ export interface TreasureHuntSpinResultWrapperDto {
102
+ result: TreasureHuntSpinResultDto;
103
+ }
104
+ export interface SteeringToTheFortuneResultWrapperDto {
105
+ result: SteeringToTheFortuneResultDto;
106
+ }
107
+ export interface CollectFeatureSpinResultWrapperDto {
108
+ result: CollectFeatureSpinResultDto;
109
+ }
110
+ /** Game Spin Output DTO */
111
+ export interface GameSpinOutputDto {
112
+ sessionId: string;
113
+ balance: number;
114
+ betAmount: number;
115
+ balanceBeforeSpin: number;
116
+ outcome: BaseGameSpinResultWrapperDto;
117
+ publicState: PublicStateDto;
118
+ lastSpin: BaseGameSpinResultWrapperDto | FreeSpinResultWrapperDto | TreasureHuntSpinResultWrapperDto | SteeringToTheFortuneResultWrapperDto | CollectFeatureSpinResultWrapperDto | null;
119
+ }
@@ -0,0 +1,10 @@
1
+ export interface GameSymbol {
2
+ symbolId: number;
3
+ name: string;
4
+ multipliers: Record<'x3' | 'x4' | 'x5', number>;
5
+ isWild: boolean;
6
+ isScatter: boolean;
7
+ }
8
+ export declare class GameSymbolsResponseDto {
9
+ symbols: GameSymbol[];
10
+ }
@@ -0,0 +1,4 @@
1
+ export declare class ReelStripOptionDto {
2
+ symbols: number[];
3
+ constructor(symbols: number[]);
4
+ }
@@ -0,0 +1,5 @@
1
+ import { ReelDto } from './reel.dto';
2
+ export declare class ReelStripsConfigDto {
3
+ reels: ReelDto[];
4
+ constructor(reels: ReelDto[]);
5
+ }
@@ -0,0 +1,5 @@
1
+ import { ReelStripOptionDto } from './reel-strip-option.dto';
2
+ export declare class ReelDto {
3
+ options: ReelStripOptionDto[];
4
+ constructor(options: ReelStripOptionDto[]);
5
+ }
@@ -0,0 +1,8 @@
1
+ export type StartBonusRoundCommand = {
2
+ sessionId: string;
3
+ bonusId: string;
4
+ bonusType: string;
5
+ betAmount: number;
6
+ gameCode: string;
7
+ gameVersion: string;
8
+ };
@@ -0,0 +1,10 @@
1
+ export interface StartBonusRoundInputDto {
2
+ sessionId: string;
3
+ bonusType: string;
4
+ betAmount: number;
5
+ gameCode: string;
6
+ gameVersion: string;
7
+ lines?: number;
8
+ creditsPerLine?: number;
9
+ bonusId: string;
10
+ }
@@ -0,0 +1,41 @@
1
+ import { RngClientConfig } from '@omnitronix/rng-client-core';
2
+ export type GameEngineMetricsHandlers = RngClientConfig['metrics']['handlers'];
3
+ export interface GameEngineConfig {
4
+ metrics?: {
5
+ handlers: GameEngineMetricsHandlers;
6
+ };
7
+ }
8
+ export interface GameEngineInfo {
9
+ gameCode: string;
10
+ version: string;
11
+ rtp: number;
12
+ gameType: string;
13
+ gameName: string;
14
+ provider: string;
15
+ }
16
+ export interface RngOutcomeRecord {
17
+ result: number;
18
+ seed: number;
19
+ min: number;
20
+ max: number;
21
+ }
22
+ export type RngOutcome = {
23
+ [actionId: string]: RngOutcomeRecord;
24
+ };
25
+ export interface CommandProcessingResult<TPublicState = any, TPrivateState = any, TOutcome = any> {
26
+ success: boolean;
27
+ publicState: TPublicState;
28
+ privateState: TPrivateState;
29
+ outcome?: TOutcome;
30
+ message?: string;
31
+ rngOutcome?: RngOutcome;
32
+ }
33
+ export interface GameActionCommand<TPayload = any> {
34
+ id: string;
35
+ type: string;
36
+ payload?: TPayload;
37
+ }
38
+ export interface GameEngine<TPublicState = any, TPrivateState = any, TOutcome = any> {
39
+ processCommand(publicState: TPublicState, privateState: TPrivateState, command: GameActionCommand): Promise<CommandProcessingResult<TPublicState, TPrivateState, TOutcome>>;
40
+ getGameEngineInfo(): GameEngineInfo;
41
+ }
@@ -0,0 +1 @@
1
+ export declare const generateHash: (input: string) => string;
@@ -0,0 +1,23 @@
1
+ export declare class NumberHelper {
2
+ /**
3
+ * Safely formats a number to the specified decimal places,
4
+ * minimizing floating-point issues.
5
+ */
6
+ static toFixedNumber(value: number, decimals: number): number;
7
+ /**
8
+ * Safely adds two numbers and formats result.
9
+ */
10
+ static safeSum(a: number, b: number, decimals: number): number;
11
+ /**
12
+ * Safely multiplies two numbers and formats result.
13
+ */
14
+ static safeMultiply(a: number, b: number, decimals: number): number;
15
+ /**
16
+ * Clamps a number between min and max.
17
+ */
18
+ static clamp(value: number, min: number, max: number): number;
19
+ /**
20
+ * Safely divides two numbers.
21
+ */
22
+ static safeDivide(a: number, b: number, decimals: number): number;
23
+ }
@@ -0,0 +1 @@
1
+ export declare const optionalBooleanMapper: Map<string, boolean>;
@@ -0,0 +1,3 @@
1
+ export declare class UuidHelper {
2
+ static generateUuid(): string;
3
+ }
@@ -0,0 +1,14 @@
1
+ import { ValidationError } from 'class-validator';
2
+ export declare class ValidationHelper {
3
+ static readonly validationOptions: {
4
+ whitelist: boolean;
5
+ forbidNonWhitelisted: boolean;
6
+ };
7
+ static readonly validationOptionsWithoutForbidden: {
8
+ whitelist: boolean;
9
+ forbidNonWhitelisted: boolean;
10
+ };
11
+ static validate<T extends object>(dto: T): Promise<ValidationError[]>;
12
+ static validateWithoutForbidden<T extends object>(dto: T): Promise<ValidationError[]>;
13
+ static isPlainObject(value: unknown): value is Record<string, any>;
14
+ }
@@ -0,0 +1,2 @@
1
+ import 'reflect-metadata';
2
+ export { BonnysFortuneV1GameEngine } from './bonnys-fortune-v1.game-engine';
@@ -0,0 +1,22 @@
1
+ type LogFormat = 'json' | 'pretty';
2
+ export declare class Logger {
3
+ private readonly logger;
4
+ private context;
5
+ constructor(context: string, logFormat?: LogFormat);
6
+ private detectLogFormat;
7
+ private createWinstonLogger;
8
+ private getLogFormat;
9
+ private selectFormat;
10
+ private getJsonFormat;
11
+ private getPrettyFormat;
12
+ private safeStringify;
13
+ private getTransports;
14
+ log(message: any, { level, ...rest }?: {
15
+ level?: string;
16
+ } & Record<string, any>): void;
17
+ error(message: any, ...optionalParams: any[]): void;
18
+ warn(message: any, ...optionalParams: any[]): void;
19
+ debug(message: any, ...optionalParams: any[]): void;
20
+ verbose(message: any, ...optionalParams: any[]): void;
21
+ }
22
+ export {};
@@ -0,0 +1,32 @@
1
+ import { BonnysFortuneBaseGameSpinResult, BonnysFortunePrivateState, BonnysFortunePublicState, CheatTriggerBonusResult, CheatUpdateBonusMeterProgressResult, GetSymbolsResult, SpinResultResponse, StartBonusRoundResult } from './bonnys-fortune.types';
2
+ import { BonnysFortuneGameLogicConfigInterface, BonnysFortuneSessionStateInterface } from './game-logic-config.interface';
3
+ import { CheatTriggerBonusRequestDto } from '../domain/types/cheat-trigger-bonus-request.dto';
4
+ import { CheatUpdateBonusMeterProgressRequestDto } from '../domain/types/cheat-update-bonus-meter-progress-request.dto';
5
+ import { GameActionCommand } from '../game-engine.interface';
6
+ import { GameSpinInputDto } from '../domain/types/game-spin-input.dto';
7
+ import { ReelStripsConfig } from '../domain/reel-strips-config';
8
+ import { RngService } from '../rng/rng-service';
9
+ import { StartBonusRoundInputDto } from '../domain/types/start-bonus-round-input.dto';
10
+ export declare class BonnysFortuneGameLogic {
11
+ private readonly rngService;
12
+ constructor(rngService: RngService);
13
+ initSessionState(gameLogicConfig: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, gameConfig: {
14
+ betAmountThresholds: number[];
15
+ defaultBetAmount: number;
16
+ }, commandId: string): Promise<BonnysFortuneSessionStateInterface>;
17
+ spin(params: GameSpinInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, gameLogicConfig: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<SpinResultResponse<BonnysFortuneBaseGameSpinResult>>;
18
+ startBonusRound(params: StartBonusRoundInputDto, publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, gameLogicConfig: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string): Promise<StartBonusRoundResult>;
19
+ private drawBonusMeters;
20
+ updateSessionState(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, gameLogicConfig: BonnysFortuneGameLogicConfigInterface, command: GameActionCommand<{
21
+ bonusMeters: {
22
+ redraw: string[];
23
+ };
24
+ }>): Promise<BonnysFortuneSessionStateInterface>;
25
+ cheatTriggerBonus(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, params: CheatTriggerBonusRequestDto): CheatTriggerBonusResult;
26
+ cheatUpdateBonusMeterProgress(publicState: BonnysFortunePublicState, privateState: BonnysFortunePrivateState, params: CheatUpdateBonusMeterProgressRequestDto, gameLogicConfig: BonnysFortuneGameLogicConfigInterface): CheatUpdateBonusMeterProgressResult;
27
+ getSymbols(gameLogicConfig: BonnysFortuneGameLogicConfigInterface): GetSymbolsResult;
28
+ private shouldRedrawMeter;
29
+ private requiresMeterUpdate;
30
+ private getMeterLevel;
31
+ private randomThreshold;
32
+ }
@@ -0,0 +1,19 @@
1
+ import { BonnysFortuneGameLogicConfigInterface } from './game-logic-config.interface';
2
+ import { ReelStripsConfig } from '../domain/reel-strips-config';
3
+ import { RngService } from '../rng/rng-service';
4
+ export declare class BonnysFortuneSpinGenerator {
5
+ private readonly rngService;
6
+ constructor(rngService: RngService);
7
+ generateScreenWithLayout(reelStripsConfig: ReelStripsConfig, layout: {
8
+ reels: number;
9
+ rows: number;
10
+ }, optionWeights: number[], commandId: string, actionId: string): Promise<number[][]>;
11
+ generateBaseScreen(config: BonnysFortuneGameLogicConfigInterface, reelStripsConfig: ReelStripsConfig, commandId: string, actionId: string): Promise<number[][]>;
12
+ private selectReelOption;
13
+ private drawReelColumn;
14
+ applyBonusSymbols(screen: number[][], config: BonnysFortuneGameLogicConfigInterface, commandId: string, actionId: string): Promise<number[][]>;
15
+ private placeHSymbols;
16
+ private placeScatterSymbols;
17
+ private placeSymbolRandomlyOnReel;
18
+ private getRandomWeightedIndex;
19
+ }