@crowdedkingdoms/crowdyjs 8.6.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 (62) hide show
  1. package/MIGRATION.md +81 -0
  2. package/README.md +2 -2
  3. package/dist/crowdy-client.d.ts.map +1 -1
  4. package/dist/crowdy-client.js +1 -0
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -2
  8. package/dist/kit/combat.d.ts +38 -1
  9. package/dist/kit/combat.d.ts.map +1 -1
  10. package/dist/kit/combat.js +45 -1
  11. package/dist/kit/decks.d.ts +33 -1
  12. package/dist/kit/decks.d.ts.map +1 -1
  13. package/dist/kit/decks.js +49 -1
  14. package/dist/kit/director.d.ts +88 -0
  15. package/dist/kit/director.d.ts.map +1 -0
  16. package/dist/kit/director.js +86 -0
  17. package/dist/kit/economy.d.ts +46 -1
  18. package/dist/kit/economy.d.ts.map +1 -1
  19. package/dist/kit/economy.js +63 -1
  20. package/dist/kit/engine.d.ts +43 -0
  21. package/dist/kit/engine.d.ts.map +1 -0
  22. package/dist/kit/engine.js +108 -0
  23. package/dist/kit/index.d.ts +12 -4
  24. package/dist/kit/index.d.ts.map +1 -1
  25. package/dist/kit/index.js +10 -2
  26. package/dist/kit/instances.d.ts +52 -0
  27. package/dist/kit/instances.d.ts.map +1 -0
  28. package/dist/kit/instances.js +60 -0
  29. package/dist/kit/kit.d.ts +31 -1
  30. package/dist/kit/kit.d.ts.map +1 -1
  31. package/dist/kit/kit.js +21 -7
  32. package/dist/kit/leaderboards.d.ts +21 -1
  33. package/dist/kit/leaderboards.d.ts.map +1 -1
  34. package/dist/kit/leaderboards.js +40 -1
  35. package/dist/kit/matches.d.ts +33 -1
  36. package/dist/kit/matches.d.ts.map +1 -1
  37. package/dist/kit/matches.js +56 -1
  38. package/dist/kit/matchmaking.d.ts +57 -0
  39. package/dist/kit/matchmaking.d.ts.map +1 -0
  40. package/dist/kit/matchmaking.js +59 -0
  41. package/dist/kit/minigames.d.ts +30 -0
  42. package/dist/kit/minigames.d.ts.map +1 -0
  43. package/dist/kit/minigames.js +38 -0
  44. package/dist/kit/mobs.d.ts +90 -0
  45. package/dist/kit/mobs.d.ts.map +1 -0
  46. package/dist/kit/mobs.js +98 -0
  47. package/dist/kit/npcs.d.ts +38 -1
  48. package/dist/kit/npcs.d.ts.map +1 -1
  49. package/dist/kit/npcs.js +36 -1
  50. package/dist/kit/pets.d.ts +85 -0
  51. package/dist/kit/pets.d.ts.map +1 -0
  52. package/dist/kit/pets.js +96 -0
  53. package/dist/kit/quests.d.ts +57 -0
  54. package/dist/kit/quests.d.ts.map +1 -1
  55. package/dist/kit/quests.js +72 -0
  56. package/dist/kit/wire.d.ts +124 -0
  57. package/dist/kit/wire.d.ts.map +1 -0
  58. package/dist/kit/wire.js +206 -0
  59. package/dist/kit/worldsim.d.ts +34 -1
  60. package/dist/kit/worldsim.d.ts.map +1 -1
  61. package/dist/kit/worldsim.js +38 -1
  62. package/package.json +1 -1
package/dist/kit/kit.d.ts CHANGED
@@ -4,16 +4,24 @@ import type { GameModelAPI } from '../domains/gameModel.js';
4
4
  import type { TeamsAPI } from '../domains/teams.js';
5
5
  import type { UdpAPI } from '../domains/udp.js';
6
6
  import type { GameModelSeedMutation, GameModelUpsertAutomationMutation, GameModelUpsertAutomationTriggerMutation, Scalars } from '../generated/graphql.js';
7
+ import type { ComputeAPI } from '../domains/compute.js';
7
8
  import { type KitBlueprint } from './blueprints/index.js';
8
9
  import { CombatKit, type CombatKitOptions } from './combat.js';
10
+ import { DirectorKit, type DirectorKitOptions } from './director.js';
9
11
  import { DecksKit, type DecksKitOptions } from './decks.js';
10
12
  import { EconomyKit, type EconomyKitOptions } from './economy.js';
13
+ import { EngineDetector } from './engine.js';
11
14
  import { FeaturesKit } from './features.js';
15
+ import { InstancesKit, type InstancesKitOptions } from './instances.js';
12
16
  import { InventoryKit, type InventoryKitOptions } from './inventory.js';
13
17
  import { LeaderboardsKit, type LeaderboardsKitOptions } from './leaderboards.js';
14
18
  import { LootKit, type LootKitOptions } from './loot.js';
19
+ import { MatchmakingKit, type MatchmakingKitOptions } from './matchmaking.js';
20
+ import { MinigamesKit, type MinigamesKitOptions } from './minigames.js';
21
+ import { MobsKit, type MobsKitOptions } from './mobs.js';
15
22
  import { NpcsKit, type NpcsKitOptions } from './npcs.js';
16
23
  import { ObjectsKit, type ObjectsKitOptions } from './objects.js';
24
+ import { PetsKit, type PetsKitOptions } from './pets.js';
17
25
  import { PlotsKit, type PlotsKitOptions } from './plots.js';
18
26
  import { MatchesKit, type MatchesKitOptions } from './matches.js';
19
27
  import { ProgressionKit, type ProgressionKitOptions } from './progression.js';
@@ -36,16 +44,24 @@ export interface GameKitOptions {
36
44
  worldsim?: WorldsimKitOptions;
37
45
  social?: SocialKitOptions;
38
46
  leaderboards?: LeaderboardsKitOptions;
47
+ mobs?: MobsKitOptions;
48
+ pets?: PetsKitOptions;
49
+ instances?: InstancesKitOptions;
50
+ director?: DirectorKitOptions;
51
+ matchmaking?: MatchmakingKitOptions;
52
+ minigames?: MinigamesKitOptions;
39
53
  }
40
54
  /**
41
55
  * The extra (non-model) domains some kit helpers compose: channels + udp for
42
- * matches (notify-to-pull) and social chat, teams for parties/guilds.
56
+ * matches (notify-to-pull) and social chat, teams for parties/guilds, and
57
+ * compute for the engine-backed helpers (mobs/pets, capability detection).
43
58
  * `client.kit(appId)` wires them automatically.
44
59
  */
45
60
  export interface GameKitDomains {
46
61
  channels?: ChannelsAPI;
47
62
  teams?: TeamsAPI;
48
63
  udp?: UdpAPI;
64
+ compute?: ComputeAPI;
49
65
  }
50
66
  /** The result of {@link GameKitClient.deploy}: the seed outcome plus each automation/trigger upserted. */
51
67
  export interface KitDeployResult {
@@ -126,6 +142,20 @@ export declare class GameKitClient {
126
142
  readonly leaderboards: LeaderboardsKit;
127
143
  /** Monetization helpers (feature keys, tier grants, featureGate policies). */
128
144
  readonly features: FeaturesKit;
145
+ /** Mob-engine helpers (defs/slots, refereed attacks, contact events). */
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;
155
+ /** Pet helpers (adopt/summon/dismiss/rename over the npc engine). */
156
+ readonly pets: PetsKit;
157
+ /** Compute-engine capability detection shared by the engine-aware kits. */
158
+ readonly engines: EngineDetector;
129
159
  constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, gameApps: GameAppsAPI, options?: GameKitOptions, domains?: GameKitDomains);
130
160
  /**
131
161
  * Helpers for an additional lockable object type deployed under a different
@@ -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,13 +1,20 @@
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';
6
+ import { EngineDetector } from './engine.js';
5
7
  import { FeaturesKit } from './features.js';
8
+ import { InstancesKit } from './instances.js';
6
9
  import { InventoryKit } from './inventory.js';
7
10
  import { LeaderboardsKit } from './leaderboards.js';
8
11
  import { LootKit } from './loot.js';
12
+ import { MatchmakingKit } from './matchmaking.js';
13
+ import { MinigamesKit } from './minigames.js';
14
+ import { MobsKit } from './mobs.js';
9
15
  import { NpcsKit } from './npcs.js';
10
16
  import { ObjectsKit } from './objects.js';
17
+ import { PetsKit } from './pets.js';
11
18
  import { PlotsKit } from './plots.js';
12
19
  import { MatchesKit } from './matches.js';
13
20
  import { ProgressionKit } from './progression.js';
@@ -56,20 +63,27 @@ export class GameKitClient {
56
63
  constructor(appId, gameModel, gameApps, options = {}, domains = {}) {
57
64
  this.appId = appId;
58
65
  this.gameModel = gameModel;
66
+ this.engines = new EngineDetector(String(appId), domains.compute);
59
67
  this.inventory = new InventoryKit(appId, gameModel, options.inventory);
60
68
  this.objects = new ObjectsKit(appId, gameModel, options.objects);
61
- this.npcs = new NpcsKit(appId, gameModel, options.npcs);
69
+ this.npcs = new NpcsKit(appId, gameModel, options.npcs, this.engines);
62
70
  this.plots = new PlotsKit(appId, gameModel, gameApps, options.plots);
63
- this.economy = new EconomyKit(appId, gameModel, options.economy);
71
+ this.economy = new EconomyKit(appId, gameModel, options.economy, this.engines);
64
72
  this.progression = new ProgressionKit(appId, gameModel, options.progression);
65
73
  this.loot = new LootKit(appId, gameModel, options.loot);
66
74
  this.quests = new QuestsKit(appId, gameModel, options.quests);
67
- this.combat = new CombatKit(appId, gameModel, options.combat);
68
- this.matches = new MatchesKit(appId, gameModel, domains.channels, domains.udp, options.matches);
69
- this.decks = new DecksKit(appId, gameModel, options.decks);
70
- this.worldsim = new WorldsimKit(appId, gameModel, options.worldsim);
75
+ this.combat = new CombatKit(appId, gameModel, options.combat, this.engines);
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);
78
+ this.worldsim = new WorldsimKit(appId, gameModel, options.worldsim, this.engines);
79
+ this.mobs = new MobsKit(appId, gameModel, this.engines, options.mobs);
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);
71
85
  this.social = new SocialKit(appId, domains.teams, domains.channels, domains.udp, gameApps, options.social);
72
- this.leaderboards = new LeaderboardsKit(appId, gameModel, options.leaderboards);
86
+ this.leaderboards = new LeaderboardsKit(appId, gameModel, options.leaderboards, this.engines);
73
87
  this.features = new FeaturesKit(appId, gameModel);
74
88
  }
75
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":"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"}
@@ -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
  }
@@ -0,0 +1,57 @@
1
+ import type { Scalars } from '../generated/graphql.js';
2
+ import type { EngineDetector } from './engine.js';
3
+ /** Options for {@link MatchmakingKit}. */
4
+ export interface MatchmakingKitOptions {
5
+ /** The matchmaking module name. Defaults to `'matchmaking'`. */
6
+ moduleName?: string;
7
+ }
8
+ /** Your queue status: where you are queued and any live proposal. */
9
+ export interface KitQueueStatus {
10
+ queuedIn: string | null;
11
+ proposal: {
12
+ proposalId: string;
13
+ mode: string;
14
+ players: string[];
15
+ accepted: string[];
16
+ handedOff: boolean;
17
+ } | null;
18
+ queueDepth: number;
19
+ rating: number;
20
+ }
21
+ /**
22
+ * Runtime helpers for the matchmaking engine (Wave 2): rating-bucketed
23
+ * queues with widening windows, party blocks, and accept-gated proposals
24
+ * that hand off to the match layer over compute events. After everyone
25
+ * accepts, resolve the created match with `kit.matches.findByProposal`.
26
+ *
27
+ * Obtained via `client.kit(appId).matchmaking`.
28
+ */
29
+ export declare class MatchmakingKit {
30
+ private readonly engines;
31
+ private readonly moduleName;
32
+ constructor(_appId: Scalars['BigInt']['input'], engines: EngineDetector, options?: MatchmakingKitOptions);
33
+ /** Is the matchmaking engine deployed + enabled (cached per session)? */
34
+ engineAvailable(): Promise<boolean>;
35
+ /**
36
+ * Join a queue (optionally with a party block that must match together,
37
+ * and an explicit rating for games that keep rating on the progression
38
+ * layer).
39
+ */
40
+ queueJoin(input?: {
41
+ mode?: string;
42
+ rating?: number;
43
+ party?: string[];
44
+ }): Promise<Record<string, unknown>>;
45
+ /** Leave your queue (all modes, or one with `mode`). */
46
+ queueLeave(mode?: string): Promise<Record<string, unknown>>;
47
+ /** Your queue/proposal status. */
48
+ queueStatus(mode?: string): Promise<KitQueueStatus>;
49
+ /** Accept a proposal; when everyone has, the match handoff fires. */
50
+ accept(proposalId: string): Promise<Record<string, unknown>>;
51
+ /** Report the decided result (Elo-lite rating update + proposal close). */
52
+ reportResult(proposalId: string, winnerUserId: string): Promise<Record<string, unknown>>;
53
+ /** Engine totals (queues/proposals/rated players). */
54
+ status(): Promise<Record<string, unknown>>;
55
+ private invoke;
56
+ }
57
+ //# sourceMappingURL=matchmaking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchmaking.d.ts","sourceRoot":"","sources":["../../src/kit/matchmaking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,SAAS,EAAE,OAAO,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,cAAc;IAKvB,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,qBAA0B;IAKrC,yEAAyE;IACzE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC;;;;OAIG;IACG,SAAS,CAAC,KAAK,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO;IAIhF,wDAAwD;IAClD,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IAI9B,kCAAkC;IAC5B,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAUzD,qEAAqE;IAC/D,MAAM,CAAC,UAAU,EAAE,MAAM;IAI/B,2EAA2E;IACrE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAI3D,sDAAsD;IAChD,MAAM;YAIE,MAAM;CAOrB"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Runtime helpers for the matchmaking engine (Wave 2): rating-bucketed
3
+ * queues with widening windows, party blocks, and accept-gated proposals
4
+ * that hand off to the match layer over compute events. After everyone
5
+ * accepts, resolve the created match with `kit.matches.findByProposal`.
6
+ *
7
+ * Obtained via `client.kit(appId).matchmaking`.
8
+ */
9
+ export class MatchmakingKit {
10
+ constructor(_appId, engines, options = {}) {
11
+ this.engines = engines;
12
+ this.moduleName = options.moduleName ?? 'matchmaking';
13
+ }
14
+ /** Is the matchmaking engine deployed + enabled (cached per session)? */
15
+ engineAvailable() {
16
+ return this.engines.has(this.moduleName);
17
+ }
18
+ /**
19
+ * Join a queue (optionally with a party block that must match together,
20
+ * and an explicit rating for games that keep rating on the progression
21
+ * layer).
22
+ */
23
+ async queueJoin(input = {}) {
24
+ return this.invoke('queue_join', input);
25
+ }
26
+ /** Leave your queue (all modes, or one with `mode`). */
27
+ async queueLeave(mode) {
28
+ return this.invoke('queue_leave', mode ? { mode } : {});
29
+ }
30
+ /** Your queue/proposal status. */
31
+ async queueStatus(mode) {
32
+ const body = await this.invoke('queue_status', mode ? { mode } : {});
33
+ return {
34
+ queuedIn: body.queuedIn != null ? String(body.queuedIn) : null,
35
+ proposal: body.proposal ?? null,
36
+ queueDepth: Number(body.queueDepth ?? 0),
37
+ rating: Number(body.rating ?? 0),
38
+ };
39
+ }
40
+ /** Accept a proposal; when everyone has, the match handoff fires. */
41
+ async accept(proposalId) {
42
+ return this.invoke('accept', { proposalId });
43
+ }
44
+ /** Report the decided result (Elo-lite rating update + proposal close). */
45
+ async reportResult(proposalId, winnerUserId) {
46
+ return this.invoke('report_result', { proposalId, winnerUserId });
47
+ }
48
+ /** Engine totals (queues/proposals/rated players). */
49
+ async status() {
50
+ return this.invoke('status', {});
51
+ }
52
+ async invoke(exportName, params) {
53
+ const result = await this.engines.invoke(this.moduleName, exportName, params);
54
+ if (!result.success) {
55
+ throw new Error(`matchmaking.${exportName} failed: ${result.reason ?? 'unknown'}`);
56
+ }
57
+ return result.body;
58
+ }
59
+ }
@@ -0,0 +1,30 @@
1
+ import type { Scalars } from '../generated/graphql.js';
2
+ import type { EngineDetector, EngineInvokeResult } from './engine.js';
3
+ /** Options for {@link MinigamesKit}. */
4
+ export interface MinigamesKitOptions {
5
+ /** Default module when calls omit one (e.g. your scaffolded game). */
6
+ defaultModuleName?: string;
7
+ }
8
+ /**
9
+ * A thin invoke wrapper for invoke-loop minigames (the Wave 2 `minigame`
10
+ * scaffold pattern): synchronous `play` RPCs with server-bound caller
11
+ * identity, server-held secrets, and per-caller records. Every method
12
+ * resolves the engine envelope — denials come back as
13
+ * `{success: false, reason}` rather than throwing.
14
+ *
15
+ * Obtained via `client.kit(appId).minigames`.
16
+ */
17
+ export declare class MinigamesKit {
18
+ private readonly engines;
19
+ private readonly defaultModuleName?;
20
+ constructor(_appId: Scalars['BigInt']['input'], engines: EngineDetector, options?: MinigamesKitOptions);
21
+ /** Is a minigame module deployed + enabled (cached per session)? */
22
+ engineAvailable(moduleName?: string): Promise<boolean>;
23
+ /** One round: invoke the game's `play` export with your move. */
24
+ play(params: Record<string, unknown>, moduleName?: string): Promise<EngineInvokeResult>;
25
+ /** Your per-caller record. */
26
+ record(moduleName?: string): Promise<EngineInvokeResult>;
27
+ /** Any other export the game defines (typed result envelope). */
28
+ invoke(exportName: string, params?: Record<string, unknown>, moduleName?: string): Promise<EngineInvokeResult>;
29
+ }
30
+ //# sourceMappingURL=minigames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minigames.d.ts","sourceRoot":"","sources":["../../src/kit/minigames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtE,wCAAwC;AACxC,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAS;gBAG1C,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EACjB,OAAO,EAAE,cAAc,EACxC,OAAO,GAAE,mBAAwB;IAKnC,oEAAoE;IACpE,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMtD,iEAAiE;IAC3D,IAAI,CACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;IAI9B,8BAA8B;IACxB,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI9D,iEAAiE;IAC3D,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC;CAO/B"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * A thin invoke wrapper for invoke-loop minigames (the Wave 2 `minigame`
3
+ * scaffold pattern): synchronous `play` RPCs with server-bound caller
4
+ * identity, server-held secrets, and per-caller records. Every method
5
+ * resolves the engine envelope — denials come back as
6
+ * `{success: false, reason}` rather than throwing.
7
+ *
8
+ * Obtained via `client.kit(appId).minigames`.
9
+ */
10
+ export class MinigamesKit {
11
+ constructor(_appId, engines, options = {}) {
12
+ this.engines = engines;
13
+ this.defaultModuleName = options.defaultModuleName;
14
+ }
15
+ /** Is a minigame module deployed + enabled (cached per session)? */
16
+ engineAvailable(moduleName) {
17
+ const name = moduleName ?? this.defaultModuleName;
18
+ if (!name)
19
+ return Promise.resolve(false);
20
+ return this.engines.has(name);
21
+ }
22
+ /** One round: invoke the game's `play` export with your move. */
23
+ async play(params, moduleName) {
24
+ return this.invoke('play', params, moduleName);
25
+ }
26
+ /** Your per-caller record. */
27
+ async record(moduleName) {
28
+ return this.invoke('record', {}, moduleName);
29
+ }
30
+ /** Any other export the game defines (typed result envelope). */
31
+ async invoke(exportName, params = {}, moduleName) {
32
+ const name = moduleName ?? this.defaultModuleName;
33
+ if (!name) {
34
+ return { success: false, reason: 'no minigame module configured', body: {} };
35
+ }
36
+ return this.engines.invoke(name, exportName, params);
37
+ }
38
+ }