@seriousgaming/sdk-tools 0.0.0-stage → 1.0.0-alpha.1

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 (391) hide show
  1. package/LICENSE +93 -0
  2. package/README.md +36 -2
  3. package/dist/bundling/logic-exports.d.ts +34 -0
  4. package/dist/bundling/node-builtins.d.ts +21 -0
  5. package/dist/bundling/transpiler.d.ts +7 -0
  6. package/dist/cli.js +27368 -0
  7. package/dist/client/dev-server.d.ts +59 -0
  8. package/dist/client/index.d.ts +28 -0
  9. package/dist/client/stub-services.d.ts +32 -0
  10. package/dist/client/test-session.d.ts +195 -0
  11. package/dist/client.js +16884 -0
  12. package/dist/core/asset-reference-translator.d.ts +46 -0
  13. package/dist/core/clock.d.ts +57 -0
  14. package/dist/core/faults.d.ts +65 -0
  15. package/dist/core/game-settings.d.ts +65 -0
  16. package/dist/core/history.d.ts +89 -0
  17. package/dist/core/listen-with-fallback.d.ts +30 -0
  18. package/dist/core/mutation-queue.d.ts +61 -0
  19. package/dist/core/package-scenario.d.ts +89 -0
  20. package/dist/core/participant-registry.d.ts +109 -0
  21. package/dist/core/pending-changes.d.ts +14 -0
  22. package/dist/core/protocol.d.ts +83 -0
  23. package/dist/core/scenario-drafts.d.ts +32 -0
  24. package/dist/core/session-endpoints.d.ts +108 -0
  25. package/dist/core/session-gates.d.ts +75 -0
  26. package/dist/core/session-host.d.ts +94 -0
  27. package/dist/core/session-refusals.d.ts +56 -0
  28. package/dist/core/session-rewind.d.ts +32 -0
  29. package/dist/core/session-roster.d.ts +128 -0
  30. package/dist/core/session-surfaces.d.ts +32 -0
  31. package/dist/core/session-ticks.d.ts +18 -0
  32. package/dist/core/session-timers.d.ts +84 -0
  33. package/dist/core/session-writes.d.ts +40 -0
  34. package/dist/core/session.d.ts +385 -0
  35. package/dist/core/settings-locks.d.ts +22 -0
  36. package/dist/core/team-names.d.ts +52 -0
  37. package/dist/core/team-state-store.d.ts +209 -0
  38. package/dist/core/tick-timer.d.ts +75 -0
  39. package/dist/dev/blob-links.d.ts +10 -0
  40. package/dist/dev/console/assets/index-DgFglsnA.js +204 -0
  41. package/dist/dev/console/index.html +12 -0
  42. package/dist/dev/console-path.d.ts +19 -0
  43. package/dist/dev/lockfile.d.ts +124 -0
  44. package/dist/dev/package-watcher.d.ts +21 -0
  45. package/dist/dev/routes.d.ts +67 -0
  46. package/dist/dev/shell.d.ts +260 -0
  47. package/dist/dev/surfaces.d.ts +41 -0
  48. package/dist/dev/tools-identity.d.ts +23 -0
  49. package/dist/dev/view/batch.d.ts +172 -0
  50. package/dist/dev/view/commands.d.ts +75 -0
  51. package/dist/dev/view/route.d.ts +58 -0
  52. package/dist/dev/view/view.d.ts +78 -0
  53. package/dist/dev/view/viewer.d.ts +32 -0
  54. package/dist/discovery/config.d.ts +9 -0
  55. package/dist/discovery/manifest-paths.d.ts +21 -0
  56. package/dist/discovery/removed-fields.d.ts +90 -0
  57. package/dist/docs/api/deck.md +386 -0
  58. package/dist/docs/api/index.md +67 -0
  59. package/dist/docs/api/sdk-commands.md +286 -0
  60. package/dist/docs/api/sdk-e2e.md +433 -0
  61. package/dist/docs/api/sdk-projection.md +207 -0
  62. package/dist/docs/api/sdk-testing.md +214 -0
  63. package/dist/docs/api/sdk-tools-client.md +560 -0
  64. package/dist/docs/api/sdk-ui-testing.md +231 -0
  65. package/dist/docs/api/sdk-ui.md +1269 -0
  66. package/dist/docs/api/sdk.md +2140 -0
  67. package/dist/docs/changelog-0.x.md +1156 -0
  68. package/dist/docs/changelog.md +236 -0
  69. package/dist/docs/cli-and-dev-server.md +217 -0
  70. package/dist/docs/cli-error-codes.md +154 -0
  71. package/dist/docs/cli-reference.md +2488 -0
  72. package/dist/docs/cli-simulation-testing.md +222 -0
  73. package/dist/docs/concepts/index.md +46 -0
  74. package/dist/docs/concepts/terminology.md +322 -0
  75. package/dist/docs/environment-variables.md +102 -0
  76. package/dist/docs/getting-started.md +145 -0
  77. package/dist/docs/guides/ai-facilitation.md +220 -0
  78. package/dist/docs/guides/capabilities.md +460 -0
  79. package/dist/docs/guides/endpoints.md +335 -0
  80. package/dist/docs/guides/engine-testing.md +477 -0
  81. package/dist/docs/guides/engine.md +527 -0
  82. package/dist/docs/guides/file-handling.md +405 -0
  83. package/dist/docs/guides/games.md +176 -0
  84. package/dist/docs/guides/global-settings.md +94 -0
  85. package/dist/docs/guides/guide.md +123 -0
  86. package/dist/docs/guides/hooks.md +183 -0
  87. package/dist/docs/guides/index.md +51 -0
  88. package/dist/docs/guides/internationalization.md +288 -0
  89. package/dist/docs/guides/llm-integration.md +635 -0
  90. package/dist/docs/guides/multi-team-games.md +586 -0
  91. package/dist/docs/guides/patterns.md +391 -0
  92. package/dist/docs/guides/presentation.md +196 -0
  93. package/dist/docs/guides/production-constraints.md +130 -0
  94. package/dist/docs/guides/scenario-editor.md +143 -0
  95. package/dist/docs/guides/scenarios.md +515 -0
  96. package/dist/docs/guides/session.md +972 -0
  97. package/dist/docs/guides/settings.md +458 -0
  98. package/dist/docs/guides/setup.md +193 -0
  99. package/dist/docs/guides/speech-generation.md +233 -0
  100. package/dist/docs/guides/starter-game.md +164 -0
  101. package/dist/docs/guides/testing.md +575 -0
  102. package/dist/docs/guides/tick-controller.md +569 -0
  103. package/dist/docs/guides/type-safety.md +516 -0
  104. package/dist/docs/guides/ui.md +1389 -0
  105. package/dist/docs/guides/upgrading.md +636 -0
  106. package/dist/docs/guides/validators.md +217 -0
  107. package/dist/docs/guides/waiting-room.md +244 -0
  108. package/dist/docs/index.md +41 -0
  109. package/dist/docs/recipes/act-on-the-session-from-an-endpoint.md +95 -0
  110. package/dist/docs/recipes/adapt-a-game-for-walkthroughs.md +133 -0
  111. package/dist/docs/recipes/adapt-ui-for-observers.md +74 -0
  112. package/dist/docs/recipes/call-endpoint-from-ui.md +109 -0
  113. package/dist/docs/recipes/check-a-package-from-a-script.md +117 -0
  114. package/dist/docs/recipes/create-capability.md +66 -0
  115. package/dist/docs/recipes/create-endpoint.md +127 -0
  116. package/dist/docs/recipes/create-engine.md +111 -0
  117. package/dist/docs/recipes/create-game.md +70 -0
  118. package/dist/docs/recipes/create-guide.md +75 -0
  119. package/dist/docs/recipes/create-hook.md +80 -0
  120. package/dist/docs/recipes/create-presentation.md +142 -0
  121. package/dist/docs/recipes/create-scenario-editor.md +102 -0
  122. package/dist/docs/recipes/create-scenario.md +98 -0
  123. package/dist/docs/recipes/create-session-ui.md +116 -0
  124. package/dist/docs/recipes/create-settings.md +88 -0
  125. package/dist/docs/recipes/create-setup.md +115 -0
  126. package/dist/docs/recipes/create-tick-controller.md +65 -0
  127. package/dist/docs/recipes/create-user-interface.md +96 -0
  128. package/dist/docs/recipes/create-validator.md +67 -0
  129. package/dist/docs/recipes/create-waiting-room-ui.md +109 -0
  130. package/dist/docs/recipes/declare-api-uses.md +67 -0
  131. package/dist/docs/recipes/design-state-for-concurrent-writes.md +96 -0
  132. package/dist/docs/recipes/distribute-package.md +80 -0
  133. package/dist/docs/recipes/e2e-testing.md +116 -0
  134. package/dist/docs/recipes/end-game-on-condition.md +154 -0
  135. package/dist/docs/recipes/fix-duplicate-packages.md +101 -0
  136. package/dist/docs/recipes/index.md +86 -0
  137. package/dist/docs/recipes/make-an-endpoint-external.md +101 -0
  138. package/dist/docs/recipes/negotiate-across-teams.md +164 -0
  139. package/dist/docs/recipes/observe-other-teams-state.md +119 -0
  140. package/dist/docs/recipes/publish-a-package.md +139 -0
  141. package/dist/docs/recipes/remember-a-viewers-choice.md +55 -0
  142. package/dist/docs/recipes/review-a-past-day.md +73 -0
  143. package/dist/docs/recipes/share-assets-across-scenarios.md +120 -0
  144. package/dist/docs/recipes/share-logic-between-engine-and-ui.md +130 -0
  145. package/dist/docs/recipes/show-all-teams-participants.md +109 -0
  146. package/dist/docs/recipes/start-from-an-empty-package.md +169 -0
  147. package/dist/docs/recipes/take-a-file-in-an-endpoint.md +82 -0
  148. package/dist/docs/recipes/test-a-multi-role-game.md +51 -0
  149. package/dist/docs/recipes/test-user-interface.md +95 -0
  150. package/dist/docs/recipes/test-with-engine.md +115 -0
  151. package/dist/docs/recipes/upload-and-display-files.md +148 -0
  152. package/dist/docs/recipes/use-request-play.md +65 -0
  153. package/dist/docs/recipes/use-request-tick.md +75 -0
  154. package/dist/docs/troubleshooting.md +816 -0
  155. package/dist/execution/blob-inputs.d.ts +57 -0
  156. package/dist/execution/bundle-reload.d.ts +42 -0
  157. package/dist/execution/config-resolver.d.ts +127 -0
  158. package/dist/execution/configuration-builder.d.ts +66 -0
  159. package/dist/execution/context-composition.d.ts +161 -0
  160. package/dist/execution/endpoint-actions.d.ts +9 -0
  161. package/dist/execution/endpoint-payloads.d.ts +32 -0
  162. package/dist/execution/endpoint-runner.d.ts +129 -0
  163. package/dist/execution/engine-state.d.ts +40 -0
  164. package/dist/execution/executor-callbacks.d.ts +56 -0
  165. package/dist/execution/executor.d.ts +436 -0
  166. package/dist/execution/gates.d.ts +45 -0
  167. package/dist/execution/hook-chain.d.ts +25 -0
  168. package/dist/execution/logic-calls.d.ts +190 -0
  169. package/dist/execution/logic-failure.d.ts +84 -0
  170. package/dist/execution/logic-loader.d.ts +54 -0
  171. package/dist/execution/logic-result.d.ts +76 -0
  172. package/dist/execution/tick-controller-call.d.ts +32 -0
  173. package/dist/execution/types.d.ts +48 -0
  174. package/dist/generation/ts-type.d.ts +39 -0
  175. package/dist/guide/locale.d.ts +12 -0
  176. package/dist/guide/video-registry.d.ts +42 -0
  177. package/dist/help-examples.d.ts +125 -0
  178. package/dist/host/adapter.d.ts +67 -0
  179. package/dist/host/host-channel.d.ts +222 -0
  180. package/dist/host/index.d.ts +20 -0
  181. package/dist/host/protocol.d.ts +783 -0
  182. package/dist/host/surfaces.d.ts +42 -0
  183. package/dist/host/theme.d.ts +55 -0
  184. package/dist/host.js +583 -0
  185. package/dist/prompts/index.d.ts +7 -0
  186. package/dist/prompts/schema-builder.d.ts +29 -0
  187. package/dist/prompts/types.d.ts +108 -0
  188. package/dist/prompts/validators.d.ts +32 -0
  189. package/dist/runtime/capability-scope.d.ts +6 -0
  190. package/dist/runtime/context-merge.d.ts +29 -0
  191. package/dist/runtime/context-projection.d.ts +41 -0
  192. package/dist/runtime/guarded-callbacks.d.ts +15 -0
  193. package/dist/runtime/index.d.ts +27 -0
  194. package/dist/runtime/manifest-version.d.ts +55 -0
  195. package/dist/runtime/tick-validation.d.ts +25 -0
  196. package/dist/runtime.js +346 -0
  197. package/dist/schema.json +1546 -0
  198. package/dist/server/vite-plugin.d.ts +46 -0
  199. package/dist/services/tts/client.d.ts +51 -0
  200. package/dist/services/tts/elevenlabs.d.ts +24 -0
  201. package/dist/services/tts/types.d.ts +44 -0
  202. package/dist/storage/asset-resolver.d.ts +49 -0
  203. package/dist/storage/blob-store.d.ts +41 -0
  204. package/dist/templates/endpoint/logic.test.ts.liquid +61 -0
  205. package/dist/templates/endpoint/logic.ts.liquid +25 -0
  206. package/dist/templates/engine/init.json.liquid +7 -0
  207. package/dist/templates/engine/logic-aggregate.test.ts.liquid +90 -0
  208. package/dist/templates/engine/logic-aggregate.ts.liquid +46 -0
  209. package/dist/templates/engine/logic.test.ts.liquid +61 -0
  210. package/dist/templates/engine/logic.ts.liquid +32 -0
  211. package/dist/templates/engine/run.json.liquid +7 -0
  212. package/dist/templates/guide/01-at-a-glance.md.liquid +19 -0
  213. package/dist/templates/guide/02-preparation.md.liquid +18 -0
  214. package/dist/templates/guide/03-running-the-session.md.liquid +37 -0
  215. package/dist/templates/hook/logic.test.ts.liquid +46 -0
  216. package/dist/templates/hook/logic.ts.liquid +12 -0
  217. package/dist/templates/package/CLAUDE.md.template +338 -0
  218. package/dist/templates/package/DESIGN.md.liquid +144 -0
  219. package/dist/templates/package/README.md.liquid +143 -0
  220. package/dist/templates/package/claude/rules/workflow-create-capability.md +26 -0
  221. package/dist/templates/package/claude/rules/workflow-create-endpoint.md +35 -0
  222. package/dist/templates/package/claude/rules/workflow-create-engine.md +35 -0
  223. package/dist/templates/package/claude/rules/workflow-create-guide.md +40 -0
  224. package/dist/templates/package/claude/rules/workflow-create-presentation.md +37 -0
  225. package/dist/templates/package/claude/rules/workflow-create-user-interface.md +31 -0
  226. package/dist/templates/package/claude/rules/workflow-publish-package.md +54 -0
  227. package/dist/templates/package/claude/rules/workflow-test-engine-or-ui.md +30 -0
  228. package/dist/templates/package/claude/rules/workflow-update-sdk-version.md +43 -0
  229. package/dist/templates/package/claude/settings.json.template +16 -0
  230. package/dist/templates/package/gitignore.template +15 -0
  231. package/dist/templates/package/global-setup.ts.template +21 -0
  232. package/dist/templates/package/globals.d.ts.template +2 -0
  233. package/dist/templates/package/oxfmtrc.json.template +14 -0
  234. package/dist/templates/package/oxlintrc.json.template +238 -0
  235. package/dist/templates/package/package.json.liquid +65 -0
  236. package/dist/templates/package/playwright.config.ts.liquid +19 -0
  237. package/dist/templates/package/pnpm-workspace.yaml.template +27 -0
  238. package/dist/templates/package/test-setup.ts.liquid +7 -0
  239. package/dist/templates/package/tsconfig.json.liquid +15 -0
  240. package/dist/templates/package/vite.config.ts.liquid +19 -0
  241. package/dist/templates/package/vitest.config.ts.liquid +25 -0
  242. package/dist/templates/package/vitest.engine.config.ts.liquid +12 -0
  243. package/dist/templates/presentation/index.html.liquid +20 -0
  244. package/dist/templates/presentation/src/App.tsx.liquid +49 -0
  245. package/dist/templates/presentation/src/Slides.tsx.liquid +81 -0
  246. package/dist/templates/presentation/src/i18n.ts.liquid +54 -0
  247. package/dist/templates/presentation/src/main.tsx.liquid +14 -0
  248. package/dist/templates/scenario_editor/src/App.test.tsx.liquid +30 -0
  249. package/dist/templates/scenario_editor/src/App.tsx.liquid +95 -0
  250. package/dist/templates/scenario_editor/src/i18n.ts.liquid +44 -0
  251. package/dist/templates/session/src/App.test.tsx.liquid +60 -0
  252. package/dist/templates/session/src/App.tsx.liquid +128 -0
  253. package/dist/templates/session/src/i18n.ts.liquid +53 -0
  254. package/dist/templates/session/src/main.tsx.liquid +48 -0
  255. package/dist/templates/session/src/theme.ts.liquid +46 -0
  256. package/dist/templates/settings-editor/index.html.liquid +12 -0
  257. package/dist/templates/settings-editor/src/main.tsx.liquid +48 -0
  258. package/dist/templates/settings-editor/src/theme.ts.liquid +24 -0
  259. package/dist/templates/setup/src/App.test.tsx.liquid +39 -0
  260. package/dist/templates/setup/src/App.tsx.liquid +102 -0
  261. package/dist/templates/setup/src/i18n.ts.liquid +47 -0
  262. package/dist/templates/starter-game/capabilities/briefing/capability.sdk.json +18 -0
  263. package/dist/templates/starter-game/capabilities/plan/capability.sdk.json +17 -0
  264. package/dist/templates/starter-game/capabilities/results/capability.sdk.json +61 -0
  265. package/dist/templates/starter-game/capabilities/roles/capability.sdk.json +17 -0
  266. package/dist/templates/starter-game/capabilities/weather/capability.sdk.json +23 -0
  267. package/dist/templates/starter-game/engine/defaults.ts +81 -0
  268. package/dist/templates/starter-game/engine/engine.sdk.json +12 -0
  269. package/dist/templates/starter-game/engine/logic.test.ts +221 -0
  270. package/dist/templates/starter-game/engine/logic.ts +149 -0
  271. package/dist/templates/starter-game/engine/test-helpers.ts +74 -0
  272. package/dist/templates/starter-game/engine/types.ts +139 -0
  273. package/dist/templates/starter-game/guide/content/en/01-at-a-glance.md +51 -0
  274. package/dist/templates/starter-game/guide/content/en/02-preparation.md +35 -0
  275. package/dist/templates/starter-game/guide/content/en/03-running-the-day.md +58 -0
  276. package/dist/templates/starter-game/guide/guide.sdk.json +10 -0
  277. package/dist/templates/starter-game/guide/guide.test.ts +108 -0
  278. package/dist/templates/starter-game/hooks/assignproducts/defaults.ts +37 -0
  279. package/dist/templates/starter-game/hooks/assignproducts/hook.sdk.json +13 -0
  280. package/dist/templates/starter-game/hooks/assignproducts/logic/logic.test.ts +77 -0
  281. package/dist/templates/starter-game/hooks/assignproducts/logic/logic.ts +47 -0
  282. package/dist/templates/starter-game/hooks/assignproducts/types.ts +55 -0
  283. package/dist/templates/starter-game/package.json +68 -0
  284. package/dist/templates/starter-game/playwright.config.ts +19 -0
  285. package/dist/templates/starter-game/scenarios/heatwave/scenario.sdk.json +20 -0
  286. package/dist/templates/starter-game/scenarios/ordinary_week/scenario.sdk.json +12 -0
  287. package/dist/templates/starter-game/seriousgaming.sdk.json +23 -0
  288. package/dist/templates/starter-game/session/defaults.ts +80 -0
  289. package/dist/templates/starter-game/session/index.html +12 -0
  290. package/dist/templates/starter-game/session/session.sdk.json +11 -0
  291. package/dist/templates/starter-game/session/src/App.test.tsx +307 -0
  292. package/dist/templates/starter-game/session/src/App.tsx +309 -0
  293. package/dist/templates/starter-game/session/src/Section.tsx +37 -0
  294. package/dist/templates/starter-game/session/src/TeamDoor.tsx +96 -0
  295. package/dist/templates/starter-game/session/src/format.ts +8 -0
  296. package/dist/templates/starter-game/session/src/i18n.ts +51 -0
  297. package/dist/templates/starter-game/session/src/main.tsx +48 -0
  298. package/dist/templates/starter-game/session/src/theme.ts +45 -0
  299. package/dist/templates/starter-game/session/types.ts +135 -0
  300. package/dist/templates/starter-game/settings/engine/settings.sdk.json +50 -0
  301. package/dist/templates/starter-game/settings/menu/settings.sdk.json +78 -0
  302. package/dist/templates/starter-game/settings/session/settings.sdk.json +23 -0
  303. package/dist/templates/starter-game/settings/ui/settings.sdk.json +25 -0
  304. package/dist/templates/starter-game/test-setup.ts +7 -0
  305. package/dist/templates/starter-game/testing/e2e/game.spec.ts +139 -0
  306. package/dist/templates/starter-game/testing/e2e/global-setup.ts +21 -0
  307. package/dist/templates/starter-game/testing/engine/game.engine.test.ts +171 -0
  308. package/dist/templates/starter-game/tsconfig.json +19 -0
  309. package/dist/templates/starter-game/ui/defaults.ts +60 -0
  310. package/dist/templates/starter-game/ui/index.html +12 -0
  311. package/dist/templates/starter-game/ui/src/App.test.tsx +138 -0
  312. package/dist/templates/starter-game/ui/src/App.tsx +175 -0
  313. package/dist/templates/starter-game/ui/src/DayBar.test.tsx +78 -0
  314. package/dist/templates/starter-game/ui/src/DayBar.tsx +72 -0
  315. package/dist/templates/starter-game/ui/src/HistoryPanel.test.tsx +74 -0
  316. package/dist/templates/starter-game/ui/src/HistoryPanel.tsx +120 -0
  317. package/dist/templates/starter-game/ui/src/MakeRow.tsx +129 -0
  318. package/dist/templates/starter-game/ui/src/Section.tsx +37 -0
  319. package/dist/templates/starter-game/ui/src/ThemeToggle.tsx +49 -0
  320. package/dist/templates/starter-game/ui/src/TodayPanel.test.tsx +179 -0
  321. package/dist/templates/starter-game/ui/src/TodayPanel.tsx +92 -0
  322. package/dist/templates/starter-game/ui/src/YesterdayPanel.tsx +142 -0
  323. package/dist/templates/starter-game/ui/src/format.ts +12 -0
  324. package/dist/templates/starter-game/ui/src/i18n.ts +95 -0
  325. package/dist/templates/starter-game/ui/src/main.tsx +48 -0
  326. package/dist/templates/starter-game/ui/src/menu.ts +18 -0
  327. package/dist/templates/starter-game/ui/src/test-helpers.ts +58 -0
  328. package/dist/templates/starter-game/ui/src/theme.ts +45 -0
  329. package/dist/templates/starter-game/ui/src/writes.ts +43 -0
  330. package/dist/templates/starter-game/ui/types.ts +137 -0
  331. package/dist/templates/starter-game/ui/ui.sdk.json +11 -0
  332. package/dist/templates/starter-game/validators/capacity/defaults.ts +37 -0
  333. package/dist/templates/starter-game/validators/capacity/logic/logic.test.ts +96 -0
  334. package/dist/templates/starter-game/validators/capacity/logic/logic.ts +45 -0
  335. package/dist/templates/starter-game/validators/capacity/types.ts +55 -0
  336. package/dist/templates/starter-game/validators/capacity/validator.sdk.json +11 -0
  337. package/dist/templates/starter-game/vite.config.ts +19 -0
  338. package/dist/templates/starter-game/vitest.config.ts +15 -0
  339. package/dist/templates/starter-game/vitest.engine.config.ts +19 -0
  340. package/dist/templates/starter-game/waiting_room/defaults.ts +40 -0
  341. package/dist/templates/starter-game/waiting_room/index.html +12 -0
  342. package/dist/templates/starter-game/waiting_room/src/App.test.tsx +102 -0
  343. package/dist/templates/starter-game/waiting_room/src/App.tsx +194 -0
  344. package/dist/templates/starter-game/waiting_room/src/i18n.ts +33 -0
  345. package/dist/templates/starter-game/waiting_room/src/main.tsx +48 -0
  346. package/dist/templates/starter-game/waiting_room/src/theme.ts +45 -0
  347. package/dist/templates/starter-game/waiting_room/types.ts +59 -0
  348. package/dist/templates/starter-game/waiting_room/waiting_room.sdk.json +10 -0
  349. package/dist/templates/tick-controller/logic.ts.liquid +8 -0
  350. package/dist/templates/ui/index.html.liquid +12 -0
  351. package/dist/templates/ui/src/App.test.tsx.liquid +41 -0
  352. package/dist/templates/ui/src/App.tsx.liquid +103 -0
  353. package/dist/templates/ui/src/i18n.ts.liquid +47 -0
  354. package/dist/templates/ui/src/main.tsx.liquid +48 -0
  355. package/dist/templates/ui/src/theme.ts.liquid +46 -0
  356. package/dist/templates/validator/logic.test.ts.liquid +42 -0
  357. package/dist/templates/validator/logic.ts.liquid +21 -0
  358. package/dist/templates/waiting-room/index.html.liquid +12 -0
  359. package/dist/templates/waiting-room/src/App.test.tsx.liquid +57 -0
  360. package/dist/templates/waiting-room/src/App.tsx.liquid +118 -0
  361. package/dist/templates/waiting-room/src/i18n.ts.liquid +44 -0
  362. package/dist/templates/waiting-room/src/main.tsx.liquid +48 -0
  363. package/dist/templates/waiting-room/src/theme.ts.liquid +46 -0
  364. package/dist/templating/resource-metadata.d.ts +131 -0
  365. package/dist/types.d.ts +14 -0
  366. package/dist/utils/atomic-write.d.ts +40 -0
  367. package/dist/utils/cli-error.d.ts +64 -0
  368. package/dist/utils/document-parser-client.d.ts +20 -0
  369. package/dist/utils/env-loader.d.ts +40 -0
  370. package/dist/utils/error-codes.d.ts +335 -0
  371. package/dist/utils/errors.d.ts +19 -0
  372. package/dist/utils/global-settings.d.ts +65 -0
  373. package/dist/utils/llm-client.d.ts +34 -0
  374. package/dist/utils/logger.d.ts +36 -0
  375. package/dist/utils/output.d.ts +109 -0
  376. package/dist/utils/platform.d.ts +14 -0
  377. package/dist/utils/prompt.d.ts +36 -0
  378. package/dist/utils/real-path.d.ts +6 -0
  379. package/dist/utils/schema-properties.d.ts +35 -0
  380. package/dist/validation/ajv.d.ts +17 -0
  381. package/dist/validation/facilitator-guide-validator.d.ts +27 -0
  382. package/dist/validation/findings.d.ts +40 -0
  383. package/dist/validation/game-constraints.d.ts +10 -0
  384. package/dist/validation/game-validator.d.ts +34 -0
  385. package/dist/validation/package-validation.d.ts +41 -0
  386. package/dist/validation/package-validator.d.ts +19 -0
  387. package/dist/validation/resource-validator.d.ts +79 -0
  388. package/dist/validation/schema-defaults-validator.d.ts +29 -0
  389. package/dist/validation/schema-validation.d.ts +115 -0
  390. package/dist/validation/semver.d.ts +9 -0
  391. package/package.json +122 -3
@@ -0,0 +1,286 @@
1
+ <!-- Generated by `pnpm docs:generate` from the exports of `@seriousgaming/sdk/commands`. Edit those, not this file. -->
2
+
3
+ # `@seriousgaming/sdk/commands`
4
+
5
+ What a client may ask a session to do.
6
+
7
+ One closed command set, shared by every client of the dev server: the
8
+ browser console, the CLI, a Playwright suite through `runCommand`, and an
9
+ agent posting to `/api/command`. Published from the SDK rather than declared
10
+ inside the runtime so a test is type-checked against the commands the
11
+ runtime actually accepts, and a misspelled field fails to compile rather
12
+ than coming back as a 400.
13
+
14
+ The runtime that validates these at its boundary lives in the tools
15
+ package. This module is types only.
16
+
17
+ Every export of `@seriousgaming/sdk/commands`, with the declaration it is published with. Anything tagged `@internal` is left out: it ships in the declarations, but is not part of the supported API and may change without a major release. For how the pieces fit together, see the [API reference](./index.md) and the guides it links to.
18
+
19
+ ## Interfaces
20
+
21
+ ### Actor
22
+
23
+ Who is asking, where the operation is one a participant can perform.
24
+
25
+ ```ts
26
+ interface Actor {
27
+ participantId?: string;
28
+ teamId?: string;
29
+ viewerRole?: ViewerRole;
30
+ }
31
+ ```
32
+
33
+ ### EndpointListing
34
+
35
+ One endpoint, as `listEndpoints` describes it.
36
+
37
+ ```ts
38
+ interface EndpointListing {
39
+ identifier: string;
40
+ displayName?: string;
41
+ description?: string;
42
+ scope: 'session' | 'team';
43
+ visibility: 'internal' | 'external';
44
+ requestSchema: Record<string, unknown>;
45
+ responseSchema: Record<string, unknown>;
46
+ writes: string[];
47
+ actions: string[];
48
+ }
49
+ ```
50
+
51
+ ### TeamScope
52
+
53
+ Addresses one team by its stable index, or the session when absent.
54
+
55
+ ```ts
56
+ interface TeamScope {
57
+ teamIndex?: number;
58
+ }
59
+ ```
60
+
61
+ ## Types
62
+
63
+ ### Command
64
+
65
+ ```ts
66
+ type Command = MutationCommand | QueryCommand;
67
+ ```
68
+
69
+ ### MutationCommand
70
+
71
+ Every state-changing operation. Each one goes through the session's single queue, in submission order.
72
+
73
+ ```ts
74
+ type MutationCommand =
75
+ | ({
76
+ type: 'tick';
77
+ } & TeamScope &
78
+ Actor)
79
+ | ({
80
+ type: 'undo';
81
+ } & TeamScope)
82
+ | ({
83
+ type: 'reset';
84
+ } & TeamScope)
85
+ | {
86
+ type: 'play';
87
+ }
88
+ | {
89
+ type: 'reconfigure';
90
+ }
91
+ | {
92
+ type: 'reinitialise';
93
+ teams?: number;
94
+ scenarioId?: string | null;
95
+ locale?: string;
96
+ participants?: number | number[];
97
+ }
98
+ | ({
99
+ type: 'updateContext';
100
+ payload: Record<string, unknown>;
101
+ deletes?: (string | string[])[];
102
+ uiIdentifier?: string;
103
+ sessionUiIdentifier?: string;
104
+ } & TeamScope &
105
+ Actor)
106
+ | {
107
+ type: 'updateSharedContext';
108
+ uiIdentifier?: string;
109
+ endpointIdentifier?: string;
110
+ payload: Record<string, unknown>;
111
+ deletes?: (string | string[])[];
112
+ }
113
+ | {
114
+ type: 'updateSettings';
115
+ uiIdentifier?: string;
116
+ payload: Record<string, unknown>;
117
+ }
118
+ | {
119
+ type: 'editScenario';
120
+ scenarioId: string | null;
121
+ }
122
+ | {
123
+ type: 'updateScenarioDraft';
124
+ uiIdentifier?: string;
125
+ scenarioId: string | null;
126
+ payload: Record<string, unknown>;
127
+ }
128
+ | {
129
+ type: 'addTeam';
130
+ name?: string;
131
+ participants?: number;
132
+ }
133
+ | {
134
+ type: 'removeTeam';
135
+ teamIndex: number;
136
+ }
137
+ | {
138
+ type: 'renameTeam';
139
+ teamId: string;
140
+ name: string;
141
+ }
142
+ | ({
143
+ type: 'renameOwnTeam';
144
+ name: string;
145
+ } & Actor)
146
+ | {
147
+ type: 'addParticipant';
148
+ teamId: string;
149
+ name?: string;
150
+ }
151
+ | {
152
+ type: 'renameParticipant';
153
+ participantId: string;
154
+ name: string;
155
+ }
156
+ | {
157
+ type: 'moveParticipant';
158
+ participantId: string;
159
+ teamId: string;
160
+ }
161
+ | {
162
+ type: 'setWaitingRoom';
163
+ open: boolean;
164
+ }
165
+ | {
166
+ type: 'resetWalkthrough';
167
+ }
168
+ | {
169
+ type: 'selectScenario';
170
+ scenarioId: string | null;
171
+ }
172
+ | {
173
+ type: 'setLocale';
174
+ locale: string;
175
+ }
176
+ | ({
177
+ type: 'pauseTimer';
178
+ } & TeamScope)
179
+ | ({
180
+ type: 'resumeTimer';
181
+ } & TeamScope)
182
+ | ({
183
+ type: 'extendTick';
184
+ byMs: number;
185
+ } & TeamScope)
186
+ | {
187
+ type: 'advanceClock';
188
+ byMs: number;
189
+ }
190
+ | {
191
+ type: 'armFault';
192
+ fault: FaultKind;
193
+ times?: number;
194
+ reason?: string;
195
+ }
196
+ | {
197
+ type: 'disarmFault';
198
+ fault: FaultKind;
199
+ };
200
+ ```
201
+
202
+ ### QueryCommand
203
+
204
+ Every read. None of these enters the queue: a read is never blocked behind a mutation, so a tick in flight must not delay one.
205
+
206
+ ```ts
207
+ type QueryCommand =
208
+ | {
209
+ type: 'getState';
210
+ }
211
+ | ({
212
+ type: 'callEndpoint';
213
+ endpointIdentifier: string;
214
+ request: unknown;
215
+ uiIdentifier?: string;
216
+ external?: boolean;
217
+ principal?: {
218
+ kind: string;
219
+ id: string;
220
+ name?: string;
221
+ };
222
+ scenarioId?: string | null;
223
+ } & TeamScope &
224
+ Actor)
225
+ | ({
226
+ type: 'getPastState';
227
+ query: PastStateQuery;
228
+ uiIdentifier?: string;
229
+ } & Actor)
230
+ | ({
231
+ type: 'getAllTeamsParticipants';
232
+ uiIdentifier?: string;
233
+ } & Actor)
234
+ | {
235
+ type: 'getEndpointAudit';
236
+ }
237
+ | {
238
+ type: 'listEndpoints';
239
+ external?: boolean;
240
+ };
241
+ ```
242
+
243
+ ### QueryResult
244
+
245
+ What a query answered with.
246
+
247
+ ```ts
248
+ type QueryResult =
249
+ | {
250
+ type: 'state';
251
+ state: StateProjection;
252
+ }
253
+ | {
254
+ type: 'endpoint';
255
+ response: unknown;
256
+ blobs?: Record<string, string>;
257
+ }
258
+ | {
259
+ type: 'endpointFailure';
260
+ failure: EndpointFailure;
261
+ }
262
+ | {
263
+ type: 'pastState';
264
+ entries: PastStateEntry[];
265
+ }
266
+ | {
267
+ type: 'participants';
268
+ participants: unknown[];
269
+ }
270
+ | {
271
+ type: 'endpointAudit';
272
+ entries: EndpointAuditEntry[];
273
+ }
274
+ | {
275
+ type: 'endpoints';
276
+ endpoints: EndpointListing[];
277
+ };
278
+ ```
279
+
280
+ ### ViewerRole
281
+
282
+ Which viewer a player surface is being rendered for.
283
+
284
+ ```ts
285
+ type ViewerRole = 'participant' | 'observer';
286
+ ```
@@ -0,0 +1,433 @@
1
+ <!-- Generated by `pnpm docs:generate` from the exports of `@seriousgaming/sdk/e2e`. Edit those, not this file. -->
2
+
3
+ # `@seriousgaming/sdk/e2e`
4
+
5
+ End-to-end testing helpers for Serious Gaming SDK consumers.
6
+
7
+ Selectors and API helpers for writing Playwright tests against a game running
8
+ on the dev server. No dependency on Playwright itself — pass the selectors to
9
+ your own `page.locator()` / `page.frameLocator()` calls.
10
+
11
+ What you drive is your own game's surface inside the iframe; the console
12
+ around it is a handful of URLs and one drawer, which is why this module is
13
+ mostly URLs. Three things are worth knowing before writing a test:
14
+
15
+ - Every surface is directly addressable. `/team/2/player/1` is the first
16
+ participant of the second team, with no lookup and no redirect.
17
+ - `?bare` removes the dev chrome entirely, so a change to the console cannot
18
+ fail a test about your game. {@link DEV_SERVER.bare} adds it to any URL.
19
+ - The helpers address the server `SERIOUSGAMING_DEV_URL` names, which is
20
+ what a Playwright `globalSetup` running `startDevServer` sets, so a test
21
+ on free ports passes no options. `{ url }` or `{ port }` picks another.
22
+
23
+ @example
24
+
25
+ ```typescript
26
+ import { DEV_SERVER, runCommand, getState } from '@seriousgaming/sdk/e2e';
27
+
28
+ test('the dashboard shows the tick', async ({ page }) => {
29
+ await runCommand({ type: 'reset' });
30
+ await page.goto(DEV_SERVER.bare(DEV_SERVER.playerUrl(1)));
31
+
32
+ const frame = page.frameLocator(DEV_SERVER.iframeSelector('ui'));
33
+ await expect(frame.locator('#tick')).toHaveText('0');
34
+
35
+ await runCommand({ type: 'tick' });
36
+ await expect(frame.locator('#tick')).toHaveText('1');
37
+ });
38
+ ```
39
+
40
+ Every export of `@seriousgaming/sdk/e2e`, with the declaration it is published with. Anything tagged `@internal` is left out: it ships in the declarations, but is not part of the supported API and may change without a major release. For how the pieces fit together, see the [API reference](./index.md) and the guides it links to.
41
+
42
+ ## Functions
43
+
44
+ ### advanceClock
45
+
46
+ Move the clock of a dev server started with `--fake-clock` forward, running every automatic tick that falls due on the way. Resolves once they have run.
47
+
48
+ ```ts
49
+ function advanceClock(ms: number, options?: DevServerOptions): Promise<void>;
50
+ ```
51
+
52
+ ### getState
53
+
54
+ The whole session, as one projection: teams, contexts, participants, the resolved configuration, the timer, and anything the runtime has gone wrong about. Assert on state without going through a surface.
55
+
56
+ ```ts
57
+ function getState(options?: DevServerOptions): Promise<StateProjection>;
58
+ ```
59
+
60
+ ### reinitialiseSession
61
+
62
+ Start the session again from the package, as a test's known starting point.
63
+
64
+ ```ts
65
+ function reinitialiseSession(options?: ReinitialiseOptions): Promise<void>;
66
+ ```
67
+
68
+ ### resetSession
69
+
70
+ Return the session to tick 0, so one test does not inherit another's state. Call it in `test.beforeEach`.
71
+
72
+ ```ts
73
+ function resetSession(options?: DevServerOptions): Promise<void>;
74
+ ```
75
+
76
+ ### runCommand
77
+
78
+ Run one command against the running session.
79
+
80
+ ```ts
81
+ function runCommand(command: MutationCommand, options?: DevServerOptions): Promise<MutationResult>;
82
+ function runCommand(command: QueryCommand, options?: DevServerOptions): Promise<QueryResult>;
83
+ ```
84
+
85
+ ### waitForState
86
+
87
+ Wait until the session satisfies `predicate`, and return the state that did.
88
+
89
+ ```ts
90
+ function waitForState(
91
+ predicate: (state: StateProjection) => boolean,
92
+ options?: WaitOptions
93
+ ): Promise<StateProjection>;
94
+ ```
95
+
96
+ ## Constants
97
+
98
+ ### DEV_SERVER
99
+
100
+ Selectors and URLs for the dev console.
101
+
102
+ ```ts
103
+ const DEV_SERVER: {
104
+ readonly DEFAULT_PORT: 3000;
105
+ readonly selectors: {
106
+ readonly devDrawerHandle: '[data-testid="dev-drawer-handle"]';
107
+ readonly devDrawer: '[data-testid="dev-drawer"]';
108
+ readonly localeSelect: '[data-testid="locale"]';
109
+ readonly play: '[data-testid="play"]';
110
+ readonly guideContent: '[data-testid="guide-content"]';
111
+ readonly printSheets: '[data-testid="print-sheets"]';
112
+ };
113
+ readonly consoleUrl: () => string;
114
+ readonly playerUrl: (team: number, participant?: number) => string;
115
+ readonly observeUrl: (team: number) => string;
116
+ readonly waitingRoomUrl: (team: number) => string;
117
+ readonly joinUrl: (team: number) => string;
118
+ readonly setupUrl: () => string;
119
+ readonly scenarioEditorUrl: (scenario: string) => string;
120
+ readonly guideUrl: () => string;
121
+ readonly printUrl: () => string;
122
+ readonly bare: (url: string) => string;
123
+ readonly iframeSelector: (identifier: string) => string;
124
+ readonly apiUrl: (path: string, port?: number) => string;
125
+ };
126
+ ```
127
+
128
+ ## Interfaces
129
+
130
+ ### DevServerOptions
131
+
132
+ Which dev server a helper talks to. With neither field set, the server `SERIOUSGAMING_DEV_URL` names (as `startDevServer` in a Playwright `globalSetup` sets it), or else `localhost` on `DEV_SERVER_DEFAULT_PORT`.
133
+
134
+ ```ts
135
+ interface DevServerOptions {
136
+ url?: string;
137
+ port?: number;
138
+ run?: RunKind;
139
+ }
140
+ ```
141
+
142
+ ### ReinitialiseOptions
143
+
144
+ ```ts
145
+ interface ReinitialiseOptions extends DevServerOptions {
146
+ teams?: number;
147
+ participants?: number | number[];
148
+ scenarioId?: string | null;
149
+ locale?: string;
150
+ play?: boolean;
151
+ }
152
+ ```
153
+
154
+ ### StateProjection
155
+
156
+ ```ts
157
+ interface StateProjection {
158
+ projectionVersion: number;
159
+ game: {
160
+ identifier: string;
161
+ name: string;
162
+ scenarioId: string | null;
163
+ };
164
+ session: {
165
+ completedTicks: number;
166
+ mode: SessionMode;
167
+ waitingRoomOpen: boolean;
168
+ complete: boolean;
169
+ seed: string;
170
+ sessionKey: string;
171
+ locale: string;
172
+ runKind: RunKind;
173
+ maxTicks: number | null;
174
+ teamBounds: {
175
+ min?: number;
176
+ max: number;
177
+ };
178
+ inSetup: boolean;
179
+ pending?: PendingChanges;
180
+ };
181
+ teams: ProjectedTeam[];
182
+ shared: Record<string, Record<string, unknown>>;
183
+ sharedState?: unknown;
184
+ timer: TimerState | null;
185
+ settings: ResolvedSettings;
186
+ settingsWithoutSession: ResolvedSettings;
187
+ scenarioDrafts?: ScenarioDraft[];
188
+ }
189
+ ```
190
+
191
+ ### WaitOptions
192
+
193
+ ```ts
194
+ interface WaitOptions extends DevServerOptions {
195
+ timeout?: number;
196
+ interval?: number;
197
+ }
198
+ ```
199
+
200
+ ## Types
201
+
202
+ ### Command
203
+
204
+ ```ts
205
+ type Command = MutationCommand | QueryCommand;
206
+ ```
207
+
208
+ ### MutationCommand
209
+
210
+ Every state-changing operation. Each one goes through the session's single queue, in submission order.
211
+
212
+ ```ts
213
+ type MutationCommand =
214
+ | ({
215
+ type: 'tick';
216
+ } & TeamScope &
217
+ Actor)
218
+ | ({
219
+ type: 'undo';
220
+ } & TeamScope)
221
+ | ({
222
+ type: 'reset';
223
+ } & TeamScope)
224
+ | {
225
+ type: 'play';
226
+ }
227
+ | {
228
+ type: 'reconfigure';
229
+ }
230
+ | {
231
+ type: 'reinitialise';
232
+ teams?: number;
233
+ scenarioId?: string | null;
234
+ locale?: string;
235
+ participants?: number | number[];
236
+ }
237
+ | ({
238
+ type: 'updateContext';
239
+ payload: Record<string, unknown>;
240
+ deletes?: (string | string[])[];
241
+ uiIdentifier?: string;
242
+ sessionUiIdentifier?: string;
243
+ } & TeamScope &
244
+ Actor)
245
+ | {
246
+ type: 'updateSharedContext';
247
+ uiIdentifier?: string;
248
+ endpointIdentifier?: string;
249
+ payload: Record<string, unknown>;
250
+ deletes?: (string | string[])[];
251
+ }
252
+ | {
253
+ type: 'updateSettings';
254
+ uiIdentifier?: string;
255
+ payload: Record<string, unknown>;
256
+ }
257
+ | {
258
+ type: 'editScenario';
259
+ scenarioId: string | null;
260
+ }
261
+ | {
262
+ type: 'updateScenarioDraft';
263
+ uiIdentifier?: string;
264
+ scenarioId: string | null;
265
+ payload: Record<string, unknown>;
266
+ }
267
+ | {
268
+ type: 'addTeam';
269
+ name?: string;
270
+ participants?: number;
271
+ }
272
+ | {
273
+ type: 'removeTeam';
274
+ teamIndex: number;
275
+ }
276
+ | {
277
+ type: 'renameTeam';
278
+ teamId: string;
279
+ name: string;
280
+ }
281
+ | ({
282
+ type: 'renameOwnTeam';
283
+ name: string;
284
+ } & Actor)
285
+ | {
286
+ type: 'addParticipant';
287
+ teamId: string;
288
+ name?: string;
289
+ }
290
+ | {
291
+ type: 'renameParticipant';
292
+ participantId: string;
293
+ name: string;
294
+ }
295
+ | {
296
+ type: 'moveParticipant';
297
+ participantId: string;
298
+ teamId: string;
299
+ }
300
+ | {
301
+ type: 'setWaitingRoom';
302
+ open: boolean;
303
+ }
304
+ | {
305
+ type: 'resetWalkthrough';
306
+ }
307
+ | {
308
+ type: 'selectScenario';
309
+ scenarioId: string | null;
310
+ }
311
+ | {
312
+ type: 'setLocale';
313
+ locale: string;
314
+ }
315
+ | ({
316
+ type: 'pauseTimer';
317
+ } & TeamScope)
318
+ | ({
319
+ type: 'resumeTimer';
320
+ } & TeamScope)
321
+ | ({
322
+ type: 'extendTick';
323
+ byMs: number;
324
+ } & TeamScope)
325
+ | {
326
+ type: 'advanceClock';
327
+ byMs: number;
328
+ }
329
+ | {
330
+ type: 'armFault';
331
+ fault: FaultKind;
332
+ times?: number;
333
+ reason?: string;
334
+ }
335
+ | {
336
+ type: 'disarmFault';
337
+ fault: FaultKind;
338
+ };
339
+ ```
340
+
341
+ ### MutationResult
342
+
343
+ What a mutation settled as.
344
+
345
+ ```ts
346
+ type MutationResult =
347
+ | {
348
+ ok: true;
349
+ committedAtTick?: number;
350
+ }
351
+ | {
352
+ ok: false;
353
+ outcome: MutationOutcome;
354
+ };
355
+ ```
356
+
357
+ ### QueryCommand
358
+
359
+ Every read. None of these enters the queue: a read is never blocked behind a mutation, so a tick in flight must not delay one.
360
+
361
+ ```ts
362
+ type QueryCommand =
363
+ | {
364
+ type: 'getState';
365
+ }
366
+ | ({
367
+ type: 'callEndpoint';
368
+ endpointIdentifier: string;
369
+ request: unknown;
370
+ uiIdentifier?: string;
371
+ external?: boolean;
372
+ principal?: {
373
+ kind: string;
374
+ id: string;
375
+ name?: string;
376
+ };
377
+ scenarioId?: string | null;
378
+ } & TeamScope &
379
+ Actor)
380
+ | ({
381
+ type: 'getPastState';
382
+ query: PastStateQuery;
383
+ uiIdentifier?: string;
384
+ } & Actor)
385
+ | ({
386
+ type: 'getAllTeamsParticipants';
387
+ uiIdentifier?: string;
388
+ } & Actor)
389
+ | {
390
+ type: 'getEndpointAudit';
391
+ }
392
+ | {
393
+ type: 'listEndpoints';
394
+ external?: boolean;
395
+ };
396
+ ```
397
+
398
+ ### QueryResult
399
+
400
+ What a query answered with.
401
+
402
+ ```ts
403
+ type QueryResult =
404
+ | {
405
+ type: 'state';
406
+ state: StateProjection;
407
+ }
408
+ | {
409
+ type: 'endpoint';
410
+ response: unknown;
411
+ blobs?: Record<string, string>;
412
+ }
413
+ | {
414
+ type: 'endpointFailure';
415
+ failure: EndpointFailure;
416
+ }
417
+ | {
418
+ type: 'pastState';
419
+ entries: PastStateEntry[];
420
+ }
421
+ | {
422
+ type: 'participants';
423
+ participants: unknown[];
424
+ }
425
+ | {
426
+ type: 'endpointAudit';
427
+ entries: EndpointAuditEntry[];
428
+ }
429
+ | {
430
+ type: 'endpoints';
431
+ endpoints: EndpointListing[];
432
+ };
433
+ ```