@omnitronix/bonnys-fortune-game-engine 1.3.2 → 1.5.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 (175) hide show
  1. package/README.md +25 -15
  2. package/dist/__tests__/base-game.test.js +255 -0
  3. package/dist/__tests__/base-game.test.js.map +1 -0
  4. package/dist/__tests__/bonnys-fortune-v1.game-engine.test.js +1 -1
  5. package/dist/__tests__/bonus-handlers.test.js +303 -0
  6. package/dist/__tests__/bonus-handlers.test.js.map +1 -0
  7. package/dist/__tests__/bonus-meters.test.js +508 -0
  8. package/dist/__tests__/bonus-meters.test.js.map +1 -0
  9. package/dist/__tests__/collect-feature-handler.test.js +386 -0
  10. package/dist/__tests__/collect-feature-handler.test.js.map +1 -0
  11. package/dist/__tests__/comprehensive.test.js +747 -0
  12. package/dist/__tests__/comprehensive.test.js.map +1 -0
  13. package/dist/__tests__/error-paths.test.js +373 -0
  14. package/dist/__tests__/error-paths.test.js.map +1 -0
  15. package/dist/__tests__/helpers/test-engine-factory.js +268 -0
  16. package/dist/__tests__/helpers/test-engine-factory.js.map +1 -0
  17. package/dist/__tests__/rng-gli19-compliance.test.js +292 -0
  18. package/dist/__tests__/rng-gli19-compliance.test.js.map +1 -0
  19. package/dist/__tests__/rng-security.test.js +383 -0
  20. package/dist/__tests__/rng-security.test.js.map +1 -0
  21. package/dist/__tests__/rtp-simulation.test.js +242 -0
  22. package/dist/__tests__/rtp-simulation.test.js.map +1 -0
  23. package/dist/__tests__/state-transitions.test.js +307 -0
  24. package/dist/__tests__/state-transitions.test.js.map +1 -0
  25. package/dist/__tests__/steering-fortune-handler.test.js +286 -0
  26. package/dist/__tests__/steering-fortune-handler.test.js.map +1 -0
  27. package/dist/__tests__/symbol-distribution.test.js +195 -0
  28. package/dist/__tests__/symbol-distribution.test.js.map +1 -0
  29. package/dist/__tests__/treasure-hunt-handler.test.js +295 -0
  30. package/dist/__tests__/treasure-hunt-handler.test.js.map +1 -0
  31. package/dist/__tests__/win-calculator.test.js +515 -0
  32. package/dist/__tests__/win-calculator.test.js.map +1 -0
  33. package/dist/bonnys-fortune-v1.game-engine.js +14 -25
  34. package/dist/bonnys-fortune-v1.game-engine.js.map +1 -1
  35. package/dist/config/game-logic-config/game-logic-config.js +0 -2
  36. package/dist/config/game-logic-config/game-logic-config.js.map +1 -1
  37. package/dist/domain/types/{cheat-trigger-bonus-command.js → debug-trigger-bonus-command.js} +1 -1
  38. package/dist/domain/types/debug-trigger-bonus-command.js.map +1 -0
  39. package/dist/domain/types/{cheat-trigger-bonus-request.dto.js → debug-trigger-bonus-request.dto.js} +1 -1
  40. package/dist/domain/types/debug-trigger-bonus-request.dto.js.map +1 -0
  41. package/dist/domain/types/{cheat-update-bonus-meter-progress-command.js → debug-update-bonus-meter-progress-command.js} +1 -1
  42. package/dist/domain/types/debug-update-bonus-meter-progress-command.js.map +1 -0
  43. package/dist/domain/types/{cheat-update-bonus-meter-progress-request.dto.js → debug-update-bonus-meter-progress-request.dto.js} +1 -1
  44. package/dist/domain/types/debug-update-bonus-meter-progress-request.dto.js.map +1 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/logic/bonnys-fortune.game-logic.js +37 -17
  47. package/dist/logic/bonnys-fortune.game-logic.js.map +1 -1
  48. package/dist/logic/handlers/base-game.handler.js +1 -5
  49. package/dist/logic/handlers/base-game.handler.js.map +1 -1
  50. package/dist/rng/DummyRngClient.js +8 -1
  51. package/dist/rng/DummyRngClient.js.map +1 -1
  52. package/dist/rng/rng-client.factory.js.map +1 -1
  53. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.js +0 -9
  54. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.js.map +1 -1
  55. package/package.json +6 -6
  56. package/dist/__tests__/bonnys-fortune-v1.game-engine.test.d.ts +0 -1
  57. package/dist/bonnys-fortune-v1.game-engine.d.ts +0 -36
  58. package/dist/config/game-logic-config/file-system.game-logic-config-loader.d.ts +0 -4
  59. package/dist/config/game-logic-config/game-logic-config-loader.d.ts +0 -3
  60. package/dist/config/game-logic-config/game-logic-config.d.ts +0 -2
  61. package/dist/config/reel-strips-config/file-system.reel-strips-config-loader.d.ts +0 -4
  62. package/dist/config/reel-strips-config/reel-strip-option.dto.d.ts +0 -4
  63. package/dist/config/reel-strips-config/reel-strips-config-loader.d.ts +0 -3
  64. package/dist/config/reel-strips-config/reel-strips-config.dto.d.ts +0 -5
  65. package/dist/config/reel-strips-config/reel.dto.d.ts +0 -5
  66. package/dist/domain/game-round.types.d.ts +0 -9
  67. package/dist/domain/mappers/reel-strips-config.mapper.d.ts +0 -4
  68. package/dist/domain/reel-strip-option.d.ts +0 -7
  69. package/dist/domain/reel-strips-config.d.ts +0 -9
  70. package/dist/domain/reel.d.ts +0 -8
  71. package/dist/domain/types/cheat-trigger-bonus-command.d.ts +0 -5
  72. package/dist/domain/types/cheat-trigger-bonus-command.js.map +0 -1
  73. package/dist/domain/types/cheat-trigger-bonus-request.dto.d.ts +0 -5
  74. package/dist/domain/types/cheat-trigger-bonus-request.dto.js.map +0 -1
  75. package/dist/domain/types/cheat-update-bonus-meter-progress-command.d.ts +0 -5
  76. package/dist/domain/types/cheat-update-bonus-meter-progress-command.js.map +0 -1
  77. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.d.ts +0 -5
  78. package/dist/domain/types/cheat-update-bonus-meter-progress-request.dto.js.map +0 -1
  79. package/dist/domain/types/game-spin-command.d.ts +0 -8
  80. package/dist/domain/types/game-spin-input.dto.d.ts +0 -8
  81. package/dist/domain/types/game-spin-output.dto.d.ts +0 -119
  82. package/dist/domain/types/game-symbols.response.dto.d.ts +0 -10
  83. package/dist/domain/types/reel-strip-option.dto.d.ts +0 -4
  84. package/dist/domain/types/reel-strips-config.dto.d.ts +0 -5
  85. package/dist/domain/types/reel.dto.d.ts +0 -5
  86. package/dist/domain/types/start-bonus-round-command.d.ts +0 -8
  87. package/dist/domain/types/start-bonus-round-input.dto.d.ts +0 -10
  88. package/dist/game-engine.interface.d.ts +0 -41
  89. package/dist/helpers/generate-hash.d.ts +0 -1
  90. package/dist/helpers/number-helper.d.ts +0 -23
  91. package/dist/helpers/optional-boolean-mapper.d.ts +0 -1
  92. package/dist/helpers/uuid-helper.d.ts +0 -3
  93. package/dist/helpers/validation-helper.d.ts +0 -14
  94. package/dist/index.d.ts +0 -2
  95. package/dist/logger/logger.d.ts +0 -22
  96. package/dist/logger/logger.js +0 -140
  97. package/dist/logger/logger.js.map +0 -1
  98. package/dist/logic/bonnys-fortune.game-logic.d.ts +0 -32
  99. package/dist/logic/bonnys-fortune.spin-generator.d.ts +0 -19
  100. package/dist/logic/bonnys-fortune.types.d.ts +0 -170
  101. package/dist/logic/bonnys-fortune.win-calculator.d.ts +0 -10
  102. package/dist/logic/game-logic-config.interface.d.ts +0 -180
  103. package/dist/logic/handlers/base-game.handler.d.ts +0 -15
  104. package/dist/logic/handlers/collect-feature-bonus.handler.d.ts +0 -13
  105. package/dist/logic/handlers/free-spins-bonus.handler.d.ts +0 -11
  106. package/dist/logic/handlers/steering-to-the-fortune-bonus.handler.d.ts +0 -11
  107. package/dist/logic/handlers/treasure-hunt-bonus.handler.d.ts +0 -15
  108. package/dist/rng/DummyRngClient.d.ts +0 -18
  109. package/dist/rng/rng-client.factory.d.ts +0 -7
  110. package/dist/rng/rng-client.interface.d.ts +0 -16
  111. package/dist/rng/rng-service.d.ts +0 -26
  112. package/dist/validation/abstract-game-logic-config.validator.d.ts +0 -4
  113. package/dist/validation/bonnys-fortune/bonnys-fortune-config.dto.d.ts +0 -131
  114. package/dist/validation/bonnys-fortune/bonnys-fortune-config.validator.d.ts +0 -5
  115. package/dist/validation/custom-decorators/IsNestedIntArray.d.ts +0 -2
  116. package/dist/validation/game-logic-config-validation.service.d.ts +0 -8
  117. package/dist/validation/reel-strips-config-validation.service.d.ts +0 -5
  118. package/src/__tests__/bonnys-fortune-v1.game-engine.test.ts +0 -80
  119. package/src/bonnys-fortune-v1.game-engine.ts +0 -314
  120. package/src/config/game-logic-config/file-system.game-logic-config-loader.ts +0 -27
  121. package/src/config/game-logic-config/game-logic-config-loader.ts +0 -3
  122. package/src/config/game-logic-config/game-logic-config.ts +0 -382
  123. package/src/config/reel-strips-config/file-system.reel-strips-config-loader.ts +0 -43
  124. package/src/config/reel-strips-config/reel-strip-option.dto.ts +0 -13
  125. package/src/config/reel-strips-config/reel-strips-config-loader.ts +0 -9
  126. package/src/config/reel-strips-config/reel-strips-config.dto.ts +0 -16
  127. package/src/config/reel-strips-config/reel.dto.ts +0 -16
  128. package/src/config/reel-strips-config/reels-BASE.csv +0 -52
  129. package/src/config/reel-strips-config/reels-BONUS.csv +0 -52
  130. package/src/domain/game-round.types.ts +0 -10
  131. package/src/domain/mappers/reel-strips-config.mapper.ts +0 -16
  132. package/src/domain/reel-strip-option.ts +0 -15
  133. package/src/domain/reel-strips-config.ts +0 -21
  134. package/src/domain/reel.ts +0 -17
  135. package/src/domain/types/cheat-trigger-bonus-command.ts +0 -5
  136. package/src/domain/types/cheat-trigger-bonus-request.dto.ts +0 -5
  137. package/src/domain/types/cheat-update-bonus-meter-progress-command.ts +0 -6
  138. package/src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts +0 -5
  139. package/src/domain/types/game-spin-command.ts +0 -8
  140. package/src/domain/types/game-spin-input.dto.ts +0 -8
  141. package/src/domain/types/game-spin-output.dto.ts +0 -142
  142. package/src/domain/types/game-symbols.response.dto.ts +0 -11
  143. package/src/domain/types/reel-strip-option.dto.ts +0 -13
  144. package/src/domain/types/reel-strips-config.dto.ts +0 -15
  145. package/src/domain/types/reel.dto.ts +0 -15
  146. package/src/domain/types/start-bonus-round-command.ts +0 -8
  147. package/src/domain/types/start-bonus-round-input.dto.ts +0 -10
  148. package/src/game-engine.interface.ts +0 -59
  149. package/src/helpers/generate-hash.ts +0 -5
  150. package/src/helpers/number-helper.ts +0 -41
  151. package/src/helpers/optional-boolean-mapper.ts +0 -5
  152. package/src/helpers/uuid-helper.ts +0 -7
  153. package/src/helpers/validation-helper.ts +0 -27
  154. package/src/index.ts +0 -3
  155. package/src/logger/logger.ts +0 -178
  156. package/src/logic/bonnys-fortune.game-logic.ts +0 -490
  157. package/src/logic/bonnys-fortune.spin-generator.ts +0 -277
  158. package/src/logic/bonnys-fortune.types.ts +0 -223
  159. package/src/logic/bonnys-fortune.win-calculator.ts +0 -210
  160. package/src/logic/game-logic-config.interface.ts +0 -176
  161. package/src/logic/handlers/base-game.handler.ts +0 -221
  162. package/src/logic/handlers/collect-feature-bonus.handler.ts +0 -301
  163. package/src/logic/handlers/free-spins-bonus.handler.ts +0 -119
  164. package/src/logic/handlers/steering-to-the-fortune-bonus.handler.ts +0 -118
  165. package/src/logic/handlers/treasure-hunt-bonus.handler.ts +0 -232
  166. package/src/rng/DummyRngClient.ts +0 -108
  167. package/src/rng/rng-client.factory.ts +0 -27
  168. package/src/rng/rng-client.interface.ts +0 -38
  169. package/src/rng/rng-service.ts +0 -130
  170. package/src/validation/abstract-game-logic-config.validator.ts +0 -20
  171. package/src/validation/bonnys-fortune/bonnys-fortune-config.dto.ts +0 -379
  172. package/src/validation/bonnys-fortune/bonnys-fortune-config.validator.ts +0 -8
  173. package/src/validation/custom-decorators/IsNestedIntArray.ts +0 -29
  174. package/src/validation/game-logic-config-validation.service.ts +0 -28
  175. package/src/validation/reel-strips-config-validation.service.ts +0 -29
@@ -1,36 +0,0 @@
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
- /**
33
- * Resolves init session params from payload, falling back to game logic config when values are missing or invalid.
34
- */
35
- private resolveInitGameConfig;
36
- }
@@ -1,4 +0,0 @@
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
- }
@@ -1,3 +0,0 @@
1
- export interface GameLogicConfigLoader {
2
- loadConfig<T>(gameId: string, variantId: string): Promise<T | null>;
3
- }
@@ -1,2 +0,0 @@
1
- import { BonnysFortuneGameLogicConfigInterface } from '../../logic/game-logic-config.interface';
2
- export declare const gameLogicConfig: BonnysFortuneGameLogicConfigInterface;
@@ -1,4 +0,0 @@
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
- }
@@ -1,4 +0,0 @@
1
- export declare class ReelStripOptionDto {
2
- symbols: number[];
3
- constructor(symbols: number[]);
4
- }
@@ -1,3 +0,0 @@
1
- export interface ReelStripsConfigLoader {
2
- loadConfig(gameId: string, variantId: string, reelSetName: string, reelsCount: number, optionsCount: number): Promise<number[][][]>;
3
- }
@@ -1,5 +0,0 @@
1
- import { ReelDto } from './reel.dto';
2
- export declare class ReelStripsConfigDto {
3
- reels: ReelDto[];
4
- constructor(reels: ReelDto[]);
5
- }
@@ -1,5 +0,0 @@
1
- import { ReelStripOptionDto } from './reel-strip-option.dto';
2
- export declare class ReelDto {
3
- options: ReelStripOptionDto[];
4
- constructor(options: ReelStripOptionDto[]);
5
- }
@@ -1,9 +0,0 @@
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
- };
@@ -1,4 +0,0 @@
1
- import { ReelStripsConfig } from '../reel-strips-config';
2
- export declare class ReelStripsConfigMapper {
3
- mapRawToDomain(rawReels: number[][][]): ReelStripsConfig;
4
- }
@@ -1,7 +0,0 @@
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
- }
@@ -1,9 +0,0 @@
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
- }
@@ -1,8 +0,0 @@
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
- }
@@ -1,5 +0,0 @@
1
- export type CheatTriggerBonusCommand = {
2
- sessionId: string;
3
- bonusType: string;
4
- betAmount: number;
5
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"cheat-trigger-bonus-command.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-trigger-bonus-command.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- export interface CheatTriggerBonusRequestDto {
2
- sessionId: string;
3
- bonusType: string;
4
- betAmount: number;
5
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"cheat-trigger-bonus-request.dto.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-trigger-bonus-request.dto.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- export type CheatUpdateBonusMeterProgressCommand = {
2
- sessionId: string;
3
- bonusType: string;
4
- progress: number;
5
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"cheat-update-bonus-meter-progress-command.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-update-bonus-meter-progress-command.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- export interface CheatUpdateBonusMeterProgressRequestDto {
2
- sessionId: string;
3
- bonusType: string;
4
- progress: number;
5
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"cheat-update-bonus-meter-progress-request.dto.js","sourceRoot":"","sources":["../../../src/domain/types/cheat-update-bonus-meter-progress-request.dto.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- export type GameSpinCommand = {
2
- sessionId: string;
3
- betAmount: number;
4
- gameCode: string;
5
- gameVersion: string;
6
- lines?: number;
7
- creditsPerLine?: number;
8
- };
@@ -1,8 +0,0 @@
1
- export interface GameSpinInputDto {
2
- sessionId: string;
3
- betAmount: number;
4
- gameCode: string;
5
- gameVersion: string;
6
- lines?: number;
7
- creditsPerLine?: number;
8
- }
@@ -1,119 +0,0 @@
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
- }
@@ -1,10 +0,0 @@
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
- }
@@ -1,4 +0,0 @@
1
- export declare class ReelStripOptionDto {
2
- symbols: number[];
3
- constructor(symbols: number[]);
4
- }
@@ -1,5 +0,0 @@
1
- import { ReelDto } from './reel.dto';
2
- export declare class ReelStripsConfigDto {
3
- reels: ReelDto[];
4
- constructor(reels: ReelDto[]);
5
- }
@@ -1,5 +0,0 @@
1
- import { ReelStripOptionDto } from './reel-strip-option.dto';
2
- export declare class ReelDto {
3
- options: ReelStripOptionDto[];
4
- constructor(options: ReelStripOptionDto[]);
5
- }
@@ -1,8 +0,0 @@
1
- export type StartBonusRoundCommand = {
2
- sessionId: string;
3
- bonusId: string;
4
- bonusType: string;
5
- betAmount: number;
6
- gameCode: string;
7
- gameVersion: string;
8
- };
@@ -1,10 +0,0 @@
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
- }
@@ -1,41 +0,0 @@
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
- }
@@ -1 +0,0 @@
1
- export declare const generateHash: (input: string) => string;
@@ -1,23 +0,0 @@
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
- }
@@ -1 +0,0 @@
1
- export declare const optionalBooleanMapper: Map<string, boolean>;
@@ -1,3 +0,0 @@
1
- export declare class UuidHelper {
2
- static generateUuid(): string;
3
- }
@@ -1,14 +0,0 @@
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
- }
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import 'reflect-metadata';
2
- export { BonnysFortuneV1GameEngine } from './bonnys-fortune-v1.game-engine';
@@ -1,22 +0,0 @@
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 {};
@@ -1,140 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Logger = void 0;
4
- const winston_1 = require("winston");
5
- class Logger {
6
- constructor(context, logFormat) {
7
- this.context = context;
8
- const format = logFormat ?? this.detectLogFormat();
9
- this.logger = this.createWinstonLogger(format);
10
- }
11
- detectLogFormat() {
12
- const envFormat = process.env.LOG_FORMAT?.toLowerCase();
13
- switch (envFormat) {
14
- case 'pretty':
15
- return 'pretty';
16
- case 'json':
17
- return 'json';
18
- default:
19
- return 'json';
20
- }
21
- }
22
- createWinstonLogger(logFormat) {
23
- const winstonFormat = this.getLogFormat(logFormat);
24
- return (0, winston_1.createLogger)({
25
- level: 'info',
26
- format: winstonFormat,
27
- transports: this.getTransports(),
28
- });
29
- }
30
- getLogFormat(logFormat) {
31
- return winston_1.format.combine(winston_1.format.timestamp(), this.selectFormat(logFormat));
32
- }
33
- selectFormat(logFormat) {
34
- switch (logFormat) {
35
- case 'pretty':
36
- return this.getPrettyFormat();
37
- case 'json':
38
- return this.getJsonFormat();
39
- default:
40
- return this.getJsonFormat();
41
- }
42
- }
43
- getJsonFormat() {
44
- return winston_1.format.combine((0, winston_1.format)((info) => {
45
- if (this.context) {
46
- info.message = `[${this.context}] ${info.message}`;
47
- }
48
- return info;
49
- })(), winston_1.format.json());
50
- }
51
- getPrettyFormat() {
52
- return winston_1.format.combine(winston_1.format.colorize(), winston_1.format.printf(({ timestamp, level, message, error, ...meta }) => {
53
- const contextStr = this.context ? `[${this.context}] ` : '';
54
- let output = `${timestamp} ${level}: ${contextStr}${message}`;
55
- if (error &&
56
- typeof error === 'object' &&
57
- 'name' in error &&
58
- 'message' in error) {
59
- output += `\n Error: ${error.name}: ${error.message}`;
60
- if (error.name === 'DomainException' && 'errorCode' in error) {
61
- output += `\n Internal Code: ${error.errorCode}`;
62
- }
63
- if ('stack' in error && error.stack) {
64
- output += `\n Stack: ${error.stack}`;
65
- }
66
- }
67
- const metaKeys = Object.keys(meta).filter((key) => key !== 'timestamp' && key !== 'level' && key !== 'message');
68
- if (metaKeys.length > 0) {
69
- output += `\n Meta: ${JSON.stringify(meta, null, 2)}`;
70
- }
71
- return output;
72
- }));
73
- }
74
- safeStringify(obj) {
75
- try {
76
- return JSON.stringify(obj, (key, value) => {
77
- if (typeof value === 'bigint') {
78
- return value.toString();
79
- }
80
- return value;
81
- });
82
- }
83
- catch (error) {
84
- return '[Object cannot be serialized]';
85
- }
86
- }
87
- getTransports() {
88
- return [
89
- new winston_1.transports.Console(),
90
- new winston_1.transports.File({ filename: 'logs/app.log' }),
91
- ];
92
- }
93
- log(message, { level = 'info', ...rest } = {}) {
94
- switch (level) {
95
- case 'error':
96
- this.logger.error(message, rest);
97
- break;
98
- case 'warn':
99
- this.logger.warn(message, rest);
100
- break;
101
- case 'debug':
102
- this.logger.debug(message, rest);
103
- break;
104
- case 'verbose':
105
- this.logger.verbose(message, rest);
106
- break;
107
- default:
108
- this.logger.info(message, rest);
109
- break;
110
- }
111
- }
112
- error(message, ...optionalParams) {
113
- if (optionalParams.length > 0 && optionalParams[0] instanceof Error) {
114
- const error = optionalParams[0];
115
- const errorData = {
116
- name: error.name,
117
- message: error.message,
118
- stack: error.stack,
119
- };
120
- this.logger.error(message, {
121
- error: errorData,
122
- ...optionalParams.slice(1),
123
- });
124
- }
125
- else {
126
- this.logger.error(message, ...optionalParams);
127
- }
128
- }
129
- warn(message, ...optionalParams) {
130
- this.logger.warn(message, ...optionalParams);
131
- }
132
- debug(message, ...optionalParams) {
133
- this.logger.debug(message, ...optionalParams);
134
- }
135
- verbose(message, ...optionalParams) {
136
- this.logger.verbose(message, ...optionalParams);
137
- }
138
- }
139
- exports.Logger = Logger;
140
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"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"}