@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.
@@ -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;
@@ -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
- return {
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
- return {
194
- 'gameDefinition.json': JSON.stringify(model.gameDefinition, null, 2),
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;;;;;;;;;;;;;;"}
@@ -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
- 'gameDefinition.json': string;
163
- 'script.lua': string;
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 };
@@ -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
- return {
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
- return {
192
- 'gameDefinition.json': JSON.stringify(model.gameDefinition, null, 2),
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":"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;IACA,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,QAAA,IAAI,EAAE,MAAM;QACZ,OAAO;AACP,QAAA,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AAC/B,QAAA,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;KACrC;AACH;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;;AClIM,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;;ACZM,SAAU,cAAc,CAAC,KAAgB,EAAE,QAAgB,EAAA;AAC/D,IAAA,OAAO,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,QAAQ;AAC3C;AAEM,SAAU,UAAU,CACxB,IAAc,EACd,IAA0B,EAAA;AAE1B,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,OAAO;AACL,QAAA,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,YAAY,EAAE,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;KACnD;AACH;;;;"}
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;
@@ -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.2",
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",
@@ -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
- return {
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 {
@@ -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
- export function exportGame(
9
- spec: GameSpec,
10
- opts: { logicLua: string },
11
- ): { 'gameDefinition.json': string; 'script.lua': string } {
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
- return {
14
- 'gameDefinition.json': JSON.stringify(model.gameDefinition, null, 2),
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
  }
@@ -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';
@@ -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;