@pyric/cli 0.1.0-alpha.18 → 0.1.0-alpha.20

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 (356) hide show
  1. package/README.md +14 -9
  2. package/dist/bridge/server/mcp-contract.d.ts +2 -2
  3. package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
  4. package/dist/bridge/server/mcp-contract.js +3 -0
  5. package/dist/bridge/server/mcp-contract.js.map +1 -1
  6. package/dist/cli/index.d.ts +3 -2
  7. package/dist/cli/index.d.ts.map +1 -1
  8. package/dist/cli/index.js +51 -42
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cli/mcp-proxy.d.ts.map +1 -1
  11. package/dist/cli/mcp-proxy.js +3 -3
  12. package/dist/cli/mcp-proxy.js.map +1 -1
  13. package/dist/cli/parse-args.d.ts +1 -1
  14. package/dist/cli/parse-args.d.ts.map +1 -1
  15. package/dist/cli/parse-args.js +51 -15
  16. package/dist/cli/parse-args.js.map +1 -1
  17. package/dist/cli/pyric-config.d.ts +24 -0
  18. package/dist/cli/pyric-config.d.ts.map +1 -0
  19. package/dist/cli/pyric-config.js +28 -0
  20. package/dist/cli/pyric-config.js.map +1 -0
  21. package/dist/cli/rules.d.ts +1 -0
  22. package/dist/cli/rules.d.ts.map +1 -1
  23. package/dist/cli/rules.js +18 -4
  24. package/dist/cli/rules.js.map +1 -1
  25. package/dist/cli/{dev-runner.d.ts → sandbox-runner.d.ts} +33 -36
  26. package/dist/cli/sandbox-runner.d.ts.map +1 -0
  27. package/dist/cli/{dev-runner.js → sandbox-runner.js} +90 -55
  28. package/dist/cli/sandbox-runner.js.map +1 -0
  29. package/dist/cli/serve.d.ts +6 -4
  30. package/dist/cli/serve.d.ts.map +1 -1
  31. package/dist/cli/serve.js +99 -40
  32. package/dist/cli/serve.js.map +1 -1
  33. package/dist/cli/service-command-records/storage-rules-resolve.d.ts +4 -0
  34. package/dist/cli/service-command-records/storage-rules-resolve.d.ts.map +1 -0
  35. package/dist/cli/service-command-records/storage-rules-resolve.js +3 -0
  36. package/dist/cli/service-command-records/storage-rules-resolve.js.map +1 -0
  37. package/dist/cli/service-commands.generated.d.ts +3 -0
  38. package/dist/cli/service-commands.generated.d.ts.map +1 -1
  39. package/dist/cli/service-commands.generated.js +2 -0
  40. package/dist/cli/service-commands.generated.js.map +1 -1
  41. package/dist/cli/snapshot.js +5 -5
  42. package/dist/cli/snapshot.js.map +1 -1
  43. package/dist/cli/verify.js +1 -1
  44. package/dist/cli/verify.js.map +1 -1
  45. package/dist/functions-rtdb/development-runtime.js +1 -1
  46. package/dist/functions-rtdb/development-runtime.js.map +1 -1
  47. package/dist/functions-rtdb/project.js +8 -8
  48. package/dist/functions-rtdb/project.js.map +1 -1
  49. package/dist/next/guard.js +1 -1
  50. package/dist/next/guard.js.map +1 -1
  51. package/dist/remote/index.d.ts +1 -1
  52. package/dist/remote/index.js +9 -9
  53. package/dist/remote/index.js.map +1 -1
  54. package/dist/serve/bundler.js +10 -10
  55. package/dist/serve/bundler.js.map +1 -1
  56. package/dist/serve/entries/ai.d.ts.map +1 -1
  57. package/dist/serve/entries/ai.js +27 -1
  58. package/dist/serve/entries/ai.js.map +1 -1
  59. package/dist/serve/entries/auth-helper-dom.js +1 -1
  60. package/dist/serve/entries/auth-helper-dom.js.map +1 -1
  61. package/dist/serve/entries/auth-helper-runtime.js +1 -1
  62. package/dist/serve/entries/auth-helper-runtime.js.map +1 -1
  63. package/dist/serve/entries/firestore.js +3 -3
  64. package/dist/serve/entries/firestore.js.map +1 -1
  65. package/dist/serve/entries/keepalive.js +1 -1
  66. package/dist/serve/entries/keepalive.js.map +1 -1
  67. package/dist/serve/entries/runtime.js +21 -14
  68. package/dist/serve/entries/runtime.js.map +1 -1
  69. package/dist/serve/entries/storage.js +1 -1
  70. package/dist/serve/entries/storage.js.map +1 -1
  71. package/dist/serve/entries/worker-runtime.js +1 -1
  72. package/dist/serve/entries/worker-runtime.js.map +1 -1
  73. package/dist/serve/init-payload.d.ts +4 -0
  74. package/dist/serve/init-payload.d.ts.map +1 -1
  75. package/dist/serve/namespace.d.ts +6 -0
  76. package/dist/serve/namespace.d.ts.map +1 -1
  77. package/dist/serve/namespace.js +36 -5
  78. package/dist/serve/namespace.js.map +1 -1
  79. package/dist/serve/rules.d.ts +3 -3
  80. package/dist/serve/rules.d.ts.map +1 -1
  81. package/dist/serve/rules.js +56 -25
  82. package/dist/serve/rules.js.map +1 -1
  83. package/dist/serve/runtime/chip.d.ts.map +1 -1
  84. package/dist/serve/runtime/chip.js +32 -1
  85. package/dist/serve/runtime/chip.js.map +1 -1
  86. package/dist/serve/runtime/manifest.d.ts +1 -1
  87. package/dist/serve/runtime/manifest.d.ts.map +1 -1
  88. package/dist/serve/runtime/manifest.js +1 -1
  89. package/dist/serve/runtime/manifest.js.map +1 -1
  90. package/dist/serve/runtime/status.d.ts.map +1 -1
  91. package/dist/serve/runtime/status.js +23 -0
  92. package/dist/serve/runtime/status.js.map +1 -1
  93. package/dist/serve/sandbox-session.d.ts +1 -0
  94. package/dist/serve/sandbox-session.d.ts.map +1 -1
  95. package/dist/serve/sandbox-session.js +10 -4
  96. package/dist/serve/sandbox-session.js.map +1 -1
  97. package/dist/serve/server.d.ts +7 -0
  98. package/dist/serve/server.d.ts.map +1 -1
  99. package/dist/serve/server.js +15 -1
  100. package/dist/serve/server.js.map +1 -1
  101. package/dist/serve/site-ui/404.html +1 -1
  102. package/dist/serve/site-ui/_astro/{RulesCodeEditor.CzwHdCi9.js → RulesCodeEditor.XtDmHOlN.js} +1 -1
  103. package/dist/serve/site-ui/_astro/_example_.B9DG9HLJ.css +1 -0
  104. package/dist/serve/site-ui/_astro/_slug_.Da5VLhW1.css +1 -0
  105. package/dist/serve/site-ui/_astro/_studio_.BnfYCKoI.css +1 -0
  106. package/dist/serve/site-ui/_astro/app.B52xr-DK.js +1 -0
  107. package/dist/serve/site-ui/_astro/app.DWBraPUw.js +12 -0
  108. package/dist/serve/site-ui/_astro/app.pMSnN6Qw.css +1 -0
  109. package/dist/serve/site-ui/_astro/chess-showcase.B72XYeoh.js +354 -0
  110. package/dist/serve/site-ui/_astro/{example-runtime.B0byNQOl.js → example-runtime.C25_lx6Z.js} +2 -26
  111. package/dist/serve/site-ui/_astro/index.Tb-31efc.css +1 -0
  112. package/dist/serve/site-ui/_astro/index.UkCBr-_0.css +1 -0
  113. package/dist/serve/site-ui/_astro/sandbox-controls.DEpnKg-O.js +1169 -0
  114. package/dist/serve/site-ui/_astro/seed.Co0yUJY5.js +20 -0
  115. package/dist/serve/site-ui/_astro/writes.rpjrFzmu.js +102 -0
  116. package/dist/serve/site-ui/auth/index.html +5 -3
  117. package/dist/serve/site-ui/david-east.jpg +0 -0
  118. package/dist/serve/site-ui/docs/_rhythm/index.html +6 -3
  119. package/dist/serve/site-ui/docs/_rhythm.md +1 -1
  120. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +45 -17
  121. package/dist/serve/site-ui/docs/agent/set-up-your-agent.md +20 -17
  122. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +6 -5
  123. package/dist/serve/site-ui/docs/agent/watch-and-review.md +1 -5
  124. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +8 -5
  125. package/dist/serve/site-ui/docs/agent/work-with-an-agent.md +4 -4
  126. package/dist/serve/site-ui/docs/ai-compat/index.html +5 -2
  127. package/dist/serve/site-ui/docs/api-reference/index.html +6 -2
  128. package/dist/serve/site-ui/docs/api-reference.md +1 -0
  129. package/dist/serve/site-ui/docs/app-compat/index.html +5 -2
  130. package/dist/serve/site-ui/docs/auth-compat/index.html +5 -2
  131. package/dist/serve/site-ui/docs/build/ai-logic/index.html +5 -2
  132. package/dist/serve/site-ui/docs/build/authentication/index.html +7 -4
  133. package/dist/serve/site-ui/docs/build/authentication.md +2 -2
  134. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +34 -53
  135. package/dist/serve/site-ui/docs/build/cloud-firestore.md +40 -36
  136. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +5 -2
  137. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +6 -3
  138. package/dist/serve/site-ui/docs/build/cloud-storage.md +1 -1
  139. package/dist/serve/site-ui/docs/build/realtime-database/index.html +9 -6
  140. package/dist/serve/site-ui/docs/build/realtime-database.md +4 -4
  141. package/dist/serve/site-ui/docs/conformance-scores/index.html +5 -2
  142. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +6 -3
  143. package/dist/serve/site-ui/docs/create-pyric-reference-api.md +1 -1
  144. package/dist/serve/site-ui/docs/database-compat/index.html +5 -2
  145. package/dist/serve/site-ui/docs/examples/chess/index.html +649 -250
  146. package/dist/serve/site-ui/docs/examples/chess.md +45 -16
  147. package/dist/serve/site-ui/docs/examples/index.html +6 -3
  148. package/dist/serve/site-ui/docs/firestore-compat/index.html +5 -2
  149. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +5 -2
  150. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +9 -6
  151. package/dist/serve/site-ui/docs/get-started/how-the-swap-works.md +5 -5
  152. package/dist/serve/site-ui/docs/get-started/nextjs/index.html +9 -6
  153. package/dist/serve/site-ui/docs/get-started/nextjs.md +4 -4
  154. package/dist/serve/site-ui/docs/get-started/start-building/index.html +41 -10
  155. package/dist/serve/site-ui/docs/get-started/start-building.md +21 -10
  156. package/dist/serve/site-ui/docs/get-started/vite/index.html +6 -3
  157. package/dist/serve/site-ui/docs/get-started/vite.md +1 -1
  158. package/dist/serve/site-ui/docs/index.json +203 -168
  159. package/dist/serve/site-ui/docs/messaging-compat/index.html +5 -2
  160. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +5 -2
  161. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +6 -4
  162. package/dist/serve/site-ui/docs/observe/see-whats-happening.md +2 -4
  163. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +9 -6
  164. package/dist/serve/site-ui/docs/observe/shape-your-data.md +4 -4
  165. package/dist/serve/site-ui/docs/overview/index.html +16 -10
  166. package/dist/serve/site-ui/docs/overview.md +19 -11
  167. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +5 -2
  168. package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +5 -2
  169. package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +5 -2
  170. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +8 -5
  171. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api.md +3 -3
  172. package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +5 -2
  173. package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +501 -0
  174. package/dist/serve/site-ui/docs/pyric-admin-reference-api.md +587 -0
  175. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +5 -2
  176. package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +5 -2
  177. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +5 -2
  178. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +5 -2
  179. package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +5 -2
  180. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +5 -2
  181. package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +5 -2
  182. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +5 -2
  183. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +5 -2
  184. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +5 -2
  185. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +5 -2
  186. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +5 -2
  187. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +5 -2
  188. package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +5 -2
  189. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +5 -2
  190. package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +5 -2
  191. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +5 -2
  192. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +6 -3
  193. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +1 -1
  194. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5 -2
  195. package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +5 -2
  196. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +5 -2
  197. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +166 -95
  198. package/dist/serve/site-ui/docs/pyric-database-reference-api.md +107 -1
  199. package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +5 -2
  200. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +10 -4
  201. package/dist/serve/site-ui/docs/pyric-messaging-reference-api.md +5 -2
  202. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +10 -4
  203. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api.md +5 -2
  204. package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +5 -2
  205. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +5 -2
  206. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +6 -3
  207. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api.md +2 -2
  208. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +5 -2
  209. package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +5 -2
  210. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +5 -2
  211. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +5 -2
  212. package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +5 -2
  213. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +5 -2
  214. package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +5 -2
  215. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +5 -2
  216. package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +5 -2
  217. package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +5 -2
  218. package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +5 -2
  219. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +5 -2
  220. package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +5 -2
  221. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +5 -2
  222. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +5 -2
  223. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +5 -2
  224. package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +5 -2
  225. package/dist/serve/site-ui/docs/reference/cli/index.html +153 -0
  226. package/dist/serve/site-ui/docs/reference/cli.md +114 -0
  227. package/dist/serve/site-ui/docs/rules-compat/index.html +5 -2
  228. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +5 -2
  229. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +5 -2
  230. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +6 -3
  231. package/dist/serve/site-ui/docs/secure/read-a-denial.md +1 -1
  232. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +5 -2
  233. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +5 -2
  234. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +5 -2
  235. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +5 -2
  236. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +5 -2
  237. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +7 -4
  238. package/dist/serve/site-ui/docs/ship/ship-to-production.md +2 -2
  239. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +9 -6
  240. package/dist/serve/site-ui/docs/ship/test-in-node.md +4 -4
  241. package/dist/serve/site-ui/docs/storage-compat/index.html +5 -2
  242. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +5 -2
  243. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +5 -2
  244. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +5 -2
  245. package/dist/serve/site-ui/docs/tutorial/index.html +10 -7
  246. package/dist/serve/site-ui/docs/tutorial.md +4 -4
  247. package/dist/serve/site-ui/examples/chess/index.html +4 -2
  248. package/dist/serve/site-ui/firestore/index.html +5 -3
  249. package/dist/serve/site-ui/hero-charcoal.jpg +0 -0
  250. package/dist/serve/site-ui/index.html +9 -7
  251. package/dist/serve/site-ui/llms.txt +4 -3
  252. package/dist/serve/site-ui/pyric-campfire-full.png +0 -0
  253. package/dist/serve/site-ui/pyric-campfire.png +0 -0
  254. package/dist/serve/site-ui/rtdb/index.html +5 -3
  255. package/dist/serve/site-ui/settings/index.html +5 -3
  256. package/dist/serve/site-ui/storage/index.html +5 -3
  257. package/dist/serve/site-ui/studio/index.html +13 -0
  258. package/dist/serve/site-ui/studio-routes.json +1 -1
  259. package/dist/serve/site-ui/traffic/index.html +5 -3
  260. package/dist/serve/studio/routes.d.ts +9 -0
  261. package/dist/serve/studio/routes.d.ts.map +1 -1
  262. package/dist/serve/studio/routes.js +47 -7
  263. package/dist/serve/studio/routes.js.map +1 -1
  264. package/dist/serve/vite-ai-config.d.ts.map +1 -1
  265. package/dist/serve/vite-ai-config.js +38 -8
  266. package/dist/serve/vite-ai-config.js.map +1 -1
  267. package/dist/serve/vite-module-swap.d.ts.map +1 -1
  268. package/dist/serve/vite-module-swap.js +0 -28
  269. package/dist/serve/vite-module-swap.js.map +1 -1
  270. package/dist/serve/vite-rules-source.d.ts.map +1 -1
  271. package/dist/serve/vite-rules-source.js +28 -7
  272. package/dist/serve/vite-rules-source.js.map +1 -1
  273. package/dist/serve/vite-sandbox-generation.d.ts +1 -1
  274. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
  275. package/dist/serve/vite-sandbox-generation.js +1 -1
  276. package/dist/serve/vite-sandbox-generation.js.map +1 -1
  277. package/dist/serve/worker/client/disconnect.js +1 -1
  278. package/dist/serve/worker/client/disconnect.js.map +1 -1
  279. package/dist/serve/worker/client/presence.d.ts.map +1 -1
  280. package/dist/serve/worker/client/presence.js +18 -5
  281. package/dist/serve/worker/client/presence.js.map +1 -1
  282. package/dist/serve/worker/host-ai.d.ts.map +1 -1
  283. package/dist/serve/worker/host-ai.js +15 -0
  284. package/dist/serve/worker/host-ai.js.map +1 -1
  285. package/dist/serve/worker/protocol.d.ts +4 -0
  286. package/dist/serve/worker/protocol.d.ts.map +1 -1
  287. package/dist/serve/worker/protocol.js.map +1 -1
  288. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  289. package/dist/serve/worker/serve-init.js +7 -1
  290. package/dist/serve/worker/serve-init.js.map +1 -1
  291. package/package.json +5 -5
  292. package/src/bridge/server/mcp-contract.ts +3 -0
  293. package/src/cli/cli.test.ts +2 -2
  294. package/src/cli/index.ts +51 -42
  295. package/src/cli/mcp-proxy.ts +10 -11
  296. package/src/cli/parse-args.ts +61 -15
  297. package/src/cli/pyric-config.ts +45 -0
  298. package/src/cli/rules.ts +31 -4
  299. package/src/cli/{dev-runner.ts → sandbox-runner.ts} +117 -72
  300. package/src/cli/serve.ts +115 -47
  301. package/src/cli/service-command-records/storage-rules-resolve.ts +4 -0
  302. package/src/cli/service-commands.generated.ts +2 -0
  303. package/src/cli/snapshot.ts +5 -5
  304. package/src/cli/verify.ts +1 -1
  305. package/src/functions-rtdb/development-runtime.ts +1 -1
  306. package/src/functions-rtdb/project.ts +8 -8
  307. package/src/next/guard.ts +1 -1
  308. package/src/remote/index.ts +9 -9
  309. package/src/serve/bundler.ts +10 -10
  310. package/src/serve/entries/ai.ts +27 -1
  311. package/src/serve/entries/auth-helper-dom.ts +1 -1
  312. package/src/serve/entries/auth-helper-runtime.ts +1 -1
  313. package/src/serve/entries/firestore.ts +3 -3
  314. package/src/serve/entries/keepalive.ts +1 -1
  315. package/src/serve/entries/runtime.ts +19 -14
  316. package/src/serve/entries/storage.ts +1 -1
  317. package/src/serve/entries/worker-runtime.ts +1 -1
  318. package/src/serve/init-payload.ts +4 -0
  319. package/src/serve/namespace.ts +44 -5
  320. package/src/serve/rules.ts +61 -26
  321. package/src/serve/runtime/chip.ts +38 -1
  322. package/src/serve/runtime/manifest.ts +1 -1
  323. package/src/serve/runtime/status.ts +24 -0
  324. package/src/serve/sandbox-session.ts +10 -4
  325. package/src/serve/server.ts +18 -1
  326. package/src/serve/studio/routes.ts +63 -7
  327. package/src/serve/vite-ai-config.ts +37 -7
  328. package/src/serve/vite-module-swap.ts +0 -28
  329. package/src/serve/vite-rules-source.ts +29 -7
  330. package/src/serve/vite-sandbox-generation.ts +1 -1
  331. package/src/serve/worker/client/disconnect.ts +1 -1
  332. package/src/serve/worker/client/presence.ts +25 -5
  333. package/src/serve/worker/host-ai.ts +15 -0
  334. package/src/serve/worker/protocol.ts +2 -1
  335. package/src/serve/worker/serve-init.ts +5 -1
  336. package/README.md.orig +0 -141
  337. package/dist/cli/dev-runner.d.ts.map +0 -1
  338. package/dist/cli/dev-runner.js.map +0 -1
  339. package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +0 -1
  340. package/dist/serve/site-ui/_astro/_slug_.C6QfVOxJ.css +0 -1
  341. package/dist/serve/site-ui/_astro/_slug_.CXh9yTP1.css +0 -1
  342. package/dist/serve/site-ui/_astro/_studio_.B6b_G1ev.css +0 -1
  343. package/dist/serve/site-ui/_astro/app.B7pBzz5N.js +0 -11
  344. package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +0 -1
  345. package/dist/serve/site-ui/_astro/app.boex5SnQ.js +0 -1
  346. package/dist/serve/site-ui/_astro/chess-showcase.DDqE-QGe.js +0 -1
  347. package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +0 -1
  348. package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +0 -354
  349. package/dist/serve/site-ui/_astro/index.uwPvjH_1.js +0 -1
  350. package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +0 -9
  351. package/dist/serve/site-ui/_astro/reads.Dh3z0fJy.js +0 -1
  352. package/dist/serve/site-ui/_astro/sandbox-controls.C2IqtoSw.js +0 -1252
  353. package/dist/serve/site-ui/_astro/seed.CCmj00su.js +0 -20
  354. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +0 -582
  355. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +0 -448
  356. package/dist/serve/site-ui/examples/firestore-first-write/index.html +0 -2
@@ -1 +0,0 @@
1
- import{j as e}from"./jsx-runtime.D_zvdyIk.js";import{r as d}from"./chess-v2.CFHmd3UL.js";import{r as c}from"./index.DBy5LfQW.js";function p({files:r,label:a}){const[l,i]=c.useState(r[0]?.id??""),[n,o]=c.useState(!1),t=r.find(s=>s.id===l)??r[0],u=async()=>{t&&(await navigator.clipboard.writeText(t.source),o(!0),window.setTimeout(()=>o(!1),1500))};return e.jsxs("section",{className:"source-explorer","aria-label":a,children:[e.jsxs("div",{className:"source-toolbar",children:[r.length===1?e.jsx("strong",{children:t?.label}):e.jsx("div",{className:"source-tabs",role:"tablist","aria-label":"Source files",children:r.map(s=>e.jsx("button",{type:"button",role:"tab","aria-selected":t?.id===s.id,onClick:()=>i(s.id),children:s.label},s.id))}),e.jsx("button",{type:"button",className:"copy-source",onClick:u,children:n?"Copied":"Copy source"})]}),e.jsx("pre",{role:r.length>1?"tabpanel":void 0,children:e.jsx("code",{children:t?.source??""})})]})}const x=[{id:"rules",label:"Security Rules",source:d}];function j(){return e.jsx(p,{files:x,label:"Chess Security Rules"})}export{j as ChessSourceExplorer};
@@ -1,354 +0,0 @@
1
- const e=`rules_version = '2+modules';
2
-
3
- import { isAuthenticated } from 'auth';
4
- import { validSimpleMove } from 'geometry';
5
- import { isPlaying, moveIncremented, participantsUnchanged } from 'state';
6
- import { isMyTurn, turnFlipped } from 'turns';
7
-
8
- service cloud.firestore {
9
- match /databases/{database}/documents {
10
- match /gameConfig/{id} { allow read: if true; allow write: if false; }
11
- match /chess-v2/{gameId} {
12
-
13
- function cfg() { return get(/databases/$(database)/documents/gameConfig/chessv2).data; }
14
-
15
- function isOwnPiece() {
16
- let piece = resource.data[request.resource.data.moveFrom];
17
- return (resource.data.currentTurn == 'host'
18
- && (piece == 'K' || piece == 'Q' || piece == 'R' || piece == 'B' || piece == 'N' || piece == 'P'))
19
- || (resource.data.currentTurn == 'guest'
20
- && (piece == 'k' || piece == 'q' || piece == 'r' || piece == 'b' || piece == 'n' || piece == 'p'));
21
- }
22
- function baseMoveChecks() {
23
- return isAuthenticated() && isPlaying()
24
- && isMyTurn() && turnFlipped() && isOwnPiece()
25
- && moveIncremented() && participantsUnchanged();
26
- }
27
-
28
- function validPieceMove() {
29
- let mf = request.resource.data.moveFrom;
30
- let mt = request.resource.data.moveTo;
31
- let piece = resource.data[mf];
32
- let p = cfg().paths[mf][mt];
33
- return validSimpleMove(cfg())
34
- && (cfg().pieceCategory[piece] == 'jump'
35
- || ((p.len < 1 || resource.data[p.c0] == '')
36
- && (p.len < 2 || resource.data[p.c1] == '')
37
- && (p.len < 3 || resource.data[p.c2] == '')
38
- && (p.len < 4 || resource.data[p.c3] == '')
39
- && (p.len < 5 || resource.data[p.c4] == '')
40
- && (p.len < 6 || resource.data[p.c5] == '')));
41
- }
42
- function validPawnForward() {
43
- let mf = request.resource.data.moveFrom;
44
- let mt = request.resource.data.moveTo;
45
- let piece = resource.data[mf];
46
- return (piece == 'P' || piece == 'p') && mt in cfg().pawnForward[piece][mf] && resource.data[mt] == '';
47
- }
48
- function validPawnDouble() {
49
- let mf = request.resource.data.moveFrom;
50
- let mt = request.resource.data.moveTo;
51
- let piece = resource.data[mf];
52
- return (piece == 'P' || piece == 'p')
53
- && mf in cfg().pawnDouble[piece]
54
- && cfg().pawnDouble[piece][mf].to == mt
55
- && resource.data[mt] == ''
56
- && resource.data[cfg().pawnDouble[piece][mf].between] == '';
57
- }
58
- function validPawnCapture() {
59
- let mf = request.resource.data.moveFrom;
60
- let mt = request.resource.data.moveTo;
61
- let piece = resource.data[mf];
62
- let target = resource.data[mt];
63
- return (piece == 'P' || piece == 'p')
64
- && mt in cfg().pawnAttacks[piece][mf]
65
- && target != ''
66
- && ((piece == 'P' && (target == 'k' || target == 'q' || target == 'r' || target == 'b' || target == 'n' || target == 'p'))
67
- || (piece == 'p' && (target == 'K' || target == 'Q' || target == 'R' || target == 'B' || target == 'N' || target == 'P')));
68
- }
69
- function validPromotion() {
70
- let mt = request.resource.data.moveTo;
71
- let piece = resource.data[request.resource.data.moveFrom];
72
- let pt = request.resource.data.promotedTo;
73
- return request.resource.data.moveType == 'promotion'
74
- && ((piece == 'P' && mt >= 'a8' && mt <= 'h8' && (pt == 'Q' || pt == 'R' || pt == 'B' || pt == 'N'))
75
- || (piece == 'p' && mt >= 'a1' && mt <= 'h1' && (pt == 'q' || pt == 'r' || pt == 'b' || pt == 'n')));
76
- }
77
- function pieceMovedCorrectly() {
78
- let mf = request.resource.data.moveFrom;
79
- let mt = request.resource.data.moveTo;
80
- let piece = resource.data[mf];
81
- return request.resource.data[mf] == ''
82
- && (request.resource.data.moveType != 'promotion'
83
- ? request.resource.data[mt] == piece
84
- : request.resource.data[mt] == request.resource.data.promotedTo)
85
- && resource.data[request.resource.data.movedPiece] == mf
86
- && request.resource.data[request.resource.data.movedPiece] == mt;
87
- }
88
- function captureValid() {
89
- let cp = request.resource.data.capturedPiece;
90
- return cp != ''
91
- && resource.data[cp] == request.resource.data.moveTo
92
- && request.resource.data[cp] == '';
93
- }
94
- function validEnPassant() {
95
- let mf = request.resource.data.moveFrom;
96
- let mt = request.resource.data.moveTo;
97
- let piece = resource.data[mf];
98
- return (piece == 'P' || piece == 'p')
99
- && mt in cfg().pawnAttacks[piece][mf]
100
- && resource.data[mt] == ''
101
- && resource.data.lastDoublePawn == mt;
102
- }
103
- function validCastleKingside() {
104
- let turn = resource.data.currentTurn;
105
- let c = cfg().castling;
106
- let castle = turn == 'host' ? c.wk : c.bk;
107
- let kingMoved = turn == 'host' ? resource.data.hp_K_moved : resource.data.gp_k_moved;
108
- let rookMoved = turn == 'host' ? resource.data.hp_R2_moved : resource.data.gp_r2_moved;
109
- return !kingMoved && !rookMoved
110
- && request.resource.data.moveFrom == castle.kingFrom
111
- && request.resource.data.moveTo == castle.kingTo
112
- && resource.data[castle.between[0]] == ''
113
- && resource.data[castle.between[1]] == '';
114
- }
115
- function validCastleQueenside() {
116
- let turn = resource.data.currentTurn;
117
- let c = cfg().castling;
118
- let castle = turn == 'host' ? c.wq : c.bq;
119
- let kingMoved = turn == 'host' ? resource.data.hp_K_moved : resource.data.gp_k_moved;
120
- let rookMoved = turn == 'host' ? resource.data.hp_R1_moved : resource.data.gp_r1_moved;
121
- return !kingMoved && !rookMoved
122
- && request.resource.data.moveFrom == castle.kingFrom
123
- && request.resource.data.moveTo == castle.kingTo
124
- && resource.data[castle.between[0]] == ''
125
- && resource.data[castle.between[1]] == ''
126
- && resource.data[castle.between[2]] == '';
127
- }
128
-
129
- function hPC(cfg) {
130
- let b = request.resource.data;
131
- let ks = b.hp_K;
132
- return (b.gp_p1 != '' && b[b.gp_p1] != '' && ks in cfg.pawnAttacks[b[b.gp_p1]][b.gp_p1])
133
- || (b.gp_p2 != '' && b[b.gp_p2] != '' && ks in cfg.pawnAttacks[b[b.gp_p2]][b.gp_p2])
134
- || (b.gp_p3 != '' && b[b.gp_p3] != '' && ks in cfg.pawnAttacks[b[b.gp_p3]][b.gp_p3])
135
- || (b.gp_p4 != '' && b[b.gp_p4] != '' && ks in cfg.pawnAttacks[b[b.gp_p4]][b.gp_p4])
136
- || (b.gp_p5 != '' && b[b.gp_p5] != '' && ks in cfg.pawnAttacks[b[b.gp_p5]][b.gp_p5])
137
- || (b.gp_p6 != '' && b[b.gp_p6] != '' && ks in cfg.pawnAttacks[b[b.gp_p6]][b.gp_p6])
138
- || (b.gp_p7 != '' && b[b.gp_p7] != '' && ks in cfg.pawnAttacks[b[b.gp_p7]][b.gp_p7])
139
- || (b.gp_p8 != '' && b[b.gp_p8] != '' && ks in cfg.pawnAttacks[b[b.gp_p8]][b.gp_p8]);
140
- }
141
- function hMC(cfg) {
142
- let b = request.resource.data;
143
- let ks = b.hp_K;
144
- return (b.gp_n1 != '' && b[b.gp_n1] != '' && ks in cfg.moves[b[b.gp_n1]][b.gp_n1])
145
- || (b.gp_n2 != '' && b[b.gp_n2] != '' && ks in cfg.moves[b[b.gp_n2]][b.gp_n2])
146
- || (b.gp_k != '' && b[b.gp_k] != '' && ks in cfg.moves[b[b.gp_k]][b.gp_k]);
147
- }
148
- function hSC(cfg) {
149
- let b = request.resource.data;
150
- let ks = b.hp_K;
151
- return (b.gp_q != '' && b[b.gp_q] != '' && ks in cfg.moves[b[b.gp_q]][b.gp_q]
152
- && (cfg.paths[b.gp_q][ks].len < 1 || b[cfg.paths[b.gp_q][ks].c0] == '')
153
- && (cfg.paths[b.gp_q][ks].len < 2 || b[cfg.paths[b.gp_q][ks].c1] == '')
154
- && (cfg.paths[b.gp_q][ks].len < 3 || b[cfg.paths[b.gp_q][ks].c2] == '')
155
- && (cfg.paths[b.gp_q][ks].len < 4 || b[cfg.paths[b.gp_q][ks].c3] == '')
156
- && (cfg.paths[b.gp_q][ks].len < 5 || b[cfg.paths[b.gp_q][ks].c4] == ''))
157
- || (b.gp_r1 != '' && b[b.gp_r1] != '' && ks in cfg.moves[b[b.gp_r1]][b.gp_r1]
158
- && (cfg.paths[b.gp_r1][ks].len < 1 || b[cfg.paths[b.gp_r1][ks].c0] == '')
159
- && (cfg.paths[b.gp_r1][ks].len < 2 || b[cfg.paths[b.gp_r1][ks].c1] == '')
160
- && (cfg.paths[b.gp_r1][ks].len < 3 || b[cfg.paths[b.gp_r1][ks].c2] == '')
161
- && (cfg.paths[b.gp_r1][ks].len < 4 || b[cfg.paths[b.gp_r1][ks].c3] == '')
162
- && (cfg.paths[b.gp_r1][ks].len < 5 || b[cfg.paths[b.gp_r1][ks].c4] == ''))
163
- || (b.gp_r2 != '' && b[b.gp_r2] != '' && ks in cfg.moves[b[b.gp_r2]][b.gp_r2]
164
- && (cfg.paths[b.gp_r2][ks].len < 1 || b[cfg.paths[b.gp_r2][ks].c0] == '')
165
- && (cfg.paths[b.gp_r2][ks].len < 2 || b[cfg.paths[b.gp_r2][ks].c1] == '')
166
- && (cfg.paths[b.gp_r2][ks].len < 3 || b[cfg.paths[b.gp_r2][ks].c2] == '')
167
- && (cfg.paths[b.gp_r2][ks].len < 4 || b[cfg.paths[b.gp_r2][ks].c3] == '')
168
- && (cfg.paths[b.gp_r2][ks].len < 5 || b[cfg.paths[b.gp_r2][ks].c4] == ''))
169
- || (b.gp_b1 != '' && b[b.gp_b1] != '' && ks in cfg.moves[b[b.gp_b1]][b.gp_b1]
170
- && (cfg.paths[b.gp_b1][ks].len < 1 || b[cfg.paths[b.gp_b1][ks].c0] == '')
171
- && (cfg.paths[b.gp_b1][ks].len < 2 || b[cfg.paths[b.gp_b1][ks].c1] == '')
172
- && (cfg.paths[b.gp_b1][ks].len < 3 || b[cfg.paths[b.gp_b1][ks].c2] == '')
173
- && (cfg.paths[b.gp_b1][ks].len < 4 || b[cfg.paths[b.gp_b1][ks].c3] == '')
174
- && (cfg.paths[b.gp_b1][ks].len < 5 || b[cfg.paths[b.gp_b1][ks].c4] == ''))
175
- || (b.gp_b2 != '' && b[b.gp_b2] != '' && ks in cfg.moves[b[b.gp_b2]][b.gp_b2]
176
- && (cfg.paths[b.gp_b2][ks].len < 1 || b[cfg.paths[b.gp_b2][ks].c0] == '')
177
- && (cfg.paths[b.gp_b2][ks].len < 2 || b[cfg.paths[b.gp_b2][ks].c1] == '')
178
- && (cfg.paths[b.gp_b2][ks].len < 3 || b[cfg.paths[b.gp_b2][ks].c2] == '')
179
- && (cfg.paths[b.gp_b2][ks].len < 4 || b[cfg.paths[b.gp_b2][ks].c3] == '')
180
- && (cfg.paths[b.gp_b2][ks].len < 5 || b[cfg.paths[b.gp_b2][ks].c4] == ''));
181
- }
182
- function gPC(cfg) {
183
- let b = request.resource.data;
184
- let ks = b.gp_k;
185
- return (b.hp_P1 != '' && b[b.hp_P1] != '' && ks in cfg.pawnAttacks[b[b.hp_P1]][b.hp_P1])
186
- || (b.hp_P2 != '' && b[b.hp_P2] != '' && ks in cfg.pawnAttacks[b[b.hp_P2]][b.hp_P2])
187
- || (b.hp_P3 != '' && b[b.hp_P3] != '' && ks in cfg.pawnAttacks[b[b.hp_P3]][b.hp_P3])
188
- || (b.hp_P4 != '' && b[b.hp_P4] != '' && ks in cfg.pawnAttacks[b[b.hp_P4]][b.hp_P4])
189
- || (b.hp_P5 != '' && b[b.hp_P5] != '' && ks in cfg.pawnAttacks[b[b.hp_P5]][b.hp_P5])
190
- || (b.hp_P6 != '' && b[b.hp_P6] != '' && ks in cfg.pawnAttacks[b[b.hp_P6]][b.hp_P6])
191
- || (b.hp_P7 != '' && b[b.hp_P7] != '' && ks in cfg.pawnAttacks[b[b.hp_P7]][b.hp_P7])
192
- || (b.hp_P8 != '' && b[b.hp_P8] != '' && ks in cfg.pawnAttacks[b[b.hp_P8]][b.hp_P8]);
193
- }
194
- function gMC(cfg) {
195
- let b = request.resource.data;
196
- let ks = b.gp_k;
197
- return (b.hp_N1 != '' && b[b.hp_N1] != '' && ks in cfg.moves[b[b.hp_N1]][b.hp_N1])
198
- || (b.hp_N2 != '' && b[b.hp_N2] != '' && ks in cfg.moves[b[b.hp_N2]][b.hp_N2])
199
- || (b.hp_K != '' && b[b.hp_K] != '' && ks in cfg.moves[b[b.hp_K]][b.hp_K]);
200
- }
201
- function gSC(cfg) {
202
- let b = request.resource.data;
203
- let ks = b.gp_k;
204
- return (b.hp_Q != '' && b[b.hp_Q] != '' && ks in cfg.moves[b[b.hp_Q]][b.hp_Q]
205
- && (cfg.paths[b.hp_Q][ks].len < 1 || b[cfg.paths[b.hp_Q][ks].c0] == '')
206
- && (cfg.paths[b.hp_Q][ks].len < 2 || b[cfg.paths[b.hp_Q][ks].c1] == '')
207
- && (cfg.paths[b.hp_Q][ks].len < 3 || b[cfg.paths[b.hp_Q][ks].c2] == '')
208
- && (cfg.paths[b.hp_Q][ks].len < 4 || b[cfg.paths[b.hp_Q][ks].c3] == '')
209
- && (cfg.paths[b.hp_Q][ks].len < 5 || b[cfg.paths[b.hp_Q][ks].c4] == ''))
210
- || (b.hp_R1 != '' && b[b.hp_R1] != '' && ks in cfg.moves[b[b.hp_R1]][b.hp_R1]
211
- && (cfg.paths[b.hp_R1][ks].len < 1 || b[cfg.paths[b.hp_R1][ks].c0] == '')
212
- && (cfg.paths[b.hp_R1][ks].len < 2 || b[cfg.paths[b.hp_R1][ks].c1] == '')
213
- && (cfg.paths[b.hp_R1][ks].len < 3 || b[cfg.paths[b.hp_R1][ks].c2] == '')
214
- && (cfg.paths[b.hp_R1][ks].len < 4 || b[cfg.paths[b.hp_R1][ks].c3] == '')
215
- && (cfg.paths[b.hp_R1][ks].len < 5 || b[cfg.paths[b.hp_R1][ks].c4] == ''))
216
- || (b.hp_R2 != '' && b[b.hp_R2] != '' && ks in cfg.moves[b[b.hp_R2]][b.hp_R2]
217
- && (cfg.paths[b.hp_R2][ks].len < 1 || b[cfg.paths[b.hp_R2][ks].c0] == '')
218
- && (cfg.paths[b.hp_R2][ks].len < 2 || b[cfg.paths[b.hp_R2][ks].c1] == '')
219
- && (cfg.paths[b.hp_R2][ks].len < 3 || b[cfg.paths[b.hp_R2][ks].c2] == '')
220
- && (cfg.paths[b.hp_R2][ks].len < 4 || b[cfg.paths[b.hp_R2][ks].c3] == '')
221
- && (cfg.paths[b.hp_R2][ks].len < 5 || b[cfg.paths[b.hp_R2][ks].c4] == ''))
222
- || (b.hp_B1 != '' && b[b.hp_B1] != '' && ks in cfg.moves[b[b.hp_B1]][b.hp_B1]
223
- && (cfg.paths[b.hp_B1][ks].len < 1 || b[cfg.paths[b.hp_B1][ks].c0] == '')
224
- && (cfg.paths[b.hp_B1][ks].len < 2 || b[cfg.paths[b.hp_B1][ks].c1] == '')
225
- && (cfg.paths[b.hp_B1][ks].len < 3 || b[cfg.paths[b.hp_B1][ks].c2] == '')
226
- && (cfg.paths[b.hp_B1][ks].len < 4 || b[cfg.paths[b.hp_B1][ks].c3] == '')
227
- && (cfg.paths[b.hp_B1][ks].len < 5 || b[cfg.paths[b.hp_B1][ks].c4] == ''))
228
- || (b.hp_B2 != '' && b[b.hp_B2] != '' && ks in cfg.moves[b[b.hp_B2]][b.hp_B2]
229
- && (cfg.paths[b.hp_B2][ks].len < 1 || b[cfg.paths[b.hp_B2][ks].c0] == '')
230
- && (cfg.paths[b.hp_B2][ks].len < 2 || b[cfg.paths[b.hp_B2][ks].c1] == '')
231
- && (cfg.paths[b.hp_B2][ks].len < 3 || b[cfg.paths[b.hp_B2][ks].c2] == '')
232
- && (cfg.paths[b.hp_B2][ks].len < 4 || b[cfg.paths[b.hp_B2][ks].c3] == '')
233
- && (cfg.paths[b.hp_B2][ks].len < 5 || b[cfg.paths[b.hp_B2][ks].c4] == ''));
234
- }
235
-
236
- function myKingSafe() {
237
- let c = cfg();
238
- return (resource.data.currentTurn == 'host' && !hPC(c) && !hMC(c) && !hSC(c))
239
- || (resource.data.currentTurn == 'guest' && !gPC(c) && !gMC(c) && !gSC(c));
240
- }
241
- function opponentInCheck() {
242
- let c = cfg();
243
- return (resource.data.currentTurn == 'host' && (gPC(c) || gMC(c) || gSC(c)))
244
- || (resource.data.currentTurn == 'guest' && (hPC(c) || hMC(c) || hSC(c)));
245
- }
246
-
247
- // ═══ Lobby ═══
248
- allow read: if request.auth != null;
249
- allow create: if request.auth != null
250
- && request.resource.data.host == request.auth.uid
251
- && request.resource.data.status == 'waiting'
252
- && d.a1 == 'R'
253
- && d.a2 == 'P'
254
- && d.a7 == 'p'
255
- && d.a8 == 'r'
256
- && d.b1 == 'N'
257
- && d.b2 == 'P'
258
- && d.b7 == 'p'
259
- && d.b8 == 'n'
260
- && d.c1 == 'B'
261
- && d.c2 == 'P'
262
- && d.c7 == 'p'
263
- && d.c8 == 'b'
264
- && d.d1 == 'Q'
265
- && d.d2 == 'P'
266
- && d.d7 == 'p'
267
- && d.d8 == 'q'
268
- && d.e1 == 'K'
269
- && d.e2 == 'P'
270
- && d.e7 == 'p'
271
- && d.e8 == 'k'
272
- && d.f1 == 'B'
273
- && d.f2 == 'P'
274
- && d.f7 == 'p'
275
- && d.f8 == 'b'
276
- && d.g1 == 'N'
277
- && d.g2 == 'P'
278
- && d.g7 == 'p'
279
- && d.g8 == 'n'
280
- && d.h1 == 'R'
281
- && d.h2 == 'P'
282
- && d.h7 == 'p'
283
- && d.h8 == 'r';
284
- allow update: if request.auth != null
285
- && resource.data.status == 'waiting'
286
- && resource.data.guest == ''
287
- && request.resource.data.guest == request.auth.uid
288
- && request.auth.uid != resource.data.host
289
- && request.resource.data.status == 'playing'
290
- && request.resource.data.diff(resource.data).affectedKeys().hasOnly(['guest', 'status']);
291
- allow delete: if request.auth != null
292
- && resource.data.status == 'waiting'
293
- && request.auth.uid == resource.data.host;
294
-
295
- // ═══ UNIQUE moveType gates — each rule category has its own ═══
296
- // Pawn forward
297
- allow update: if request.resource.data.moveType == 'pawn_forward'
298
- && request.resource.data.capturedPiece == '' && request.resource.data.status == 'playing'
299
- && baseMoveChecks() && validPawnForward() && request.resource.data.promotedTo == ''
300
- && pieceMovedCorrectly() && myKingSafe();
301
- // Pawn capture
302
- allow update: if request.resource.data.moveType == 'pawn_capture'
303
- && request.resource.data.capturedPiece != '' && request.resource.data.status == 'playing'
304
- && baseMoveChecks() && validPawnCapture() && request.resource.data.promotedTo == ''
305
- && captureValid() && pieceMovedCorrectly() && myKingSafe();
306
- // Pawn double
307
- allow update: if request.resource.data.moveType == 'double_pawn'
308
- && request.resource.data.capturedPiece == '' && request.resource.data.status == 'playing'
309
- && baseMoveChecks() && validPawnDouble() && pieceMovedCorrectly() && myKingSafe();
310
- // Promotion (forward)
311
- allow update: if request.resource.data.moveType == 'promotion'
312
- && request.resource.data.capturedPiece == '' && request.resource.data.status == 'playing'
313
- && baseMoveChecks() && validPawnForward() && validPromotion() && pieceMovedCorrectly() && myKingSafe();
314
- // Promotion (capture)
315
- allow update: if request.resource.data.moveType == 'promotion_capture'
316
- && request.resource.data.capturedPiece != '' && request.resource.data.status == 'playing'
317
- && baseMoveChecks() && validPawnCapture() && validPromotion() && captureValid() && pieceMovedCorrectly() && myKingSafe();
318
- // En passant
319
- allow update: if request.resource.data.moveType == 'en_passant'
320
- && request.resource.data.status == 'playing'
321
- && baseMoveChecks() && validEnPassant()
322
- && request.resource.data.capturedPiece != '' && request.resource.data[request.resource.data.capturedPiece] == ''
323
- && pieceMovedCorrectly() && myKingSafe();
324
- // Standard piece move (non-pawn)
325
- allow update: if request.resource.data.moveType == 'normal'
326
- && request.resource.data.capturedPiece == '' && request.resource.data.status == 'playing'
327
- && baseMoveChecks() && validPieceMove() && resource.data[request.resource.data.moveTo] == ''
328
- && pieceMovedCorrectly() && myKingSafe();
329
- // Standard piece capture
330
- allow update: if request.resource.data.moveType == 'capture'
331
- && request.resource.data.capturedPiece != '' && request.resource.data.status == 'playing'
332
- && baseMoveChecks() && validPieceMove() && captureValid() && pieceMovedCorrectly() && myKingSafe();
333
- // Castling kingside
334
- allow update: if request.resource.data.moveType == 'castle_k'
335
- && request.resource.data.status == 'playing'
336
- && baseMoveChecks() && validCastleKingside() && myKingSafe();
337
- // Castling queenside
338
- allow update: if request.resource.data.moveType == 'castle_q'
339
- && request.resource.data.status == 'playing'
340
- && baseMoveChecks() && validCastleQueenside() && myKingSafe();
341
- // Draw
342
- allow update: if request.resource.data.moveType == 'draw'
343
- && request.resource.data.status == 'draw'
344
- && resource.data.status == 'playing' && isMyTurn();
345
- // Resign
346
- allow update: if request.resource.data.moveType == 'resign'
347
- && request.resource.data.status == 'resigned'
348
- && resource.data.status == 'playing'
349
- && request.auth != null
350
- && (request.auth.uid == resource.data.host || request.auth.uid == resource.data.guest);
351
- }
352
- }
353
- }
354
- `;export{e as r};
@@ -1 +0,0 @@
1
- import{e as o}from"./sandbox-controls.C2IqtoSw.js";function t(i={}){return o()}export{t as i};
@@ -1,9 +0,0 @@
1
- var s={exports:{}},e={};/**
2
- * @license React
3
- * react-jsx-runtime.production.js
4
- *
5
- * Copyright (c) Meta Platforms, Inc. and affiliates.
6
- *
7
- * This source code is licensed under the MIT license found in the
8
- * LICENSE file in the root directory of this source tree.
9
- */var o;function d(){if(o)return e;o=1;var R=Symbol.for("react.transitional.element"),a=Symbol.for("react.fragment");function i(v,r,t){var u=null;if(t!==void 0&&(u=""+t),r.key!==void 0&&(u=""+r.key),"key"in r){t={};for(var n in r)n!=="key"&&(t[n]=r[n])}else t=r;return r=t.ref,{$$typeof:R,type:v,key:u,ref:r!==void 0?r:null,props:t}}return e.Fragment=a,e.jsx=i,e.jsxs=i,e}var x;function l(){return x||(x=1,s.exports=d()),s.exports}var p=l();export{p as j};
@@ -1 +0,0 @@
1
- import{A as h,ac as u,ad as g,p as y,ae as m,w as q,af as j,C,z as M,B as b,ag as W,t as D,ah as k,ai as z}from"./sandbox-controls.C2IqtoSw.js";const O=new WeakMap;function B(e){return O.get(e)?.raw??e}const E=new WeakMap,x=new WeakMap;function l(e,a,t,n,r){O.set(e,{target:t,path:a.ref.path,kind:r,converter:n,raw:a})}function F(e,a){const t=b(e),n=b(a);return t.isStructurallyEqual?.(n)??t===n}function I(e,a,t,n){const r=e,s=(x.get(r)??[]).filter(c=>c.query.deref()!==void 0),o=s.find(c=>{const i=c.query.deref();return i!==void 0&&F(i,a)});if(o!==void 0){const c=T(o.docs,t)&&o.metadata.fromCache===n.fromCache&&o.metadata.hasPendingWrites===n.hasPendingWrites;return o.docs=t,o.metadata=n,c?"settled":"initial"}return s.push({query:new WeakRef(a),docs:t,metadata:n}),x.set(r,s),"initial"}function T(e,a){return e.length===a.length&&e.every((t,n)=>{const r=a[n];return t.path===r.path&&W(t.data,r.data)})}function w(e,a,t,n,r){const s=a,o=d=>({path:d.ref?.path??"",data:M(d.data?.(),t)}),c=Object.freeze((s.docs??[]).map(o)),i=Object.freeze((s.docChanges?.()??[]).map(d=>({...o(d.doc??{}),type:d.type??"",oldIndex:d.oldIndex??-1,newIndex:d.newIndex??-1}))),f=Object.freeze({fromCache:s.metadata?.fromCache===!0,hasPendingWrites:s.metadata?.hasPendingWrites===!0});E.set(e,{target:t,query:n,converter:y(n)??null,source:r,...r==="read"?{readPhase:I(t,n,c,f)}:{},metadata:f,docs:c,changes:i})}function P(e,a){const t=e,n=t.data.bind(e);return Object.defineProperty(t,"data",{value:()=>g(n()),configurable:!0,writable:!0}),a&&t.ref?.path&&Object.defineProperty(t,"metadata",{value:h(a).snapshotMetadata(t.ref.path),configurable:!0}),e}function v(e,a,t,n){const r={id:e.id,ref:e.ref,exists:e.exists,metadata:h(t).snapshotMetadata(e.ref.path),data:()=>{if(!(typeof e.exists=="function"?e.exists():e.exists))return;const o=g(e.data()),c={id:e.id,ref:e.ref,exists:!0,metadata:h(t).snapshotMetadata(e.ref.path),data:()=>o};return a.fromFirestore(c)}};return u(r,t),u(e.ref,t),p(e.ref,t),l(r,e,t,a,n),r}function Q(e,a){if(!e||typeof e!="object")return e;u(e,a);const t=e;if(t.ref&&(u(t.ref,a),p(t.ref,a)),S(t),Array.isArray(t.docs))for(const n of t.docs)n&&(u(n,a),l(n,n,a,null,"query-child")),n?.ref&&(u(n.ref,a),p(n.ref,a)),n&&S(n);else t.ref&&l(e,e,a,null,"document");return e}function p(e,a){if(typeof e.path!="string"||e.path.length===0)return;const t=e.path;try{const n=m.get(e),r=n??q(a).doc(t);n===void 0&&m.set(e,r),j(e,t,a,r),a.kind==="sandbox-live"&&C.set(r,s=>s.doc(t))}catch{}}function S(e){const a=e.exists;if(typeof a=="function")return;const t=a===!0;try{Object.defineProperty(e,"exists",{value:()=>t,writable:!0,configurable:!0,enumerable:!0})}catch{}}async function U(e){const a=D(e),t=h(a);t.markStarted();const n=y(e),r=await k(a,e).get();return t.cachePath(e.path),n?v(r,n,a,"document"):(Q(r,a),P(r,a))}async function K(e){const a=D(e),t=h(a);t.markStarted();const n=y(e),r=await z(a,e).get();if(t.cacheQuery(e),n){const o=n,c=r.docs.map(f=>v(f,o,a,"query-child")),i=u({size:c.length,empty:c.length===0,docs:c,metadata:t.querySnapshotMetadata()},a);for(const f of c)t.cachePath(f.ref.path);return w(i,r,a,e,"read"),i}Q(r,a);const s=r.docs;for(const o of s)t.cachePath(o.ref.path),P(o,a);return Object.defineProperty(r,"metadata",{value:t.querySnapshotMetadata(),configurable:!0}),w(r,r,a,e,"read"),r}export{w as a,K as b,U as g,B as r,Q as t,P as w};