@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
@@ -0,0 +1,86 @@
1
+ function toRun(body) {
2
+ const boss = body.boss;
3
+ return {
4
+ runId: String(body.runId ?? ''),
5
+ encounterId: String(body.encounterId ?? ''),
6
+ players: Number(body.players ?? 1),
7
+ phase: body.phase ?? {},
8
+ pending: Number(body.pending ?? 0),
9
+ wavesCleared: Number(body.wavesCleared ?? 0),
10
+ wavesTotal: Number(body.wavesTotal ?? 0),
11
+ boss: boss
12
+ ? {
13
+ hp: Number(boss.hp ?? 0),
14
+ maxHp: Number(boss.maxHp ?? 0),
15
+ phase: Number(boss.phase ?? 0),
16
+ thresholds: Array.isArray(boss.thresholds) ? boss.thresholds.map(Number) : [],
17
+ }
18
+ : null,
19
+ finished: body.finished === true,
20
+ outcome: String(body.outcome ?? ''),
21
+ };
22
+ }
23
+ /**
24
+ * Runtime helpers for the director engine (Wave 2): data-driven encounter
25
+ * direction — wave schedules, spawn budgets, boss phases, party scaling.
26
+ * The director emits `director_spawn` compute events; the mob layer
27
+ * simulates and reports kills back.
28
+ *
29
+ * Obtained via `client.kit(appId).director`.
30
+ */
31
+ export class DirectorKit {
32
+ constructor(appId, gameModel, engines, options = {}) {
33
+ this.appId = appId;
34
+ this.gameModel = gameModel;
35
+ this.engines = engines;
36
+ this.moduleName = options.moduleName ?? 'director';
37
+ this.defTypeName = options.defTypeName ?? 'EncounterDef';
38
+ }
39
+ /** Is the director deployed + enabled (cached per session)? */
40
+ engineAvailable() {
41
+ return this.engines.has(this.moduleName);
42
+ }
43
+ /** STUDIO (admin) — create an encounter definition container. */
44
+ async defineEncounter(input) {
45
+ return this.gameModel.createContainer({
46
+ appId: this.appId,
47
+ typeName: this.defTypeName,
48
+ displayName: input.displayName ?? `Encounter ${input.encounterId}`,
49
+ properties: [
50
+ { key: 'encounter_id', valueType: 'string', valueJson: JSON.stringify(input.encounterId) },
51
+ { key: 'waves', valueType: 'string', valueJson: JSON.stringify(JSON.stringify(input.waves)) },
52
+ ...(input.spawnBudget !== undefined
53
+ ? [{ key: 'spawn_budget', valueType: 'int', valueJson: String(input.spawnBudget) }]
54
+ : []),
55
+ ],
56
+ });
57
+ }
58
+ /** Start a run (party size scales unit counts server-side). */
59
+ async startRun(encounterId, players = 1) {
60
+ return toRun(await this.invoke('start_run', { encounterId, players }));
61
+ }
62
+ /** Report kills toward the live wave (trusted callers/engines). */
63
+ async reportKill(runId, count = 1) {
64
+ return toRun(await this.invoke('report_kill', { runId, count }));
65
+ }
66
+ /** Report boss hp; phase transitions announce on the compute bus. */
67
+ async reportBossHp(runId, hp) {
68
+ return toRun(await this.invoke('report_boss_hp', { runId, hp }));
69
+ }
70
+ /** Force-clear the live wave (run creator only). */
71
+ async skipWave(runId) {
72
+ return toRun(await this.invoke('skip_wave', { runId }));
73
+ }
74
+ /** One run's state (or engine totals without an id). */
75
+ async runState(runId) {
76
+ const body = await this.invoke('run_state', runId ? { runId } : {});
77
+ return runId ? toRun(body) : body;
78
+ }
79
+ async invoke(exportName, params) {
80
+ const result = await this.engines.invoke(this.moduleName, exportName, params);
81
+ if (!result.success) {
82
+ throw new Error(`director.${exportName} failed: ${result.reason ?? 'unknown'}`);
83
+ }
84
+ return result.body;
85
+ }
86
+ }
@@ -1,4 +1,5 @@
1
1
  import type { GameModelAPI } from '../domains/gameModel.js';
2
+ import type { EngineDetector } from './engine.js';
2
3
  import type { Scalars, SeedPropertyInput } from '../generated/graphql.js';
3
4
  import { type KitInvokeResult } from './shared.js';
4
5
  /** Options for {@link EconomyKit}. Must match the deployed economy blueprint. */
@@ -7,6 +8,8 @@ export interface EconomyKitOptions {
7
8
  typePrefix?: string;
8
9
  /** The `currencies` the blueprint was deployed with. Defaults to `['gold']`. */
9
10
  currencies?: string[];
11
+ /** The order-book market engine module. Defaults to `'market-engine'`. */
12
+ marketModuleName?: string;
10
13
  }
11
14
  /** A parsed view of one wallet. */
12
15
  export interface KitWallet {
@@ -72,7 +75,14 @@ export declare class EconomyKit {
72
75
  private readonly names;
73
76
  private readonly typePrefix;
74
77
  private readonly currencies;
75
- constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, options?: EconomyKitOptions);
78
+ constructor(appId: Scalars['BigInt']['input'], gameModel: GameModelAPI, options?: EconomyKitOptions, engines?: EngineDetector);
79
+ /**
80
+ * The order-book market (Wave 2 engine): bid/ask methods over the
81
+ * market-engine's escrowed order books. The model-side listing `market`
82
+ * on this kit keeps working without it (fixed-price stack listings);
83
+ * `orderBook` adds real price discovery when the engine is deployed.
84
+ */
85
+ readonly orderBook: MarketKit;
76
86
  private get defaultCurrency();
77
87
  /**
78
88
  * Find the player's wallet, creating it when absent (member-instantiable;
@@ -241,4 +251,39 @@ export declare class EconomyKit {
241
251
  private ensureSellerWallet;
242
252
  private toTrade;
243
253
  }
254
+ /**
255
+ * Order-book market methods over the market-engine (Wave 2): price-time
256
+ * priority matching with escrowed settlement. Deposits/withdrawals bridge
257
+ * to the game's wallets via compute events the game layer consumes.
258
+ *
259
+ * Obtained via `client.kit(appId).economy.market`.
260
+ */
261
+ export declare class MarketKit {
262
+ private readonly engines;
263
+ private readonly moduleName;
264
+ constructor(engines: EngineDetector | undefined, moduleName: string);
265
+ /** Is the market engine deployed + enabled (cached per session)? */
266
+ engineAvailable(): Promise<boolean>;
267
+ /** Move coins into your market account (escrow source for bids). */
268
+ depositCoins(amount: number): Promise<Record<string, unknown>>;
269
+ /** Move items into your market account (escrow source for asks). */
270
+ depositItems(item: string, quantity: number): Promise<Record<string, unknown>>;
271
+ /** Place a limit bid: locks coins at your limit; fills at maker price. */
272
+ bid(item: string, price: number, quantity: number): Promise<Record<string, unknown>>;
273
+ /** Place a limit ask: locks items until filled or cancelled. */
274
+ ask(item: string, price: number, quantity: number): Promise<Record<string, unknown>>;
275
+ /** Cancel a resting order (owner only); escrow refunds instantly. */
276
+ cancel(item: string, orderId: number): Promise<Record<string, unknown>>;
277
+ /** Book depth: best bids/asks as [price, quantity] levels. */
278
+ book(item: string): Promise<Record<string, unknown>>;
279
+ /** Your market account (settled + locked balances). */
280
+ account(): Promise<Record<string, unknown>>;
281
+ /** Withdraw settled balances back to the game layer. */
282
+ withdraw(input: {
283
+ coins?: number;
284
+ item?: string;
285
+ quantity?: number;
286
+ }): Promise<Record<string, unknown>>;
287
+ private invoke;
288
+ }
244
289
  //# sourceMappingURL=economy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"economy.d.ts","sourceRoot":"","sources":["../../src/kit/economy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"economy.d.ts","sourceRoot":"","sources":["../../src/kit/economy.ts"],"names":[],"mappings":"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"}
@@ -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
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Compute-engine capability detection + invoke envelope for the kit helpers.
3
+ * Games deploy engines (mob-engine, world-engine, bwf-mobs, ...) as compute
4
+ * modules; kit helpers probe once per module per session and route through
5
+ * the engine when it is present, falling back to the model/automation path
6
+ * when it is not — so the same client code works on model-only deployments.
7
+ */
8
+ import type { ComputeAPI } from '../domains/compute.js';
9
+ /** The `{success, ...}` envelope engine invoke exports resolve with. */
10
+ export interface EngineInvokeResult<T = Record<string, unknown>> {
11
+ success: boolean;
12
+ /** The engine's denial reason when `success` is false. */
13
+ reason?: string;
14
+ /** The parsed result body (includes any extra fields the export returns). */
15
+ body: T & Record<string, unknown>;
16
+ fuelUsed?: string;
17
+ durationUs?: number;
18
+ }
19
+ /**
20
+ * Per-session cached probe of which compute modules an app has enabled.
21
+ * Obtained internally by kit helpers; share one via `kit.engines`.
22
+ */
23
+ export declare class EngineDetector {
24
+ private readonly appId;
25
+ private readonly compute;
26
+ private readonly cache;
27
+ constructor(appId: string, compute: ComputeAPI | undefined);
28
+ /**
29
+ * Is `moduleName` deployed + enabled? Cached per module for the client's
30
+ * lifetime ({@link reset} to re-probe after deploys). Resolves false when
31
+ * the client has no compute domain wired.
32
+ */
33
+ has(moduleName: string): Promise<boolean>;
34
+ /** Drop cached probes (call after deploying/enabling modules). */
35
+ reset(): void;
36
+ /**
37
+ * Invoke an engine export and parse the `{success, ...}` envelope.
38
+ * Envelope failures (denials) resolve — only transport/user errors throw.
39
+ */
40
+ invoke<T = Record<string, unknown>>(moduleName: string, exportName: string, params?: Record<string, unknown>): Promise<EngineInvokeResult<T>>;
41
+ private probe;
42
+ }
43
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/kit/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,wEAAwE;AACxE,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;gBAG1C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,GAAG,SAAS;IAGlD;;;;OAIG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzC,kEAAkE;IAClE,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAwCnB,KAAK;CAmBpB"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Compute-engine capability detection + invoke envelope for the kit helpers.
3
+ * Games deploy engines (mob-engine, world-engine, bwf-mobs, ...) as compute
4
+ * modules; kit helpers probe once per module per session and route through
5
+ * the engine when it is present, falling back to the model/automation path
6
+ * when it is not — so the same client code works on model-only deployments.
7
+ */
8
+ import { CrowdyGraphQLError } from '../errors.js';
9
+ /**
10
+ * Per-session cached probe of which compute modules an app has enabled.
11
+ * Obtained internally by kit helpers; share one via `kit.engines`.
12
+ */
13
+ export class EngineDetector {
14
+ constructor(appId, compute) {
15
+ this.appId = appId;
16
+ this.compute = compute;
17
+ this.cache = new Map();
18
+ }
19
+ /**
20
+ * Is `moduleName` deployed + enabled? Cached per module for the client's
21
+ * lifetime ({@link reset} to re-probe after deploys). Resolves false when
22
+ * the client has no compute domain wired.
23
+ */
24
+ has(moduleName) {
25
+ if (!this.compute)
26
+ return Promise.resolve(false);
27
+ let probe = this.cache.get(moduleName);
28
+ if (!probe) {
29
+ probe = this.probe(moduleName);
30
+ this.cache.set(moduleName, probe);
31
+ }
32
+ return probe;
33
+ }
34
+ /** Drop cached probes (call after deploying/enabling modules). */
35
+ reset() {
36
+ this.cache.clear();
37
+ }
38
+ /**
39
+ * Invoke an engine export and parse the `{success, ...}` envelope.
40
+ * Envelope failures (denials) resolve — only transport/user errors throw.
41
+ */
42
+ async invoke(moduleName, exportName, params) {
43
+ if (!this.compute) {
44
+ return {
45
+ success: false,
46
+ reason: 'compute domain unavailable',
47
+ body: {},
48
+ };
49
+ }
50
+ try {
51
+ const result = await this.compute.invoke({
52
+ appId: this.appId,
53
+ moduleName,
54
+ exportName,
55
+ ...(params !== undefined ? { paramsJson: JSON.stringify(params) } : {}),
56
+ });
57
+ let body = {};
58
+ try {
59
+ body = JSON.parse(result.resultJson ?? '{}');
60
+ }
61
+ catch {
62
+ body = {};
63
+ }
64
+ return {
65
+ success: body.success !== false,
66
+ reason: typeof body.reason === 'string' ? body.reason : undefined,
67
+ body: body,
68
+ fuelUsed: result.fuelUsed != null ? String(result.fuelUsed) : undefined,
69
+ durationUs: result.durationUs != null ? Number(result.durationUs) : undefined,
70
+ };
71
+ }
72
+ catch (error) {
73
+ if (error instanceof CrowdyGraphQLError) {
74
+ return {
75
+ success: false,
76
+ reason: error.message,
77
+ body: {},
78
+ };
79
+ }
80
+ throw error;
81
+ }
82
+ }
83
+ async probe(moduleName) {
84
+ if (!this.compute)
85
+ return false;
86
+ try {
87
+ const module = await this.compute.module({ appId: this.appId, name: moduleName });
88
+ return module != null && module.enabled === true;
89
+ }
90
+ catch (error) {
91
+ if (!(error instanceof CrowdyGraphQLError))
92
+ throw error;
93
+ if (error.code !== 'FORBIDDEN')
94
+ return false;
95
+ }
96
+ // Player tokens lack view_compute_diagnostics: probe via a status invoke
97
+ // (engines all export one). Missing modules reject; denials mean present.
98
+ try {
99
+ const result = await this.invoke(moduleName, 'status');
100
+ if (result.success)
101
+ return true;
102
+ return !/not found|no such module|not enabled/i.test(result.reason ?? '');
103
+ }
104
+ catch {
105
+ return false;
106
+ }
107
+ }
108
+ }
@@ -2,18 +2,26 @@ export { andPolicies, combatBlueprint, combatNames, composeBlueprints, decksBlue
2
2
  export { GameKitClient, type GameKitDomains, type GameKitOptions, type KitDeployResult, } from './kit.js';
3
3
  export { MatchesKit, type KitMatch, type KitMatchScore, type MatchesKitOptions, } from './matches.js';
4
4
  export { InventoryKit, type InventoryKitOptions, type KitItemStack } from './inventory.js';
5
- export { CombatKit, type CombatKitOptions, type KitCombatant, type KitStatusEffect, } from './combat.js';
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';
12
- export { NpcsKit, type NpcsKitOptions, type KitNpc } from './npcs.js';
12
+ export { NpcsKit, type KitNpc, type LiveNpcPose, type NpcsKitOptions, } from './npcs.js';
13
+ export { MobsKit, type KitAttackResult, type KitMobDef, type KitMobSlot, type MobsKitOptions, } from './mobs.js';
14
+ export { PetsKit, type KitPet, type KitPetResult, type PetsKitOptions, } from './pets.js';
15
+ export { EngineDetector, type EngineInvokeResult } from './engine.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';
13
21
  export { PlotsKit, type PlotsKitOptions, type KitPlot } from './plots.js';
14
22
  export { QuestsKit, type KitQuestDef, type KitQuestProgress, type QuestsKitOptions, } from './quests.js';
15
23
  export { ProgressionKit, type KitAchievementDef, type KitAchievementUnlock, type KitProgress, type KitSkillDef, type KitSkillRank, type ProgressionKitOptions, } from './progression.js';
16
24
  export { SocialKit, type KitChatMessage, type KitGroupWithChannel, type SocialKitOptions, } from './social.js';
17
- export { WorldsimKit, type KitCrop, type KitResourceNode, type KitWaveSpawner, type KitWorldState, type WorldsimKitOptions, } from './worldsim.js';
25
+ export { WorldsimKit, type KitCrop, type KitForecast, type KitResourceNode, type KitWaveSpawner, type KitWorldState, type WorldsimKitOptions, } from './worldsim.js';
18
26
  export { kitInvoke, toKitInvokeResult, type KitInvokeResult, type RawInvokeResult, } from './shared.js';
19
27
  //# sourceMappingURL=index.d.ts.map
@@ -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,11 +5,19 @@ 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';
12
- export { NpcsKit } from './npcs.js';
12
+ export { NpcsKit, } from './npcs.js';
13
+ export { MobsKit, } from './mobs.js';
14
+ export { PetsKit, } from './pets.js';
15
+ export { EngineDetector } from './engine.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';
13
21
  export { PlotsKit } from './plots.js';
14
22
  export { QuestsKit, } from './quests.js';
15
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
+ }