@zhin.js/game-kit 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +73 -16
  2. package/lib/base-session-service.d.ts +54 -0
  3. package/lib/base-session-service.d.ts.map +1 -0
  4. package/lib/base-session-service.js +139 -0
  5. package/lib/base-session-service.js.map +1 -0
  6. package/lib/command-alias.d.ts +3 -1
  7. package/lib/command-alias.d.ts.map +1 -1
  8. package/lib/command-alias.js.map +1 -1
  9. package/lib/command-message.d.ts +3 -0
  10. package/lib/command-message.d.ts.map +1 -1
  11. package/lib/command-message.js +0 -6
  12. package/lib/command-message.js.map +1 -1
  13. package/lib/define-game-plugin.d.ts +32 -0
  14. package/lib/define-game-plugin.d.ts.map +1 -0
  15. package/lib/define-game-plugin.js +87 -0
  16. package/lib/define-game-plugin.js.map +1 -0
  17. package/lib/deterministic-random.d.ts +16 -0
  18. package/lib/deterministic-random.d.ts.map +1 -0
  19. package/lib/deterministic-random.js +68 -0
  20. package/lib/deterministic-random.js.map +1 -0
  21. package/lib/game-events.d.ts +53 -0
  22. package/lib/game-events.d.ts.map +1 -0
  23. package/lib/game-events.js +26 -0
  24. package/lib/game-events.js.map +1 -0
  25. package/lib/game-interactive.d.ts +0 -22
  26. package/lib/game-interactive.d.ts.map +1 -1
  27. package/lib/game-interactive.js +1 -57
  28. package/lib/game-interactive.js.map +1 -1
  29. package/lib/game-records.d.ts +0 -1
  30. package/lib/game-records.d.ts.map +1 -1
  31. package/lib/game-records.js +0 -60
  32. package/lib/game-records.js.map +1 -1
  33. package/lib/game-session.d.ts +0 -59
  34. package/lib/game-session.d.ts.map +1 -1
  35. package/lib/game-session.js +0 -29
  36. package/lib/game-session.js.map +1 -1
  37. package/lib/index.d.ts +6 -9
  38. package/lib/index.d.ts.map +1 -1
  39. package/lib/index.js +6 -9
  40. package/lib/index.js.map +1 -1
  41. package/lib/memory-db.d.ts +6 -0
  42. package/lib/memory-db.d.ts.map +1 -1
  43. package/lib/memory-db.js +8 -0
  44. package/lib/memory-db.js.map +1 -1
  45. package/lib/session-coordinator.d.ts +27 -0
  46. package/lib/session-coordinator.d.ts.map +1 -0
  47. package/lib/session-coordinator.js +57 -0
  48. package/lib/session-coordinator.js.map +1 -0
  49. package/lib/versioned-session-service.d.ts +48 -0
  50. package/lib/versioned-session-service.d.ts.map +1 -0
  51. package/lib/versioned-session-service.js +116 -0
  52. package/lib/versioned-session-service.js.map +1 -0
  53. package/package.json +7 -6
  54. package/src/base-session-service.ts +210 -0
  55. package/src/command-alias.ts +3 -1
  56. package/src/command-message.ts +4 -0
  57. package/src/define-game-plugin.ts +162 -0
  58. package/src/deterministic-random.ts +81 -0
  59. package/src/game-events.ts +75 -0
  60. package/src/game-interactive.ts +1 -80
  61. package/src/game-records.ts +0 -73
  62. package/src/game-session.ts +0 -83
  63. package/src/index.ts +6 -9
  64. package/src/memory-db.ts +12 -0
  65. package/src/session-coordinator.ts +74 -0
  66. package/src/versioned-session-service.ts +162 -0
  67. package/lib/command-help.d.ts +0 -19
  68. package/lib/command-help.d.ts.map +0 -1
  69. package/lib/command-help.js +0 -91
  70. package/lib/command-help.js.map +0 -1
  71. package/lib/game-commands.d.ts +0 -3
  72. package/lib/game-commands.d.ts.map +0 -1
  73. package/lib/game-commands.js +0 -5
  74. package/lib/game-commands.js.map +0 -1
  75. package/lib/game-hub-feature.d.ts +0 -58
  76. package/lib/game-hub-feature.d.ts.map +0 -1
  77. package/lib/game-hub-feature.js +0 -102
  78. package/lib/game-hub-feature.js.map +0 -1
  79. package/lib/game-hub-flow.d.ts +0 -9
  80. package/lib/game-hub-flow.d.ts.map +0 -1
  81. package/lib/game-hub-flow.js +0 -90
  82. package/lib/game-hub-flow.js.map +0 -1
  83. package/lib/game-hub-menu-context.d.ts +0 -25
  84. package/lib/game-hub-menu-context.d.ts.map +0 -1
  85. package/lib/game-hub-menu-context.js +0 -64
  86. package/lib/game-hub-menu-context.js.map +0 -1
  87. package/lib/game-hub-menu.d.ts +0 -37
  88. package/lib/game-hub-menu.d.ts.map +0 -1
  89. package/lib/game-hub-menu.js +0 -162
  90. package/lib/game-hub-menu.js.map +0 -1
  91. package/lib/game-hub-mount.d.ts +0 -13
  92. package/lib/game-hub-mount.d.ts.map +0 -1
  93. package/lib/game-hub-mount.js +0 -89
  94. package/lib/game-hub-mount.js.map +0 -1
  95. package/lib/game-middleware.d.ts +0 -6
  96. package/lib/game-middleware.d.ts.map +0 -1
  97. package/lib/game-middleware.js +0 -9
  98. package/lib/game-middleware.js.map +0 -1
  99. package/lib/game-onboarding.d.ts +0 -8
  100. package/lib/game-onboarding.d.ts.map +0 -1
  101. package/lib/game-onboarding.js +0 -67
  102. package/lib/game-onboarding.js.map +0 -1
  103. package/lib/help-card.d.ts +0 -12
  104. package/lib/help-card.d.ts.map +0 -1
  105. package/lib/help-card.js +0 -129
  106. package/lib/help-card.js.map +0 -1
  107. package/src/command-help.ts +0 -117
  108. package/src/game-commands.ts +0 -4
  109. package/src/game-hub-feature.ts +0 -154
  110. package/src/game-hub-flow.ts +0 -114
  111. package/src/game-hub-menu-context.ts +0 -94
  112. package/src/game-hub-menu.ts +0 -223
  113. package/src/game-hub-mount.ts +0 -147
  114. package/src/game-middleware.ts +0 -14
  115. package/src/game-onboarding.ts +0 -71
  116. package/src/help-card.ts +0 -188
@@ -0,0 +1,53 @@
1
+ export interface GameEventSession {
2
+ readonly id: string;
3
+ readonly channel_key: string;
4
+ readonly status: string;
5
+ readonly updated_at: number;
6
+ readonly adapter?: string;
7
+ readonly endpoint?: string;
8
+ readonly channel_type?: string;
9
+ readonly channel_id?: string;
10
+ }
11
+ export interface GameOutcome {
12
+ readonly userId: string;
13
+ readonly userName?: string;
14
+ readonly result: 'won' | 'lost' | 'draw' | 'aborted';
15
+ readonly score?: number;
16
+ }
17
+ export interface GameEventMap {
18
+ 'game:start': {
19
+ readonly gameId: string;
20
+ readonly session: GameEventSession;
21
+ };
22
+ 'game:end': {
23
+ readonly gameId: string;
24
+ readonly session: GameEventSession;
25
+ readonly previousStatus: string;
26
+ readonly outcomes: readonly GameOutcome[];
27
+ };
28
+ 'turn:change': {
29
+ readonly gameId: string;
30
+ readonly session: GameEventSession;
31
+ readonly previousTurn: unknown;
32
+ readonly turn: unknown;
33
+ };
34
+ 'session:timeout': {
35
+ readonly gameId: string;
36
+ readonly session: GameEventSession;
37
+ readonly idleMs: number;
38
+ };
39
+ }
40
+ export type GameEventName = keyof GameEventMap;
41
+ export type GameEventListener<K extends GameEventName> = (event: GameEventMap[K]) => void | Promise<void>;
42
+ /**
43
+ * Small async pub/sub used by game modules. Listener failures are isolated so a
44
+ * notification adapter cannot roll back an already committed session update.
45
+ */
46
+ export declare class GameEventBus {
47
+ #private;
48
+ on<K extends GameEventName>(name: K, listener: GameEventListener<K>): () => void;
49
+ emit<K extends GameEventName>(name: K, event: GameEventMap[K]): Promise<void>;
50
+ clear(): void;
51
+ }
52
+ export declare const gameEvents: GameEventBus;
53
+ //# sourceMappingURL=game-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-events.d.ts","sourceRoot":"","sources":["../src/game-events.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE;QACZ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;KACpC,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;KAC3C,CAAC;IACF,aAAa,EAAE;QACb,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,iBAAiB,EAAE;QACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;QACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC;AAC/C,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,aAAa,IAAI,CACvD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KACnB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;GAGG;AACH,qBAAa,YAAY;;IAGvB,EAAE,CAAC,CAAC,SAAS,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAU1E,IAAI,CAAC,CAAC,SAAS,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnF,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,UAAU,cAAqB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Small async pub/sub used by game modules. Listener failures are isolated so a
3
+ * notification adapter cannot roll back an already committed session update.
4
+ */
5
+ export class GameEventBus {
6
+ #listeners = new Map();
7
+ on(name, listener) {
8
+ const listeners = this.#listeners.get(name) ?? new Set();
9
+ listeners.add(listener);
10
+ this.#listeners.set(name, listeners);
11
+ return () => {
12
+ listeners.delete(listener);
13
+ if (listeners.size === 0)
14
+ this.#listeners.delete(name);
15
+ };
16
+ }
17
+ async emit(name, event) {
18
+ const listeners = [...(this.#listeners.get(name) ?? [])];
19
+ await Promise.allSettled(listeners.map((listener) => listener(event)));
20
+ }
21
+ clear() {
22
+ this.#listeners.clear();
23
+ }
24
+ }
25
+ export const gameEvents = new GameEventBus();
26
+ //# sourceMappingURL=game-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-events.js","sourceRoot":"","sources":["../src/game-events.ts"],"names":[],"mappings":"AA+CA;;;GAGG;AACH,MAAM,OAAO,YAAY;IACd,UAAU,GAAG,IAAI,GAAG,EAAwD,CAAC;IAEtF,EAAE,CAA0B,IAAO,EAAE,QAA8B;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QACzD,SAAS,CAAC,GAAG,CAAC,QAA4C,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,MAAM,CAAC,QAA4C,CAAC,CAAC;YAC/D,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAA0B,IAAO,EAAE,KAAsB;QACjE,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -1,25 +1,3 @@
1
- import { type Message } from '@zhin.js/core';
2
- export declare const GAME_RESTART_CHOICE_IDS: Set<string>;
3
- export declare function isRestartChoice(choiceId: string): boolean;
4
1
  /** 从 QQ 指令预填 / 数字 fallback 解析游戏 payload */
5
2
  export declare function resolveGameTextPayload(raw: string, map?: Record<string, string>): string | undefined;
6
- export interface GameSessionRef {
7
- id: string;
8
- channel_key: string;
9
- }
10
- export interface ResolveGameChoiceOptions {
11
- message: Message;
12
- gamePrefix: string;
13
- validChoiceIds: readonly string[];
14
- getById: (sessionId: string) => Promise<GameSessionRef | null>;
15
- getActiveForUser: (channel: string, userId: string) => Promise<GameSessionRef | null>;
16
- getByBoardMessageId?: (messageId: string) => Promise<GameSessionRef | null>;
17
- }
18
- /**
19
- * 解析按钮/选项回调:优先 payload;终局「再来一局」允许已结束 session。
20
- */
21
- export declare function resolveGameChoice(opts: ResolveGameChoiceOptions): Promise<{
22
- sessionId: string;
23
- choiceId: string;
24
- } | null>;
25
3
  //# sourceMappingURL=game-interactive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"game-interactive.d.ts","sourceRoot":"","sources":["../src/game-interactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAK3F,eAAO,MAAM,uBAAuB,aAKlC,CAAC;AAEH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,2CAA2C;AAC3C,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,GAAG,SAAS,CAEpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/D,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACtF,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA4CzD"}
1
+ {"version":3,"file":"game-interactive.d.ts","sourceRoot":"","sources":["../src/game-interactive.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAC3C,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,GAAG,SAAS,CAEpB"}
@@ -1,62 +1,6 @@
1
- import { getActionFromMessage, resolvePayloadFromText } from '@zhin.js/core';
2
- import { channelKey } from './board-sender.js';
3
- import { parseChoicePayload } from './choice-keyboard.js';
4
- export const GAME_RESTART_CHOICE_IDS = new Set([
5
- 'restart',
6
- 'restart_char',
7
- 'restart_idiom',
8
- 'restart_bot',
9
- ]);
10
- export function isRestartChoice(choiceId) {
11
- return GAME_RESTART_CHOICE_IDS.has(choiceId) || choiceId.startsWith('restart_');
12
- }
1
+ import { resolvePayloadFromText } from '@zhin.js/core';
13
2
  /** 从 QQ 指令预填 / 数字 fallback 解析游戏 payload */
14
3
  export function resolveGameTextPayload(raw, map) {
15
4
  return resolvePayloadFromText(raw, map);
16
5
  }
17
- /**
18
- * 解析按钮/选项回调:优先 payload;终局「再来一局」允许已结束 session。
19
- */
20
- export async function resolveGameChoice(opts) {
21
- const action = getActionFromMessage(opts.message);
22
- if (!action)
23
- return null;
24
- const ch = channelKey(opts.message);
25
- const userId = opts.message.$sender.id;
26
- const fromPayload = parseChoicePayload(action.payload, opts.gamePrefix);
27
- if (fromPayload && opts.validChoiceIds.includes(fromPayload.choiceId)) {
28
- const session = await opts.getById(fromPayload.sessionId);
29
- if (session?.channel_key === ch) {
30
- return { sessionId: fromPayload.sessionId, choiceId: fromPayload.choiceId };
31
- }
32
- }
33
- const choiceId = action.id || action.payload;
34
- if (!choiceId || !opts.validChoiceIds.includes(choiceId))
35
- return null;
36
- if (isRestartChoice(choiceId)) {
37
- if (fromPayload) {
38
- const session = await opts.getById(fromPayload.sessionId);
39
- if (session?.channel_key === ch) {
40
- return { sessionId: fromPayload.sessionId, choiceId };
41
- }
42
- }
43
- if (action.sourceMessageId && opts.getByBoardMessageId) {
44
- const byBoard = await opts.getByBoardMessageId(action.sourceMessageId);
45
- if (byBoard && byBoard.channel_key === ch) {
46
- return { sessionId: byBoard.id, choiceId };
47
- }
48
- }
49
- const active = await opts.getActiveForUser(ch, userId);
50
- if (active)
51
- return { sessionId: active.id, choiceId };
52
- return null;
53
- }
54
- const session = (await opts.getActiveForUser(ch, userId))
55
- ?? (action.sourceMessageId && opts.getByBoardMessageId
56
- ? await opts.getByBoardMessageId(action.sourceMessageId)
57
- : null);
58
- if (!session || session.channel_key !== ch)
59
- return null;
60
- return { sessionId: session.id, choiceId };
61
- }
62
6
  //# sourceMappingURL=game-interactive.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"game-interactive.js","sourceRoot":"","sources":["../src/game-interactive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"game-interactive.js","sourceRoot":"","sources":["../src/game-interactive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,2CAA2C;AAC3C,MAAM,UAAU,sBAAsB,CACpC,GAAW,EACX,GAA4B;IAE5B,OAAO,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC"}
@@ -52,7 +52,6 @@ export interface LeaderboardEntry {
52
52
  games: number;
53
53
  }
54
54
  export declare function getGameLeaderboard(gameId: string, channelKeyFilter: string, limit?: number): Promise<LeaderboardEntry[]>;
55
- export declare function mountGameRecordCommands(root: Plugin): () => void;
56
55
  /** 测试专用 */
57
56
  export declare function resetGameRecordsForTests(): void;
58
57
  //# sourceMappingURL=game-records.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"game-records.d.ts","sourceRoot":"","sources":["../src/game-records.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,MAAM,EAEZ,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGzE,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnE,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,MAAM;QACd,YAAY,EAAE;YACZ,EAAE,EAAE,MAAM,CAAC;YACX,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,MAAM,EAAE,gBAAgB,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;KACH;CACF;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAwBnD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,CAOjE;AAQD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAW7D;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAEvE;AAaD,uFAAuF;AACvF,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,IAAI,CAc3E;AAMD,mCAAmC;AACnC,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,KAAK,SAAI,GACR,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,EAAE,CAAC,CA4B1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,KAAK,SAAK,GACT,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA2B7B;AA2BD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,CA4ChE;AAED,WAAW;AACX,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C"}
1
+ {"version":3,"file":"game-records.d.ts","sourceRoot":"","sources":["../src/game-records.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,MAAM,EAEZ,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGzE,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnE,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,MAAM;QACd,YAAY,EAAE;YACZ,EAAE,EAAE,MAAM,CAAC;YACX,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;YAClB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,MAAM,EAAE,gBAAgB,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;KACH;CACF;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAwBnD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,CAOjE;AAQD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAW7D;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI,CAEvE;AAaD,uFAAuF;AACvF,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,IAAI,CAc3E;AAMD,mCAAmC;AACnC,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EACxB,KAAK,SAAI,GACR,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,aAAa,EAAE,CAAC,CA4B1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,KAAK,SAAK,GACT,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA2B7B;AAED,WAAW;AACX,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C"}
@@ -1,6 +1,4 @@
1
- import { MessageCommand, } from '@zhin.js/core';
2
1
  import { channelKey } from './board-sender.js';
3
- import { getRegisteredGame, getRegisteredGames } from './game-hub-feature.js';
4
2
  import { createHostGameDb } from './memory-db.js';
5
3
  import { generateCompactId } from './random.js';
6
4
  let legacyDb = null;
@@ -165,64 +163,6 @@ export async function getGameLeaderboard(gameId, channelKeyFilter, limit = 10) {
165
163
  .sort((a, b) => b.wins - a.wins || b.totalScore - a.totalScore)
166
164
  .slice(0, limit);
167
165
  }
168
- function gameTitle(gameId) {
169
- const g = getRegisteredGame(gameId);
170
- return g ? `${g.icon} ${g.title}` : gameId;
171
- }
172
- function formatUserStats(stats) {
173
- if (!stats.length)
174
- return '暂无战绩记录,快去 `/游戏` 开一局吧!';
175
- const lines = stats.map((s) => {
176
- const title = gameTitle(s.gameId);
177
- return `• ${title}:${s.wins} 胜 ${s.losses} 负${s.draws ? ` ${s.draws} 平` : ''}(${s.games} 局,得分 ${s.totalScore})`;
178
- });
179
- return ['📊 **你的战绩**', '', ...lines].join('\n');
180
- }
181
- function formatLeaderboard(gameId, entries) {
182
- const title = gameTitle(gameId);
183
- if (!entries.length) {
184
- return `${title} 在本群暂无排行,发送 \`/游戏\` 开始第一局!`;
185
- }
186
- const lines = entries.map((e, i) => `${i + 1}. ${e.userName} — ${e.wins} 胜 / ${e.games} 局(得分 ${e.totalScore})`);
187
- return [`🏆 **${title} 本群排行**`, '', ...lines].join('\n');
188
- }
189
- export function mountGameRecordCommands(root) {
190
- const disposers = [];
191
- disposers.push(root.addCommand(new MessageCommand('/战绩')
192
- .desc('查看本人在本群的游戏战绩')
193
- .action(async (message) => {
194
- const stats = await getUserGameStats(message.$sender.id, channelKey(message));
195
- return formatUserStats(stats);
196
- })), root.addCommand(new MessageCommand('/排行')
197
- .desc('查看本群某游戏排行榜')
198
- .action(async (message, ...args) => {
199
- const query = args.join(' ').trim();
200
- const games = getRegisteredGames();
201
- if (!games.length)
202
- return '暂无已注册游戏。';
203
- const firstGame = games[0];
204
- if (!firstGame)
205
- return '暂无已注册游戏。';
206
- let gameId = firstGame.id;
207
- if (query) {
208
- const hit = games.find((g) => g.id === query
209
- || g.title.includes(query)
210
- || g.commandPrefix.includes(query)
211
- || g.aliases?.some((a) => a.includes(query)));
212
- if (!hit) {
213
- const names = games.map((g) => g.title).join('、');
214
- return `未找到游戏「${query}」。可选:${names}`;
215
- }
216
- gameId = hit.id;
217
- }
218
- const board = await getGameLeaderboard(gameId, channelKey(message));
219
- return formatLeaderboard(gameId, board);
220
- })));
221
- return () => {
222
- for (const d of disposers)
223
- d();
224
- };
225
- }
226
166
  /** 测试专用 */
227
167
  export function resetGameRecordsForTests() {
228
168
  legacyDb = null;
@@ -1 +1 @@
1
- {"version":3,"file":"game-records.js","sourceRoot":"","sources":["../src/game-records.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"game-records.js","sourceRoot":"","sources":["../src/game-records.ts"],"names":[],"mappings":"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"}
@@ -1,64 +1,5 @@
1
- /**
2
- * 通用游戏会话接口
3
- * 定义回合制游戏的基础会话结构
4
- */
5
- import type { Message } from '@zhin.js/core';
6
- /** 会话状态 */
7
- export type GameStatus = 'active' | 'won' | 'draw' | 'aborted';
8
- /** 通用游戏会话接口 */
9
- export interface GameSession {
10
- /** 会话 ID */
11
- id: string;
12
- /** 适配器名称 */
13
- adapter: string;
14
- /** Endpoint 名称 */
15
- endpoint: string;
16
- /** 频道类型 */
17
- channel_type: 'private' | 'group' | 'channel';
18
- /** 频道 ID */
19
- channel_id: string;
20
- /** 频道唯一键 */
21
- channel_key: string;
22
- /** 棋盘消息 ID(用于编辑) */
23
- board_message_id: string;
24
- /** 当前状态 */
25
- status: GameStatus;
26
- /** 更新时间戳 */
27
- updated_at: number;
28
- /** 创建时间戳 */
29
- created_at: number;
30
- }
31
- /** 回合制游戏会话(2 人对战) */
32
- export interface TurnBasedSession extends GameSession {
33
- /** 玩家 1 ID */
34
- player_1: string;
35
- /** 玩家 2 ID */
36
- player_2: string;
37
- /** 玩家 1 显示名 */
38
- player_1_name: string;
39
- /** 玩家 2 显示名 */
40
- player_2_name: string;
41
- /** 当前回合(1 或 2) */
42
- turn: 1 | 2;
43
- /** 胜者(0=无,1=玩家1,2=玩家2) */
44
- winner: 0 | 1 | 2;
45
- /** 步数 */
46
- move_count: number;
47
- }
48
1
  /** 生成会话 ID */
49
2
  export declare function generateSessionId(): string;
50
- /** 获取当前回合玩家 ID */
51
- export declare function currentPlayerId(session: TurnBasedSession): string;
52
- /** 判断用户是否为本局玩家 */
53
- export declare function isPlayer(session: TurnBasedSession, userId: string): boolean;
54
- /** 判断是否轮到该用户 */
55
- export declare function isPlayerTurn(session: TurnBasedSession, userId: string): boolean;
56
- /** 获取玩家编号(1 或 2),非玩家返回 null */
57
- export declare function playerNumber(session: TurnBasedSession, userId: string): 1 | 2 | null;
58
- /** 切换回合 */
59
- export declare function nextTurn(current: 1 | 2): 1 | 2;
60
- /** 从 Message 提取发送者显示名 */
61
- export declare function senderDisplayName(message: Message): string;
62
3
  /** 比对出站 board_message_id 与平台回调 messageId(含 composite id) */
63
4
  export declare function boardMessageMatches(stored: string, messageId: string): boolean;
64
5
  //# sourceMappingURL=game-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"game-session.d.ts","sourceRoot":"","sources":["../src/game-session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,WAAW;AACX,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/D,eAAe;AACf,MAAM,WAAW,WAAW;IAC1B,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,YAAY;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,YAAY,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9C,YAAY;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAqB;AACrB,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB;IAClB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,0BAA0B;IAC1B,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,SAAS;IACT,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,cAAc;AACd,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,kBAAkB;AAClB,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAEjE;AAED,kBAAkB;AAClB,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED,+BAA+B;AAC/B,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAIpF;AAED,WAAW;AACX,wBAAgB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAE9C;AAED,yBAAyB;AACzB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAG1D;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAM9E"}
1
+ {"version":3,"file":"game-session.d.ts","sourceRoot":"","sources":["../src/game-session.ts"],"names":[],"mappings":"AAEA,cAAc;AACd,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAM9E"}
@@ -3,35 +3,6 @@ import { generateCompactId } from './random.js';
3
3
  export function generateSessionId() {
4
4
  return generateCompactId('s');
5
5
  }
6
- /** 获取当前回合玩家 ID */
7
- export function currentPlayerId(session) {
8
- return session.turn === 1 ? session.player_1 : session.player_2;
9
- }
10
- /** 判断用户是否为本局玩家 */
11
- export function isPlayer(session, userId) {
12
- return session.player_1 === userId || session.player_2 === userId;
13
- }
14
- /** 判断是否轮到该用户 */
15
- export function isPlayerTurn(session, userId) {
16
- return currentPlayerId(session) === userId;
17
- }
18
- /** 获取玩家编号(1 或 2),非玩家返回 null */
19
- export function playerNumber(session, userId) {
20
- if (session.player_1 === userId)
21
- return 1;
22
- if (session.player_2 === userId)
23
- return 2;
24
- return null;
25
- }
26
- /** 切换回合 */
27
- export function nextTurn(current) {
28
- return current === 1 ? 2 : 1;
29
- }
30
- /** 从 Message 提取发送者显示名 */
31
- export function senderDisplayName(message) {
32
- const name = message.$sender.name?.trim();
33
- return name || message.$sender.id;
34
- }
35
6
  /** 比对出站 board_message_id 与平台回调 messageId(含 composite id) */
36
7
  export function boardMessageMatches(stored, messageId) {
37
8
  if (!stored || !messageId)
@@ -1 +1 @@
1
- {"version":3,"file":"game-session.js","sourceRoot":"","sources":["../src/game-session.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA+ChD,cAAc;AACd,MAAM,UAAU,iBAAiB;IAC/B,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,OAAO,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;AAClE,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,QAAQ,CAAC,OAAyB,EAAE,MAAc;IAChE,OAAO,OAAO,CAAC,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC;AACpE,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAE,MAAc;IACpE,OAAO,eAAe,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC;AAC7C,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,YAAY,CAAC,OAAyB,EAAE,MAAc;IACpE,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,WAAW;AACX,MAAM,UAAU,QAAQ,CAAC,OAAc;IACrC,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1C,OAAO,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,SAAiB;IACnE,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACrC,mDAAmD;IACnD,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"game-session.js","sourceRoot":"","sources":["../src/game-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,cAAc;AACd,MAAM,UAAU,iBAAiB;IAC/B,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,SAAiB;IACnE,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACrC,mDAAmD;IACnD,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC"}
package/lib/index.d.ts CHANGED
@@ -7,19 +7,16 @@ export * from './grid-keyboard.js';
7
7
  export * from './choice-keyboard.js';
8
8
  export * from './board-sender.js';
9
9
  export * from './game-session.js';
10
- export * from './game-hub-feature.js';
11
- export * from './game-hub-menu.js';
12
- export * from './game-hub-menu-context.js';
13
- export * from './game-hub-flow.js';
14
- export * from './game-hub-mount.js';
15
- export * from './game-middleware.js';
10
+ export * from './base-session-service.js';
11
+ export * from './versioned-session-service.js';
12
+ export * from './deterministic-random.js';
13
+ export * from './game-events.js';
14
+ export * from './session-coordinator.js';
15
+ export * from './define-game-plugin.js';
16
16
  export * from './game-action-alias.js';
17
- export * from './game-commands.js';
18
17
  export * from './game-interactive.js';
19
18
  export * from './interaction-profiles.js';
20
19
  export * from './game-records.js';
21
- export * from './game-onboarding.js';
22
- export * from './command-help.js';
23
20
  export * from './command-message.js';
24
21
  export * from './memory-db.js';
25
22
  export * from './send-content-text.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
package/lib/index.js CHANGED
@@ -7,19 +7,16 @@ export * from './grid-keyboard.js';
7
7
  export * from './choice-keyboard.js';
8
8
  export * from './board-sender.js';
9
9
  export * from './game-session.js';
10
- export * from './game-hub-feature.js';
11
- export * from './game-hub-menu.js';
12
- export * from './game-hub-menu-context.js';
13
- export * from './game-hub-flow.js';
14
- export * from './game-hub-mount.js';
15
- export * from './game-middleware.js';
10
+ export * from './base-session-service.js';
11
+ export * from './versioned-session-service.js';
12
+ export * from './deterministic-random.js';
13
+ export * from './game-events.js';
14
+ export * from './session-coordinator.js';
15
+ export * from './define-game-plugin.js';
16
16
  export * from './game-action-alias.js';
17
- export * from './game-commands.js';
18
17
  export * from './game-interactive.js';
19
18
  export * from './interaction-profiles.js';
20
19
  export * from './game-records.js';
21
- export * from './game-onboarding.js';
22
- export * from './command-help.js';
23
20
  export * from './command-message.js';
24
21
  export * from './memory-db.js';
25
22
  export * from './send-content-text.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
@@ -17,6 +17,12 @@ export interface InMemoryGameDb {
17
17
  }
18
18
  /** Create an in-memory db with the given model table names. */
19
19
  export declare function createInMemoryGameDb(tableNames: readonly string[]): InMemoryGameDb;
20
+ /**
21
+ * Typed boundary used by game tests and standalone embedders. The database
22
+ * implementation is deliberately structural so game packages keep their
23
+ * precise model types without each package recreating the same adapter.
24
+ */
25
+ export declare function createMemoryGameServices<TDatabase, TServices>(tableNames: readonly string[], factory: (database: TDatabase) => TServices): TServices;
20
26
  /** Minimal DatabaseHost model surface (structural typing; no plugin-runtime dep). */
21
27
  export interface HostGameModelSource {
22
28
  select(): {
@@ -1 +1 @@
1
- {"version":3,"file":"memory-db.d.ts","sourceRoot":"","sources":["../src/memory-db.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE;QAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAA;KAAE,CAAC;CAClE;AA4CD,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAUlF;AAED,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC,MAAM,IAAI;QAER,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;KAC/E,CAAC;IACF,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,IAAI;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACtE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACtC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACzD,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAA;KAAE,CAAC;CAChE;AA+BD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,cAAc,CAUhB"}
1
+ {"version":3,"file":"memory-db.d.ts","sourceRoot":"","sources":["../src/memory-db.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE;QAAE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAA;KAAE,CAAC;CAClE;AA4CD,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAUlF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAC3D,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS,GAC1C,SAAS,CAEX;AAED,qFAAqF;AACrF,MAAM,WAAW,mBAAmB;IAClC,MAAM,IAAI;QAER,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;KAC/E,CAAC;IACF,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,IAAI;QAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACtE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACtC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACzD,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAA;KAAE,CAAC;CAChE;AA+BD,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,cAAc,CAUhB"}
package/lib/memory-db.js CHANGED
@@ -51,6 +51,14 @@ export function createInMemoryGameDb(tableNames) {
51
51
  },
52
52
  };
53
53
  }
54
+ /**
55
+ * Typed boundary used by game tests and standalone embedders. The database
56
+ * implementation is deliberately structural so game packages keep their
57
+ * precise model types without each package recreating the same adapter.
58
+ */
59
+ export function createMemoryGameServices(tableNames, factory) {
60
+ return factory(createInMemoryGameDb(tableNames));
61
+ }
54
62
  function wrapHostModel(model) {
55
63
  return {
56
64
  findAll: async (q = {}) => {
@@ -1 +1 @@
1
- {"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../src/memory-db.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAU,EAAE,CAAC;IAEvB,MAAM,KAAK,GAAG,CAAC,GAAQ,EAAE,CAA0B,EAAE,EAAE,CACrD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpD,OAAO;QACL,iCAAiC;QACjC,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,EAAE,CACjD,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,KAA8B,EAAE,KAAU,EAAE,EAAE;YAChE,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC1B,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,KAA8B,EAAE,EAAE;YACpD,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClB,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,UAA6B;IAChE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO;QACL,MAAM,EAAE;YACN,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;SACxC;KACF,CAAC;AACJ,CAAC;AAmBD,SAAS,aAAa,CAAC,KAA0B;IAC/C,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,IAAa,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAQ,IAAI,CAAC,CAAC,CAAqB,IAAI,IAAI,CAAC;QAC9C,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YACzB,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,KAA8B,EAAE,KAAU,EAAE,EAAE;YAChE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,KAA8B,EAAE,EAAE;YACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,gBAAgB,CAC9B,IAAsB,EACtB,UAA6B;IAE7B,OAAO;QACL,MAAM,EAAE;YACN,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE;gBACpB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,OAAO,SAAS,CAAC;gBACjD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClC,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9C,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../src/memory-db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface ActiveGameSession {
2
+ readonly id: string;
3
+ readonly channel_key: string;
4
+ }
5
+ export interface GameSessionProvider {
6
+ readonly gameId: string;
7
+ getActiveForUser(channelKey: string, userId: string): Promise<ActiveGameSession | null>;
8
+ }
9
+ export declare class GameSessionConflictError extends Error {
10
+ readonly requestedGameId: string;
11
+ readonly activeGameId: string;
12
+ readonly sessionId: string;
13
+ readonly userId: string;
14
+ constructor(requestedGameId: string, activeGameId: string, sessionId: string, userId: string);
15
+ }
16
+ /**
17
+ * Cross-game active-session index. Registrations form per-game stacks so HMR
18
+ * can install a new generation before disposing the old one without a gap.
19
+ */
20
+ export declare class GameSessionCoordinator {
21
+ #private;
22
+ register(provider: GameSessionProvider): () => void;
23
+ assertAvailable(requestedGameId: string, channelKey: string, userIds: readonly string[]): Promise<void>;
24
+ clear(): void;
25
+ }
26
+ export declare const gameSessionCoordinator: GameSessionCoordinator;
27
+ //# sourceMappingURL=session-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-coordinator.d.ts","sourceRoot":"","sources":["../src/session-coordinator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACzF;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAHd,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM;CAQ1B;AAED;;;GAGG;AACH,qBAAa,sBAAsB;;IAGjC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAa7C,eAAe,CACnB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC;IAmBhB,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"}