@omnitronix/lucky-sharky-game-engine 1.0.9 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +10 -0
  2. package/dist/__tests__/base-game.test.d.ts +2 -0
  3. package/dist/__tests__/base-game.test.d.ts.map +1 -0
  4. package/dist/__tests__/base-game.test.js +262 -0
  5. package/dist/__tests__/base-game.test.js.map +1 -0
  6. package/dist/__tests__/bonus-handlers.test.d.ts +2 -0
  7. package/dist/__tests__/bonus-handlers.test.d.ts.map +1 -0
  8. package/dist/__tests__/bonus-handlers.test.js +243 -0
  9. package/dist/__tests__/bonus-handlers.test.js.map +1 -0
  10. package/dist/__tests__/error-paths.test.d.ts +2 -0
  11. package/dist/__tests__/error-paths.test.d.ts.map +1 -0
  12. package/dist/__tests__/error-paths.test.js +328 -0
  13. package/dist/__tests__/error-paths.test.js.map +1 -0
  14. package/dist/__tests__/free-spins-handler.test.d.ts +2 -0
  15. package/dist/__tests__/free-spins-handler.test.d.ts.map +1 -0
  16. package/dist/__tests__/free-spins-handler.test.js +410 -0
  17. package/dist/__tests__/free-spins-handler.test.js.map +1 -0
  18. package/dist/__tests__/helpers/test-engine-factory.d.ts +98 -0
  19. package/dist/__tests__/helpers/test-engine-factory.d.ts.map +1 -0
  20. package/dist/__tests__/helpers/test-engine-factory.js +236 -0
  21. package/dist/__tests__/helpers/test-engine-factory.js.map +1 -0
  22. package/dist/__tests__/hold-win-handler.test.d.ts +2 -0
  23. package/dist/__tests__/hold-win-handler.test.d.ts.map +1 -0
  24. package/dist/__tests__/hold-win-handler.test.js +481 -0
  25. package/dist/__tests__/hold-win-handler.test.js.map +1 -0
  26. package/dist/__tests__/rng-gli19-compliance.test.d.ts +0 -4
  27. package/dist/__tests__/rng-gli19-compliance.test.d.ts.map +1 -1
  28. package/dist/__tests__/rng-gli19-compliance.test.js +232 -198
  29. package/dist/__tests__/rng-gli19-compliance.test.js.map +1 -1
  30. package/dist/__tests__/rng-security.test.d.ts +2 -0
  31. package/dist/__tests__/rng-security.test.d.ts.map +1 -0
  32. package/dist/__tests__/rng-security.test.js +379 -0
  33. package/dist/__tests__/rng-security.test.js.map +1 -0
  34. package/dist/__tests__/rtp-simulation.test.d.ts +0 -4
  35. package/dist/__tests__/rtp-simulation.test.d.ts.map +1 -1
  36. package/dist/__tests__/rtp-simulation.test.js +228 -153
  37. package/dist/__tests__/rtp-simulation.test.js.map +1 -1
  38. package/dist/__tests__/spin-generator.test.d.ts +2 -0
  39. package/dist/__tests__/spin-generator.test.d.ts.map +1 -0
  40. package/dist/__tests__/spin-generator.test.js +375 -0
  41. package/dist/__tests__/spin-generator.test.js.map +1 -0
  42. package/dist/__tests__/state-transitions.test.d.ts +2 -0
  43. package/dist/__tests__/state-transitions.test.d.ts.map +1 -0
  44. package/dist/__tests__/state-transitions.test.js +249 -0
  45. package/dist/__tests__/state-transitions.test.js.map +1 -0
  46. package/dist/__tests__/symbol-distribution.test.d.ts +2 -0
  47. package/dist/__tests__/symbol-distribution.test.d.ts.map +1 -0
  48. package/dist/__tests__/symbol-distribution.test.js +210 -0
  49. package/dist/__tests__/symbol-distribution.test.js.map +1 -0
  50. package/dist/__tests__/win-calculator.test.d.ts +2 -0
  51. package/dist/__tests__/win-calculator.test.d.ts.map +1 -0
  52. package/dist/__tests__/win-calculator.test.js +516 -0
  53. package/dist/__tests__/win-calculator.test.js.map +1 -0
  54. package/dist/config/game-logic-config/game-logic-config.d.ts.map +1 -1
  55. package/dist/config/game-logic-config/game-logic-config.js +0 -25
  56. package/dist/config/game-logic-config/game-logic-config.js.map +1 -1
  57. package/dist/config/reel-strips-config/reels-BASE.csv +0 -0
  58. package/dist/config/reel-strips-config/reels-FREESPINS.csv +0 -0
  59. package/dist/game-engine.interface.d.ts +2 -0
  60. package/dist/game-engine.interface.d.ts.map +1 -1
  61. package/dist/index.d.ts +1 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/logic/game-logic-config.interface.d.ts +0 -8
  64. package/dist/logic/game-logic-config.interface.d.ts.map +1 -1
  65. package/dist/logic/handlers/base-game.handler.d.ts.map +1 -1
  66. package/dist/logic/handlers/base-game.handler.js +3 -6
  67. package/dist/logic/handlers/base-game.handler.js.map +1 -1
  68. package/dist/logic/handlers/free-spins.handler.d.ts.map +1 -1
  69. package/dist/logic/handlers/free-spins.handler.js +2 -2
  70. package/dist/logic/handlers/free-spins.handler.js.map +1 -1
  71. package/dist/logic/handlers/hold-win-bonus.handler.d.ts +0 -5
  72. package/dist/logic/handlers/hold-win-bonus.handler.d.ts.map +1 -1
  73. package/dist/logic/handlers/hold-win-bonus.handler.js +28 -181
  74. package/dist/logic/handlers/hold-win-bonus.handler.js.map +1 -1
  75. package/dist/logic/lucky-sharky.spin-generator.d.ts +2 -2
  76. package/dist/logic/lucky-sharky.spin-generator.d.ts.map +1 -1
  77. package/dist/logic/lucky-sharky.spin-generator.js +61 -161
  78. package/dist/logic/lucky-sharky.spin-generator.js.map +1 -1
  79. package/dist/logic/lucky-sharky.types.d.ts +0 -6
  80. package/dist/logic/lucky-sharky.types.d.ts.map +1 -1
  81. package/dist/logic/lucky-sharky.types.js.map +1 -1
  82. package/dist/logic/lucky-sharky.win-calculator.d.ts.map +1 -1
  83. package/dist/logic/lucky-sharky.win-calculator.js +4 -9
  84. package/dist/logic/lucky-sharky.win-calculator.js.map +1 -1
  85. package/dist/lucky-sharky-v1.game-engine.d.ts +2 -2
  86. package/dist/lucky-sharky-v1.game-engine.d.ts.map +1 -1
  87. package/dist/lucky-sharky-v1.game-engine.js +2 -2
  88. package/dist/lucky-sharky-v1.game-engine.js.map +1 -1
  89. package/dist/rng/rng-client.factory.d.ts.map +1 -1
  90. package/dist/rng/rng-client.factory.js +1 -45
  91. package/dist/rng/rng-client.factory.js.map +1 -1
  92. package/package.json +4 -3
  93. package/dist/__tests__/rng-seed-security.test.d.ts +0 -6
  94. package/dist/__tests__/rng-seed-security.test.d.ts.map +0 -1
  95. package/dist/__tests__/rng-seed-security.test.js +0 -263
  96. package/dist/__tests__/rng-seed-security.test.js.map +0 -1
  97. package/dist/__tests__/rng-seed-type.test.d.ts +0 -16
  98. package/dist/__tests__/rng-seed-type.test.d.ts.map +0 -1
  99. package/dist/__tests__/rng-seed-type.test.js +0 -288
  100. package/dist/__tests__/rng-seed-type.test.js.map +0 -1
  101. package/dist/__tests__/rng-stress-boundary.test.d.ts +0 -5
  102. package/dist/__tests__/rng-stress-boundary.test.d.ts.map +0 -1
  103. package/dist/__tests__/rng-stress-boundary.test.js +0 -395
  104. package/dist/__tests__/rng-stress-boundary.test.js.map +0 -1
  105. package/dist/logger/logger.d.ts +0 -9
  106. package/dist/logger/logger.d.ts.map +0 -1
  107. package/dist/logger/logger.js +0 -35
  108. package/dist/logger/logger.js.map +0 -1
@@ -1,395 +0,0 @@
1
- "use strict";
2
- /**
3
- * RNG Stress and Boundary Tests - Lucky Sharky
4
- */
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
- Object.defineProperty(o, "default", { enumerable: true, value: v });
18
- }) : function(o, v) {
19
- o["default"] = v;
20
- });
21
- var __importStar = (this && this.__importStar) || (function () {
22
- var ownKeys = function(o) {
23
- ownKeys = Object.getOwnPropertyNames || function (o) {
24
- var ar = [];
25
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
- return ar;
27
- };
28
- return ownKeys(o);
29
- };
30
- return function (mod) {
31
- if (mod && mod.__esModule) return mod;
32
- var result = {};
33
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
- __setModuleDefault(result, mod);
35
- return result;
36
- };
37
- })();
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const fs = __importStar(require("fs"));
40
- const path = __importStar(require("path"));
41
- const lucky_sharky_v1_game_engine_1 = require("../lucky-sharky-v1.game-engine");
42
- const lucky_sharky_types_1 = require("../logic/lucky-sharky.types");
43
- // Results output directory
44
- const RESULTS_DIR = path.join(__dirname, '../../results');
45
- function ensureResultsDir() {
46
- if (!fs.existsSync(RESULTS_DIR)) {
47
- fs.mkdirSync(RESULTS_DIR, { recursive: true });
48
- }
49
- }
50
- function getResultsFileName(gameName, spinCount) {
51
- const date = new Date().toISOString().split('T')[0];
52
- const time = new Date().toISOString().split('T')[1].split('.')[0].replace(/:/g, '-');
53
- return path.join(RESULTS_DIR, `${gameName}-${spinCount}-${date}-${time}.ndjson`);
54
- }
55
- describe('RNG Stress and Boundary Tests', () => {
56
- let engine;
57
- beforeEach(() => {
58
- engine = new lucky_sharky_v1_game_engine_1.LuckySharkyV1GameEngine();
59
- });
60
- async function initSession() {
61
- return engine.processCommand(null, null, {
62
- id: `init-${Math.random().toString(36).slice(2)}`,
63
- type: 'INIT_SESSION_STATE',
64
- payload: { betAmountThresholds: [1, 2, 5, 10, 20], defaultBetAmount: 20 },
65
- });
66
- }
67
- async function executeSpin(publicState, privateState) {
68
- return engine.processCommand(publicState, privateState, {
69
- id: `spin-${Math.random().toString(36).slice(2)}`,
70
- type: 'SPIN',
71
- payload: { sessionId: 'test', betAmount: 20, gameCode: 'lucky-sharky', gameVersion: '1.0.0', lines: 10, creditsPerLine: 20 },
72
- });
73
- }
74
- async function executeBonusRound(publicState, privateState) {
75
- const pendingBonus = privateState.pendingBonuses?.[0];
76
- if (!pendingBonus) {
77
- throw new Error('No pending bonus found');
78
- }
79
- return engine.processCommand(publicState, privateState, {
80
- id: `bonus-${Math.random().toString(36).slice(2)}`,
81
- type: 'START_BONUS_ROUND',
82
- payload: {
83
- sessionId: 'test',
84
- betAmount: pendingBonus.betAmount || 20,
85
- bonusId: pendingBonus.bonusId,
86
- bonusType: pendingBonus.bonusType,
87
- gameCode: 'lucky-sharky',
88
- gameVersion: '1.0.0',
89
- },
90
- });
91
- }
92
- // Helper to execute spin and handle any bonus that triggers
93
- async function executeSpinWithBonusHandling(publicState, privateState) {
94
- const results = [];
95
- let pub = publicState;
96
- let priv = privateState;
97
- const spin = await executeSpin(pub, priv);
98
- results.push(spin);
99
- pub = spin.publicState;
100
- priv = spin.privateState;
101
- // Handle bonus rounds - any non-BASE_GAME_SPIN with pending bonuses
102
- while (priv.nextSpinType !== lucky_sharky_types_1.SpinType.BASE_GAME_SPIN && priv.pendingBonuses?.length > 0) {
103
- const bonus = await executeBonusRound(pub, priv);
104
- results.push(bonus);
105
- pub = bonus.publicState;
106
- priv = bonus.privateState;
107
- }
108
- return { results, publicState: pub, privateState: priv };
109
- }
110
- function canonicalizeForHash(outcome) {
111
- return JSON.stringify(Object.entries(outcome)
112
- .map(([actionId, record]) => ({
113
- actionId, result: Number(record.result), seed: String(record.seed),
114
- min: Number(record.min), max: Number(record.max),
115
- }))
116
- .sort((a, b) => a.actionId.localeCompare(b.actionId)));
117
- }
118
- // ============================================================
119
- // BOUNDARY CONDITIONS
120
- // ============================================================
121
- describe('Boundary Conditions', () => {
122
- it('should handle MAX_SAFE_INTEGER', () => {
123
- const outcome = { test: { result: 5, seed: Number.MAX_SAFE_INTEGER, min: 0, max: 10 } };
124
- expect(canonicalizeForHash(outcome)).toContain(`"seed":"${Number.MAX_SAFE_INTEGER}"`);
125
- });
126
- it('should handle MIN_SAFE_INTEGER', () => {
127
- const outcome = { test: { result: 5, seed: Number.MIN_SAFE_INTEGER, min: -100, max: 100 } };
128
- expect(canonicalizeForHash(outcome)).toContain(`"seed":"${Number.MIN_SAFE_INTEGER}"`);
129
- });
130
- it('should handle empty outcome', () => {
131
- expect(canonicalizeForHash({})).toBe('[]');
132
- });
133
- it('should handle 100 records', () => {
134
- const outcome = {};
135
- for (let i = 0; i < 100; i++) {
136
- outcome[`action_${i.toString().padStart(3, '0')}`] = { result: i % 10, seed: i * 1000, min: 0, max: 9 };
137
- }
138
- expect(JSON.parse(canonicalizeForHash(outcome)).length).toBe(100);
139
- });
140
- it('should handle 1000 records', () => {
141
- const outcome = {};
142
- for (let i = 0; i < 1000; i++) {
143
- outcome[`action_${i.toString().padStart(4, '0')}`] = { result: i % 10, seed: i * 1000, min: 0, max: 9 };
144
- }
145
- expect(JSON.parse(canonicalizeForHash(outcome)).length).toBe(1000);
146
- });
147
- it('should handle long actionId (1000 chars)', () => {
148
- const longId = 'a'.repeat(1000);
149
- const outcome = { [longId]: { result: 5, seed: 123, min: 0, max: 10 } };
150
- expect(JSON.parse(canonicalizeForHash(outcome))[0].actionId.length).toBe(1000);
151
- });
152
- });
153
- // ============================================================
154
- // STRESS TESTS
155
- // ============================================================
156
- describe('Stress Tests', () => {
157
- it('should handle 100 consecutive spins with bonus handling', async () => {
158
- const init = await initSession();
159
- let pub = init.publicState;
160
- let priv = init.privateState;
161
- const allResults = [];
162
- for (let i = 0; i < 100; i++) {
163
- const { results, publicState, privateState } = await executeSpinWithBonusHandling(pub, priv);
164
- // Verify all results (spin + any bonus rounds) succeeded
165
- results.forEach(r => allResults.push(r.success));
166
- pub = publicState;
167
- priv = privateState;
168
- }
169
- expect(allResults.every(r => r === true)).toBe(true);
170
- }, 120000);
171
- it('should maintain consistent RNG structure across 100 spins with bonus handling', async () => {
172
- const init = await initSession();
173
- let pub = init.publicState;
174
- let priv = init.privateState;
175
- for (let i = 0; i < 100; i++) {
176
- const { results, publicState, privateState } = await executeSpinWithBonusHandling(pub, priv);
177
- // Verify RNG structure for all results (spin + any bonus rounds)
178
- for (const result of results) {
179
- if (result.rngOutcome) {
180
- for (const [, record] of Object.entries(result.rngOutcome)) {
181
- expect(typeof record.seed).toBe('number');
182
- expect(typeof record.result).toBe('number');
183
- }
184
- }
185
- }
186
- pub = publicState;
187
- priv = privateState;
188
- }
189
- }, 120000);
190
- it('should handle rapid session initialization', async () => {
191
- const results = [];
192
- for (let i = 0; i < 50; i++) {
193
- const init = await initSession();
194
- results.push(init.success);
195
- }
196
- expect(results.every(r => r === true)).toBe(true);
197
- }, 30000);
198
- it('should process 10000 canonicalizations efficiently', () => {
199
- const outcomes = Array(10000).fill(0).map((_, i) => ({
200
- [`action_${i}`]: { result: i % 10, seed: i * 1000, min: 0, max: 9 },
201
- }));
202
- const start = Date.now();
203
- outcomes.forEach(o => canonicalizeForHash(o));
204
- expect(Date.now() - start).toBeLessThan(5000);
205
- });
206
- it('should handle consecutive spins with bonus handling (configurable)', async () => {
207
- const SPIN_COUNT = parseInt(process.env.RTP_TEST_SPINS || '10000');
208
- ensureResultsDir();
209
- const resultsFile = getResultsFileName('lucky-sharky', SPIN_COUNT);
210
- const writeStream = fs.createWriteStream(resultsFile);
211
- const init = await initSession();
212
- let pub = init.publicState;
213
- let priv = init.privateState;
214
- let totalSpins = 0;
215
- let totalBonusRounds = 0;
216
- let failures = 0;
217
- // betAmount must match creditsPerLine (20) so betStake = 1
218
- const betAmount = 20;
219
- console.log(`\nRunning ${SPIN_COUNT} spins with real RNG`);
220
- console.log(`Writing results to: ${resultsFile}\n`);
221
- for (let i = 0; i < SPIN_COUNT; i++) {
222
- const { results, publicState, privateState } = await executeSpinWithBonusHandling(pub, priv);
223
- totalSpins++;
224
- const bonusRoundsThisSpin = results.length - 1;
225
- totalBonusRounds += bonusRoundsThisSpin;
226
- // Sum winnings from all results (spin + any bonus rounds)
227
- let totalWonThisSpin = 0;
228
- let bonusWonThisSpin = 0;
229
- results.forEach((r, idx) => {
230
- if (!r.success) {
231
- failures++;
232
- }
233
- else {
234
- const outcome = r.outcome;
235
- // Base spin: outcome.result.playerWinning
236
- // Bonus round: outcome.results[] array of results
237
- let won = 0;
238
- if (outcome?.result?.playerWinning !== undefined) {
239
- won = outcome.result.playerWinning;
240
- }
241
- else if (Array.isArray(outcome?.results)) {
242
- // Sum all wins from bonus round results array
243
- won = outcome.results.reduce((sum, res) => {
244
- return sum + (res?.result?.playerWinning || 0);
245
- }, 0);
246
- }
247
- totalWonThisSpin += won;
248
- if (idx > 0)
249
- bonusWonThisSpin += won;
250
- }
251
- });
252
- // Write result to NDJSON file
253
- const record = {
254
- spin: totalSpins,
255
- wagered: betAmount,
256
- won: totalWonThisSpin,
257
- baseWin: totalWonThisSpin - bonusWonThisSpin,
258
- bonusTriggered: bonusRoundsThisSpin > 0,
259
- bonusWon: bonusWonThisSpin,
260
- bonusRounds: bonusRoundsThisSpin,
261
- success: results.every(r => r.success),
262
- };
263
- writeStream.write(JSON.stringify(record) + '\n');
264
- pub = publicState;
265
- priv = privateState;
266
- if (totalSpins % 1000 === 0) {
267
- console.log(`Progress: ${totalSpins} spins completed...`);
268
- }
269
- }
270
- writeStream.end();
271
- console.log(`\n=== ${SPIN_COUNT} Spins Test - Lucky Sharky ===`);
272
- console.log(`Total base spins: ${totalSpins}`);
273
- console.log(`Total bonus rounds: ${totalBonusRounds}`);
274
- console.log(`Total failures: ${failures}`);
275
- console.log(`Results saved to: ${resultsFile}`);
276
- console.log(`\nTo calculate RTP, run:`);
277
- console.log(` node /opt/omnitronix/omnitronix-docs/scripts/calculate-rtp.js ${resultsFile}`);
278
- expect(failures).toBe(0);
279
- expect(totalSpins).toBe(SPIN_COUNT);
280
- }, 1800000); // 30 minute timeout
281
- it('should handle 100000 consecutive spins with bonus handling', async () => {
282
- const init = await initSession();
283
- let pub = init.publicState;
284
- let priv = init.privateState;
285
- let totalSpins = 0;
286
- let totalBonusRounds = 0;
287
- let failures = 0;
288
- let totalWagered = 0;
289
- let totalWon = 0;
290
- const betAmount = 20; // Must match creditsPerLine (20) so betStake = 1
291
- for (let i = 0; i < 100000; i++) {
292
- const { results, publicState, privateState } = await executeSpinWithBonusHandling(pub, priv);
293
- totalSpins++;
294
- totalWagered += betAmount; // Only base spin costs money
295
- totalBonusRounds += results.length - 1; // Subtract 1 for the base spin
296
- // Sum winnings from all results (spin + any bonus rounds)
297
- results.forEach(r => {
298
- if (!r.success) {
299
- failures++;
300
- }
301
- else {
302
- const outcome = r.outcome;
303
- // Base spin: outcome.result.playerWinning
304
- // Bonus round: outcome.results[] array of results
305
- if (outcome?.result?.playerWinning !== undefined) {
306
- totalWon += outcome.result.playerWinning;
307
- }
308
- else if (Array.isArray(outcome?.results)) {
309
- totalWon += outcome.results.reduce((sum, res) => {
310
- return sum + (res?.result?.playerWinning || 0);
311
- }, 0);
312
- }
313
- }
314
- });
315
- pub = publicState;
316
- priv = privateState;
317
- }
318
- const rtp = totalWagered > 0 ? (totalWon / totalWagered) * 100 : 0;
319
- console.log(`\n=== 100000 Spins Test - Lucky Sharky ===`);
320
- console.log(`Total base spins: ${totalSpins}`);
321
- console.log(`Total bonus rounds triggered: ${totalBonusRounds}`);
322
- console.log(`Bonus trigger rate: ${(totalBonusRounds / totalSpins * 100).toFixed(2)}%`);
323
- console.log(`Total failures: ${failures}`);
324
- console.log(`Total wagered: ${totalWagered.toFixed(2)}`);
325
- console.log(`Total won: ${totalWon.toFixed(2)}`);
326
- console.log(`Calculated RTP: ${rtp.toFixed(2)}%`);
327
- expect(failures).toBe(0);
328
- expect(totalSpins).toBe(100000);
329
- }, 1800000); // 30 minute timeout
330
- });
331
- // ============================================================
332
- // SORTING
333
- // ============================================================
334
- describe('Sorting Verification', () => {
335
- it('should sort alphabetically', () => {
336
- const outcome = {
337
- zebra: { result: 1, seed: 100, min: 0, max: 10 },
338
- apple: { result: 2, seed: 200, min: 0, max: 10 },
339
- mango: { result: 3, seed: 300, min: 0, max: 10 },
340
- };
341
- const parsed = JSON.parse(canonicalizeForHash(outcome));
342
- expect(parsed[0].actionId).toBe('apple');
343
- expect(parsed[1].actionId).toBe('mango');
344
- expect(parsed[2].actionId).toBe('zebra');
345
- });
346
- it('should sort numeric strings as strings', () => {
347
- const outcome = {
348
- '10': { result: 1, seed: 100, min: 0, max: 10 },
349
- '2': { result: 2, seed: 200, min: 0, max: 10 },
350
- '1': { result: 3, seed: 300, min: 0, max: 10 },
351
- };
352
- const parsed = JSON.parse(canonicalizeForHash(outcome));
353
- expect(parsed[0].actionId).toBe('1');
354
- expect(parsed[1].actionId).toBe('10');
355
- expect(parsed[2].actionId).toBe('2');
356
- });
357
- it('should maintain stable sort', () => {
358
- const outcome = {};
359
- for (let i = 0; i < 100; i++) {
360
- outcome[`action_${String.fromCharCode(65 + (i % 26))}_${i}`] = { result: i % 10, seed: i * 1000, min: 0, max: 9 };
361
- }
362
- const c1 = canonicalizeForHash(outcome);
363
- const c2 = canonicalizeForHash(outcome);
364
- expect(c1).toBe(c2);
365
- });
366
- });
367
- // ============================================================
368
- // STATE PERSISTENCE
369
- // ============================================================
370
- describe('State Persistence', () => {
371
- it('should handle state serialization round-trip', async () => {
372
- const init = await initSession();
373
- const spin = await executeSpin(init.publicState, init.privateState);
374
- const serializedPublic = JSON.stringify(spin.publicState);
375
- const serializedPrivate = JSON.stringify(spin.privateState);
376
- const restoredPublic = JSON.parse(serializedPublic);
377
- const restoredPrivate = JSON.parse(serializedPrivate);
378
- // Verify serialization preserved the state structure
379
- expect(restoredPublic).toBeDefined();
380
- expect(restoredPrivate).toBeDefined();
381
- expect(restoredPrivate.nextSpinType).toBeDefined();
382
- // If bonus triggered, execute bonus round with restored state
383
- if (restoredPrivate.nextSpinType !== lucky_sharky_types_1.SpinType.BASE_GAME_SPIN && restoredPrivate.pendingBonuses?.length > 0) {
384
- const bonus = await executeBonusRound(restoredPublic, restoredPrivate);
385
- expect(bonus.success).toBe(true);
386
- }
387
- else {
388
- // Continue with regular spin
389
- const nextSpin = await executeSpin(restoredPublic, restoredPrivate);
390
- expect(nextSpin.success).toBe(true);
391
- }
392
- });
393
- });
394
- });
395
- //# sourceMappingURL=rng-stress-boundary.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rng-stress-boundary.test.js","sourceRoot":"","sources":["../../src/__tests__/rng-stress-boundary.test.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export declare class Logger {
2
- private logger;
3
- constructor(context: string);
4
- log(message: string): void;
5
- error(message: string, trace?: string): void;
6
- warn(message: string): void;
7
- debug(message: string): void;
8
- }
9
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,OAAO,EAAE,MAAM;IAa3B,GAAG,CAAC,OAAO,EAAE,MAAM;IAInB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAOrC,IAAI,CAAC,OAAO,EAAE,MAAM;IAIpB,KAAK,CAAC,OAAO,EAAE,MAAM;CAGtB"}
@@ -1,35 +0,0 @@
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.Logger = void 0;
7
- const winston_1 = __importDefault(require("winston"));
8
- class Logger {
9
- constructor(context) {
10
- this.logger = winston_1.default.createLogger({
11
- level: process.env.LOG_LEVEL || 'info',
12
- format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.printf(({ timestamp, level, message }) => {
13
- return `[${timestamp}] [${context}] ${level.toUpperCase()}: ${message}`;
14
- })),
15
- transports: [new winston_1.default.transports.Console()],
16
- });
17
- }
18
- log(message) {
19
- this.logger.info(message);
20
- }
21
- error(message, trace) {
22
- this.logger.error(message);
23
- if (trace) {
24
- this.logger.error(trace);
25
- }
26
- }
27
- warn(message) {
28
- this.logger.warn(message);
29
- }
30
- debug(message) {
31
- this.logger.debug(message);
32
- }
33
- }
34
- exports.Logger = Logger;
35
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAE9B,MAAa,MAAM;IAGjB,YAAY,OAAe;QACzB,IAAI,CAAC,MAAM,GAAG,iBAAO,CAAC,YAAY,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;YACtC,MAAM,EAAE,iBAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,iBAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;gBACtD,OAAO,IAAI,SAAS,MAAM,OAAO,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YAC1E,CAAC,CAAC,CACH;YACD,UAAU,EAAE,CAAC,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,OAAe;QACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAc;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AAlCD,wBAkCC"}