@dreamboard-games/cli 0.1.30-alpha.1 → 0.1.30-alpha.10

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 (156) hide show
  1. package/README.md +179 -22
  2. package/dist/agent-verifier/agent-workspace-verifier.mjs +31 -30
  3. package/dist/agent-verifier/agent-workspace-verifier.mjs.map +1 -0
  4. package/dist/agent-verifier/{chunk-4WD3YU2E.mjs → chunk-3IJBOLGT.mjs} +4 -12
  5. package/dist/agent-verifier/chunk-3IJBOLGT.mjs.map +1 -0
  6. package/dist/agent-verifier/{chunk-6A5HRJMQ.mjs → chunk-4GU3PCHV.mjs} +62 -99
  7. package/dist/agent-verifier/chunk-4GU3PCHV.mjs.map +1 -0
  8. package/dist/agent-verifier/{chunk-SYPLYRGB.mjs → chunk-6XRC5PWB.mjs} +119 -310
  9. package/dist/agent-verifier/chunk-6XRC5PWB.mjs.map +1 -0
  10. package/dist/agent-verifier/{chunk-BVVNBJM4.mjs → chunk-COB56ESI.mjs} +2 -1
  11. package/dist/agent-verifier/chunk-COB56ESI.mjs.map +1 -0
  12. package/dist/agent-verifier/{chunk-2GBBP27W.mjs → chunk-F2DIOJJZ.mjs} +1 -0
  13. package/dist/agent-verifier/chunk-F2DIOJJZ.mjs.map +1 -0
  14. package/dist/agent-verifier/{chunk-CFU5EWIC.mjs → chunk-G42BGGG2.mjs} +7 -6
  15. package/dist/agent-verifier/chunk-G42BGGG2.mjs.map +1 -0
  16. package/dist/agent-verifier/{chunk-XYDL7GY6.mjs → chunk-H6XDQJ3N.mjs} +1 -0
  17. package/dist/agent-verifier/{chunk-LM3OZLZG.mjs → chunk-IAYRNVUC.mjs} +1 -0
  18. package/dist/agent-verifier/chunk-IAYRNVUC.mjs.map +1 -0
  19. package/dist/agent-verifier/{chunk-2QMNAVV4.mjs → chunk-JZTH3EMV.mjs} +2 -1
  20. package/dist/agent-verifier/chunk-JZTH3EMV.mjs.map +1 -0
  21. package/dist/agent-verifier/chunk-KK47X7RV.mjs +14 -0
  22. package/dist/agent-verifier/chunk-KK47X7RV.mjs.map +1 -0
  23. package/dist/agent-verifier/{chunk-SHUMAVAP.mjs → chunk-M7UVBANQ.mjs} +8 -9
  24. package/dist/agent-verifier/chunk-M7UVBANQ.mjs.map +1 -0
  25. package/dist/agent-verifier/{chunk-JH22JNYD.mjs → chunk-MGXX4WFR.mjs} +87 -22
  26. package/dist/agent-verifier/chunk-MGXX4WFR.mjs.map +1 -0
  27. package/dist/agent-verifier/{chunk-2E5P5NWG.mjs → chunk-NAK77WXW.mjs} +58 -126
  28. package/dist/agent-verifier/chunk-NAK77WXW.mjs.map +1 -0
  29. package/dist/agent-verifier/{chunk-CEQ2VJWN.mjs → chunk-POBFNXD4.mjs} +2 -1
  30. package/dist/agent-verifier/chunk-POBFNXD4.mjs.map +1 -0
  31. package/dist/agent-verifier/{chunk-6UUJEYDV.mjs → chunk-QBAF7EYR.mjs} +1 -0
  32. package/dist/agent-verifier/chunk-QBAF7EYR.mjs.map +1 -0
  33. package/dist/agent-verifier/{chunk-7653FPGJ.mjs → chunk-RHI6S4SU.mjs} +3 -2
  34. package/dist/agent-verifier/chunk-RHI6S4SU.mjs.map +1 -0
  35. package/dist/agent-verifier/{chunk-MINCYHXN.mjs → chunk-TAEQKBJB.mjs} +1 -0
  36. package/dist/agent-verifier/chunk-TAEQKBJB.mjs.map +1 -0
  37. package/dist/agent-verifier/{chunk-7E65UQLY.mjs → chunk-TLYGTHXU.mjs} +3 -2
  38. package/dist/agent-verifier/chunk-TLYGTHXU.mjs.map +1 -0
  39. package/dist/agent-verifier/{chunk-EIQWDQWJ.mjs → chunk-UWJIZML3.mjs} +13 -14
  40. package/dist/agent-verifier/chunk-UWJIZML3.mjs.map +1 -0
  41. package/dist/agent-verifier/{chunk-CJEEA6NJ.mjs → chunk-VLOIZDR6.mjs} +15 -31
  42. package/dist/agent-verifier/chunk-VLOIZDR6.mjs.map +1 -0
  43. package/dist/agent-verifier/{chunk-HJFQDSTU.mjs → chunk-W2MDP5ZN.mjs} +6 -5
  44. package/dist/agent-verifier/chunk-W2MDP5ZN.mjs.map +1 -0
  45. package/dist/agent-verifier/{chunk-CEDUHGNH.mjs → chunk-XKCJBIRY.mjs} +2 -1
  46. package/dist/agent-verifier/chunk-XKCJBIRY.mjs.map +1 -0
  47. package/dist/agent-verifier/{chunk-VYJTHSYR.mjs → chunk-YDIOW2BO.mjs} +2 -1
  48. package/dist/agent-verifier/chunk-YDIOW2BO.mjs.map +1 -0
  49. package/dist/agent-verifier/{chunk-MRCUP5SW.mjs → chunk-YE7UAO3T.mjs} +1 -0
  50. package/dist/agent-verifier/chunk-YE7UAO3T.mjs.map +1 -0
  51. package/dist/agent-verifier/{chunk-EOQIV6PS.mjs → chunk-YR664DJX.mjs} +111 -116
  52. package/dist/agent-verifier/chunk-YR664DJX.mjs.map +1 -0
  53. package/dist/agent-verifier/{chunk-2SZHMP6F.mjs → chunk-Z6OZWUIZ.mjs} +6 -9
  54. package/dist/agent-verifier/chunk-Z6OZWUIZ.mjs.map +1 -0
  55. package/dist/agent-verifier/{chunk-RBDDIIPM.mjs → chunk-ZEELHSY3.mjs} +1 -0
  56. package/dist/agent-verifier/chunk-ZEELHSY3.mjs.map +1 -0
  57. package/dist/agent-verifier/{compile-5QSPIOUT.mjs → compile-C2VIP6VC.mjs} +27 -27
  58. package/dist/agent-verifier/compile-C2VIP6VC.mjs.map +1 -0
  59. package/dist/agent-verifier/{global-config-WX3ZZIVU.mjs → global-config-XHL7BCKN.mjs} +6 -5
  60. package/dist/agent-verifier/global-config-XHL7BCKN.mjs.map +1 -0
  61. package/dist/agent-verifier/{keychain-backend-TNOPQV3Z.mjs → keychain-backend-A3MRWLPF.mjs} +2 -1
  62. package/dist/agent-verifier/keychain-backend-A3MRWLPF.mjs.map +1 -0
  63. package/dist/agent-verifier/{local-files-MTPLP62S.mjs → local-files-ZW52HSVT.mjs} +10 -11
  64. package/dist/agent-verifier/local-files-ZW52HSVT.mjs.map +1 -0
  65. package/dist/agent-verifier/local-typecheck-3JXL2NMG.mjs +10 -0
  66. package/dist/agent-verifier/local-typecheck-3JXL2NMG.mjs.map +1 -0
  67. package/dist/agent-verifier/{materialize-workspace-FKALAE2T.mjs → materialize-workspace-BKZLLFI4.mjs} +20 -20
  68. package/dist/agent-verifier/materialize-workspace-BKZLLFI4.mjs.map +1 -0
  69. package/dist/agent-verifier/{project-state-7GR6BQTQ.mjs → project-state-XKUSCFSV.mjs} +3 -2
  70. package/dist/agent-verifier/project-state-XKUSCFSV.mjs.map +1 -0
  71. package/dist/agent-verifier/{prompt-3BAINGAQ.mjs → prompt-VKHMCQT6.mjs} +2 -1
  72. package/dist/agent-verifier/prompt-VKHMCQT6.mjs.map +1 -0
  73. package/dist/agent-verifier/{reducer-bundle-preflight-C73LEXI2.mjs → reducer-bundle-preflight-7NYZF5ZT.mjs} +6 -9
  74. package/dist/agent-verifier/reducer-bundle-preflight-7NYZF5ZT.mjs.map +1 -0
  75. package/dist/agent-verifier/reducer-contract-preflight-COD2CO22.mjs +11 -0
  76. package/dist/agent-verifier/reducer-contract-preflight-COD2CO22.mjs.map +1 -0
  77. package/dist/agent-verifier/{reducer-native-test-harness-GMWBUISX.mjs → reducer-native-test-harness-D4VWPIAC.mjs} +14 -17
  78. package/dist/agent-verifier/reducer-native-test-harness-D4VWPIAC.mjs.map +1 -0
  79. package/dist/agent-verifier/static-scaffold-JCRBDKEH.mjs +26 -0
  80. package/dist/agent-verifier/static-scaffold-JCRBDKEH.mjs.map +1 -0
  81. package/dist/agent-verifier/{sync-3DUQH32H.mjs → sync-UTL2IIZV.mjs} +35 -39
  82. package/dist/agent-verifier/sync-UTL2IIZV.mjs.map +1 -0
  83. package/dist/agent-verifier/{test-P4U5INTD.mjs → test-H26XCBFA.mjs} +29 -31
  84. package/dist/agent-verifier/test-H26XCBFA.mjs.map +1 -0
  85. package/dist/agent-verifier/workspace-codegen-WPZHMATU.mjs +10 -0
  86. package/dist/agent-verifier/workspace-codegen-WPZHMATU.mjs.map +1 -0
  87. package/dist/agent-verifier/{workspace-dependencies-HZ6VVS4G.mjs → workspace-dependencies-ULZZZPNX.mjs} +5 -4
  88. package/dist/agent-verifier/workspace-dependencies-ULZZZPNX.mjs.map +1 -0
  89. package/dist/{chunk-C6UAT6EH.js → chunk-GXM7RRZJ.js} +9 -11
  90. package/dist/chunk-GXM7RRZJ.js.map +1 -0
  91. package/dist/{chunk-RS7UXJZV.js → chunk-P5TITCD3.js} +790 -17875
  92. package/dist/chunk-P5TITCD3.js.map +1 -0
  93. package/dist/{global-config-AGFBDFYD.js → global-config-WPJRXVDO.js} +2 -2
  94. package/dist/global-config-WPJRXVDO.js.map +1 -0
  95. package/dist/index.js +437 -52
  96. package/dist/index.js.map +1 -1
  97. package/dist/internal.js +2 -3
  98. package/package.json +8 -7
  99. package/skills/dreamboard/references/building-your-first-game.md +510 -0
  100. package/skills/dreamboard/references/cli.md +104 -0
  101. package/skills/dreamboard/references/game-interface.md +548 -0
  102. package/skills/dreamboard/references/manifest-authoring.md +597 -0
  103. package/skills/dreamboard/references/quickstart.md +66 -0
  104. package/skills/dreamboard/references/reducer.md +864 -0
  105. package/skills/dreamboard/references/rule-authoring.md +147 -0
  106. package/skills/dreamboard/references/testing.md +249 -0
  107. package/skills/dreamboard/scripts/events-extract.mjs +218 -0
  108. package/dist/agent-verifier/chunk-54TAYXUD.mjs +0 -12
  109. package/dist/agent-verifier/chunk-HBNDKQT5.mjs +0 -8381
  110. package/dist/agent-verifier/chunk-LI3ZR3BI.mjs +0 -41
  111. package/dist/agent-verifier/chunk-U6OJN7XS.mjs +0 -8092
  112. package/dist/agent-verifier/local-typecheck-QFYYAZOK.mjs +0 -9
  113. package/dist/agent-verifier/reducer-contract-preflight-22X7DSZW.mjs +0 -10
  114. package/dist/agent-verifier/static-scaffold-AJMZZQWS.mjs +0 -28
  115. package/dist/agent-verifier/testing-5K2BJYF2.mjs +0 -674
  116. package/dist/agent-verifier/workspace-codegen-JDZJRSDV.mjs +0 -11
  117. package/dist/chunk-7FOO4AJI.js +0 -50
  118. package/dist/chunk-7FOO4AJI.js.map +0 -1
  119. package/dist/chunk-C6UAT6EH.js.map +0 -1
  120. package/dist/chunk-RS7UXJZV.js.map +0 -1
  121. package/dist/internal.d.ts +0 -311
  122. package/dist/runtime-packages/ui-host-runtime/src/actor-principal.ts +0 -71
  123. package/dist/runtime-packages/ui-host-runtime/src/browser-interaction.ts +0 -139
  124. package/dist/runtime-packages/ui-host-runtime/src/components/host-controls.tsx +0 -374
  125. package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback-toaster.tsx +0 -266
  126. package/dist/runtime-packages/ui-host-runtime/src/components/host-feedback.tsx +0 -212
  127. package/dist/runtime-packages/ui-host-runtime/src/components/host-primitives.tsx +0 -271
  128. package/dist/runtime-packages/ui-host-runtime/src/components/host-session-metadata.tsx +0 -135
  129. package/dist/runtime-packages/ui-host-runtime/src/components/index.ts +0 -5
  130. package/dist/runtime-packages/ui-host-runtime/src/components/perf-overlay.tsx +0 -194
  131. package/dist/runtime-packages/ui-host-runtime/src/gameplay-authority-transport.ts +0 -626
  132. package/dist/runtime-packages/ui-host-runtime/src/host-controls.tsx +0 -1
  133. package/dist/runtime-packages/ui-host-runtime/src/host-feedback.tsx +0 -1
  134. package/dist/runtime-packages/ui-host-runtime/src/host-session-transport.ts +0 -294
  135. package/dist/runtime-packages/ui-host-runtime/src/index.ts +0 -3
  136. package/dist/runtime-packages/ui-host-runtime/src/logger.ts +0 -11
  137. package/dist/runtime-packages/ui-host-runtime/src/perf.ts +0 -324
  138. package/dist/runtime-packages/ui-host-runtime/src/plugin-bridge.ts +0 -195
  139. package/dist/runtime-packages/ui-host-runtime/src/plugin-health-check.ts +0 -138
  140. package/dist/runtime-packages/ui-host-runtime/src/plugin-messages.ts +0 -159
  141. package/dist/runtime-packages/ui-host-runtime/src/plugin-session-gateway.ts +0 -551
  142. package/dist/runtime-packages/ui-host-runtime/src/runtime/index.ts +0 -13
  143. package/dist/runtime-packages/ui-host-runtime/src/screenshot/projection-to-snapshot.ts +0 -122
  144. package/dist/runtime-packages/ui-host-runtime/src/screenshot/static-store-api.ts +0 -26
  145. package/dist/runtime-packages/ui-host-runtime/src/session-ingress-controller.ts +0 -583
  146. package/dist/runtime-packages/ui-host-runtime/src/session-ingress.ts +0 -219
  147. package/dist/runtime-packages/ui-host-runtime/src/session-live-runtime.ts +0 -117
  148. package/dist/runtime-packages/ui-host-runtime/src/session-model.ts +0 -431
  149. package/dist/runtime-packages/ui-host-runtime/src/session-projection.ts +0 -211
  150. package/dist/runtime-packages/ui-host-runtime/src/session-recovery.ts +0 -80
  151. package/dist/runtime-packages/ui-host-runtime/src/session-state-reducer.ts +0 -1034
  152. package/dist/runtime-packages/ui-host-runtime/src/sse-manager.ts +0 -416
  153. package/dist/runtime-packages/ui-host-runtime/src/unified-session-store.ts +0 -184
  154. package/dist/testing-KLSV6CPJ.js +0 -674
  155. package/dist/testing-KLSV6CPJ.js.map +0 -1
  156. /package/dist/{global-config-AGFBDFYD.js.map → agent-verifier/chunk-H6XDQJ3N.mjs.map} +0 -0
@@ -1,219 +0,0 @@
1
- import type {
2
- HostSessionEvent,
3
- HostSessionSnapshot,
4
- } from "@dreamboard-games/api-client";
5
- import type {
6
- GameplayPerspective,
7
- GameplayViewport,
8
- SessionContext,
9
- } from "./session-model.js";
10
- import {
11
- contextFromHostEventContext,
12
- contextFromHostSnapshot,
13
- gameplayViewportFromSnapshot,
14
- } from "./session-model.js";
15
-
16
- type WireSessionIngressSnapshot = HostSessionSnapshot;
17
- type WireSessionIngressEvent = HostSessionEvent;
18
- interface WireSessionIngressActionSubmitResponse {
19
- success: boolean;
20
- version: number;
21
- actionSetVersion: string;
22
- accepted?: boolean | null;
23
- durabilityStatus?: "COMMITTED" | null;
24
- update?: WireSessionIngressEvent | null;
25
- errorCode?: string | null;
26
- message?: string | null;
27
- clientActionId?: string | null;
28
- }
29
-
30
- export type HostSessionWireSnapshot = WireSessionIngressSnapshot;
31
- export type HostSessionWireEvent = WireSessionIngressEvent;
32
- export type HostActionSubmitWireResponse =
33
- WireSessionIngressActionSubmitResponse;
34
-
35
- export type NormalizedSessionSnapshot =
36
- | {
37
- type: "lobby";
38
- context: SessionContext;
39
- gameplay: null;
40
- preferredPlayerId: string | null;
41
- }
42
- | {
43
- type: "gameplay";
44
- context: SessionContext;
45
- perspective: GameplayPerspective;
46
- gameplay: GameplayViewport;
47
- }
48
- | {
49
- type: "ended";
50
- context: SessionContext;
51
- gameplay: null;
52
- preferredPlayerId: string | null;
53
- };
54
-
55
- export type NormalizedSessionEvent =
56
- | {
57
- type: "session.snapshot";
58
- snapshot: NormalizedSessionSnapshot;
59
- context: SessionContext;
60
- gameplay: GameplayViewport | null;
61
- }
62
- | {
63
- type: "session.lobbyUpdated";
64
- context: SessionContext | null;
65
- gameplay: GameplayViewport | null;
66
- }
67
- | {
68
- type: "session.gameplayUpdated";
69
- context: SessionContext | null;
70
- gameplay: GameplayViewport;
71
- perspective: GameplayPerspective;
72
- }
73
- | {
74
- type: "session.historyUpdated";
75
- context: SessionContext | null;
76
- gameplay: GameplayViewport | null;
77
- }
78
- | {
79
- type: "session.ended";
80
- context: SessionContext | null;
81
- gameplay: GameplayViewport | null;
82
- }
83
- | {
84
- type: "session.error";
85
- message: string;
86
- code?: string;
87
- context: SessionContext | null;
88
- gameplay: GameplayViewport | null;
89
- };
90
-
91
- export type NormalizedSubmitResponse = NormalizedSessionEvent | null;
92
-
93
- export function normalizeSnapshot(
94
- snapshot: HostSessionWireSnapshot,
95
- options: {
96
- userId: string | null;
97
- previousGameplay?: GameplayViewport | null;
98
- },
99
- ): NormalizedSessionSnapshot {
100
- const context = contextFromHostSnapshot(snapshot, options.userId);
101
- if (snapshot.type !== "gameplay") {
102
- return {
103
- type: snapshot.type,
104
- context,
105
- gameplay: null,
106
- preferredPlayerId: null,
107
- };
108
- }
109
- return {
110
- type: "gameplay",
111
- context,
112
- perspective: { playerId: snapshot.gameplay.perspectivePlayerId },
113
- gameplay: gameplayViewportFromSnapshot(
114
- snapshot.gameplay,
115
- options.previousGameplay,
116
- ),
117
- };
118
- }
119
-
120
- export function normalizeEvent(
121
- event: HostSessionWireEvent,
122
- options: {
123
- currentContext: SessionContext | null;
124
- currentGameplay: GameplayViewport | null;
125
- userId: string | null;
126
- },
127
- ): NormalizedSessionEvent {
128
- const context = options.currentContext;
129
- switch (event.type) {
130
- case "session.snapshot": {
131
- const normalized = normalizeSnapshot(event.snapshot, {
132
- userId: options.userId,
133
- previousGameplay: options.currentGameplay,
134
- });
135
- return {
136
- type: "session.snapshot",
137
- snapshot: normalized,
138
- context: normalized.context,
139
- gameplay: normalized.gameplay,
140
- };
141
- }
142
- case "session.lobbyUpdated":
143
- return {
144
- type: "session.lobbyUpdated",
145
- context: context
146
- ? contextFromHostEventContext(
147
- { ...context, userId: options.userId },
148
- event.context,
149
- event.lobby,
150
- )
151
- : null,
152
- gameplay: options.currentGameplay,
153
- };
154
- case "session.gameplayUpdated":
155
- return {
156
- type: "session.gameplayUpdated",
157
- context: context
158
- ? contextFromHostEventContext(
159
- { ...context, userId: options.userId },
160
- event.context,
161
- )
162
- : null,
163
- gameplay: gameplayViewportFromSnapshot(
164
- event.gameplay,
165
- options.currentGameplay,
166
- ),
167
- perspective: { playerId: event.gameplay.perspectivePlayerId },
168
- };
169
- case "session.historyUpdated":
170
- return {
171
- type: "session.historyUpdated",
172
- context: context
173
- ? contextFromHostEventContext(
174
- { ...context, userId: options.userId },
175
- event.context,
176
- )
177
- : null,
178
- gameplay: options.currentGameplay,
179
- };
180
- case "session.ended":
181
- return {
182
- type: "session.ended",
183
- context: context
184
- ? contextFromHostEventContext(
185
- { ...context, userId: options.userId },
186
- event.context,
187
- event.lobby,
188
- )
189
- : null,
190
- gameplay: options.currentGameplay,
191
- };
192
- case "session.error":
193
- return {
194
- type: "session.error",
195
- message: event.message,
196
- code: event.code,
197
- context,
198
- gameplay: options.currentGameplay,
199
- };
200
- }
201
- }
202
-
203
- export function normalizeSubmitResponse(
204
- response: HostActionSubmitWireResponse,
205
- options: {
206
- currentContext: SessionContext | null;
207
- currentGameplay: GameplayViewport | null;
208
- userId: string | null;
209
- },
210
- ): NormalizedSubmitResponse {
211
- if (!response.accepted || !response.update) {
212
- return null;
213
- }
214
- return normalizeEvent(response.update, {
215
- currentContext: options.currentContext,
216
- currentGameplay: options.currentGameplay,
217
- userId: options.userId,
218
- });
219
- }
@@ -1,117 +0,0 @@
1
- import type { HostSessionWireEvent } from "./session-ingress.js";
2
- import type { SSEManager, SSERecoveryEvent } from "./sse-manager.js";
3
-
4
- export interface SSEManagerLike {
5
- connect: (
6
- sessionId: string,
7
- options: {
8
- source?: string;
9
- playerId?: string;
10
- },
11
- ) => Promise<void> | void;
12
- disconnect: () => void;
13
- on: SSEManager["on"];
14
- onAnyMessage: SSEManager["onAnyMessage"];
15
- }
16
-
17
- export interface SessionLiveRuntime {
18
- connectSession: (
19
- sessionId: string,
20
- options: { source?: string; playerId?: string },
21
- ) => void;
22
- reconnectGameplay: (
23
- sessionId: string,
24
- playerId: string,
25
- source: string,
26
- ) => void;
27
- requestGameplayResync: (
28
- sessionId: string,
29
- playerId: string,
30
- source: string,
31
- ) => void;
32
- closeStreams: () => void;
33
- getConnectedSessionId: () => string | null;
34
- }
35
-
36
- export function createSessionLiveRuntime(options: {
37
- createSseManager: () => SSEManagerLike;
38
- onConnectionChange: (
39
- channel: "lobby" | "gameplay",
40
- connected: boolean,
41
- ) => void;
42
- onConnectionError: (error: unknown) => void;
43
- onConnectionRecovering: (details: SSERecoveryEvent) => void;
44
- onLiveMessage: (message: HostSessionWireEvent) => void;
45
- }): SessionLiveRuntime {
46
- let connectedSessionId: string | null = null;
47
- let sessionManager: SSEManagerLike | null = null;
48
- let unsubscribeSession: (() => void) | null = null;
49
-
50
- const attachConnectionHandlers = (
51
- manager: SSEManagerLike,
52
- channel: "lobby" | "gameplay",
53
- ) => {
54
- manager.on("connected", () => options.onConnectionChange(channel, true));
55
- manager.on("disconnected", () =>
56
- options.onConnectionChange(channel, false),
57
- );
58
- manager.on("error", (error) => {
59
- options.onConnectionChange(channel, false);
60
- options.onConnectionError(error);
61
- });
62
- manager.on("recovering", (details) => {
63
- options.onConnectionChange(channel, false);
64
- options.onConnectionRecovering(details);
65
- });
66
- };
67
-
68
- const closeStreams = () => {
69
- unsubscribeSession?.();
70
- unsubscribeSession = null;
71
- sessionManager?.disconnect();
72
- sessionManager = null;
73
- connectedSessionId = null;
74
- options.onConnectionChange("lobby", false);
75
- options.onConnectionChange("gameplay", false);
76
- };
77
-
78
- const openSession = (
79
- sessionId: string,
80
- playerId: string | undefined,
81
- source: string,
82
- ) => {
83
- closeStreams();
84
- connectedSessionId = sessionId;
85
- sessionManager = options.createSseManager();
86
- attachConnectionHandlers(sessionManager, playerId ? "gameplay" : "lobby");
87
- unsubscribeSession = sessionManager.onAnyMessage(options.onLiveMessage);
88
- void sessionManager.connect(sessionId, {
89
- source,
90
- playerId,
91
- });
92
- };
93
-
94
- return {
95
- connectSession: (sessionId, connectOptions) => {
96
- openSession(
97
- sessionId,
98
- connectOptions.playerId,
99
- connectOptions.source ?? "connect-session",
100
- );
101
- },
102
- reconnectGameplay: (sessionId, playerId, source) => {
103
- openSession(sessionId, playerId, source);
104
- },
105
- requestGameplayResync: (sessionId, playerId, source) => {
106
- if (!sessionManager) {
107
- return;
108
- }
109
- void sessionManager.connect(sessionId, {
110
- source,
111
- playerId,
112
- });
113
- },
114
- closeStreams,
115
- getConnectedSessionId: () => connectedSessionId,
116
- };
117
- }