@crowdedkingdoms/crowdyjs 8.7.0 → 8.8.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 (42) hide show
  1. package/MIGRATION.md +42 -0
  2. package/README.md +2 -2
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/kit/decks.d.ts +33 -1
  7. package/dist/kit/decks.d.ts.map +1 -1
  8. package/dist/kit/decks.js +49 -1
  9. package/dist/kit/director.d.ts +88 -0
  10. package/dist/kit/director.d.ts.map +1 -0
  11. package/dist/kit/director.js +86 -0
  12. package/dist/kit/economy.d.ts +46 -1
  13. package/dist/kit/economy.d.ts.map +1 -1
  14. package/dist/kit/economy.js +63 -1
  15. package/dist/kit/index.d.ts +6 -2
  16. package/dist/kit/index.d.ts.map +1 -1
  17. package/dist/kit/index.js +6 -2
  18. package/dist/kit/instances.d.ts +52 -0
  19. package/dist/kit/instances.d.ts.map +1 -0
  20. package/dist/kit/instances.js +60 -0
  21. package/dist/kit/kit.d.ts +16 -0
  22. package/dist/kit/kit.d.ts.map +1 -1
  23. package/dist/kit/kit.js +12 -4
  24. package/dist/kit/leaderboards.d.ts +21 -1
  25. package/dist/kit/leaderboards.d.ts.map +1 -1
  26. package/dist/kit/leaderboards.js +40 -1
  27. package/dist/kit/matches.d.ts +33 -1
  28. package/dist/kit/matches.d.ts.map +1 -1
  29. package/dist/kit/matches.js +56 -1
  30. package/dist/kit/matchmaking.d.ts +57 -0
  31. package/dist/kit/matchmaking.d.ts.map +1 -0
  32. package/dist/kit/matchmaking.js +59 -0
  33. package/dist/kit/minigames.d.ts +30 -0
  34. package/dist/kit/minigames.d.ts.map +1 -0
  35. package/dist/kit/minigames.js +38 -0
  36. package/dist/kit/quests.d.ts +57 -0
  37. package/dist/kit/quests.d.ts.map +1 -1
  38. package/dist/kit/quests.js +72 -0
  39. package/dist/kit/wire.d.ts +37 -0
  40. package/dist/kit/wire.d.ts.map +1 -1
  41. package/dist/kit/wire.js +50 -0
  42. package/package.json +1 -1
@@ -15,7 +15,7 @@ import { kitContainerProperties, kitInvoke, } from './shared.js';
15
15
  * Obtained via `client.kit(appId).economy`.
16
16
  */
17
17
  export class EconomyKit {
18
- constructor(appId, gameModel, options = {}) {
18
+ constructor(appId, gameModel, options = {}, engines) {
19
19
  this.appId = appId;
20
20
  this.gameModel = gameModel;
21
21
  /** Shop (admin-priced listings; atomic buys). */
@@ -258,6 +258,7 @@ export class EconomyKit {
258
258
  this.typePrefix = options.typePrefix ?? '';
259
259
  this.names = economyNames(this.typePrefix);
260
260
  this.currencies = options.currencies ?? ['gold'];
261
+ this.orderBook = new MarketKit(engines, options.marketModuleName ?? 'market-engine');
261
262
  }
262
263
  get defaultCurrency() {
263
264
  return this.currencies[0];
@@ -363,3 +364,64 @@ export class EconomyKit {
363
364
  };
364
365
  }
365
366
  }
367
+ /**
368
+ * Order-book market methods over the market-engine (Wave 2): price-time
369
+ * priority matching with escrowed settlement. Deposits/withdrawals bridge
370
+ * to the game's wallets via compute events the game layer consumes.
371
+ *
372
+ * Obtained via `client.kit(appId).economy.market`.
373
+ */
374
+ export class MarketKit {
375
+ constructor(engines, moduleName) {
376
+ this.engines = engines;
377
+ this.moduleName = moduleName;
378
+ }
379
+ /** Is the market engine deployed + enabled (cached per session)? */
380
+ engineAvailable() {
381
+ if (!this.engines)
382
+ return Promise.resolve(false);
383
+ return this.engines.has(this.moduleName);
384
+ }
385
+ /** Move coins into your market account (escrow source for bids). */
386
+ async depositCoins(amount) {
387
+ return this.invoke('deposit_coins', { amount });
388
+ }
389
+ /** Move items into your market account (escrow source for asks). */
390
+ async depositItems(item, quantity) {
391
+ return this.invoke('deposit_items', { item, quantity });
392
+ }
393
+ /** Place a limit bid: locks coins at your limit; fills at maker price. */
394
+ async bid(item, price, quantity) {
395
+ return this.invoke('place', { item, side: 'buy', price, quantity });
396
+ }
397
+ /** Place a limit ask: locks items until filled or cancelled. */
398
+ async ask(item, price, quantity) {
399
+ return this.invoke('place', { item, side: 'sell', price, quantity });
400
+ }
401
+ /** Cancel a resting order (owner only); escrow refunds instantly. */
402
+ async cancel(item, orderId) {
403
+ return this.invoke('cancel', { item, orderId });
404
+ }
405
+ /** Book depth: best bids/asks as [price, quantity] levels. */
406
+ async book(item) {
407
+ return this.invoke('book', { item });
408
+ }
409
+ /** Your market account (settled + locked balances). */
410
+ async account() {
411
+ return this.invoke('account', {});
412
+ }
413
+ /** Withdraw settled balances back to the game layer. */
414
+ async withdraw(input) {
415
+ return this.invoke('withdraw', input);
416
+ }
417
+ async invoke(exportName, params) {
418
+ if (!this.engines) {
419
+ throw new Error('market engine unavailable: compute domain not wired');
420
+ }
421
+ const result = await this.engines.invoke(this.moduleName, exportName, params);
422
+ if (!result.success) {
423
+ throw new Error(`market.${exportName} failed: ${result.reason ?? 'unknown'}`);
424
+ }
425
+ return result.body;
426
+ }
427
+ }
@@ -5,7 +5,7 @@ export { InventoryKit, type InventoryKitOptions, type KitItemStack } from './inv
5
5
  export { CombatKit, type CombatKitOptions, type KitCombatant, type KitRoutedAttack, type KitStatusEffect, } from './combat.js';
6
6
  export { DecksKit, type DecksKitOptions, type KitCard } from './decks.js';
7
7
  export { FeaturesKit } from './features.js';
8
- export { EconomyKit, type EconomyKitOptions, type KitMarketListing, type KitShopListing, type KitTradeOffer, type KitWallet, } from './economy.js';
8
+ export { EconomyKit, MarketKit, type EconomyKitOptions, type KitMarketListing, type KitShopListing, type KitTradeOffer, type KitWallet, } from './economy.js';
9
9
  export { LeaderboardsKit, type KitLeaderboardEntry, type LeaderboardsKitOptions, } from './leaderboards.js';
10
10
  export { LootKit, type KitLootRoll, type LootKitOptions } from './loot.js';
11
11
  export { ObjectsKit, type ObjectsKitOptions } from './objects.js';
@@ -13,7 +13,11 @@ export { NpcsKit, type KitNpc, type LiveNpcPose, type NpcsKitOptions, } from './
13
13
  export { MobsKit, type KitAttackResult, type KitMobDef, type KitMobSlot, type MobsKitOptions, } from './mobs.js';
14
14
  export { PetsKit, type KitPet, type KitPetResult, type PetsKitOptions, } from './pets.js';
15
15
  export { EngineDetector, type EngineInvokeResult } from './engine.js';
16
- export { EVENT_CONTACT_DAMAGE, EVENT_WEATHER, FLAG_GROUNDED, FLAG_MOB, FLAG_NPC, FLAG_RESERVED3, POSE_BYTES, decodeEnginePose, encodeEnginePose, engineLanes, enginePoseCodec, parseContactDamage, parseEngineEvent, parseWeatherEvent, poseSuffix, type ContactDamageEvent, type EnginePose, type WeatherEvent, } from './wire.js';
16
+ export { InstancesKit, type InstancesKitOptions, type KitInstance, } from './instances.js';
17
+ export { DirectorKit, type DirectorKitOptions, type KitDirectorRun, type KitWaveSpec, } from './director.js';
18
+ export { MatchmakingKit, type KitQueueStatus, type MatchmakingKitOptions, } from './matchmaking.js';
19
+ export { MinigamesKit, type MinigamesKitOptions } from './minigames.js';
20
+ export { EVENT_CONTACT_DAMAGE, EVENT_WEATHER, FLAG_GROUNDED, FLAG_MOB, FLAG_NPC, FLAG_RESERVED3, POSE_BYTES, decodeEnginePose, encodeEnginePose, engineLanes, enginePoseCodec, parseContactDamage, parseEngineEvent, parseProposalEvent, parseScoreEvent, parseTurnEvent, parseWeatherEvent, poseSuffix, EVENT_PROPOSAL, EVENT_SCORE, EVENT_TURN, type ContactDamageEvent, type EnginePose, type ProposalEvent, type ScoreEvent, type TurnEvent, type WeatherEvent, } from './wire.js';
17
21
  export { PlotsKit, type PlotsKitOptions, type KitPlot } from './plots.js';
18
22
  export { QuestsKit, type KitQuestDef, type KitQuestProgress, type QuestsKitOptions, } from './quests.js';
19
23
  export { ProgressionKit, type KitAchievementDef, type KitAchievementUnlock, type KitProgress, type KitSkillDef, type KitSkillRank, type ProgressionKitOptions, } from './progression.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kit/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kit/index.ts"],"names":[],"mappings":"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"}
package/dist/kit/index.js CHANGED
@@ -5,7 +5,7 @@ export { InventoryKit } from './inventory.js';
5
5
  export { CombatKit, } from './combat.js';
6
6
  export { DecksKit } from './decks.js';
7
7
  export { FeaturesKit } from './features.js';
8
- export { EconomyKit, } from './economy.js';
8
+ export { EconomyKit, MarketKit, } from './economy.js';
9
9
  export { LeaderboardsKit, } from './leaderboards.js';
10
10
  export { LootKit } from './loot.js';
11
11
  export { ObjectsKit } from './objects.js';
@@ -13,7 +13,11 @@ export { NpcsKit, } from './npcs.js';
13
13
  export { MobsKit, } from './mobs.js';
14
14
  export { PetsKit, } from './pets.js';
15
15
  export { EngineDetector } from './engine.js';
16
- export { EVENT_CONTACT_DAMAGE, EVENT_WEATHER, FLAG_GROUNDED, FLAG_MOB, FLAG_NPC, FLAG_RESERVED3, POSE_BYTES, decodeEnginePose, encodeEnginePose, engineLanes, enginePoseCodec, parseContactDamage, parseEngineEvent, parseWeatherEvent, poseSuffix, } from './wire.js';
16
+ export { InstancesKit, } from './instances.js';
17
+ export { DirectorKit, } from './director.js';
18
+ export { MatchmakingKit, } from './matchmaking.js';
19
+ export { MinigamesKit } from './minigames.js';
20
+ export { EVENT_CONTACT_DAMAGE, EVENT_WEATHER, FLAG_GROUNDED, FLAG_MOB, FLAG_NPC, FLAG_RESERVED3, POSE_BYTES, decodeEnginePose, encodeEnginePose, engineLanes, enginePoseCodec, parseContactDamage, parseEngineEvent, parseProposalEvent, parseScoreEvent, parseTurnEvent, parseWeatherEvent, poseSuffix, EVENT_PROPOSAL, EVENT_SCORE, EVENT_TURN, } from './wire.js';
17
21
  export { PlotsKit } from './plots.js';
18
22
  export { QuestsKit, } from './quests.js';
19
23
  export { ProgressionKit, } from './progression.js';
@@ -0,0 +1,52 @@
1
+ import type { Scalars } from '../generated/graphql.js';
2
+ import type { EngineDetector } from './engine.js';
3
+ /** Options for {@link InstancesKit}. */
4
+ export interface InstancesKitOptions {
5
+ /** The instance-engine module name. Defaults to `'instance-engine'`. */
6
+ moduleName?: string;
7
+ }
8
+ /** A parsed instance (private world slice). */
9
+ export interface KitInstance {
10
+ instanceId: string;
11
+ name: string;
12
+ creator: string;
13
+ members: string[];
14
+ /** Decimal string (u64 seeds exceed JS safe integers). */
15
+ seed: string;
16
+ status: string;
17
+ outcome: string;
18
+ sessionId: string;
19
+ containerId: string;
20
+ /** Reserved chunk-volume corner [x, y, z]. */
21
+ chunkBase: [number, number, number];
22
+ volumeChunks: number;
23
+ }
24
+ /**
25
+ * Runtime helpers for the instance-engine (Wave 2): private world slices
26
+ * with lifecycle (open/join/complete), per-run seeds for deterministic
27
+ * procedural content, and reserved disjoint chunk volumes. v1 spatial
28
+ * isolation is by-convention (disjoint volumes + distance-scoped emits).
29
+ *
30
+ * Obtained via `client.kit(appId).instances`.
31
+ */
32
+ export declare class InstancesKit {
33
+ private readonly engines;
34
+ private readonly moduleName;
35
+ constructor(_appId: Scalars['BigInt']['input'], engines: EngineDetector, options?: InstancesKitOptions);
36
+ /** Is the instance engine deployed + enabled (cached per session)? */
37
+ engineAvailable(): Promise<boolean>;
38
+ /** Open a new instance (caller becomes creator + first member). */
39
+ open(input?: {
40
+ name?: string;
41
+ seed?: string;
42
+ sessionId?: string;
43
+ }): Promise<KitInstance>;
44
+ /** Join an open instance. */
45
+ join(instanceId: string): Promise<KitInstance>;
46
+ /** Complete an instance (member-only; announces `instance_completed`). */
47
+ complete(instanceId: string, outcome?: string): Promise<KitInstance>;
48
+ /** One instance's state (or the engine's totals without an id). */
49
+ state(instanceId?: string): Promise<KitInstance | Record<string, unknown>>;
50
+ private invoke;
51
+ }
52
+ //# sourceMappingURL=instances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../../src/kit/instances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,aAAa,CAAC;AAEtE,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB;AAsBD;;;;;;;GAOG;AACH,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGlC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACjB,OAAO,EAAE,cAAc,EACxC,OAAO,GAAE,mBAAwB;IAKnC,sEAAsE;IACtE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC,mEAAmE;IAC7D,IAAI,CAAC,KAAK,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAKlG,6BAA6B;IACvB,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKpD,0EAA0E;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAK1E,mEAAmE;IAC7D,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAKlE,MAAM;CAUrB"}
@@ -0,0 +1,60 @@
1
+ function toInstance(body) {
2
+ return {
3
+ instanceId: String(body.instanceId ?? ''),
4
+ name: String(body.name ?? ''),
5
+ creator: String(body.creator ?? ''),
6
+ members: Array.isArray(body.members) ? body.members.map(String) : [],
7
+ seed: String(body.seed ?? '0'),
8
+ status: String(body.status ?? ''),
9
+ outcome: String(body.outcome ?? ''),
10
+ sessionId: String(body.sessionId ?? ''),
11
+ containerId: String(body.containerId ?? ''),
12
+ chunkBase: (Array.isArray(body.chunkBase) ? body.chunkBase : [0, 0, 0]).map(Number),
13
+ volumeChunks: Number(body.volumeChunks ?? 0),
14
+ };
15
+ }
16
+ /**
17
+ * Runtime helpers for the instance-engine (Wave 2): private world slices
18
+ * with lifecycle (open/join/complete), per-run seeds for deterministic
19
+ * procedural content, and reserved disjoint chunk volumes. v1 spatial
20
+ * isolation is by-convention (disjoint volumes + distance-scoped emits).
21
+ *
22
+ * Obtained via `client.kit(appId).instances`.
23
+ */
24
+ export class InstancesKit {
25
+ constructor(_appId, engines, options = {}) {
26
+ this.engines = engines;
27
+ this.moduleName = options.moduleName ?? 'instance-engine';
28
+ }
29
+ /** Is the instance engine deployed + enabled (cached per session)? */
30
+ engineAvailable() {
31
+ return this.engines.has(this.moduleName);
32
+ }
33
+ /** Open a new instance (caller becomes creator + first member). */
34
+ async open(input = {}) {
35
+ const result = await this.invoke('open', input);
36
+ return toInstance(result.body);
37
+ }
38
+ /** Join an open instance. */
39
+ async join(instanceId) {
40
+ const result = await this.invoke('join', { instanceId });
41
+ return toInstance(result.body);
42
+ }
43
+ /** Complete an instance (member-only; announces `instance_completed`). */
44
+ async complete(instanceId, outcome) {
45
+ const result = await this.invoke('complete', { instanceId, outcome });
46
+ return toInstance(result.body);
47
+ }
48
+ /** One instance's state (or the engine's totals without an id). */
49
+ async state(instanceId) {
50
+ const result = await this.invoke('state', instanceId ? { instanceId } : {});
51
+ return instanceId ? toInstance(result.body) : result.body;
52
+ }
53
+ async invoke(exportName, params) {
54
+ const result = await this.engines.invoke(this.moduleName, exportName, params);
55
+ if (!result.success) {
56
+ throw new Error(`instances.${exportName} failed: ${result.reason ?? 'unknown'}`);
57
+ }
58
+ return result;
59
+ }
60
+ }
package/dist/kit/kit.d.ts CHANGED
@@ -7,13 +7,17 @@ import type { GameModelSeedMutation, GameModelUpsertAutomationMutation, GameMode
7
7
  import type { ComputeAPI } from '../domains/compute.js';
8
8
  import { type KitBlueprint } from './blueprints/index.js';
9
9
  import { CombatKit, type CombatKitOptions } from './combat.js';
10
+ import { DirectorKit, type DirectorKitOptions } from './director.js';
10
11
  import { DecksKit, type DecksKitOptions } from './decks.js';
11
12
  import { EconomyKit, type EconomyKitOptions } from './economy.js';
12
13
  import { EngineDetector } from './engine.js';
13
14
  import { FeaturesKit } from './features.js';
15
+ import { InstancesKit, type InstancesKitOptions } from './instances.js';
14
16
  import { InventoryKit, type InventoryKitOptions } from './inventory.js';
15
17
  import { LeaderboardsKit, type LeaderboardsKitOptions } from './leaderboards.js';
16
18
  import { LootKit, type LootKitOptions } from './loot.js';
19
+ import { MatchmakingKit, type MatchmakingKitOptions } from './matchmaking.js';
20
+ import { MinigamesKit, type MinigamesKitOptions } from './minigames.js';
17
21
  import { MobsKit, type MobsKitOptions } from './mobs.js';
18
22
  import { NpcsKit, type NpcsKitOptions } from './npcs.js';
19
23
  import { ObjectsKit, type ObjectsKitOptions } from './objects.js';
@@ -42,6 +46,10 @@ export interface GameKitOptions {
42
46
  leaderboards?: LeaderboardsKitOptions;
43
47
  mobs?: MobsKitOptions;
44
48
  pets?: PetsKitOptions;
49
+ instances?: InstancesKitOptions;
50
+ director?: DirectorKitOptions;
51
+ matchmaking?: MatchmakingKitOptions;
52
+ minigames?: MinigamesKitOptions;
45
53
  }
46
54
  /**
47
55
  * The extra (non-model) domains some kit helpers compose: channels + udp for
@@ -136,6 +144,14 @@ export declare class GameKitClient {
136
144
  readonly features: FeaturesKit;
137
145
  /** Mob-engine helpers (defs/slots, refereed attacks, contact events). */
138
146
  readonly mobs: MobsKit;
147
+ /** Instance helpers (private world slices, seeded runs). */
148
+ readonly instances: InstancesKit;
149
+ /** Director helpers (encounter defs, run state, kill/boss reports). */
150
+ readonly director: DirectorKit;
151
+ /** Matchmaking helpers (queues, proposals, rating). */
152
+ readonly matchmaking: MatchmakingKit;
153
+ /** Minigame helpers (thin invoke wrapper for invoke-loop games). */
154
+ readonly minigames: MinigamesKit;
139
155
  /** Pet helpers (adopt/summon/dismiss/rename over the npc engine). */
140
156
  readonly pets: PetsKit;
141
157
  /** Compute-engine capability detection shared by the engine-aware kits. */
@@ -1 +1 @@
1
- {"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/kit/kit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../src/kit/kit.ts"],"names":[],"mappings":"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"}
package/dist/kit/kit.js CHANGED
@@ -1,12 +1,16 @@
1
1
  import { mergeBlueprints } from './blueprints/index.js';
2
2
  import { CombatKit } from './combat.js';
3
+ import { DirectorKit } from './director.js';
3
4
  import { DecksKit } from './decks.js';
4
5
  import { EconomyKit } from './economy.js';
5
6
  import { EngineDetector } from './engine.js';
6
7
  import { FeaturesKit } from './features.js';
8
+ import { InstancesKit } from './instances.js';
7
9
  import { InventoryKit } from './inventory.js';
8
10
  import { LeaderboardsKit } from './leaderboards.js';
9
11
  import { LootKit } from './loot.js';
12
+ import { MatchmakingKit } from './matchmaking.js';
13
+ import { MinigamesKit } from './minigames.js';
10
14
  import { MobsKit } from './mobs.js';
11
15
  import { NpcsKit } from './npcs.js';
12
16
  import { ObjectsKit } from './objects.js';
@@ -64,18 +68,22 @@ export class GameKitClient {
64
68
  this.objects = new ObjectsKit(appId, gameModel, options.objects);
65
69
  this.npcs = new NpcsKit(appId, gameModel, options.npcs, this.engines);
66
70
  this.plots = new PlotsKit(appId, gameModel, gameApps, options.plots);
67
- this.economy = new EconomyKit(appId, gameModel, options.economy);
71
+ this.economy = new EconomyKit(appId, gameModel, options.economy, this.engines);
68
72
  this.progression = new ProgressionKit(appId, gameModel, options.progression);
69
73
  this.loot = new LootKit(appId, gameModel, options.loot);
70
74
  this.quests = new QuestsKit(appId, gameModel, options.quests);
71
75
  this.combat = new CombatKit(appId, gameModel, options.combat, this.engines);
72
- this.matches = new MatchesKit(appId, gameModel, domains.channels, domains.udp, options.matches);
73
- this.decks = new DecksKit(appId, gameModel, options.decks);
76
+ this.matches = new MatchesKit(appId, gameModel, domains.channels, domains.udp, options.matches, this.engines);
77
+ this.decks = new DecksKit(appId, gameModel, options.decks, this.engines);
74
78
  this.worldsim = new WorldsimKit(appId, gameModel, options.worldsim, this.engines);
75
79
  this.mobs = new MobsKit(appId, gameModel, this.engines, options.mobs);
76
80
  this.pets = new PetsKit(appId, gameModel, this.engines, options.pets);
81
+ this.instances = new InstancesKit(appId, this.engines, options.instances);
82
+ this.director = new DirectorKit(appId, gameModel, this.engines, options.director);
83
+ this.matchmaking = new MatchmakingKit(appId, this.engines, options.matchmaking);
84
+ this.minigames = new MinigamesKit(appId, this.engines, options.minigames);
77
85
  this.social = new SocialKit(appId, domains.teams, domains.channels, domains.udp, gameApps, options.social);
78
- this.leaderboards = new LeaderboardsKit(appId, gameModel, options.leaderboards);
86
+ this.leaderboards = new LeaderboardsKit(appId, gameModel, options.leaderboards, this.engines);
79
87
  this.features = new FeaturesKit(appId, gameModel);
80
88
  }
81
89
  /**
@@ -1,8 +1,11 @@
1
1
  import type { GameModelAPI } from '../domains/gameModel.js';
2
+ import type { EngineDetector } from './engine.js';
2
3
  import type { Scalars } from '../generated/graphql.js';
3
4
  import { type KitInvokeResult } from './shared.js';
4
5
  /** Options for {@link LeaderboardsKit}. Must match the deployed blueprint. */
5
6
  export interface LeaderboardsKitOptions {
7
+ /** The board engine module for server-computed rankings. Defaults to `'board-engine'`. */
8
+ engineModuleName?: string;
6
9
  /** The `typePrefix` the leaderboards blueprint was deployed with. */
7
10
  typePrefix?: string;
8
11
  }
@@ -29,8 +32,25 @@ export interface KitLeaderboardEntry {
29
32
  export declare class LeaderboardsKit {
30
33
  private readonly appId;
31
34
  private readonly gameModel;
35
+ private readonly engines?;
32
36
  private readonly names;
33
- constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, options?: LeaderboardsKitOptions);
37
+ constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, options?: LeaderboardsKitOptions, engines?: EngineDetector | undefined);
38
+ private readonly engineModuleName;
39
+ /**
40
+ * Is a board compute engine deployed + enabled (cached per session)? When
41
+ * true, rankings are computed SERVER-side (tie-aware ranks, percentiles,
42
+ * pages) instead of the blueprint's client-sorted reads.
43
+ */
44
+ engineAvailable(): Promise<boolean>;
45
+ /** A server-ranked page (rank/percentile computed module-side). */
46
+ engineTop(boardId: string, page?: number, perPage?: number): Promise<Record<string, unknown>>;
47
+ /** Your (or a subject's) server-computed ranked row. */
48
+ engineRankOf(boardId: string, subjectId?: string): Promise<Record<string, unknown>>;
49
+ /** Submit YOUR OWN score (personal-best semantics) to an engine board. */
50
+ engineSubmitSelf(boardId: string, score: number): Promise<Record<string, unknown>>;
51
+ /** Frozen season snapshots (top rows per rolled season). */
52
+ engineSeasons(boardId: string): Promise<Record<string, unknown>>;
53
+ private engineInvoke;
34
54
  /** Find-or-create a player's entry on a board. */
35
55
  ensureEntry(ownerUserId: Scalars['BigInt']['input'], boardId: string, options?: {
36
56
  displayName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"leaderboards.d.ts","sourceRoot":"","sources":["../../src/kit/leaderboards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAKvD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAJ5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAGvB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACjC,SAAS,EAAE,YAAY,EACxC,OAAO,GAAE,sBAA2B;IAKtC,kDAAkD;IAC5C,WAAW,CACf,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;;;;;;;;;;;IAqBxC;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAS/E,0EAA0E;IACpE,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA6B5D,oDAAoD;IAC9C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,SAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAIlE;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAClC,MAAM,SAAI,GACT,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOjC,gFAAgF;IAC1E,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAI/C"}
1
+ {"version":3,"file":"leaderboards.d.ts","sourceRoot":"","sources":["../../src/kit/leaderboards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAKvD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,8CAA8C;AAC9C,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAN3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAGvB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACjC,SAAS,EAAE,YAAY,EACxC,OAAO,GAAE,sBAA2B,EACnB,OAAO,CAAC,EAAE,cAAc,YAAA;IAM3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAI1C;;;;OAIG;IACH,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnC,mEAAmE;IAC7D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,OAAO,SAAK;IAIvD,wDAAwD;IAClD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAItD,0EAA0E;IACpE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIrD,4DAA4D;IACtD,aAAa,CAAC,OAAO,EAAE,MAAM;YAIrB,YAAY;IAW1B,kDAAkD;IAC5C,WAAW,CACf,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;;;;;;;;;;;IAqBxC;;;;OAIG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAS/E,0EAA0E;IACpE,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA6B5D,oDAAoD;IAC9C,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,SAAK,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAIlE;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAClC,MAAM,SAAI,GACT,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOjC,gFAAgF;IAC1E,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAI/C"}
@@ -10,10 +10,49 @@ import { kitContainerProperties, kitInvoke, } from './shared.js';
10
10
  * Obtained via `client.kit(appId).leaderboards`.
11
11
  */
12
12
  export class LeaderboardsKit {
13
- constructor(appId, gameModel, options = {}) {
13
+ constructor(appId, gameModel, options = {}, engines) {
14
14
  this.appId = appId;
15
15
  this.gameModel = gameModel;
16
+ this.engines = engines;
16
17
  this.names = leaderboardsNames(options.typePrefix ?? '');
18
+ this.engineModuleName = options.engineModuleName ?? 'board-engine';
19
+ }
20
+ // -- Engine path (Wave 2): server-computed rankings --------------------------
21
+ /**
22
+ * Is a board compute engine deployed + enabled (cached per session)? When
23
+ * true, rankings are computed SERVER-side (tie-aware ranks, percentiles,
24
+ * pages) instead of the blueprint's client-sorted reads.
25
+ */
26
+ engineAvailable() {
27
+ if (!this.engines)
28
+ return Promise.resolve(false);
29
+ return this.engines.has(this.engineModuleName);
30
+ }
31
+ /** A server-ranked page (rank/percentile computed module-side). */
32
+ async engineTop(boardId, page = 0, perPage = 10) {
33
+ return this.engineInvoke('top', { boardId, page, perPage });
34
+ }
35
+ /** Your (or a subject's) server-computed ranked row. */
36
+ async engineRankOf(boardId, subjectId) {
37
+ return this.engineInvoke('rank_of', subjectId ? { boardId, subjectId } : { boardId });
38
+ }
39
+ /** Submit YOUR OWN score (personal-best semantics) to an engine board. */
40
+ async engineSubmitSelf(boardId, score) {
41
+ return this.engineInvoke('submit_self', { boardId, score });
42
+ }
43
+ /** Frozen season snapshots (top rows per rolled season). */
44
+ async engineSeasons(boardId) {
45
+ return this.engineInvoke('seasons', { boardId });
46
+ }
47
+ async engineInvoke(exportName, params) {
48
+ if (!this.engines) {
49
+ throw new Error('board engine unavailable: compute domain not wired');
50
+ }
51
+ const result = await this.engines.invoke(this.engineModuleName, exportName, params);
52
+ if (!result.success) {
53
+ throw new Error(`leaderboards.${exportName} failed: ${result.reason ?? 'unknown'}`);
54
+ }
55
+ return result.body;
17
56
  }
18
57
  /** Find-or-create a player's entry on a board. */
19
58
  async ensureEntry(ownerUserId, boardId, options = {}) {
@@ -1,10 +1,16 @@
1
1
  import type { ChannelsAPI } from '../domains/channels.js';
2
+ import type { EngineDetector } from './engine.js';
2
3
  import type { GameModelAPI } from '../domains/gameModel.js';
3
4
  import type { UdpAPI } from '../domains/udp.js';
4
5
  import type { Scalars } from '../generated/graphql.js';
5
6
  import { type KitInvokeResult } from './shared.js';
6
7
  /** Options for {@link MatchesKit}. Must match the deployed matches blueprint. */
7
8
  export interface MatchesKitOptions {
9
+ /**
10
+ * The compute module driving server-side match lifecycle when the app
11
+ * runs an engine. Defaults to `'match-engine'`.
12
+ */
13
+ engineModuleName?: string;
8
14
  /** The `typePrefix` the matches blueprint was deployed with. */
9
15
  typePrefix?: string;
10
16
  /**
@@ -52,9 +58,11 @@ export declare class MatchesKit {
52
58
  private readonly gameModel;
53
59
  private readonly channels;
54
60
  private readonly udp;
61
+ private readonly engines?;
55
62
  private readonly names;
56
63
  private readonly actorUuid;
57
- constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, channels: ChannelsAPI | undefined, udp: UdpAPI | undefined, options?: MatchesKitOptions);
64
+ private readonly engineModuleName;
65
+ constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, channels: ChannelsAPI | undefined, udp: UdpAPI | undefined, options?: MatchesKitOptions, engines?: EngineDetector | undefined);
58
66
  private requireChannels;
59
67
  private requireUdp;
60
68
  /**
@@ -136,5 +144,29 @@ export declare class MatchesKit {
136
144
  */
137
145
  onMatchChanged(match: KitMatch, callback: (match: KitMatch) => void): () => void;
138
146
  private toMatch;
147
+ /**
148
+ * Is a match compute engine deployed + enabled (cached per session)? When
149
+ * true the engine owns transitions (ready checks, turn order + timeouts,
150
+ * authoritative scoring); the blueprint's creator-driven functions remain
151
+ * for model-only deployments.
152
+ */
153
+ engineAvailable(): Promise<boolean>;
154
+ /**
155
+ * Declare ready on an engine match (a MatchMeta container id). The match
156
+ * starts server-side once every expected player is ready.
157
+ */
158
+ engineReady(matchId: string): Promise<Record<string, unknown>>;
159
+ /** Submit your move (the engine validates the turn + resolves). */
160
+ engineSubmitMove(matchId: string, params?: Record<string, unknown>): Promise<Record<string, unknown>>;
161
+ /** Forfeit an engine match. */
162
+ engineForfeit(matchId: string): Promise<Record<string, unknown>>;
163
+ /** The engine's live view: turn holder, timers, standings, summary. */
164
+ engineStatus(matchId: string): Promise<Record<string, unknown>>;
165
+ /**
166
+ * Resolve a matchmaking proposal to the match the engine created for it
167
+ * (poll after everyone accepts; see `kit.matchmaking`).
168
+ */
169
+ findByProposal(proposalId: string): Promise<string | null>;
170
+ private engineInvoke;
139
171
  }
140
172
  //# sourceMappingURL=matches.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"matches.d.ts","sourceRoot":"","sources":["../../src/kit/matches.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matches.d.ts","sourceRoot":"","sources":["../../src/kit/matches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kCAAkC;AAClC,MAAM,WAAW,QAAQ;IACvB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,qBAAa,UAAU;IAMnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAEpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAV3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAGvB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACjC,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,WAAW,GAAG,SAAS,EACjC,GAAG,EAAE,MAAM,GAAG,SAAS,EACxC,OAAO,GAAE,iBAAsB,EACd,OAAO,CAAC,EAAE,cAAc,YAAA;IAO3C,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;IASlB;;;;;;OAMG;IACG,MAAM,CAAC,KAAK,EAAE;QAClB,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiCrB,8DAA8D;IACxD,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAajC,iDAAiD;IAC3C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAY5C,sEAAsE;IAChE,IAAI,CAAC,KAAK,EAAE,QAAQ;;;;;;IAW1B,8EAA8E;IACxE,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAU9D,mDAAmD;IAC7C,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAUrE,uDAAuD;IACjD,MAAM,CACV,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC;IAWnB;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;;;;;;;;;;IAUrE,0DAA0D;IACpD,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;;;;;;;;;;;IAqB1E;;;OAGG;IACG,KAAK,CACT,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAUnC,oEAAoE;IAC9D,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAuB1D,gEAAgE;IAC1D,MAAM,CACV,KAAK,EAAE,QAAQ,EACf,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAUnC;;;;OAIG;IACG,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAStD;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI;YAYlE,OAAO;IA6BrB;;;;;OAKG;IACH,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAKnC;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM;IAIjC,mEAAmE;IAC7D,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAI5E,+BAA+B;IACzB,aAAa,CAAC,OAAO,EAAE,MAAM;IAInC,uEAAuE;IACjE,YAAY,CAAC,OAAO,EAAE,MAAM;IAIlC;;;OAGG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAQlD,YAAY;CAU3B"}
@@ -12,12 +12,14 @@ import { kitContainerProperties, kitInvoke, } from './shared.js';
12
12
  * Obtained via `client.kit(appId).matches`.
13
13
  */
14
14
  export class MatchesKit {
15
- constructor(appId, gameModel, channels, udp, options = {}) {
15
+ constructor(appId, gameModel, channels, udp, options = {}, engines) {
16
16
  this.appId = appId;
17
17
  this.gameModel = gameModel;
18
18
  this.channels = channels;
19
19
  this.udp = udp;
20
+ this.engines = engines;
20
21
  this.names = matchesNames(options.typePrefix ?? '');
22
+ this.engineModuleName = options.engineModuleName ?? 'match-engine';
21
23
  this.actorUuid = options.actorUuid ?? generateCrowdyUuid();
22
24
  }
23
25
  requireChannels() {
@@ -250,4 +252,57 @@ export class MatchesKit {
250
252
  : {}),
251
253
  };
252
254
  }
255
+ // -- Engine path (Wave 2): server-driven lifecycle over the match engine --
256
+ /**
257
+ * Is a match compute engine deployed + enabled (cached per session)? When
258
+ * true the engine owns transitions (ready checks, turn order + timeouts,
259
+ * authoritative scoring); the blueprint's creator-driven functions remain
260
+ * for model-only deployments.
261
+ */
262
+ engineAvailable() {
263
+ if (!this.engines)
264
+ return Promise.resolve(false);
265
+ return this.engines.has(this.engineModuleName);
266
+ }
267
+ /**
268
+ * Declare ready on an engine match (a MatchMeta container id). The match
269
+ * starts server-side once every expected player is ready.
270
+ */
271
+ async engineReady(matchId) {
272
+ return this.engineInvoke('ready', { matchId });
273
+ }
274
+ /** Submit your move (the engine validates the turn + resolves). */
275
+ async engineSubmitMove(matchId, params = {}) {
276
+ return this.engineInvoke('submit_move', { matchId, ...params });
277
+ }
278
+ /** Forfeit an engine match. */
279
+ async engineForfeit(matchId) {
280
+ return this.engineInvoke('forfeit', { matchId });
281
+ }
282
+ /** The engine's live view: turn holder, timers, standings, summary. */
283
+ async engineStatus(matchId) {
284
+ return this.engineInvoke('status', { matchId });
285
+ }
286
+ /**
287
+ * Resolve a matchmaking proposal to the match the engine created for it
288
+ * (poll after everyone accepts; see `kit.matchmaking`).
289
+ */
290
+ async findByProposal(proposalId) {
291
+ if (!this.engines)
292
+ return null;
293
+ const result = await this.engines.invoke(this.engineModuleName, 'find_by_proposal', {
294
+ proposalId,
295
+ });
296
+ return result.success ? String(result.body.matchId ?? '') || null : null;
297
+ }
298
+ async engineInvoke(exportName, params) {
299
+ if (!this.engines) {
300
+ throw new Error('match engine unavailable: compute domain not wired');
301
+ }
302
+ const result = await this.engines.invoke(this.engineModuleName, exportName, params);
303
+ if (!result.success) {
304
+ throw new Error(`matches.${exportName} failed: ${result.reason ?? 'unknown'}`);
305
+ }
306
+ return result.body;
307
+ }
253
308
  }