@omnitronix/lucky-sharky-game-engine 1.1.0 → 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.
- package/README.md +10 -0
- package/dist/__tests__/base-game.test.d.ts +2 -0
- package/dist/__tests__/base-game.test.d.ts.map +1 -0
- package/dist/__tests__/base-game.test.js +262 -0
- package/dist/__tests__/base-game.test.js.map +1 -0
- package/dist/__tests__/bonus-handlers.test.d.ts +2 -0
- package/dist/__tests__/bonus-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/bonus-handlers.test.js +243 -0
- package/dist/__tests__/bonus-handlers.test.js.map +1 -0
- package/dist/__tests__/error-paths.test.d.ts +2 -0
- package/dist/__tests__/error-paths.test.d.ts.map +1 -0
- package/dist/__tests__/error-paths.test.js +328 -0
- package/dist/__tests__/error-paths.test.js.map +1 -0
- package/dist/__tests__/free-spins-handler.test.d.ts +2 -0
- package/dist/__tests__/free-spins-handler.test.d.ts.map +1 -0
- package/dist/__tests__/free-spins-handler.test.js +410 -0
- package/dist/__tests__/free-spins-handler.test.js.map +1 -0
- package/dist/__tests__/helpers/test-engine-factory.d.ts +98 -0
- package/dist/__tests__/helpers/test-engine-factory.d.ts.map +1 -0
- package/dist/__tests__/helpers/test-engine-factory.js +236 -0
- package/dist/__tests__/helpers/test-engine-factory.js.map +1 -0
- package/dist/__tests__/hold-win-handler.test.d.ts +2 -0
- package/dist/__tests__/hold-win-handler.test.d.ts.map +1 -0
- package/dist/__tests__/hold-win-handler.test.js +481 -0
- package/dist/__tests__/hold-win-handler.test.js.map +1 -0
- package/dist/__tests__/rng-gli19-compliance.test.d.ts +0 -4
- package/dist/__tests__/rng-gli19-compliance.test.d.ts.map +1 -1
- package/dist/__tests__/rng-gli19-compliance.test.js +232 -198
- package/dist/__tests__/rng-gli19-compliance.test.js.map +1 -1
- package/dist/__tests__/rng-security.test.d.ts +2 -0
- package/dist/__tests__/rng-security.test.d.ts.map +1 -0
- package/dist/__tests__/rng-security.test.js +379 -0
- package/dist/__tests__/rng-security.test.js.map +1 -0
- package/dist/__tests__/rtp-diagnostic.test.d.ts +6 -0
- package/dist/__tests__/rtp-diagnostic.test.d.ts.map +1 -0
- package/dist/__tests__/rtp-diagnostic.test.js +216 -0
- package/dist/__tests__/rtp-diagnostic.test.js.map +1 -0
- package/dist/__tests__/rtp-simulation.test.d.ts +0 -4
- package/dist/__tests__/rtp-simulation.test.d.ts.map +1 -1
- package/dist/__tests__/rtp-simulation.test.js +228 -153
- package/dist/__tests__/rtp-simulation.test.js.map +1 -1
- package/dist/__tests__/spin-generator.test.d.ts +2 -0
- package/dist/__tests__/spin-generator.test.d.ts.map +1 -0
- package/dist/__tests__/spin-generator.test.js +375 -0
- package/dist/__tests__/spin-generator.test.js.map +1 -0
- package/dist/__tests__/state-transitions.test.d.ts +2 -0
- package/dist/__tests__/state-transitions.test.d.ts.map +1 -0
- package/dist/__tests__/state-transitions.test.js +249 -0
- package/dist/__tests__/state-transitions.test.js.map +1 -0
- package/dist/__tests__/symbol-distribution.test.d.ts +2 -0
- package/dist/__tests__/symbol-distribution.test.d.ts.map +1 -0
- package/dist/__tests__/symbol-distribution.test.js +210 -0
- package/dist/__tests__/symbol-distribution.test.js.map +1 -0
- package/dist/__tests__/win-calculator.test.d.ts +2 -0
- package/dist/__tests__/win-calculator.test.d.ts.map +1 -0
- package/dist/__tests__/win-calculator.test.js +516 -0
- package/dist/__tests__/win-calculator.test.js.map +1 -0
- package/dist/config/game-logic-config/game-logic-config.d.ts.map +1 -1
- package/dist/config/game-logic-config/game-logic-config.js +27 -17
- package/dist/config/game-logic-config/game-logic-config.js.map +1 -1
- package/dist/logic/handlers/free-spins.handler.d.ts +2 -0
- package/dist/logic/handlers/free-spins.handler.d.ts.map +1 -1
- package/dist/logic/handlers/free-spins.handler.js +74 -6
- package/dist/logic/handlers/free-spins.handler.js.map +1 -1
- package/package.json +4 -2
- package/dist/__tests__/rng-seed-security.test.d.ts +0 -6
- package/dist/__tests__/rng-seed-security.test.d.ts.map +0 -1
- package/dist/__tests__/rng-seed-security.test.js +0 -263
- package/dist/__tests__/rng-seed-security.test.js.map +0 -1
- package/dist/__tests__/rng-seed-type.test.d.ts +0 -16
- package/dist/__tests__/rng-seed-type.test.d.ts.map +0 -1
- package/dist/__tests__/rng-seed-type.test.js +0 -288
- package/dist/__tests__/rng-seed-type.test.js.map +0 -1
- package/dist/__tests__/rng-stress-boundary.test.d.ts +0 -5
- package/dist/__tests__/rng-stress-boundary.test.d.ts.map +0 -1
- package/dist/__tests__/rng-stress-boundary.test.js +0 -395
- package/dist/__tests__/rng-stress-boundary.test.js.map +0 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diffStates = exports.roundTripState = exports.statesEqual = exports.cloneState = exports.deserializeState = exports.serializeState = exports.validateRngOutcomeRecord = exports.validateRngOutcome = exports.isValidSha256 = exports.hashString = exports.hashRngOutcome = exports.canonicalizeRngOutcome = exports.getCommandIdCounter = exports.resetCommandIdCounter = exports.nextCommandId = exports.LcgRngClient = exports.MockRngClient = void 0;
|
|
4
|
+
exports.createEngine = createEngine;
|
|
5
|
+
exports.createEngineWithMockRng = createEngineWithMockRng;
|
|
6
|
+
exports.createEngineWithLcgRng = createEngineWithLcgRng;
|
|
7
|
+
exports.injectMockRng = injectMockRng;
|
|
8
|
+
exports.waitForEngineReady = waitForEngineReady;
|
|
9
|
+
exports.initSession = initSession;
|
|
10
|
+
exports.executeSpin = executeSpin;
|
|
11
|
+
exports.safeExecuteSpin = safeExecuteSpin;
|
|
12
|
+
exports.executeSpins = executeSpins;
|
|
13
|
+
exports.startBonusRound = startBonusRound;
|
|
14
|
+
exports.debugTriggerBonus = debugTriggerBonus;
|
|
15
|
+
exports.getRngOutcome = getRngOutcome;
|
|
16
|
+
exports.getAllRngOutcomes = getAllRngOutcomes;
|
|
17
|
+
exports.runSpinCycle = runSpinCycle;
|
|
18
|
+
/**
|
|
19
|
+
* Lucky Sharky Test Engine Factory.
|
|
20
|
+
* Creates engine instances with controllable RNG for deterministic testing.
|
|
21
|
+
*
|
|
22
|
+
* Mock injection strategy:
|
|
23
|
+
* The engine, gameLogic, and all handlers share a SINGLE RngService instance.
|
|
24
|
+
* We replace the `rngClient` on that shared instance so all RNG calls go
|
|
25
|
+
* through our mock — no need to rebuild gameLogic or handlers.
|
|
26
|
+
*/
|
|
27
|
+
const lucky_sharky_v1_game_engine_1 = require("../../lucky-sharky-v1.game-engine");
|
|
28
|
+
// Import from shared test utilities package
|
|
29
|
+
const game_test_utils_1 = require("@omnitronix/game-test-utils");
|
|
30
|
+
// Re-export for convenience (from shared package)
|
|
31
|
+
var game_test_utils_2 = require("@omnitronix/game-test-utils");
|
|
32
|
+
Object.defineProperty(exports, "MockRngClient", { enumerable: true, get: function () { return game_test_utils_2.MockRngClient; } });
|
|
33
|
+
Object.defineProperty(exports, "LcgRngClient", { enumerable: true, get: function () { return game_test_utils_2.LcgRngClient; } });
|
|
34
|
+
Object.defineProperty(exports, "nextCommandId", { enumerable: true, get: function () { return game_test_utils_2.nextCommandId; } });
|
|
35
|
+
Object.defineProperty(exports, "resetCommandIdCounter", { enumerable: true, get: function () { return game_test_utils_2.resetCommandIdCounter; } });
|
|
36
|
+
Object.defineProperty(exports, "getCommandIdCounter", { enumerable: true, get: function () { return game_test_utils_2.getCommandIdCounter; } });
|
|
37
|
+
Object.defineProperty(exports, "canonicalizeRngOutcome", { enumerable: true, get: function () { return game_test_utils_2.canonicalizeRngOutcome; } });
|
|
38
|
+
Object.defineProperty(exports, "hashRngOutcome", { enumerable: true, get: function () { return game_test_utils_2.hashRngOutcome; } });
|
|
39
|
+
Object.defineProperty(exports, "hashString", { enumerable: true, get: function () { return game_test_utils_2.hashString; } });
|
|
40
|
+
Object.defineProperty(exports, "isValidSha256", { enumerable: true, get: function () { return game_test_utils_2.isValidSha256; } });
|
|
41
|
+
Object.defineProperty(exports, "validateRngOutcome", { enumerable: true, get: function () { return game_test_utils_2.validateRngOutcome; } });
|
|
42
|
+
Object.defineProperty(exports, "validateRngOutcomeRecord", { enumerable: true, get: function () { return game_test_utils_2.validateRngOutcomeRecord; } });
|
|
43
|
+
Object.defineProperty(exports, "serializeState", { enumerable: true, get: function () { return game_test_utils_2.serializeState; } });
|
|
44
|
+
Object.defineProperty(exports, "deserializeState", { enumerable: true, get: function () { return game_test_utils_2.deserializeState; } });
|
|
45
|
+
Object.defineProperty(exports, "cloneState", { enumerable: true, get: function () { return game_test_utils_2.cloneState; } });
|
|
46
|
+
Object.defineProperty(exports, "statesEqual", { enumerable: true, get: function () { return game_test_utils_2.statesEqual; } });
|
|
47
|
+
Object.defineProperty(exports, "roundTripState", { enumerable: true, get: function () { return game_test_utils_2.roundTripState; } });
|
|
48
|
+
Object.defineProperty(exports, "diffStates", { enumerable: true, get: function () { return game_test_utils_2.diffStates; } });
|
|
49
|
+
/**
|
|
50
|
+
* Create a standard engine with default (DummyRngClient) RNG.
|
|
51
|
+
* Suitable for integration tests that don't need deterministic outcomes.
|
|
52
|
+
*/
|
|
53
|
+
function createEngine() {
|
|
54
|
+
return new lucky_sharky_v1_game_engine_1.LuckySharkyV1GameEngine();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create an engine with a MockRngClient injected.
|
|
58
|
+
* Returns both the engine and the mock for test control.
|
|
59
|
+
*
|
|
60
|
+
* @param values - Fixed value or sequence of values the mock will return.
|
|
61
|
+
*/
|
|
62
|
+
function createEngineWithMockRng(values = 0) {
|
|
63
|
+
const engine = new lucky_sharky_v1_game_engine_1.LuckySharkyV1GameEngine();
|
|
64
|
+
const mockRng = new game_test_utils_1.MockRngClient(values);
|
|
65
|
+
engine.rngService.rngClient = mockRng;
|
|
66
|
+
return { engine, mockRng };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create an engine with an LCG RNG for reproducible simulations.
|
|
70
|
+
* Same seed always produces the same sequence.
|
|
71
|
+
*
|
|
72
|
+
* @param seed - LCG seed (default: 12345)
|
|
73
|
+
*/
|
|
74
|
+
function createEngineWithLcgRng(seed = 12345) {
|
|
75
|
+
const engine = new lucky_sharky_v1_game_engine_1.LuckySharkyV1GameEngine();
|
|
76
|
+
const lcgRng = new game_test_utils_1.LcgRngClient(seed);
|
|
77
|
+
engine.rngService.rngClient = lcgRng;
|
|
78
|
+
return { engine, lcgRng };
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Inject a mock RNG client into an existing engine.
|
|
82
|
+
* Useful when you need to change mock behavior mid-test.
|
|
83
|
+
*/
|
|
84
|
+
function injectMockRng(engine, mockRng) {
|
|
85
|
+
engine.rngService.rngClient = mockRng;
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// Engine Readiness
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Wait for the engine's async preload() to finish.
|
|
92
|
+
* The engine constructor fires preload() without await (fire-and-forget).
|
|
93
|
+
* We poll for `engine.reels` to be defined before proceeding.
|
|
94
|
+
*/
|
|
95
|
+
async function waitForEngineReady(engine, timeout = 5000) {
|
|
96
|
+
const start = Date.now();
|
|
97
|
+
while (!engine.reels && Date.now() - start < timeout) {
|
|
98
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
99
|
+
}
|
|
100
|
+
if (!engine.reels) {
|
|
101
|
+
throw new Error('Engine preload did not complete within timeout');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Initialize a session on the engine.
|
|
106
|
+
* Returns the public and private state for subsequent commands.
|
|
107
|
+
* Waits for engine preload to complete before issuing any commands.
|
|
108
|
+
*/
|
|
109
|
+
async function initSession(engine, betAmount = 1.0, betAmountThresholds = [0.2, 0.4, 1.0, 2.0]) {
|
|
110
|
+
await waitForEngineReady(engine);
|
|
111
|
+
const result = await engine.processCommand(null, null, {
|
|
112
|
+
id: (0, game_test_utils_1.nextCommandId)('init'),
|
|
113
|
+
type: 'INIT_SESSION_STATE',
|
|
114
|
+
payload: {
|
|
115
|
+
betAmountThresholds,
|
|
116
|
+
defaultBetAmount: betAmount,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
expect(result.success).toBe(true);
|
|
120
|
+
return {
|
|
121
|
+
publicState: result.publicState,
|
|
122
|
+
privateState: result.privateState,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Execute a SPIN command and return the full result.
|
|
127
|
+
*/
|
|
128
|
+
async function executeSpin(engine, publicState, privateState, betAmount = 1.0) {
|
|
129
|
+
const result = await engine.processCommand(publicState, privateState, {
|
|
130
|
+
id: (0, game_test_utils_1.nextCommandId)('spin'),
|
|
131
|
+
type: 'SPIN',
|
|
132
|
+
payload: {
|
|
133
|
+
sessionId: 'test-session',
|
|
134
|
+
betAmount,
|
|
135
|
+
creditsPerLine: 1,
|
|
136
|
+
gameId: 'lucky-sharky',
|
|
137
|
+
gameVersion: '1.0.0',
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Execute a SPIN command with error handling for known engine bugs.
|
|
144
|
+
* Returns null if a known bug is encountered, allowing tests to skip bad spins.
|
|
145
|
+
*/
|
|
146
|
+
async function safeExecuteSpin(engine, publicState, privateState, betAmount = 1.0) {
|
|
147
|
+
try {
|
|
148
|
+
return await executeSpin(engine, publicState, privateState, betAmount);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
// Known engine bugs:
|
|
152
|
+
// 1. Hold-Win handler crashes on certain RNG outputs
|
|
153
|
+
// 2. DomainException when SPIN issued during bonus state
|
|
154
|
+
if (error.message?.includes('is not iterable') ||
|
|
155
|
+
error.message?.includes('Cannot read properties of undefined') ||
|
|
156
|
+
error.message?.includes('Cannot execute base spin')) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
throw error;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Execute multiple spins, threading state through each one.
|
|
164
|
+
* Returns an array of all results.
|
|
165
|
+
*/
|
|
166
|
+
async function executeSpins(engine, publicState, privateState, count, betAmount = 1.0) {
|
|
167
|
+
const results = [];
|
|
168
|
+
let currentPublic = publicState;
|
|
169
|
+
let currentPrivate = privateState;
|
|
170
|
+
for (let i = 0; i < count; i++) {
|
|
171
|
+
const result = await executeSpin(engine, currentPublic, currentPrivate, betAmount);
|
|
172
|
+
results.push(result);
|
|
173
|
+
currentPublic = result.publicState;
|
|
174
|
+
currentPrivate = result.privateState;
|
|
175
|
+
}
|
|
176
|
+
return results;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Start a bonus round.
|
|
180
|
+
*/
|
|
181
|
+
async function startBonusRound(engine, publicState, privateState, bonusType = 'FREE_SPINS', betAmount = 1.0) {
|
|
182
|
+
const bonusId = privateState.pendingBonuses?.[0]?.bonusId ?? 'test-bonus-id';
|
|
183
|
+
const result = await engine.processCommand(publicState, privateState, {
|
|
184
|
+
id: (0, game_test_utils_1.nextCommandId)('bonus'),
|
|
185
|
+
type: 'START_BONUS_ROUND',
|
|
186
|
+
payload: {
|
|
187
|
+
sessionId: 'test-session',
|
|
188
|
+
bonusId,
|
|
189
|
+
bonusType,
|
|
190
|
+
betAmount,
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Trigger a debug bonus.
|
|
197
|
+
*/
|
|
198
|
+
async function debugTriggerBonus(engine, publicState, privateState, bonusType = 'FREE_SPINS', betAmount = 1.0) {
|
|
199
|
+
const result = await engine.processCommand(publicState, privateState, {
|
|
200
|
+
id: (0, game_test_utils_1.nextCommandId)('debug'),
|
|
201
|
+
type: 'DEBUG_TRIGGER_BONUS',
|
|
202
|
+
payload: {
|
|
203
|
+
sessionId: 'test-session',
|
|
204
|
+
bonusType,
|
|
205
|
+
betAmount,
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get the rngOutcome from the engine's RNG service for a specific command.
|
|
212
|
+
*/
|
|
213
|
+
function getRngOutcome(engine, commandId) {
|
|
214
|
+
return engine.rngService.getRngOutcomeForCommand(commandId);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get all RNG outcomes currently tracked by the engine.
|
|
218
|
+
*/
|
|
219
|
+
function getAllRngOutcomes(engine) {
|
|
220
|
+
return engine.rngService.getAllRngOutcome();
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Run a full init + N spins cycle. Convenience for RTP simulations.
|
|
224
|
+
* Returns { results, finalPublicState, finalPrivateState }.
|
|
225
|
+
*/
|
|
226
|
+
async function runSpinCycle(engine, spinCount, betAmount = 1.0) {
|
|
227
|
+
const session = await initSession(engine, betAmount);
|
|
228
|
+
const results = await executeSpins(engine, session.publicState, session.privateState, spinCount, betAmount);
|
|
229
|
+
const lastResult = results[results.length - 1];
|
|
230
|
+
return {
|
|
231
|
+
results,
|
|
232
|
+
finalPublicState: lastResult.publicState,
|
|
233
|
+
finalPrivateState: lastResult.privateState,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=test-engine-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-engine-factory.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/test-engine-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hold-win-handler.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/hold-win-handler.test.ts"],"names":[],"mappings":""}
|