@energy8platform/platform-core 0.28.2 → 0.28.3
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/dist/dev-bridge.d.ts +7 -0
- package/dist/game-spec.cjs.js +46 -3
- package/dist/game-spec.cjs.js.map +1 -1
- package/dist/game-spec.d.ts +41 -6
- package/dist/game-spec.esm.js +46 -4
- package/dist/game-spec.esm.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/lua.d.ts +7 -0
- package/dist/simulation.d.ts +7 -0
- package/package.json +1 -1
- package/src/game-spec/derive.ts +7 -1
- package/src/game-spec/export.ts +42 -6
- package/src/game-spec/index.ts +2 -1
- package/src/game-spec/types.ts +9 -0
- package/src/lua/types.ts +7 -0
package/dist/dev-bridge.d.ts
CHANGED
|
@@ -3,6 +3,13 @@ import { GameConfigData, SessionData, PlayParams, PlayResultData } from '@energy
|
|
|
3
3
|
interface GameDefinition {
|
|
4
4
|
id: string;
|
|
5
5
|
type: 'SLOT' | 'TABLE';
|
|
6
|
+
/**
|
|
7
|
+
* Lua script S3 object key or bare filename (e.g. "script.lua" — the platform resolves a bare
|
|
8
|
+
* name to `games/{id}/script.lua`). Mirrors the server's `GameDefinition.ScriptPath` (omitempty).
|
|
9
|
+
* The engine itself loads the script from `LuaEngineConfig.script`, so this is only carried for
|
|
10
|
+
* the exported platform `config.json`.
|
|
11
|
+
*/
|
|
12
|
+
script_path?: string;
|
|
6
13
|
actions: Record<string, ActionDefinition>;
|
|
7
14
|
bet_levels?: number[] | BetLevelsConfig;
|
|
8
15
|
max_win?: MaxWinConfig;
|
package/dist/game-spec.cjs.js
CHANGED
|
@@ -106,13 +106,21 @@ function toGameDefinition(spec) {
|
|
|
106
106
|
for (const [key, action] of Object.entries(spec.actions)) {
|
|
107
107
|
actions[key] = toActionDefinition(key, action, freeKey);
|
|
108
108
|
}
|
|
109
|
-
|
|
109
|
+
const def = {
|
|
110
110
|
id: spec.id,
|
|
111
111
|
type: 'SLOT',
|
|
112
|
+
// Bare filename — the platform resolves it to games/{id}/script.lua. Required so the exported
|
|
113
|
+
// config.json points at the uploaded script.
|
|
114
|
+
script_path: spec.scriptPath ?? 'script.lua',
|
|
112
115
|
actions,
|
|
113
116
|
bet_levels: [...spec.betLevels],
|
|
114
117
|
max_win: { multiplier: spec.maxWin },
|
|
115
118
|
};
|
|
119
|
+
if (spec.sessionTtl)
|
|
120
|
+
def.session_ttl = spec.sessionTtl;
|
|
121
|
+
if (spec.persistentState)
|
|
122
|
+
def.persistent_state = { ...spec.persistentState };
|
|
123
|
+
return def;
|
|
116
124
|
}
|
|
117
125
|
function luaTable(record) {
|
|
118
126
|
const parts = Object.entries(record).map(([k, v]) => `[${k}]=${v}`);
|
|
@@ -185,15 +193,49 @@ function defineGame(spec) {
|
|
|
185
193
|
};
|
|
186
194
|
}
|
|
187
195
|
|
|
196
|
+
/** Compose the self-contained Lua the platform runs: generated prelude ⧺ author logic. */
|
|
188
197
|
function buildLuaScript(model, logicLua) {
|
|
189
198
|
return model.luaPrelude + '\n' + logicLua;
|
|
190
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Produce the E8 platform deliverables from one spec + the author's `script.logic.lua`.
|
|
202
|
+
* The config carries `script_path` so the platform can locate the uploaded script; the script is
|
|
203
|
+
* the prelude-prepended, self-contained source. Structurally validated before returning.
|
|
204
|
+
*/
|
|
191
205
|
function exportGame(spec, opts) {
|
|
192
206
|
const model = defineGame(spec);
|
|
193
|
-
|
|
194
|
-
'
|
|
207
|
+
const bundle = {
|
|
208
|
+
'config.json': JSON.stringify(model.gameDefinition, null, 2),
|
|
195
209
|
'script.lua': buildLuaScript(model, opts.logicLua),
|
|
196
210
|
};
|
|
211
|
+
validateE8Bundle(bundle);
|
|
212
|
+
return bundle;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Structural (fengari-free) checks that catch the obvious ways an export is unusable before it
|
|
216
|
+
* reaches the platform: malformed config, missing `script_path`/`actions`, or a script with no
|
|
217
|
+
* `execute` entry point. A full boot check (running the script in a LuaEngine) is the caller's job.
|
|
218
|
+
*/
|
|
219
|
+
function validateE8Bundle(bundle) {
|
|
220
|
+
let config;
|
|
221
|
+
try {
|
|
222
|
+
config = JSON.parse(bundle['config.json']);
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
throw new Error(`E8 export: config.json is not valid JSON — ${e.message}`);
|
|
226
|
+
}
|
|
227
|
+
if (!config.id || typeof config.id !== 'string')
|
|
228
|
+
throw new Error('E8 export: config.json missing "id"');
|
|
229
|
+
if (config.type !== 'SLOT' && config.type !== 'TABLE')
|
|
230
|
+
throw new Error('E8 export: config.json "type" must be SLOT or TABLE');
|
|
231
|
+
if (!config.script_path)
|
|
232
|
+
throw new Error('E8 export: config.json missing "script_path"');
|
|
233
|
+
if (!config.actions || typeof config.actions !== 'object' || Object.keys(config.actions).length === 0) {
|
|
234
|
+
throw new Error('E8 export: config.json has no actions');
|
|
235
|
+
}
|
|
236
|
+
if (!/function\s+execute\s*\(/.test(bundle['script.lua'])) {
|
|
237
|
+
throw new Error('E8 export: script.lua does not define a global `execute(state)` function');
|
|
238
|
+
}
|
|
197
239
|
}
|
|
198
240
|
|
|
199
241
|
exports.GameSpecError = GameSpecError;
|
|
@@ -205,5 +247,6 @@ exports.toLuaPrelude = toLuaPrelude;
|
|
|
205
247
|
exports.toMathModes = toMathModes;
|
|
206
248
|
exports.toModeMap = toModeMap;
|
|
207
249
|
exports.toPaytableView = toPaytableView;
|
|
250
|
+
exports.validateE8Bundle = validateE8Bundle;
|
|
208
251
|
exports.validateSpec = validateSpec;
|
|
209
252
|
//# sourceMappingURL=game-spec.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-spec.cjs.js","sources":["../src/game-spec/validate.ts","../src/game-spec/derive.ts","../src/game-spec/defineGame.ts","../src/game-spec/export.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"game-spec.cjs.js","sources":["../src/game-spec/validate.ts","../src/game-spec/derive.ts","../src/game-spec/defineGame.ts","../src/game-spec/export.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":";;AAEM,MAAO,aAAc,SAAQ,KAAK,CAAA;AACtC,IAAA,WAAA,CAAY,OAAe,EAAA;QACzB,KAAK,CAAC,OAAO,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,eAAe;IAC7B;AACD;AAEK,SAAU,YAAY,CAAC,IAAc,EAAA;AACzC,IAAA,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;AAAE,QAAA,MAAM,IAAI,aAAa,CAAC,qBAAqB,CAAC;AACrF,IAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAAE,QAAA,MAAM,IAAI,aAAa,CAAC,yBAAyB,CAAC;AACxE,IAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAAE,QAAA,MAAM,IAAI,aAAa,CAAC,kCAAkC,CAAC;AAE3G,IAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,QAAA,MAAM,IAAI,aAAa,CAAC,kCAAkC,CAAC;AACvF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AAC9C,YAAA,MAAM,IAAI,aAAa,CAAC,2CAA2C,CAAC;QACtE;IACF;AAEA,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU;AAC7B,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AAC9B,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,CAAA,qBAAA,EAAwB,GAAG,CAAC,EAAE,CAAA,CAAE,CAAC;AAC9E,QAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AACf,QAAA,IAAI,GAAG,CAAC,GAAG,EAAE;AACX,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACnD,gBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC1D,MAAM,IAAI,aAAa,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,CAAA,qCAAA,EAAwC,KAAK,CAAA,CAAE,CAAC;gBAC1F;gBACA,IAAI,IAAI,IAAI,CAAC;oBAAE,MAAM,IAAI,aAAa,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAA,aAAA,CAAe,CAAC;YACtF;QACF;IACF;AAEA,IAAA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACxD,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE;AACjD,YAAA,MAAM,IAAI,aAAa,CAAC,UAAU,GAAG,CAAA,iBAAA,CAAmB,CAAC;QAC3D;QACA,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE;AACxC,YAAA,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,YAAY,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACzB,MAAM,IAAI,aAAa,CAAC,CAAA,OAAA,EAAU,GAAG,CAAA,oDAAA,EAAuD,IAAI,CAAA,CAAE,CAAC;gBACrG;YACF;QACF;IACF;AACF;;AC5CA,SAAS,aAAa,CAAC,IAAc,EAAA;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAC/E;AAEA,SAAS,YAAY,CAAC,IAAgB,EAAA;IACpC,OAAO,IAAI,KAAK,MAAM,GAAG,YAAY,GAAG,WAAW;AACrD;AAEA,SAAS,kBAAkB,CAAC,IAAgB,EAAE,OAA2B,EAAE,SAAiB,EAAA;AAC1F,IAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;QACvB,OAAO;AACL,YAAA,EAAE,SAAS,EAAE,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE;YAC/F,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE;SACjD;IACH;;IAEA,MAAM,WAAW,GAAqB,EAAE;IACxC,IAAI,OAAO,EAAE;QACX,WAAW,CAAC,IAAI,CAAC;AACf,YAAA,SAAS,EAAE,wBAAwB;AACnC,YAAA,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,CAAC,OAAO,CAAC;AACvB,YAAA,cAAc,EAAE,EAAE,eAAe,EAAE,oBAAoB,EAAE;AAC1D,SAAA,CAAC;IACJ;AACA,IAAA,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACpE,IAAA,OAAO,WAAW;AACpB;AAEA,SAAS,kBAAkB,CAAC,GAAW,EAAE,MAAkB,EAAE,OAA2B,EAAA;AACtF,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM;AAClC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC;AAChF,IAAA,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;AACzC,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,gBAAgB,EAAE,IAAI;YACtB,WAAW;AACX,YAAA,IAAI,MAAM,CAAC,OAAO,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;SAC5D;IACH;IACA,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;AACzC,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,eAAe,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;QACjC,MAAM,EAAE,IAAI,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;QACvC,WAAW;AACX,QAAA,IAAI,MAAM,CAAC,OAAO,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;KAC5D;AACH;AAEM,SAAU,gBAAgB,CAAC,IAAc,EAAA;AAC7C,IAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;IACnC,MAAM,OAAO,GAAqC,EAAE;AACpD,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACxD,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC;IACzD;AACA,IAAA,MAAM,GAAG,GAAmB;QAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,QAAA,IAAI,EAAE,MAAM;;;AAGZ,QAAA,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,YAAY;QAC5C,OAAO;AACP,QAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;KACrC;IACD,IAAI,IAAI,CAAC,UAAU;AAAE,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU;IACtD,IAAI,IAAI,CAAC,eAAe;QAAE,GAAG,CAAC,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;AAC5E,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,QAAQ,CAAC,MAA8B,EAAA;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAC;IACnE,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;AAChC;AAEM,SAAU,YAAY,CAAC,IAAc,EAAA;AACzC,IAAA,MAAM,KAAK,GAAa,CAAC,mDAAmD,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,CAAA,gBAAA,EAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA,SAAA,EAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA,YAAA,EAAe,IAAI,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;IAErG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAA,CAAA,CAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAChE,IAAA,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAA,EAAA,CAAI,CAAC;AAEvC,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,EAAG,CAAC,CAAC,EAAE,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1E,IAAA,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAA,EAAA,CAAI,CAAC;AAEnC,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;AACnB,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAA,GAAA,EAAM,QAAQ,CAAC,CAAC,CAAC,GAA6B,CAAC,CAAA,CAAE,CAAC;AACzE,IAAA,KAAK,CAAC,IAAI,CAAC,CAAA,cAAA,EAAiB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,GAAA,CAAK,CAAC;AAExD,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,SAAS;AACnC,SAAA,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAA,GAAA,EAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,CAAC,CAAC,KAAK,CAAA,CAAE,CAAC;IAC5F,IAAI,UAAU,CAAC,MAAM;AAAE,QAAA,KAAK,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,GAAA,CAAK,CAAC;IAE7E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;AAChC;AAEM,SAAU,SAAS,CAAC,IAAc,EAAA;IACtC,MAAM,GAAG,GAA2B,EAAE;AACtC,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACxD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM;QAClC,IAAI,IAAI,KAAK,MAAM;YAAE;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;AAC1E,QAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IACjB;AACA,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,WAAW,CAAC,IAAc,EAAA;IACxC,MAAM,KAAK,GAAmB,EAAE;AAChC,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACxD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM;QAClC,IAAI,IAAI,KAAK,MAAM;YAAE;QACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,MAAM,EAAE,GAAG;YACX,IAAI;AACJ,YAAA,cAAc,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;YAChC,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAC9D,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;AACrC,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,KAAK;AACd;AAEM,SAAU,cAAc,CAAC,IAAc,EAAA;IAC3C,OAAO;QACL,OAAO,EAAE,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG;AACnB,aAAA,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAI,CAAC,CAAC,GAA8B,EAAE,EAAE,CAAC,CAAC;KACjH;AACH;;ACxIM,SAAU,UAAU,CAAC,IAAc,EAAA;IACvC,YAAY,CAAC,IAAI,CAAC;IAClB,OAAO;QACL,IAAI;AACJ,QAAA,cAAc,EAAE,gBAAgB,CAAC,IAAI,CAAC;AACtC,QAAA,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;AAC9B,QAAA,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC;AACxB,QAAA,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC;AAC5B,QAAA,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC;QAC9B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB;AACH;;ACZA;AACM,SAAU,cAAc,CAAC,KAAgB,EAAE,QAAgB,EAAA;AAC/D,IAAA,OAAO,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,QAAQ;AAC3C;AAUA;;;;AAIG;AACG,SAAU,UAAU,CAAC,IAAc,EAAE,IAA0B,EAAA;AACnE,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;AAC9B,IAAA,MAAM,MAAM,GAAa;AACvB,QAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;KACnD;IACD,gBAAgB,CAAC,MAAM,CAAC;AACxB,IAAA,OAAO,MAAM;AACf;AAEA;;;;AAIG;AACG,SAAU,gBAAgB,CAAC,MAAgB,EAAA;AAC/C,IAAA,IAAI,MAA+B;AACnC,IAAA,IAAI;QACF,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC5C;IAAE,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,CAAA,2CAAA,EAA+C,CAAW,CAAC,OAAO,CAAA,CAAE,CAAC;IACvF;IACA,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;IACvG,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC;IAC7H,IAAI,CAAC,MAAM,CAAC,WAAW;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;IACxF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAiB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/G,QAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC;IAC1D;IACA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE;AACzD,QAAA,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC;IAC7F;AACF;;;;;;;;;;;;;;"}
|
package/dist/game-spec.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
interface GameDefinition {
|
|
2
2
|
id: string;
|
|
3
3
|
type: 'SLOT' | 'TABLE';
|
|
4
|
+
/**
|
|
5
|
+
* Lua script S3 object key or bare filename (e.g. "script.lua" — the platform resolves a bare
|
|
6
|
+
* name to `games/{id}/script.lua`). Mirrors the server's `GameDefinition.ScriptPath` (omitempty).
|
|
7
|
+
* The engine itself loads the script from `LuaEngineConfig.script`, so this is only carried for
|
|
8
|
+
* the exported platform `config.json`.
|
|
9
|
+
*/
|
|
10
|
+
script_path?: string;
|
|
4
11
|
actions: Record<string, ActionDefinition>;
|
|
5
12
|
bet_levels?: number[] | BetLevelsConfig;
|
|
6
13
|
max_win?: MaxWinConfig;
|
|
@@ -111,6 +118,18 @@ interface GameSpec {
|
|
|
111
118
|
actions: Record<string, ActionSpec>;
|
|
112
119
|
/** Open hint for codegen/UI: 'cascade' | 'cluster' | 'ways' | 'lines' | … */
|
|
113
120
|
mechanic?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Lua script key for the exported E8 `config.json`. Default `"script.lua"`, which the platform
|
|
123
|
+
* resolves to `games/{id}/script.lua`. Override only when the script lives at a custom S3 key.
|
|
124
|
+
*/
|
|
125
|
+
scriptPath?: string;
|
|
126
|
+
/** Session expiry for the exported config (Go-style duration, e.g. "24h"). Omitted when unset. */
|
|
127
|
+
sessionTtl?: string;
|
|
128
|
+
/** Cross-spin persistent state (charge meters etc.) surfaced into the exported config. */
|
|
129
|
+
persistentState?: {
|
|
130
|
+
vars: string[];
|
|
131
|
+
exposed_vars: string[];
|
|
132
|
+
};
|
|
114
133
|
/** Game-level escape hatch. */
|
|
115
134
|
meta?: Record<string, unknown>;
|
|
116
135
|
}
|
|
@@ -155,13 +174,29 @@ declare function toPaytableView(spec: GameSpec): PaytableView;
|
|
|
155
174
|
|
|
156
175
|
declare function defineGame(spec: GameSpec): GameModel;
|
|
157
176
|
|
|
177
|
+
/** Compose the self-contained Lua the platform runs: generated prelude ⧺ author logic. */
|
|
158
178
|
declare function buildLuaScript(model: GameModel, logicLua: string): string;
|
|
179
|
+
/** The two E8-platform deliverables, keyed by their on-disk filenames. */
|
|
180
|
+
interface E8Bundle {
|
|
181
|
+
/** GameDefinition JSON — uploaded to S3 as `games/{id}/config.json`. */
|
|
182
|
+
'config.json': string;
|
|
183
|
+
/** Self-contained Lua (prelude ⧺ logic) — uploaded to S3 as `games/{id}/script.lua`. */
|
|
184
|
+
'script.lua': string;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Produce the E8 platform deliverables from one spec + the author's `script.logic.lua`.
|
|
188
|
+
* The config carries `script_path` so the platform can locate the uploaded script; the script is
|
|
189
|
+
* the prelude-prepended, self-contained source. Structurally validated before returning.
|
|
190
|
+
*/
|
|
159
191
|
declare function exportGame(spec: GameSpec, opts: {
|
|
160
192
|
logicLua: string;
|
|
161
|
-
}):
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
193
|
+
}): E8Bundle;
|
|
194
|
+
/**
|
|
195
|
+
* Structural (fengari-free) checks that catch the obvious ways an export is unusable before it
|
|
196
|
+
* reaches the platform: malformed config, missing `script_path`/`actions`, or a script with no
|
|
197
|
+
* `execute` entry point. A full boot check (running the script in a LuaEngine) is the caller's job.
|
|
198
|
+
*/
|
|
199
|
+
declare function validateE8Bundle(bundle: E8Bundle): void;
|
|
165
200
|
|
|
166
|
-
export { GameSpecError, buildLuaScript, defineGame, exportGame, toGameDefinition, toLuaPrelude, toMathModes, toModeMap, toPaytableView, validateSpec };
|
|
167
|
-
export type { ActionDefinition, ActionRole, ActionSpec, GameDefinition, GameModel, GameSpec, MathModeSpec, MaxWinConfig, PaytableEntry, PaytableView, SymbolKind, SymbolSpec, TransitionRule };
|
|
201
|
+
export { GameSpecError, buildLuaScript, defineGame, exportGame, toGameDefinition, toLuaPrelude, toMathModes, toModeMap, toPaytableView, validateE8Bundle, validateSpec };
|
|
202
|
+
export type { ActionDefinition, ActionRole, ActionSpec, E8Bundle, GameDefinition, GameModel, GameSpec, MathModeSpec, MaxWinConfig, PaytableEntry, PaytableView, SymbolKind, SymbolSpec, TransitionRule };
|
package/dist/game-spec.esm.js
CHANGED
|
@@ -104,13 +104,21 @@ function toGameDefinition(spec) {
|
|
|
104
104
|
for (const [key, action] of Object.entries(spec.actions)) {
|
|
105
105
|
actions[key] = toActionDefinition(key, action, freeKey);
|
|
106
106
|
}
|
|
107
|
-
|
|
107
|
+
const def = {
|
|
108
108
|
id: spec.id,
|
|
109
109
|
type: 'SLOT',
|
|
110
|
+
// Bare filename — the platform resolves it to games/{id}/script.lua. Required so the exported
|
|
111
|
+
// config.json points at the uploaded script.
|
|
112
|
+
script_path: spec.scriptPath ?? 'script.lua',
|
|
110
113
|
actions,
|
|
111
114
|
bet_levels: [...spec.betLevels],
|
|
112
115
|
max_win: { multiplier: spec.maxWin },
|
|
113
116
|
};
|
|
117
|
+
if (spec.sessionTtl)
|
|
118
|
+
def.session_ttl = spec.sessionTtl;
|
|
119
|
+
if (spec.persistentState)
|
|
120
|
+
def.persistent_state = { ...spec.persistentState };
|
|
121
|
+
return def;
|
|
114
122
|
}
|
|
115
123
|
function luaTable(record) {
|
|
116
124
|
const parts = Object.entries(record).map(([k, v]) => `[${k}]=${v}`);
|
|
@@ -183,16 +191,50 @@ function defineGame(spec) {
|
|
|
183
191
|
};
|
|
184
192
|
}
|
|
185
193
|
|
|
194
|
+
/** Compose the self-contained Lua the platform runs: generated prelude ⧺ author logic. */
|
|
186
195
|
function buildLuaScript(model, logicLua) {
|
|
187
196
|
return model.luaPrelude + '\n' + logicLua;
|
|
188
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Produce the E8 platform deliverables from one spec + the author's `script.logic.lua`.
|
|
200
|
+
* The config carries `script_path` so the platform can locate the uploaded script; the script is
|
|
201
|
+
* the prelude-prepended, self-contained source. Structurally validated before returning.
|
|
202
|
+
*/
|
|
189
203
|
function exportGame(spec, opts) {
|
|
190
204
|
const model = defineGame(spec);
|
|
191
|
-
|
|
192
|
-
'
|
|
205
|
+
const bundle = {
|
|
206
|
+
'config.json': JSON.stringify(model.gameDefinition, null, 2),
|
|
193
207
|
'script.lua': buildLuaScript(model, opts.logicLua),
|
|
194
208
|
};
|
|
209
|
+
validateE8Bundle(bundle);
|
|
210
|
+
return bundle;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Structural (fengari-free) checks that catch the obvious ways an export is unusable before it
|
|
214
|
+
* reaches the platform: malformed config, missing `script_path`/`actions`, or a script with no
|
|
215
|
+
* `execute` entry point. A full boot check (running the script in a LuaEngine) is the caller's job.
|
|
216
|
+
*/
|
|
217
|
+
function validateE8Bundle(bundle) {
|
|
218
|
+
let config;
|
|
219
|
+
try {
|
|
220
|
+
config = JSON.parse(bundle['config.json']);
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
throw new Error(`E8 export: config.json is not valid JSON — ${e.message}`);
|
|
224
|
+
}
|
|
225
|
+
if (!config.id || typeof config.id !== 'string')
|
|
226
|
+
throw new Error('E8 export: config.json missing "id"');
|
|
227
|
+
if (config.type !== 'SLOT' && config.type !== 'TABLE')
|
|
228
|
+
throw new Error('E8 export: config.json "type" must be SLOT or TABLE');
|
|
229
|
+
if (!config.script_path)
|
|
230
|
+
throw new Error('E8 export: config.json missing "script_path"');
|
|
231
|
+
if (!config.actions || typeof config.actions !== 'object' || Object.keys(config.actions).length === 0) {
|
|
232
|
+
throw new Error('E8 export: config.json has no actions');
|
|
233
|
+
}
|
|
234
|
+
if (!/function\s+execute\s*\(/.test(bundle['script.lua'])) {
|
|
235
|
+
throw new Error('E8 export: script.lua does not define a global `execute(state)` function');
|
|
236
|
+
}
|
|
195
237
|
}
|
|
196
238
|
|
|
197
|
-
export { GameSpecError, buildLuaScript, defineGame, exportGame, toGameDefinition, toLuaPrelude, toMathModes, toModeMap, toPaytableView, validateSpec };
|
|
239
|
+
export { GameSpecError, buildLuaScript, defineGame, exportGame, toGameDefinition, toLuaPrelude, toMathModes, toModeMap, toPaytableView, validateE8Bundle, validateSpec };
|
|
198
240
|
//# sourceMappingURL=game-spec.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-spec.esm.js","sources":["../src/game-spec/validate.ts","../src/game-spec/derive.ts","../src/game-spec/defineGame.ts","../src/game-spec/export.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"game-spec.esm.js","sources":["../src/game-spec/validate.ts","../src/game-spec/derive.ts","../src/game-spec/defineGame.ts","../src/game-spec/export.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,13 @@ export { AnywhereWinData, BalanceData, GameConfigData, InitData, PaylineData, Pl
|
|
|
4
4
|
interface GameDefinition {
|
|
5
5
|
id: string;
|
|
6
6
|
type: 'SLOT' | 'TABLE';
|
|
7
|
+
/**
|
|
8
|
+
* Lua script S3 object key or bare filename (e.g. "script.lua" — the platform resolves a bare
|
|
9
|
+
* name to `games/{id}/script.lua`). Mirrors the server's `GameDefinition.ScriptPath` (omitempty).
|
|
10
|
+
* The engine itself loads the script from `LuaEngineConfig.script`, so this is only carried for
|
|
11
|
+
* the exported platform `config.json`.
|
|
12
|
+
*/
|
|
13
|
+
script_path?: string;
|
|
7
14
|
actions: Record<string, ActionDefinition>;
|
|
8
15
|
bet_levels?: number[] | BetLevelsConfig;
|
|
9
16
|
max_win?: MaxWinConfig;
|
package/dist/lua.d.ts
CHANGED
|
@@ -3,6 +3,13 @@ import { SessionData, PlayParams } from '@energy8platform/game-sdk';
|
|
|
3
3
|
interface GameDefinition {
|
|
4
4
|
id: string;
|
|
5
5
|
type: 'SLOT' | 'TABLE';
|
|
6
|
+
/**
|
|
7
|
+
* Lua script S3 object key or bare filename (e.g. "script.lua" — the platform resolves a bare
|
|
8
|
+
* name to `games/{id}/script.lua`). Mirrors the server's `GameDefinition.ScriptPath` (omitempty).
|
|
9
|
+
* The engine itself loads the script from `LuaEngineConfig.script`, so this is only carried for
|
|
10
|
+
* the exported platform `config.json`.
|
|
11
|
+
*/
|
|
12
|
+
script_path?: string;
|
|
6
13
|
actions: Record<string, ActionDefinition>;
|
|
7
14
|
bet_levels?: number[] | BetLevelsConfig;
|
|
8
15
|
max_win?: MaxWinConfig;
|
package/dist/simulation.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
interface GameDefinition {
|
|
2
2
|
id: string;
|
|
3
3
|
type: 'SLOT' | 'TABLE';
|
|
4
|
+
/**
|
|
5
|
+
* Lua script S3 object key or bare filename (e.g. "script.lua" — the platform resolves a bare
|
|
6
|
+
* name to `games/{id}/script.lua`). Mirrors the server's `GameDefinition.ScriptPath` (omitempty).
|
|
7
|
+
* The engine itself loads the script from `LuaEngineConfig.script`, so this is only carried for
|
|
8
|
+
* the exported platform `config.json`.
|
|
9
|
+
*/
|
|
10
|
+
script_path?: string;
|
|
4
11
|
actions: Record<string, ActionDefinition>;
|
|
5
12
|
bet_levels?: number[] | BetLevelsConfig;
|
|
6
13
|
max_win?: MaxWinConfig;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@energy8platform/platform-core",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.3",
|
|
4
4
|
"description": "Energy8 platform core: Lua engine, DevBridge, RTP simulation, and SDK session orchestration. Renderer-agnostic — pair with any game framework (Pixi, Phaser, Three.js, custom).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs.js",
|
package/src/game-spec/derive.ts
CHANGED
|
@@ -61,13 +61,19 @@ export function toGameDefinition(spec: GameSpec): GameDefinition {
|
|
|
61
61
|
for (const [key, action] of Object.entries(spec.actions)) {
|
|
62
62
|
actions[key] = toActionDefinition(key, action, freeKey);
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
const def: GameDefinition = {
|
|
65
65
|
id: spec.id,
|
|
66
66
|
type: 'SLOT',
|
|
67
|
+
// Bare filename — the platform resolves it to games/{id}/script.lua. Required so the exported
|
|
68
|
+
// config.json points at the uploaded script.
|
|
69
|
+
script_path: spec.scriptPath ?? 'script.lua',
|
|
67
70
|
actions,
|
|
68
71
|
bet_levels: [...spec.betLevels],
|
|
69
72
|
max_win: { multiplier: spec.maxWin },
|
|
70
73
|
};
|
|
74
|
+
if (spec.sessionTtl) def.session_ttl = spec.sessionTtl;
|
|
75
|
+
if (spec.persistentState) def.persistent_state = { ...spec.persistentState };
|
|
76
|
+
return def;
|
|
71
77
|
}
|
|
72
78
|
|
|
73
79
|
function luaTable(record: Record<number, number>): string {
|
package/src/game-spec/export.ts
CHANGED
|
@@ -1,17 +1,53 @@
|
|
|
1
1
|
import type { GameSpec, GameModel } from './types';
|
|
2
2
|
import { defineGame } from './defineGame';
|
|
3
3
|
|
|
4
|
+
/** Compose the self-contained Lua the platform runs: generated prelude ⧺ author logic. */
|
|
4
5
|
export function buildLuaScript(model: GameModel, logicLua: string): string {
|
|
5
6
|
return model.luaPrelude + '\n' + logicLua;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
/** The two E8-platform deliverables, keyed by their on-disk filenames. */
|
|
10
|
+
export interface E8Bundle {
|
|
11
|
+
/** GameDefinition JSON — uploaded to S3 as `games/{id}/config.json`. */
|
|
12
|
+
'config.json': string;
|
|
13
|
+
/** Self-contained Lua (prelude ⧺ logic) — uploaded to S3 as `games/{id}/script.lua`. */
|
|
14
|
+
'script.lua': string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Produce the E8 platform deliverables from one spec + the author's `script.logic.lua`.
|
|
19
|
+
* The config carries `script_path` so the platform can locate the uploaded script; the script is
|
|
20
|
+
* the prelude-prepended, self-contained source. Structurally validated before returning.
|
|
21
|
+
*/
|
|
22
|
+
export function exportGame(spec: GameSpec, opts: { logicLua: string }): E8Bundle {
|
|
12
23
|
const model = defineGame(spec);
|
|
13
|
-
|
|
14
|
-
'
|
|
24
|
+
const bundle: E8Bundle = {
|
|
25
|
+
'config.json': JSON.stringify(model.gameDefinition, null, 2),
|
|
15
26
|
'script.lua': buildLuaScript(model, opts.logicLua),
|
|
16
27
|
};
|
|
28
|
+
validateE8Bundle(bundle);
|
|
29
|
+
return bundle;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Structural (fengari-free) checks that catch the obvious ways an export is unusable before it
|
|
34
|
+
* reaches the platform: malformed config, missing `script_path`/`actions`, or a script with no
|
|
35
|
+
* `execute` entry point. A full boot check (running the script in a LuaEngine) is the caller's job.
|
|
36
|
+
*/
|
|
37
|
+
export function validateE8Bundle(bundle: E8Bundle): void {
|
|
38
|
+
let config: Record<string, unknown>;
|
|
39
|
+
try {
|
|
40
|
+
config = JSON.parse(bundle['config.json']);
|
|
41
|
+
} catch (e) {
|
|
42
|
+
throw new Error(`E8 export: config.json is not valid JSON — ${(e as Error).message}`);
|
|
43
|
+
}
|
|
44
|
+
if (!config.id || typeof config.id !== 'string') throw new Error('E8 export: config.json missing "id"');
|
|
45
|
+
if (config.type !== 'SLOT' && config.type !== 'TABLE') throw new Error('E8 export: config.json "type" must be SLOT or TABLE');
|
|
46
|
+
if (!config.script_path) throw new Error('E8 export: config.json missing "script_path"');
|
|
47
|
+
if (!config.actions || typeof config.actions !== 'object' || Object.keys(config.actions as object).length === 0) {
|
|
48
|
+
throw new Error('E8 export: config.json has no actions');
|
|
49
|
+
}
|
|
50
|
+
if (!/function\s+execute\s*\(/.test(bundle['script.lua'])) {
|
|
51
|
+
throw new Error('E8 export: script.lua does not define a global `execute(state)` function');
|
|
52
|
+
}
|
|
17
53
|
}
|
package/src/game-spec/index.ts
CHANGED
|
@@ -2,5 +2,6 @@ export * from './types';
|
|
|
2
2
|
export { validateSpec, GameSpecError } from './validate';
|
|
3
3
|
export { toGameDefinition, toLuaPrelude, toModeMap, toMathModes, toPaytableView } from './derive';
|
|
4
4
|
export { defineGame } from './defineGame';
|
|
5
|
-
export { buildLuaScript, exportGame } from './export';
|
|
5
|
+
export { buildLuaScript, exportGame, validateE8Bundle } from './export';
|
|
6
|
+
export type { E8Bundle } from './export';
|
|
6
7
|
export type { GameDefinition, ActionDefinition, TransitionRule, MaxWinConfig } from '../lua/types';
|
package/src/game-spec/types.ts
CHANGED
|
@@ -48,6 +48,15 @@ export interface GameSpec {
|
|
|
48
48
|
actions: Record<string, ActionSpec>;
|
|
49
49
|
/** Open hint for codegen/UI: 'cascade' | 'cluster' | 'ways' | 'lines' | … */
|
|
50
50
|
mechanic?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Lua script key for the exported E8 `config.json`. Default `"script.lua"`, which the platform
|
|
53
|
+
* resolves to `games/{id}/script.lua`. Override only when the script lives at a custom S3 key.
|
|
54
|
+
*/
|
|
55
|
+
scriptPath?: string;
|
|
56
|
+
/** Session expiry for the exported config (Go-style duration, e.g. "24h"). Omitted when unset. */
|
|
57
|
+
sessionTtl?: string;
|
|
58
|
+
/** Cross-spin persistent state (charge meters etc.) surfaced into the exported config. */
|
|
59
|
+
persistentState?: { vars: string[]; exposed_vars: string[] };
|
|
51
60
|
/** Game-level escape hatch. */
|
|
52
61
|
meta?: Record<string, unknown>;
|
|
53
62
|
}
|
package/src/lua/types.ts
CHANGED
|
@@ -5,6 +5,13 @@ import type { SessionData, PlayParams } from '@energy8platform/game-sdk';
|
|
|
5
5
|
export interface GameDefinition {
|
|
6
6
|
id: string;
|
|
7
7
|
type: 'SLOT' | 'TABLE';
|
|
8
|
+
/**
|
|
9
|
+
* Lua script S3 object key or bare filename (e.g. "script.lua" — the platform resolves a bare
|
|
10
|
+
* name to `games/{id}/script.lua`). Mirrors the server's `GameDefinition.ScriptPath` (omitempty).
|
|
11
|
+
* The engine itself loads the script from `LuaEngineConfig.script`, so this is only carried for
|
|
12
|
+
* the exported platform `config.json`.
|
|
13
|
+
*/
|
|
14
|
+
script_path?: string;
|
|
8
15
|
actions: Record<string, ActionDefinition>;
|
|
9
16
|
bet_levels?: number[] | BetLevelsConfig;
|
|
10
17
|
max_win?: MaxWinConfig;
|