@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,5 +1,8 @@
1
- <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>API reference: pyric/database · Pyric Studio</title><meta name="description" content="Published declarations for pyric/database."><link rel="icon" type="image/svg+xml" href="/__pyric/ui/pyric-logo.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.CXh9yTP1.css">
2
- <link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.C6QfVOxJ.css"></head> <body> <header class="studio__bar" data-astro-cid-mw7aashj> <div class="studio__bar-inner" data-astro-cid-mw7aashj> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio" data-astro-cid-mw7aashj>Pyric</a> <nav class="studio__nav" aria-label="Studio tabs" data-astro-cid-mw7aashj> <a class="studio__nav-tab" href="/__pyric/ui/" data-astro-cid-mw7aashj> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore" data-astro-cid-mw7aashj> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth" data-astro-cid-mw7aashj> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb" data-astro-cid-mw7aashj> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage" data-astro-cid-mw7aashj> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic" data-astro-cid-mw7aashj> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings" data-astro-cid-mw7aashj> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page" data-astro-cid-mw7aashj> Docs </a> </nav> </div> </header> <div class="docs-shell" data-astro-cid-mw7aashj> <details class="docs-nav-drawer" data-astro-cid-mw7aashj> <summary data-astro-cid-mw7aashj>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <details class="docs-nav-group"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/vite/"> Vite </a> </li><li> <a href="/__pyric/ui/docs/get-started/nextjs/"> Next.js </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/storage-rules-stdlib-research/"> Storage Rules modules: evidence and design </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/" aria-current="page"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-next-reference-api/"> @pyric/cli/next </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-app-bridge-reference-api/"> @pyric/cli/register/app-bridge </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <details class="docs-nav-group" id="nav-group-overview"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/vite/"> Vite </a> </li><li> <a href="/__pyric/ui/docs/get-started/nextjs/"> Next.js </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-secure-debug-examples"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-trust"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/storage-rules-stdlib-research/"> Storage Rules modules: evidence and design </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/" aria-current="page"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-next-reference-api/"> @pyric/cli/next </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-app-bridge-reference-api/"> @pyric/cli/register/app-bridge </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main" data-astro-cid-mw7aashj> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>pyric</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">pyric/database</span> </li> </ol> </nav> <header class="api-reference-header" data-astro-cid-mw7aashj> <p class="api-reference-kicker" data-astro-cid-mw7aashj>API reference</p> <h1 data-astro-cid-mw7aashj><code data-astro-cid-mw7aashj>pyric/database</code></h1> <p class="api-reference-meta" data-astro-cid-mw7aashj> 67 published symbols from <code data-astro-cid-mw7aashj>pyric</code> </p> <p class="api-reference-source" data-astro-cid-mw7aashj>
1
+ <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"><title>API reference: pyric/database · Pyric Studio</title><meta name="description" content="Published declarations for pyric/database."><link rel="icon" type="image/svg+xml" href="/__pyric/ui/pyric-logo.svg"><link rel="preconnect" href="https://use.typekit.net" crossorigin><link rel="stylesheet" href="https://use.typekit.net/jwb3ycu.css"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/index.UkCBr-_0.css">
2
+ <link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.Da5VLhW1.css">
3
+ <style>:root{--rhythm-para: .875rem;--rhythm-group: 1.5rem;--rhythm-subsection: 2.25rem;--rhythm-section: 3.25rem;--rhythm-list: calc(var(--rhythm-para) * .75)}.prose>*,.prose blockquote>*,.prose li>*,.prose .compat-stat>*{margin-block:0}.prose>*+*{margin-block-start:var(--rhythm-group)}.prose>*+h2{margin-block-start:var(--rhythm-section)}.prose>*+h3,.prose>*+h4{margin-block-start:var(--rhythm-subsection)}.prose>h1+*,.prose>h2+*,.prose>h3+*,.prose>h4+*{margin-block-start:var(--rhythm-para)}.prose>p+p{margin-block-start:var(--rhythm-para)}.prose>p+ul,.prose>p+ol,.prose>p+blockquote{margin-block-start:var(--rhythm-para)}.prose li+li{margin-block-start:var(--rhythm-list)}.prose li>ul,.prose li>ol{margin-block-start:var(--rhythm-list)}.prose li>*+*,.prose blockquote>*+*{margin-block-start:var(--rhythm-para)}
4
+ html{scrollbar-gutter:stable}
5
+ </style></head> <body> <header class="studio__chrome"> <div class="studio__bar"> <div class="studio__chrome-inner"> <nav class="studio__nav" aria-label="Site"> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric">pyric</a> <a class="studio__nav-tab" href="/__pyric/ui/"> Home </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page"> Docs </a><a class="studio__nav-tab" href="/__pyric/ui/studio"> Studio </a> </nav> </div> </div> </header> <div class="docs-shell" data-astro-cid-mw7aashj> <details class="docs-nav-drawer" data-astro-cid-mw7aashj> <summary data-astro-cid-mw7aashj>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <details class="docs-nav-group"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/vite/"> Vite </a> </li><li> <a href="/__pyric/ui/docs/get-started/nextjs/"> Next.js </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/" aria-current="page"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-reference-api/"> pyric-admin </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-next-reference-api/"> @pyric/cli/next </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-app-bridge-reference-api/"> @pyric/cli/register/app-bridge </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/reference/cli/"> CLI </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <details class="docs-nav-group" id="nav-group-overview"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/vite/"> Vite </a> </li><li> <a href="/__pyric/ui/docs/get-started/nextjs/"> Next.js </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-secure-debug-examples"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-trust"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Conformance scores </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/" aria-current="page"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-reference-api/"> pyric-admin </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-next-reference-api/"> @pyric/cli/next </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-app-bridge-reference-api/"> @pyric/cli/register/app-bridge </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/reference/cli/"> CLI </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main" data-astro-cid-mw7aashj> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>pyric</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">pyric/database</span> </li> </ol> </nav> <header class="api-reference-header" data-astro-cid-mw7aashj> <p class="api-reference-kicker" data-astro-cid-mw7aashj>API reference</p> <h1 data-astro-cid-mw7aashj><code data-astro-cid-mw7aashj>pyric/database</code></h1> <p class="api-reference-meta" data-astro-cid-mw7aashj> 69 published symbols from <code data-astro-cid-mw7aashj>pyric</code> </p> <p class="api-reference-source" data-astro-cid-mw7aashj>
3
6
  Generated from the TypeScript declarations shipped at this import path.
4
7
  </p> <a class="api-reference-evidence" href="/__pyric/ui/docs/database-compat/" data-astro-cid-mw7aashj>
5
8
  Check behavioral conformance
@@ -1151,6 +1154,26 @@ nodes don’t exist”. The crawl + listener layers count on this so
1151
1154
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> CONSTRAINT_SYMBOL</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unique</span><span style="color:#E5C07B"> symbol</span><span style="color:#ABB2BF">;</span></span></code></pre>
1152
1155
  <p>Hidden brand on every QueryConstraint.</p>
1153
1156
  <hr>
1157
+ <p><a id="default_deny_rtdb_rules"></a></p>
1158
+ <h3 id="default_deny_rtdb_rules">DEFAULT_DENY_RTDB_RULES</h3>
1159
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> DEFAULT_DENY_RTDB_RULES</span><span style="color:#ABB2BF">: {</span></span>
1160
+ <span class="line"><span style="color:#E06C75"> rules</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>;</span></span>
1161
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1162
+ <h4 id="type-declaration-1">Type Declaration</h4>
1163
+ <p><a id="rules"></a></p>
1164
+ <h5 id="rules">rules</h5>
1165
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">rules</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span></code></pre>
1166
+ <hr>
1167
+ <p><a id="default_open_rtdb_rules"></a></p>
1168
+ <h3 id="default_open_rtdb_rules">DEFAULT_OPEN_RTDB_RULES</h3>
1169
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> DEFAULT_OPEN_RTDB_RULES</span><span style="color:#ABB2BF">: {</span></span>
1170
+ <span class="line"><span style="color:#E06C75"> rules</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>;</span></span>
1171
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1172
+ <h4 id="type-declaration-2">Type Declaration</h4>
1173
+ <p><a id="rules-1"></a></p>
1174
+ <h5 id="rules-1">rules</h5>
1175
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">rules</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span></code></pre>
1176
+ <hr>
1154
1177
  <p><a id="query_symbol-3"></a></p>
1155
1178
  <h3 id="query_symbol">QUERY_SYMBOL</h3>
1156
1179
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> QUERY_SYMBOL</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unique</span><span style="color:#E5C07B"> symbol</span><span style="color:#ABB2BF">;</span></span></code></pre>
@@ -1159,11 +1182,32 @@ nodes don’t exist”. The crawl + listener layers count on this so
1159
1182
  <p><a id="sandbox"></a></p>
1160
1183
  <h3 id="sandbox">sandbox</h3>
1161
1184
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">const</span><span style="color:#E5C07B"> sandbox</span><span style="color:#ABB2BF">: {</span></span>
1185
+ <span class="line"><span style="color:#E06C75"> DEFAULT_DENY_RULES</span><span style="color:#ABB2BF">: {</span></span>
1186
+ <span class="line"><span style="color:#E06C75"> rules</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>;</span></span>
1187
+ <span class="line"><span style="color:#ABB2BF"> };</span></span>
1188
+ <span class="line"><span style="color:#E06C75"> DEFAULT_OPEN_RULES</span><span style="color:#ABB2BF">: {</span></span>
1189
+ <span class="line"><span style="color:#E06C75"> rules</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>;</span></span>
1190
+ <span class="line"><span style="color:#ABB2BF"> };</span></span>
1162
1191
  <span class="line"><span style="color:#E06C75"> setData</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span>
1192
+ <span class="line"><span style="color:#E06C75"> setDefaultPolicy</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span>
1163
1193
  <span class="line"><span style="color:#E06C75"> setRules</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span>
1164
1194
  <span class="line"><span style="color:#E06C75"> snapshotState</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">JsonValue</span><span style="color:#ABB2BF">;</span></span>
1165
1195
  <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1166
- <h4 id="type-declaration-1">Type Declaration</h4>
1196
+ <h4 id="type-declaration-3">Type Declaration</h4>
1197
+ <p><a id="default_deny_rules"></a></p>
1198
+ <h5 id="default_deny_rules">DEFAULT_DENY_RULES</h5>
1199
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">DEFAULT_DENY_RULES</span><span style="color:#ABB2BF">: {</span></span>
1200
+ <span class="line"><span style="color:#E06C75"> rules</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span>
1201
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1202
+ <h6 id="default_deny_rulesrules">DEFAULT_DENY_RULES.rules</h6>
1203
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">rules</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span></code></pre>
1204
+ <p><a id="default_open_rules"></a></p>
1205
+ <h5 id="default_open_rules">DEFAULT_OPEN_RULES</h5>
1206
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">DEFAULT_OPEN_RULES</span><span style="color:#ABB2BF">: {</span></span>
1207
+ <span class="line"><span style="color:#E06C75"> rules</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span>
1208
+ <span class="line"><span style="color:#ABB2BF">};</span></span></code></pre>
1209
+ <h6 id="default_open_rulesrules">DEFAULT_OPEN_RULES.rules</h6>
1210
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E06C75">rules</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">;</span></span></code></pre>
1167
1211
  <p><a id="setdata"></a></p>
1168
1212
  <h5 id="setdata">setData()</h5>
1169
1213
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">setData</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">db</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Database</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">data</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">unknown</span><span style="color:#56B6C2">></span><span style="color:#ABB2BF">): </span><span style="color:#C678DD">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
@@ -1191,15 +1235,42 @@ paths. Convenient for test fixtures.</p>
1191
1235
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr><tr><td align="left"><code>data</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr></tbody></table></div>
1192
1236
  <h6 id="returns-51">Returns</h6>
1193
1237
  <p><code>void</code></p>
1238
+ <p><a id="setdefaultpolicy"></a></p>
1239
+ <h5 id="setdefaultpolicy">setDefaultPolicy()</h5>
1240
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">setDefaultPolicy</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">db</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Database</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">policy</span><span style="color:#ABB2BF">: </span><span style="color:#98C379">"allow"</span><span style="color:#56B6C2"> |</span><span style="color:#98C379"> "deny"</span><span style="color:#ABB2BF">): </span><span style="color:#C678DD">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1241
+ <p>Set the default access policy when no rules are loaded (‘allow’ or ‘deny’).
1242
+ In ‘deny’ mode (matching production Firebase), all client reads and writes
1243
+ without rules are rejected with PERMISSION_DENIED.</p>
1244
+ <h6 id="parameters-22">Parameters</h6>
1245
+ <div class="table-scroll">
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr><tr><td align="left"><code>policy</code></td><td align="left"><code>"allow"</code> | <code>"deny"</code></td></tr></tbody></table></div>
1263
+ <h6 id="returns-52">Returns</h6>
1264
+ <p><code>void</code></p>
1194
1265
  <p><a id="setrules"></a></p>
1195
1266
  <h5 id="setrules">setRules()</h5>
1196
1267
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">setRules</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">db</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Database</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75">rulesJson</span><span style="color:#ABB2BF">: {</span></span>
1197
1268
  <span class="line"><span style="color:#E06C75"> rules</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Record</span><span style="color:#56B6C2">&#x3C;</span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">, unknown>;</span></span>
1198
1269
  <span class="line"><span style="color:#ABB2BF">}): </span><span style="color:#C678DD">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1199
1270
  <p>Replace deployed rules. Pass <code>null</code> to clear (sandbox returns to
1200
- default-allow). Rules are evaluated through the existing
1271
+ default policy). Rules are evaluated through the existing
1201
1272
  RTDB rules simulator — the same engine used by the rules tooling.</p>
1202
- <h6 id="parameters-22">Parameters</h6>
1273
+ <h6 id="parameters-23">Parameters</h6>
1203
1274
  <div class="table-scroll">
1204
1275
 
1205
1276
 
@@ -1222,7 +1293,7 @@ RTDB rules simulator — the same engine used by the rules tooling.</p>
1222
1293
 
1223
1294
 
1224
1295
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr><tr><td align="left"><code>rulesJson</code></td><td align="left">{ <code>rules</code>: <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; }</td></tr><tr><td align="left"><code>rulesJson.rules</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr></tbody></table></div>
1225
- <h6 id="returns-52">Returns</h6>
1296
+ <h6 id="returns-53">Returns</h6>
1226
1297
  <p><code>void</code></p>
1227
1298
  <h6 id="example">Example</h6>
1228
1299
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#E5C07B">sandbox</span><span style="color:#ABB2BF">.</span><span style="color:#61AFEF">setRules</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">db</span><span style="color:#ABB2BF">, {</span></span>
@@ -1236,7 +1307,7 @@ RTDB rules simulator — the same engine used by the rules tooling.</p>
1236
1307
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">snapshotState</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75">db</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">Database</span><span style="color:#ABB2BF">): </span><span style="color:#E06C75">JsonValue</span><span style="color:#ABB2BF">;</span></span></code></pre>
1237
1308
  <p>Snapshot the full sandbox tree (rule-bypass read). Usually a keyed
1238
1309
  object; may be a primitive when the root holds one (DB-B13).</p>
1239
- <h6 id="parameters-23">Parameters</h6>
1310
+ <h6 id="parameters-24">Parameters</h6>
1240
1311
  <div class="table-scroll">
1241
1312
 
1242
1313
 
@@ -1251,7 +1322,7 @@ object; may be a primitive when the root holds one (DB-B13).</p>
1251
1322
 
1252
1323
 
1253
1324
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr></tbody></table></div>
1254
- <h6 id="returns-53">Returns</h6>
1325
+ <h6 id="returns-54">Returns</h6>
1255
1326
  <p><a href="#jsonvalue"><code>JsonValue</code></a></p>
1256
1327
  <hr>
1257
1328
  <p><a id="target_symbol-1"></a></p>
@@ -1265,7 +1336,7 @@ object; may be a primitive when the root holds one (DB-B13).</p>
1265
1336
  <p>Build a sandbox-backed <code>DatabaseReference</code>. Cached parent / root
1266
1337
  pointers are computed lazily so a long chain doesn’t materialise
1267
1338
  every intermediate ref upfront.</p>
1268
- <h4 id="parameters-24">Parameters</h4>
1339
+ <h4 id="parameters-25">Parameters</h4>
1269
1340
  <div class="table-scroll">
1270
1341
 
1271
1342
 
@@ -1284,7 +1355,7 @@ every intermediate ref upfront.</p>
1284
1355
 
1285
1356
 
1286
1357
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>target</code></td><td align="left"><code>SandboxTarget</code> | <code>SandboxLiveTarget</code></td></tr><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1287
- <h4 id="returns-54">Returns</h4>
1358
+ <h4 id="returns-55">Returns</h4>
1288
1359
  <p><a href="#databasereference"><code>DatabaseReference</code></a></p>
1289
1360
  <hr>
1290
1361
  <p><a id="child-6"></a></p>
@@ -1294,7 +1365,7 @@ every intermediate ref upfront.</p>
1294
1365
  <code>&#x3C;ref>/sub/path</code>.</p>
1295
1366
  <p>Mirrors <code>firebase/database</code>’s <code>child(parent, path)</code> — leading +
1296
1367
  empty segments stripped; the result inherits the parent’s target.</p>
1297
- <h4 id="parameters-25">Parameters</h4>
1368
+ <h4 id="parameters-26">Parameters</h4>
1298
1369
  <div class="table-scroll">
1299
1370
 
1300
1371
 
@@ -1313,7 +1384,7 @@ empty segments stripped; the result inherits the parent’s target.</p>
1313
1384
 
1314
1385
 
1315
1386
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>parent</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1316
- <h4 id="returns-55">Returns</h4>
1387
+ <h4 id="returns-56">Returns</h4>
1317
1388
  <p><a href="#databasereference"><code>DatabaseReference</code></a></p>
1318
1389
  <hr>
1319
1390
  <p><a id="connectdatabaseemulator"></a></p>
@@ -1327,7 +1398,7 @@ empty segments stripped; the result inherits the parent’s target.</p>
1327
1398
  <span class="line"><span style="color:#ABB2BF">}): </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1328
1399
  <p><code>connectDatabaseEmulator(db, host, port)</code> is an accepted no-op because the
1329
1400
  selected backend already is the local sandbox.</p>
1330
- <h4 id="parameters-26">Parameters</h4>
1401
+ <h4 id="parameters-27">Parameters</h4>
1331
1402
  <div class="table-scroll">
1332
1403
 
1333
1404
 
@@ -1358,7 +1429,7 @@ selected backend already is the local sandbox.</p>
1358
1429
 
1359
1430
 
1360
1431
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>_db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr><tr><td align="left"><code>_host</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>_port</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><code>_options?</code></td><td align="left">{ <code>mockUserToken?</code>: <code>string</code> | <a href="#emulatormocktokenoptions"><code>EmulatorMockTokenOptions</code></a>; }</td></tr><tr><td align="left"><code>_options.mockUserToken?</code></td><td align="left"><code>string</code> | <a href="#emulatormocktokenoptions"><code>EmulatorMockTokenOptions</code></a></td></tr></tbody></table></div>
1361
- <h4 id="returns-56">Returns</h4>
1432
+ <h4 id="returns-57">Returns</h4>
1362
1433
  <p><code>void</code></p>
1363
1434
  <hr>
1364
1435
  <p><a id="enablelogging"></a></p>
@@ -1369,7 +1440,7 @@ selected backend already is the local sandbox.</p>
1369
1440
  level/sink into (it uses host-level <code>console</code> logging directly, gated
1370
1441
  by <code>pyric dev</code>’s own flags — matching <code>pyric/firestore</code>’s
1371
1442
  <code>setLogLevel</code>). Accepted so init code that calls it compiles + runs.</p>
1372
- <h4 id="parameters-27">Parameters</h4>
1443
+ <h4 id="parameters-28">Parameters</h4>
1373
1444
  <div class="table-scroll">
1374
1445
 
1375
1446
 
@@ -1388,7 +1459,7 @@ by <code>pyric dev</code>’s own flags — matching <code>pyric/firestore</code
1388
1459
 
1389
1460
 
1390
1461
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>logger?</code></td><td align="left"><code>boolean</code> | (<code>message</code>: <code>string</code>) => <code>void</code></td></tr><tr><td align="left"><code>persistent?</code></td><td align="left"><code>boolean</code></td></tr></tbody></table></div>
1391
- <h4 id="returns-57">Returns</h4>
1462
+ <h4 id="returns-58">Returns</h4>
1392
1463
  <p><code>void</code></p>
1393
1464
  <hr>
1394
1465
  <p><a id="endat"></a></p>
@@ -1396,7 +1467,7 @@ by <code>pyric dev</code>’s own flags — matching <code>pyric/firestore</code
1396
1467
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> endAt</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">JsonValue</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">key</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
1397
1468
  <p><code>endAt(value, key?)</code> — INCLUSIVE upper bound. Adjacent to startAt;
1398
1469
  same key tie-breaker semantics.</p>
1399
- <h4 id="parameters-28">Parameters</h4>
1470
+ <h4 id="parameters-29">Parameters</h4>
1400
1471
  <div class="table-scroll">
1401
1472
 
1402
1473
 
@@ -1415,7 +1486,7 @@ same key tie-breaker semantics.</p>
1415
1486
 
1416
1487
 
1417
1488
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><a href="#jsonvalue"><code>JsonValue</code></a></td></tr><tr><td align="left"><code>key?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1418
- <h4 id="returns-58">Returns</h4>
1489
+ <h4 id="returns-59">Returns</h4>
1419
1490
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
1420
1491
  <hr>
1421
1492
  <p><a id="endbefore"></a></p>
@@ -1423,7 +1494,7 @@ same key tie-breaker semantics.</p>
1423
1494
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> endBefore</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">JsonValue</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">key</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
1424
1495
  <p><code>endBefore(value, key?)</code> — EXCLUSIVE upper bound. Locked by
1425
1496
  <code>rtdb-modular-startafter-endbefore-exclusive.json</code>.</p>
1426
- <h4 id="parameters-29">Parameters</h4>
1497
+ <h4 id="parameters-30">Parameters</h4>
1427
1498
  <div class="table-scroll">
1428
1499
 
1429
1500
 
@@ -1442,7 +1513,7 @@ same key tie-breaker semantics.</p>
1442
1513
 
1443
1514
 
1444
1515
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><a href="#jsonvalue"><code>JsonValue</code></a></td></tr><tr><td align="left"><code>key?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1445
- <h4 id="returns-59">Returns</h4>
1516
+ <h4 id="returns-60">Returns</h4>
1446
1517
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
1447
1518
  <hr>
1448
1519
  <p><a id="equalto"></a></p>
@@ -1450,7 +1521,7 @@ same key tie-breaker semantics.</p>
1450
1521
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> equalTo</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">JsonValue</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">key</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
1451
1522
  <p><code>equalTo(value, key?)</code> — sugar for <code>startAt(value, key) + endAt(value, key)</code>. Returns ALL matching children (no uniqueness).
1452
1523
  Locked by oracle observation <code>rtdb-modular-equalTo-filter.json</code>.</p>
1453
- <h4 id="parameters-30">Parameters</h4>
1524
+ <h4 id="parameters-31">Parameters</h4>
1454
1525
  <div class="table-scroll">
1455
1526
 
1456
1527
 
@@ -1469,7 +1540,7 @@ Locked by oracle observation <code>rtdb-modular-equalTo-filter.json</code>.</p>
1469
1540
 
1470
1541
 
1471
1542
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><a href="#jsonvalue"><code>JsonValue</code></a></td></tr><tr><td align="left"><code>key?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1472
- <h4 id="returns-60">Returns</h4>
1543
+ <h4 id="returns-61">Returns</h4>
1473
1544
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
1474
1545
  <hr>
1475
1546
  <p><a id="forcelongpolling"></a></p>
@@ -1480,7 +1551,7 @@ subsequent <code>getDatabase</code> connections.</p>
1480
1551
  <p>No-op: transport selection is meaningless to the in-process/worker
1481
1552
  sandbox, which never opens a real socket. Accepted so init code that
1482
1553
  calls it unconditionally compiles + runs.</p>
1483
- <h4 id="returns-61">Returns</h4>
1554
+ <h4 id="returns-62">Returns</h4>
1484
1555
  <p><code>void</code></p>
1485
1556
  <hr>
1486
1557
  <p><a id="forcewebsockets"></a></p>
@@ -1490,7 +1561,7 @@ calls it unconditionally compiles + runs.</p>
1490
1561
  subsequent <code>getDatabase</code> connections.</p>
1491
1562
  <p>No-op: transport selection is not applicable to the in-process/worker
1492
1563
  sandbox (see <a href="#forcelongpolling">forceLongPolling</a>).</p>
1493
- <h4 id="returns-62">Returns</h4>
1564
+ <h4 id="returns-63">Returns</h4>
1494
1565
  <p><code>void</code></p>
1495
1566
  <hr>
1496
1567
  <p><a id="get"></a></p>
@@ -1502,7 +1573,7 @@ sandbox (see <a href="#forcelongpolling">forceLongPolling</a>).</p>
1502
1573
  shape locked by the oracle.</p>
1503
1574
  <p>Absent path → <code>snap.val() === null &#x26;&#x26; snap.exists() === false</code>.
1504
1575
  Matches the SDK’s <code>DataSnapshot.val()</code> contract.</p>
1505
- <h4 id="parameters-31">Parameters</h4>
1576
+ <h4 id="parameters-32">Parameters</h4>
1506
1577
  <div class="table-scroll">
1507
1578
 
1508
1579
 
@@ -1517,7 +1588,7 @@ Matches the SDK’s <code>DataSnapshot.val()</code> contract.</p>
1517
1588
 
1518
1589
 
1519
1590
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr></tbody></table></div>
1520
- <h4 id="returns-63">Returns</h4>
1591
+ <h4 id="returns-64">Returns</h4>
1521
1592
  <p><code>Promise</code>&#x3C;<a href="#datasnapshot"><code>DataSnapshot</code></a>></p>
1522
1593
  <hr>
1523
1594
  <p><a id="getadmindatabase"></a></p>
@@ -1527,7 +1598,7 @@ Matches the SDK’s <code>DataSnapshot.val()</code> contract.</p>
1527
1598
  <p>Sandbox-only rules-bypass RTDB handle. Mirrors Firestore’s
1528
1599
  <code>getAdminFirestore(sandbox)</code> for Studio/Playground data browsers and
1529
1600
  controlled admin tools.</p>
1530
- <h5 id="parameters-32">Parameters</h5>
1601
+ <h5 id="parameters-33">Parameters</h5>
1531
1602
  <div class="table-scroll">
1532
1603
 
1533
1604
 
@@ -1542,14 +1613,14 @@ controlled admin tools.</p>
1542
1613
 
1543
1614
 
1544
1615
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>sandbox</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#sandbox"><code>Sandbox</code></a></td></tr></tbody></table></div>
1545
- <h5 id="returns-64">Returns</h5>
1616
+ <h5 id="returns-65">Returns</h5>
1546
1617
  <p><a href="#database"><code>Database</code></a></p>
1547
1618
  <h4 id="call-signature-1">Call Signature</h4>
1548
1619
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> getAdminDatabase</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">ctx</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">SandboxContext</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Database</span><span style="color:#ABB2BF">;</span></span></code></pre>
1549
1620
  <p>Sandbox-only rules-bypass RTDB handle. Mirrors Firestore’s
1550
1621
  <code>getAdminFirestore(sandbox)</code> for Studio/Playground data browsers and
1551
1622
  controlled admin tools.</p>
1552
- <h5 id="parameters-33">Parameters</h5>
1623
+ <h5 id="parameters-34">Parameters</h5>
1553
1624
  <div class="table-scroll">
1554
1625
 
1555
1626
 
@@ -1564,14 +1635,14 @@ controlled admin tools.</p>
1564
1635
 
1565
1636
 
1566
1637
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ctx</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#sandboxcontext"><code>SandboxContext</code></a></td></tr></tbody></table></div>
1567
- <h5 id="returns-65">Returns</h5>
1638
+ <h5 id="returns-66">Returns</h5>
1568
1639
  <p><a href="#database"><code>Database</code></a></p>
1569
1640
  <h4 id="call-signature-2">Call Signature</h4>
1570
1641
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> getAdminDatabase</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">app</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FirebaseApp</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Database</span><span style="color:#ABB2BF">;</span></span></code></pre>
1571
1642
  <p>Sandbox-only rules-bypass RTDB handle. Mirrors Firestore’s
1572
1643
  <code>getAdminFirestore(sandbox)</code> for Studio/Playground data browsers and
1573
1644
  controlled admin tools.</p>
1574
- <h5 id="parameters-34">Parameters</h5>
1645
+ <h5 id="parameters-35">Parameters</h5>
1575
1646
  <div class="table-scroll">
1576
1647
 
1577
1648
 
@@ -1586,7 +1657,7 @@ controlled admin tools.</p>
1586
1657
 
1587
1658
 
1588
1659
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>app</code></td><td align="left"><a href="/docs/pyric-app-reference-api/#firebaseapp"><code>FirebaseApp</code></a></td></tr></tbody></table></div>
1589
- <h5 id="returns-66">Returns</h5>
1660
+ <h5 id="returns-67">Returns</h5>
1590
1661
  <p><a href="#database"><code>Database</code></a></p>
1591
1662
  <hr>
1592
1663
  <p><a id="getdatabase"></a></p>
@@ -1598,7 +1669,7 @@ controlled admin tools.</p>
1598
1669
  <li><code>SandboxContext</code> → sandbox-backed, frozen identity.</li>
1599
1670
  <li><code>Sandbox</code> → sandbox-backed, live identity (per-op <code>currentUser</code>).</li>
1600
1671
  </ul>
1601
- <h5 id="parameters-35">Parameters</h5>
1672
+ <h5 id="parameters-36">Parameters</h5>
1602
1673
  <div class="table-scroll">
1603
1674
 
1604
1675
 
@@ -1613,7 +1684,7 @@ controlled admin tools.</p>
1613
1684
 
1614
1685
 
1615
1686
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ctx</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#sandboxcontext"><code>SandboxContext</code></a></td></tr></tbody></table></div>
1616
- <h5 id="returns-67">Returns</h5>
1687
+ <h5 id="returns-68">Returns</h5>
1617
1688
  <p><a href="#database"><code>Database</code></a></p>
1618
1689
  <h5 id="example-1">Example</h5>
1619
1690
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">initializeSandbox</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'pyric/sandbox'</span><span style="color:#ABB2BF">;</span></span>
@@ -1631,7 +1702,7 @@ controlled admin tools.</p>
1631
1702
  <li><code>SandboxContext</code> → sandbox-backed, frozen identity.</li>
1632
1703
  <li><code>Sandbox</code> → sandbox-backed, live identity (per-op <code>currentUser</code>).</li>
1633
1704
  </ul>
1634
- <h5 id="parameters-36">Parameters</h5>
1705
+ <h5 id="parameters-37">Parameters</h5>
1635
1706
  <div class="table-scroll">
1636
1707
 
1637
1708
 
@@ -1646,7 +1717,7 @@ controlled admin tools.</p>
1646
1717
 
1647
1718
 
1648
1719
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>sandbox</code></td><td align="left"><a href="/docs/pyric-firestore-reference-api/#sandbox"><code>Sandbox</code></a></td></tr></tbody></table></div>
1649
- <h5 id="returns-68">Returns</h5>
1720
+ <h5 id="returns-69">Returns</h5>
1650
1721
  <p><a href="#database"><code>Database</code></a></p>
1651
1722
  <h5 id="example-2">Example</h5>
1652
1723
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">initializeSandbox</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'pyric/sandbox'</span><span style="color:#ABB2BF">;</span></span>
@@ -1664,7 +1735,7 @@ controlled admin tools.</p>
1664
1735
  <li><code>SandboxContext</code> → sandbox-backed, frozen identity.</li>
1665
1736
  <li><code>Sandbox</code> → sandbox-backed, live identity (per-op <code>currentUser</code>).</li>
1666
1737
  </ul>
1667
- <h5 id="parameters-37">Parameters</h5>
1738
+ <h5 id="parameters-38">Parameters</h5>
1668
1739
  <div class="table-scroll">
1669
1740
 
1670
1741
 
@@ -1679,7 +1750,7 @@ controlled admin tools.</p>
1679
1750
 
1680
1751
 
1681
1752
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>app</code></td><td align="left"><a href="/docs/pyric-app-reference-api/#firebaseapp"><code>FirebaseApp</code></a></td></tr></tbody></table></div>
1682
- <h5 id="returns-69">Returns</h5>
1753
+ <h5 id="returns-70">Returns</h5>
1683
1754
  <p><a href="#appdatabase"><code>AppDatabase</code></a></p>
1684
1755
  <h5 id="example-3">Example</h5>
1685
1756
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">initializeSandbox</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'pyric/sandbox'</span><span style="color:#ABB2BF">;</span></span>
@@ -1697,7 +1768,7 @@ controlled admin tools.</p>
1697
1768
  <li><code>SandboxContext</code> → sandbox-backed, frozen identity.</li>
1698
1769
  <li><code>Sandbox</code> → sandbox-backed, live identity (per-op <code>currentUser</code>).</li>
1699
1770
  </ul>
1700
- <h5 id="returns-70">Returns</h5>
1771
+ <h5 id="returns-71">Returns</h5>
1701
1772
  <p><a href="#appdatabase"><code>AppDatabase</code></a></p>
1702
1773
  <h5 id="example-4">Example</h5>
1703
1774
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">import</span><span style="color:#ABB2BF"> { </span><span style="color:#E06C75">initializeSandbox</span><span style="color:#ABB2BF"> } </span><span style="color:#C678DD">from</span><span style="color:#98C379"> 'pyric/sandbox'</span><span style="color:#ABB2BF">;</span></span>
@@ -1715,7 +1786,7 @@ controlled admin tools.</p>
1715
1786
  <p><code>goOffline(db)</code> — disconnect the client from the RTDB backend.</p>
1716
1787
  <p>Drains this client’s one-shot onDisconnect queue. The shared data backend
1717
1788
  remains available to other Database clients and listeners.</p>
1718
- <h4 id="parameters-38">Parameters</h4>
1789
+ <h4 id="parameters-39">Parameters</h4>
1719
1790
  <div class="table-scroll">
1720
1791
 
1721
1792
 
@@ -1730,7 +1801,7 @@ remains available to other Database clients and listeners.</p>
1730
1801
 
1731
1802
 
1732
1803
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr></tbody></table></div>
1733
- <h4 id="returns-71">Returns</h4>
1804
+ <h4 id="returns-72">Returns</h4>
1734
1805
  <p><code>void</code></p>
1735
1806
  <hr>
1736
1807
  <p><a id="goonline"></a></p>
@@ -1739,7 +1810,7 @@ remains available to other Database clients and listeners.</p>
1739
1810
  <p><code>goOnline(db)</code> — reconnect the client to the RTDB backend.</p>
1740
1811
  <p>Reconnects the logical client. Executed disconnect operations are not
1741
1812
  resurrected; reads and writes remain synchronous in the local sandbox.</p>
1742
- <h4 id="parameters-39">Parameters</h4>
1813
+ <h4 id="parameters-40">Parameters</h4>
1743
1814
  <div class="table-scroll">
1744
1815
 
1745
1816
 
@@ -1754,7 +1825,7 @@ resurrected; reads and writes remain synchronous in the local sandbox.</p>
1754
1825
 
1755
1826
 
1756
1827
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr></tbody></table></div>
1757
- <h4 id="returns-72">Returns</h4>
1828
+ <h4 id="returns-73">Returns</h4>
1758
1829
  <p><code>void</code></p>
1759
1830
  <hr>
1760
1831
  <p><a id="increment"></a></p>
@@ -1766,7 +1837,7 @@ write’s field. Starts from <code>0</code> when the field is absent or
1766
1837
  non-numeric (oracle: <code>rtdb-modular-increment-from-missing.json</code>).</p>
1767
1838
  <p>The sandbox backend resolves it against the field’s prior value at write
1768
1839
  time. Mirrors <code>firebase/database</code>’s <code>increment</code> (<code>api/ServerValue.ts:38-44</code>).</p>
1769
- <h4 id="parameters-40">Parameters</h4>
1840
+ <h4 id="parameters-41">Parameters</h4>
1770
1841
  <div class="table-scroll">
1771
1842
 
1772
1843
 
@@ -1781,7 +1852,7 @@ time. Mirrors <code>firebase/database</code>’s <code>increment</code> (<code>a
1781
1852
 
1782
1853
 
1783
1854
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>delta</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1784
- <h4 id="returns-73">Returns</h4>
1855
+ <h4 id="returns-74">Returns</h4>
1785
1856
  <p><code>IncrementSentinel</code></p>
1786
1857
  <hr>
1787
1858
  <p><a id="limittofirst"></a></p>
@@ -1789,7 +1860,7 @@ time. Mirrors <code>firebase/database</code>’s <code>increment</code> (<code>a
1789
1860
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> limitToFirst</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">n</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
1790
1861
  <p><code>limitToFirst(n)</code> — keep the first N children of the ordered window.
1791
1862
  Locked by oracle observation <code>rtdb-modular-limittofirst-vs-limittolast.json</code>.</p>
1792
- <h4 id="parameters-41">Parameters</h4>
1863
+ <h4 id="parameters-42">Parameters</h4>
1793
1864
  <div class="table-scroll">
1794
1865
 
1795
1866
 
@@ -1804,7 +1875,7 @@ Locked by oracle observation <code>rtdb-modular-limittofirst-vs-limittolast.json
1804
1875
 
1805
1876
 
1806
1877
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>n</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1807
- <h4 id="returns-74">Returns</h4>
1878
+ <h4 id="returns-75">Returns</h4>
1808
1879
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
1809
1880
  <hr>
1810
1881
  <p><a id="limittolast"></a></p>
@@ -1812,7 +1883,7 @@ Locked by oracle observation <code>rtdb-modular-limittofirst-vs-limittolast.json
1812
1883
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> limitToLast</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">n</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
1813
1884
  <p><code>limitToLast(n)</code> — keep the last N children of the ordered window.
1814
1885
  Locked by oracle observation <code>rtdb-modular-limittofirst-vs-limittolast.json</code>.</p>
1815
- <h4 id="parameters-42">Parameters</h4>
1886
+ <h4 id="parameters-43">Parameters</h4>
1816
1887
  <div class="table-scroll">
1817
1888
 
1818
1889
 
@@ -1827,7 +1898,7 @@ Locked by oracle observation <code>rtdb-modular-limittofirst-vs-limittolast.json
1827
1898
 
1828
1899
 
1829
1900
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>n</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1830
- <h4 id="returns-75">Returns</h4>
1901
+ <h4 id="returns-76">Returns</h4>
1831
1902
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
1832
1903
  <hr>
1833
1904
  <p><a id="off"></a></p>
@@ -1850,7 +1921,7 @@ that variety.</li>
1850
1921
  <p>The returned-unsubscribe pattern from <code>onValue</code> / <code>onChild*</code> is
1851
1922
  functionally equivalent to <code>off(ref, eventType, cb)</code> for a specific
1852
1923
  registration — both are supported.</p>
1853
- <h4 id="parameters-43">Parameters</h4>
1924
+ <h4 id="parameters-44">Parameters</h4>
1854
1925
  <div class="table-scroll">
1855
1926
 
1856
1927
 
@@ -1873,7 +1944,7 @@ registration — both are supported.</p>
1873
1944
 
1874
1945
 
1875
1946
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>eventType?</code></td><td align="left"><code>"value"</code> | <code>ChildEvent</code></td></tr><tr><td align="left"><code>callback?</code></td><td align="left">(<code>snap</code>: <a href="#datasnapshot"><code>DataSnapshot</code></a>) => <code>void</code></td></tr></tbody></table></div>
1876
- <h4 id="returns-76">Returns</h4>
1947
+ <h4 id="returns-77">Returns</h4>
1877
1948
  <p><code>void</code></p>
1878
1949
  <hr>
1879
1950
  <p><a id="onchildadded"></a></p>
@@ -1898,7 +1969,7 @@ ordered, windowed result — a child ENTERING the window fires
1898
1969
  <code>child_added</code>; on subscribe the current window is replayed in window
1899
1970
  order.</p>
1900
1971
  <p>Returns an unsubscribe; calling it twice is a no-op.</p>
1901
- <h4 id="parameters-44">Parameters</h4>
1972
+ <h4 id="parameters-45">Parameters</h4>
1902
1973
  <div class="table-scroll">
1903
1974
 
1904
1975
 
@@ -1925,7 +1996,7 @@ order.</p>
1925
1996
 
1926
1997
 
1927
1998
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>cb</code></td><td align="left">(<code>snap</code>: <a href="#datasnapshot"><code>DataSnapshot</code></a>, <code>previousChildName</code>: <code>string</code>) => <code>void</code></td></tr><tr><td align="left"><code>cancelCallbackOrOptions?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a> | (<code>error</code>: <code>Error</code>) => <code>void</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a></td></tr></tbody></table></div>
1928
- <h4 id="returns-77">Returns</h4>
1999
+ <h4 id="returns-78">Returns</h4>
1929
2000
  <p><a href="#unsubscribe"><code>Unsubscribe</code></a></p>
1930
2001
  <hr>
1931
2002
  <p><a id="onchildchanged"></a></p>
@@ -1945,7 +2016,7 @@ NEW non-null value. Snapshot carries the NEW value.</li>
1945
2016
  </ul>
1946
2017
  <p>Also accepts a <a href="#query">Query</a>: fires when a child that is IN the query
1947
2018
  window changes value (an in-window update).</p>
1948
- <h4 id="parameters-45">Parameters</h4>
2019
+ <h4 id="parameters-46">Parameters</h4>
1949
2020
  <div class="table-scroll">
1950
2021
 
1951
2022
 
@@ -1972,7 +2043,7 @@ window changes value (an in-window update).</p>
1972
2043
 
1973
2044
 
1974
2045
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>cb</code></td><td align="left">(<code>snap</code>: <a href="#datasnapshot"><code>DataSnapshot</code></a>, <code>previousChildName</code>: <code>string</code>) => <code>void</code></td></tr><tr><td align="left"><code>cancelCallbackOrOptions?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a> | (<code>error</code>: <code>Error</code>) => <code>void</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a></td></tr></tbody></table></div>
1975
- <h4 id="returns-78">Returns</h4>
2046
+ <h4 id="returns-79">Returns</h4>
1976
2047
  <p><a href="#unsubscribe"><code>Unsubscribe</code></a></p>
1977
2048
  <hr>
1978
2049
  <p><a id="onchildmoved"></a></p>
@@ -1991,7 +2062,7 @@ child’s priority can move it while an ordinary value-only write does not.</li>
1991
2062
  </ul>
1992
2063
  <p>Accepts a <a href="#query">Query</a> and fires when the active ordered value changes,
1993
2064
  including the Firebase <code>previousChildName</code> second callback argument.</p>
1994
- <h4 id="parameters-46">Parameters</h4>
2065
+ <h4 id="parameters-47">Parameters</h4>
1995
2066
  <div class="table-scroll">
1996
2067
 
1997
2068
 
@@ -2018,7 +2089,7 @@ including the Firebase <code>previousChildName</code> second callback argument.<
2018
2089
 
2019
2090
 
2020
2091
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>cb</code></td><td align="left">(<code>snap</code>: <a href="#datasnapshot"><code>DataSnapshot</code></a>, <code>previousChildName</code>: <code>string</code>) => <code>void</code></td></tr><tr><td align="left"><code>cancelCallbackOrOptions?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a> | (<code>error</code>: <code>Error</code>) => <code>void</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a></td></tr></tbody></table></div>
2021
- <h4 id="returns-79">Returns</h4>
2092
+ <h4 id="returns-80">Returns</h4>
2022
2093
  <p><a href="#unsubscribe"><code>Unsubscribe</code></a></p>
2023
2094
  <hr>
2024
2095
  <p><a id="onchildremoved"></a></p>
@@ -2040,7 +2111,7 @@ sees what was there before deletion.</li>
2040
2111
  <p>Also accepts a <a href="#query">Query</a>: a child LEAVING the query window (e.g.
2041
2112
  displaced past a <code>limitTo*</code> boundary or filtered out) fires
2042
2113
  <code>child_removed</code> carrying its prior value.</p>
2043
- <h4 id="parameters-47">Parameters</h4>
2114
+ <h4 id="parameters-48">Parameters</h4>
2044
2115
  <div class="table-scroll">
2045
2116
 
2046
2117
 
@@ -2067,7 +2138,7 @@ displaced past a <code>limitTo*</code> boundary or filtered out) fires
2067
2138
 
2068
2139
 
2069
2140
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>cb</code></td><td align="left">(<code>snap</code>: <a href="#datasnapshot"><code>DataSnapshot</code></a>, <code>previousChildName</code>: <code>string</code>) => <code>void</code></td></tr><tr><td align="left"><code>cancelCallbackOrOptions?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a> | (<code>error</code>: <code>Error</code>) => <code>void</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a></td></tr></tbody></table></div>
2070
- <h4 id="returns-80">Returns</h4>
2141
+ <h4 id="returns-81">Returns</h4>
2071
2142
  <p><a href="#unsubscribe"><code>Unsubscribe</code></a></p>
2072
2143
  <hr>
2073
2144
  <p><a id="ondisconnect-1"></a></p>
@@ -2075,7 +2146,7 @@ displaced past a <code>limitTo*</code> boundary or filtered out) fires
2075
2146
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> onDisconnect</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">r</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DatabaseReference</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">OnDisconnect</span><span style="color:#ABB2BF">;</span></span></code></pre>
2076
2147
  <p>Register a one-shot write for this Database client’s next disconnect.
2077
2148
  Registration checks rules immediately; execution checks them again.</p>
2078
- <h4 id="parameters-48">Parameters</h4>
2149
+ <h4 id="parameters-49">Parameters</h4>
2079
2150
  <div class="table-scroll">
2080
2151
 
2081
2152
 
@@ -2090,7 +2161,7 @@ Registration checks rules immediately; execution checks them again.</p>
2090
2161
 
2091
2162
 
2092
2163
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr></tbody></table></div>
2093
- <h4 id="returns-81">Returns</h4>
2164
+ <h4 id="returns-82">Returns</h4>
2094
2165
  <p><a href="#ondisconnect"><code>OnDisconnect</code></a></p>
2095
2166
  <hr>
2096
2167
  <p><a id="onvalue"></a></p>
@@ -2111,7 +2182,7 @@ after its first fire (mirrors <code>api/Reference_impl.ts:975-980</code>).</p>
2111
2182
  <p>With a cancellation callback, an initially denied listen returns normally
2112
2183
  and reports the Firebase <code>PERMISSION_DENIED</code> error asynchronously. Without
2113
2184
  one, the sandbox preserves its legacy synchronous throw.</p>
2114
- <h4 id="parameters-49">Parameters</h4>
2185
+ <h4 id="parameters-50">Parameters</h4>
2115
2186
  <div class="table-scroll">
2116
2187
 
2117
2188
 
@@ -2138,7 +2209,7 @@ one, the sandbox preserves its legacy synchronous throw.</p>
2138
2209
 
2139
2210
 
2140
2211
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>cb</code></td><td align="left">(<code>snap</code>: <a href="#datasnapshot"><code>DataSnapshot</code></a>) => <code>void</code></td></tr><tr><td align="left"><code>cancelCallbackOrOptions?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a> | (<code>error</code>: <code>Error</code>) => <code>void</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#listenoptions"><code>ListenOptions</code></a></td></tr></tbody></table></div>
2141
- <h4 id="returns-82">Returns</h4>
2212
+ <h4 id="returns-83">Returns</h4>
2142
2213
  <p><a href="#unsubscribe"><code>Unsubscribe</code></a></p>
2143
2214
  <hr>
2144
2215
  <p><a id="orderbychild"></a></p>
@@ -2147,7 +2218,7 @@ one, the sandbox preserves its legacy synchronous throw.</p>
2147
2218
  <p><code>orderByChild('path')</code> — order children by the value at the nested
2148
2219
  child path. Locked by oracle observation
2149
2220
  <code>rtdb-modular-orderbychild-window.json</code>.</p>
2150
- <h4 id="parameters-50">Parameters</h4>
2221
+ <h4 id="parameters-51">Parameters</h4>
2151
2222
  <div class="table-scroll">
2152
2223
 
2153
2224
 
@@ -2162,7 +2233,7 @@ child path. Locked by oracle observation
2162
2233
 
2163
2234
 
2164
2235
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
2165
- <h4 id="returns-83">Returns</h4>
2236
+ <h4 id="returns-84">Returns</h4>
2166
2237
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
2167
2238
  <hr>
2168
2239
  <p><a id="orderbykey"></a></p>
@@ -2170,7 +2241,7 @@ child path. Locked by oracle observation
2170
2241
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> orderByKey</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
2171
2242
  <p><code>orderByKey()</code> — order children lexicographically by key string.
2172
2243
  Locked by oracle observation <code>rtdb-modular-orderbykey-window.json</code>.</p>
2173
- <h4 id="returns-84">Returns</h4>
2244
+ <h4 id="returns-85">Returns</h4>
2174
2245
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
2175
2246
  <hr>
2176
2247
  <p><a id="orderbypriority"></a></p>
@@ -2178,7 +2249,7 @@ Locked by oracle observation <code>rtdb-modular-orderbykey-window.json</code>.</
2178
2249
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> orderByPriority</span><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
2179
2250
  <p><code>orderByPriority()</code> — order children by their RTDB priority metadata,
2180
2251
  with Firebase’s key ordering as the tie-breaker.</p>
2181
- <h4 id="returns-85">Returns</h4>
2252
+ <h4 id="returns-86">Returns</h4>
2182
2253
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
2183
2254
  <hr>
2184
2255
  <p><a id="orderbyvalue"></a></p>
@@ -2189,7 +2260,7 @@ with Firebase’s key ordering as the tie-breaker.</p>
2189
2260
  threw <code>Index not defined</code> against blockingfun); sandbox does NOT
2190
2261
  enforce indexes (the rules engine here checks read-allow only, not
2191
2262
  query-index conformance).</p>
2192
- <h4 id="returns-86">Returns</h4>
2263
+ <h4 id="returns-87">Returns</h4>
2193
2264
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
2194
2265
  <hr>
2195
2266
  <p><a id="push"></a></p>
@@ -2204,7 +2275,7 @@ id (locked by oracle observation <code>rtdb-push-autoid-format.json</code>:
2204
2275
  round-trip required); it’s available synchronously on the returned
2205
2276
  ref even when the optional write is denied by rules. The oracle
2206
2277
  observation confirms this — the sandbox matches.</p>
2207
- <h4 id="parameters-51">Parameters</h4>
2278
+ <h4 id="parameters-52">Parameters</h4>
2208
2279
  <div class="table-scroll">
2209
2280
 
2210
2281
 
@@ -2223,7 +2294,7 @@ observation confirms this — the sandbox matches.</p>
2223
2294
 
2224
2295
 
2225
2296
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>value?</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
2226
- <h4 id="returns-87">Returns</h4>
2297
+ <h4 id="returns-88">Returns</h4>
2227
2298
  <p><a href="#thenablereference"><code>ThenableReference</code></a></p>
2228
2299
  <hr>
2229
2300
  <p><a id="pushkey"></a></p>
@@ -2232,7 +2303,7 @@ observation confirms this — the sandbox matches.</p>
2232
2303
  <p>Pre-mint a push key without writing. Used by callers that need the
2233
2304
  key for a multi-path update (<code>update(rootRef, { [\</code>/users/${key}`]: … })`).
2234
2305
  Returns a freshly-minted key.</p>
2235
- <h4 id="returns-88">Returns</h4>
2306
+ <h4 id="returns-89">Returns</h4>
2236
2307
  <p><code>string</code></p>
2237
2308
  <hr>
2238
2309
  <p><a id="query-1"></a></p>
@@ -2259,7 +2330,7 @@ the ordered window (<code>rtdb-modular-limittofirst-vs-limittolast.json</code>).
2259
2330
  <li><code>startAfter</code> / <code>endBefore</code> are EXCLUSIVE
2260
2331
  (<code>rtdb-modular-startafter-endbefore-exclusive.json</code>).</li>
2261
2332
  </ul>
2262
- <h4 id="parameters-52">Parameters</h4>
2333
+ <h4 id="parameters-53">Parameters</h4>
2263
2334
  <div class="table-scroll">
2264
2335
 
2265
2336
 
@@ -2278,7 +2349,7 @@ the ordered window (<code>rtdb-modular-limittofirst-vs-limittolast.json</code>).
2278
2349
 
2279
2350
 
2280
2351
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>refOrQuery</code></td><td align="left"><a href="#query"><code>Query</code></a> | <a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left">…<code>constraints</code></td><td align="left"><a href="#queryconstraint"><code>QueryConstraint</code></a>[]</td></tr></tbody></table></div>
2281
- <h4 id="returns-89">Returns</h4>
2352
+ <h4 id="returns-90">Returns</h4>
2282
2353
  <p><a href="#query"><code>Query</code></a></p>
2283
2354
  <hr>
2284
2355
  <p><a id="ref-6"></a></p>
@@ -2287,7 +2358,7 @@ the ordered window (<code>rtdb-modular-limittofirst-vs-limittolast.json</code>).
2287
2358
  <p>Build a <a href="#databasereference">DatabaseReference</a> at <code>path</code> (default root).</p>
2288
2359
  <p>Path normalisation: leading + trailing slashes are stripped;
2289
2360
  empty path / <code>'/'</code> becomes the root.</p>
2290
- <h4 id="parameters-53">Parameters</h4>
2361
+ <h4 id="parameters-54">Parameters</h4>
2291
2362
  <div class="table-scroll">
2292
2363
 
2293
2364
 
@@ -2306,7 +2377,7 @@ empty path / <code>'/'</code> becomes the root.</p>
2306
2377
 
2307
2378
 
2308
2379
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr><tr><td align="left"><code>path?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
2309
- <h4 id="returns-90">Returns</h4>
2380
+ <h4 id="returns-91">Returns</h4>
2310
2381
  <p><a href="#databasereference"><code>DatabaseReference</code></a></p>
2311
2382
  <hr>
2312
2383
  <p><a id="reffromurl"></a></p>
@@ -2316,7 +2387,7 @@ empty path / <code>'/'</code> becomes the root.</p>
2316
2387
  absolute database URL (<code>https://&#x3C;namespace>.firebaseio.com/path</code>).</p>
2317
2388
  <p>The sandbox is single-database, so only the URL path is honored; unlike the
2318
2389
  production SDK, the host is not checked against the database namespace.</p>
2319
- <h4 id="parameters-54">Parameters</h4>
2390
+ <h4 id="parameters-55">Parameters</h4>
2320
2391
  <div class="table-scroll">
2321
2392
 
2322
2393
 
@@ -2335,7 +2406,7 @@ production SDK, the host is not checked against the database namespace.</p>
2335
2406
 
2336
2407
 
2337
2408
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>db</code></td><td align="left"><a href="#database"><code>Database</code></a></td></tr><tr><td align="left"><code>url</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
2338
- <h4 id="returns-91">Returns</h4>
2409
+ <h4 id="returns-92">Returns</h4>
2339
2410
  <p><a href="#databasereference"><code>DatabaseReference</code></a></p>
2340
2411
  <hr>
2341
2412
  <p><a id="remove-2"></a></p>
@@ -2345,7 +2416,7 @@ production SDK, the host is not checked against the database namespace.</p>
2345
2416
  <p>RTDB invariant (oracle: <code>rtdb-remove-vs-set-null.json</code>): equivalent
2346
2417
  to <code>set(ref, null)</code>. The sandbox backend dispatches <code>remove</code> through
2347
2418
  the same code path as <code>set(_, null)</code>.</p>
2348
- <h4 id="parameters-55">Parameters</h4>
2419
+ <h4 id="parameters-56">Parameters</h4>
2349
2420
  <div class="table-scroll">
2350
2421
 
2351
2422
 
@@ -2360,7 +2431,7 @@ the same code path as <code>set(_, null)</code>.</p>
2360
2431
 
2361
2432
 
2362
2433
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr></tbody></table></div>
2363
- <h4 id="returns-92">Returns</h4>
2434
+ <h4 id="returns-93">Returns</h4>
2364
2435
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
2365
2436
  <hr>
2366
2437
  <p><a id="runtransaction"></a></p>
@@ -2414,7 +2485,7 @@ read and retries the callback. Writes to unrelated paths do not conflict.</p>
2414
2485
 
2415
2486
 
2416
2487
  <table><thead><tr><th align="left">Type Parameter</th></tr></thead><tbody><tr><td align="left"><code>T</code></td></tr></tbody></table></div>
2417
- <h4 id="parameters-56">Parameters</h4>
2488
+ <h4 id="parameters-57">Parameters</h4>
2418
2489
  <div class="table-scroll">
2419
2490
 
2420
2491
 
@@ -2437,7 +2508,7 @@ read and retries the callback. Writes to unrelated paths do not conflict.</p>
2437
2508
 
2438
2509
 
2439
2510
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>transactionUpdate</code></td><td align="left">(<code>current</code>: <code>T</code>) => <code>T</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#transactionoptions"><code>TransactionOptions</code></a></td></tr></tbody></table></div>
2440
- <h4 id="returns-93">Returns</h4>
2511
+ <h4 id="returns-94">Returns</h4>
2441
2512
  <p><code>Promise</code>&#x3C;<a href="#transactionresult"><code>TransactionResult</code></a>></p>
2442
2513
  <hr>
2443
2514
  <p><a id="servertimestamp"></a></p>
@@ -2448,7 +2519,7 @@ the wire encoder recognises. Resolves to <code>Date.now()</code> (epoch ms) on
2448
2519
  write — locked by the prod SDK’s resolved-as-number contract
2449
2520
  (oracle: <code>rtdb-servertimestamp-resolves.json</code>).</p>
2450
2521
  <p>The sandbox backend recognises the marker.</p>
2451
- <h4 id="returns-94">Returns</h4>
2522
+ <h4 id="returns-95">Returns</h4>
2452
2523
  <p><code>ServerTimestampSentinel</code></p>
2453
2524
  <hr>
2454
2525
  <p><a id="set-2"></a></p>
@@ -2458,7 +2529,7 @@ write — locked by the prod SDK’s resolved-as-number contract
2458
2529
  deletes (matches the RTDB invariant — locked by oracle observation
2459
2530
  <code>rtdb-remove-vs-set-null.json</code>).</p>
2460
2531
  <p><code>serverTimestamp()</code> sentinels are resolved at write time.</p>
2461
- <h4 id="parameters-57">Parameters</h4>
2532
+ <h4 id="parameters-58">Parameters</h4>
2462
2533
  <div class="table-scroll">
2463
2534
 
2464
2535
 
@@ -2477,13 +2548,13 @@ deletes (matches the RTDB invariant — locked by oracle observation
2477
2548
 
2478
2549
 
2479
2550
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>value</code></td><td align="left"><code>unknown</code></td></tr></tbody></table></div>
2480
- <h4 id="returns-95">Returns</h4>
2551
+ <h4 id="returns-96">Returns</h4>
2481
2552
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
2482
2553
  <hr>
2483
2554
  <p><a id="setpriority"></a></p>
2484
2555
  <h3 id="setpriority">setPriority()</h3>
2485
2556
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> setPriority</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">r</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DatabaseReference</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">priority</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Promise</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">>;</span></span></code></pre>
2486
- <h4 id="parameters-58">Parameters</h4>
2557
+ <h4 id="parameters-59">Parameters</h4>
2487
2558
  <div class="table-scroll">
2488
2559
 
2489
2560
 
@@ -2502,7 +2573,7 @@ deletes (matches the RTDB invariant — locked by oracle observation
2502
2573
 
2503
2574
 
2504
2575
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>priority</code></td><td align="left"><code>string</code> | <code>number</code></td></tr></tbody></table></div>
2505
- <h4 id="returns-96">Returns</h4>
2576
+ <h4 id="returns-97">Returns</h4>
2506
2577
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
2507
2578
  <hr>
2508
2579
  <p><a id="setwithpriority-2"></a></p>
@@ -2511,7 +2582,7 @@ deletes (matches the RTDB invariant — locked by oracle observation
2511
2582
  <span class="line"><span style="color:#E06C75;font-style:italic"> r</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">DatabaseReference</span><span style="color:#ABB2BF">,</span></span>
2512
2583
  <span class="line"><span style="color:#E06C75;font-style:italic"> value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">,</span></span>
2513
2584
  <span class="line"><span style="color:#E06C75;font-style:italic">priority</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">number</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Promise</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">>;</span></span></code></pre>
2514
- <h4 id="parameters-59">Parameters</h4>
2585
+ <h4 id="parameters-60">Parameters</h4>
2515
2586
  <div class="table-scroll">
2516
2587
 
2517
2588
 
@@ -2534,7 +2605,7 @@ deletes (matches the RTDB invariant — locked by oracle observation
2534
2605
 
2535
2606
 
2536
2607
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>value</code></td><td align="left"><code>unknown</code></td></tr><tr><td align="left"><code>priority</code></td><td align="left"><code>string</code> | <code>number</code></td></tr></tbody></table></div>
2537
- <h4 id="returns-97">Returns</h4>
2608
+ <h4 id="returns-98">Returns</h4>
2538
2609
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
2539
2610
  <hr>
2540
2611
  <p><a id="startafter"></a></p>
@@ -2542,7 +2613,7 @@ deletes (matches the RTDB invariant — locked by oracle observation
2542
2613
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> startAfter</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">value</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">JsonValue</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">key</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">QueryConstraint</span><span style="color:#ABB2BF">;</span></span></code></pre>
2543
2614
  <p><code>startAfter(value, key?)</code> — EXCLUSIVE lower bound. Locked by
2544
2615
  <code>rtdb-modular-startafter-endbefore-exclusive.json</code>.</p>
2545
- <h4 id="parameters-60">Parameters</h4>
2616
+ <h4 id="parameters-61">Parameters</h4>
2546
2617
  <div class="table-scroll">
2547
2618
 
2548
2619
 
@@ -2561,7 +2632,7 @@ deletes (matches the RTDB invariant — locked by oracle observation
2561
2632
 
2562
2633
 
2563
2634
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><a href="#jsonvalue"><code>JsonValue</code></a></td></tr><tr><td align="left"><code>key?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
2564
- <h4 id="returns-98">Returns</h4>
2635
+ <h4 id="returns-99">Returns</h4>
2565
2636
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
2566
2637
  <hr>
2567
2638
  <p><a id="startat"></a></p>
@@ -2570,7 +2641,7 @@ deletes (matches the RTDB invariant — locked by oracle observation
2570
2641
  <p><code>startAt(value, key?)</code> — INCLUSIVE lower bound under the active
2571
2642
  ordering. Optional <code>key</code> is the tie-breaker when ordering by
2572
2643
  child/value and multiple children share the bound’s value.</p>
2573
- <h4 id="parameters-61">Parameters</h4>
2644
+ <h4 id="parameters-62">Parameters</h4>
2574
2645
  <div class="table-scroll">
2575
2646
 
2576
2647
 
@@ -2589,7 +2660,7 @@ child/value and multiple children share the bound’s value.</p>
2589
2660
 
2590
2661
 
2591
2662
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>value</code></td><td align="left"><a href="#jsonvalue"><code>JsonValue</code></a></td></tr><tr><td align="left"><code>key?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
2592
- <h4 id="returns-99">Returns</h4>
2663
+ <h4 id="returns-100">Returns</h4>
2593
2664
  <p><a href="#queryconstraint"><code>QueryConstraint</code></a></p>
2594
2665
  <hr>
2595
2666
  <p><a id="update-2"></a></p>
@@ -2606,7 +2677,7 @@ delete.</li>
2606
2677
  </ul>
2607
2678
  <p>Both behaviors are sandbox-implemented per the RtdbBackend’s
2608
2679
  <code>update</code> method (<code>rtdb-modular</code>-spec atomic claim, matrix row #23).</p>
2609
- <h4 id="parameters-62">Parameters</h4>
2680
+ <h4 id="parameters-63">Parameters</h4>
2610
2681
  <div class="table-scroll">
2611
2682
 
2612
2683
 
@@ -2625,7 +2696,7 @@ delete.</li>
2625
2696
 
2626
2697
 
2627
2698
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>r</code></td><td align="left"><a href="#databasereference"><code>DatabaseReference</code></a></td></tr><tr><td align="left"><code>values</code></td><td align="left"><code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr></tbody></table></div>
2628
- <h4 id="returns-100">Returns</h4>
2699
+ <h4 id="returns-101">Returns</h4>
2629
2700
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
2630
2701
  <h2 id="references">References</h2>
2631
2702
  <p><a id="authstate"></a></p>
@@ -2638,4 +2709,4 @@ delete.</li>
2638
2709
  <hr>
2639
2710
  <p><a id="sandboxcontext"></a></p>
2640
2711
  <h3 id="sandboxcontext">SandboxContext</h3>
2641
- <p>Re-exports <a href="/docs/pyric-firestore-reference-api/#sandboxcontext">SandboxContext</a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter data-astro-cid-mw7aashj> <div class="api-symbol-groups" data-api-symbol-groups data-astro-cid-mw7aashj> <section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#classes" data-astro-cid-mw7aashj> Classes </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="database" data-astro-cid-mw7aashj> <a href="#database" data-astro-cid-mw7aashj>Database</a> </li><li data-api-symbol="datasnapshot" data-astro-cid-mw7aashj> <a href="#datasnapshot" data-astro-cid-mw7aashj>DataSnapshot</a> </li><li data-api-symbol="ondisconnect" data-astro-cid-mw7aashj> <a href="#ondisconnect" data-astro-cid-mw7aashj>OnDisconnect</a> </li><li data-api-symbol="queryconstraint" data-astro-cid-mw7aashj> <a href="#queryconstraint" data-astro-cid-mw7aashj>QueryConstraint</a> </li><li data-api-symbol="transactionresult" data-astro-cid-mw7aashj> <a href="#transactionresult" data-astro-cid-mw7aashj>TransactionResult</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#interfaces" data-astro-cid-mw7aashj> Interfaces </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="databasereference" data-astro-cid-mw7aashj> <a href="#databasereference" data-astro-cid-mw7aashj>DatabaseReference</a> </li><li data-api-symbol="datasnapshotimplementation" data-astro-cid-mw7aashj> <a href="#datasnapshotimplementation" data-astro-cid-mw7aashj>DataSnapshotImplementation</a> </li><li data-api-symbol="iterateddatasnapshot" data-astro-cid-mw7aashj> <a href="#iterateddatasnapshot" data-astro-cid-mw7aashj>IteratedDataSnapshot</a> </li><li data-api-symbol="listenoptions" data-astro-cid-mw7aashj> <a href="#listenoptions" data-astro-cid-mw7aashj>ListenOptions</a> </li><li data-api-symbol="query" data-astro-cid-mw7aashj> <a href="#query" data-astro-cid-mw7aashj>Query</a> </li><li data-api-symbol="thenablereference" data-astro-cid-mw7aashj> <a href="#thenablereference" data-astro-cid-mw7aashj>ThenableReference</a> </li><li data-api-symbol="transactionoptions" data-astro-cid-mw7aashj> <a href="#transactionoptions" data-astro-cid-mw7aashj>TransactionOptions</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#type-aliases" data-astro-cid-mw7aashj> Type Aliases </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="appdatabase" data-astro-cid-mw7aashj> <a href="#appdatabase" data-astro-cid-mw7aashj>AppDatabase</a> </li><li data-api-symbol="emulatormocktokenoptions" data-astro-cid-mw7aashj> <a href="#emulatormocktokenoptions" data-astro-cid-mw7aashj>EmulatorMockTokenOptions</a> </li><li data-api-symbol="eventtype" data-astro-cid-mw7aashj> <a href="#eventtype" data-astro-cid-mw7aashj>EventType</a> </li><li data-api-symbol="jsonvalue" data-astro-cid-mw7aashj> <a href="#jsonvalue" data-astro-cid-mw7aashj>JsonValue</a> </li><li data-api-symbol="queryconstrainttype" data-astro-cid-mw7aashj> <a href="#queryconstrainttype" data-astro-cid-mw7aashj>QueryConstraintType</a> </li><li data-api-symbol="unsubscribe()" data-astro-cid-mw7aashj> <a href="#unsubscribe" data-astro-cid-mw7aashj>Unsubscribe()</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#variables" data-astro-cid-mw7aashj> Variables </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="constraint_symbol" data-astro-cid-mw7aashj> <a href="#constraint_symbol" data-astro-cid-mw7aashj>CONSTRAINT_SYMBOL</a> </li><li data-api-symbol="query_symbol" data-astro-cid-mw7aashj> <a href="#query_symbol" data-astro-cid-mw7aashj>QUERY_SYMBOL</a> </li><li data-api-symbol="sandbox" data-astro-cid-mw7aashj> <a href="#sandbox" data-astro-cid-mw7aashj>sandbox</a> </li><li data-api-symbol="target_symbol" data-astro-cid-mw7aashj> <a href="#target_symbol" data-astro-cid-mw7aashj>TARGET_SYMBOL</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#functions" data-astro-cid-mw7aashj> Functions </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="buildsandboxref()" data-astro-cid-mw7aashj> <a href="#buildsandboxref" data-astro-cid-mw7aashj>buildSandboxRef()</a> </li><li data-api-symbol="child()" data-astro-cid-mw7aashj> <a href="#child-3" data-astro-cid-mw7aashj>child()</a> </li><li data-api-symbol="connectdatabaseemulator()" data-astro-cid-mw7aashj> <a href="#connectdatabaseemulator" data-astro-cid-mw7aashj>connectDatabaseEmulator()</a> </li><li data-api-symbol="enablelogging()" data-astro-cid-mw7aashj> <a href="#enablelogging" data-astro-cid-mw7aashj>enableLogging()</a> </li><li data-api-symbol="endat()" data-astro-cid-mw7aashj> <a href="#endat" data-astro-cid-mw7aashj>endAt()</a> </li><li data-api-symbol="endbefore()" data-astro-cid-mw7aashj> <a href="#endbefore" data-astro-cid-mw7aashj>endBefore()</a> </li><li data-api-symbol="equalto()" data-astro-cid-mw7aashj> <a href="#equalto" data-astro-cid-mw7aashj>equalTo()</a> </li><li data-api-symbol="forcelongpolling()" data-astro-cid-mw7aashj> <a href="#forcelongpolling" data-astro-cid-mw7aashj>forceLongPolling()</a> </li><li data-api-symbol="forcewebsockets()" data-astro-cid-mw7aashj> <a href="#forcewebsockets" data-astro-cid-mw7aashj>forceWebSockets()</a> </li><li data-api-symbol="get()" data-astro-cid-mw7aashj> <a href="#get" data-astro-cid-mw7aashj>get()</a> </li><li data-api-symbol="getadmindatabase()" data-astro-cid-mw7aashj> <a href="#getadmindatabase" data-astro-cid-mw7aashj>getAdminDatabase()</a> </li><li data-api-symbol="getdatabase()" data-astro-cid-mw7aashj> <a href="#getdatabase" data-astro-cid-mw7aashj>getDatabase()</a> </li><li data-api-symbol="gooffline()" data-astro-cid-mw7aashj> <a href="#gooffline" data-astro-cid-mw7aashj>goOffline()</a> </li><li data-api-symbol="goonline()" data-astro-cid-mw7aashj> <a href="#goonline" data-astro-cid-mw7aashj>goOnline()</a> </li><li data-api-symbol="increment()" data-astro-cid-mw7aashj> <a href="#increment" data-astro-cid-mw7aashj>increment()</a> </li><li data-api-symbol="limittofirst()" data-astro-cid-mw7aashj> <a href="#limittofirst" data-astro-cid-mw7aashj>limitToFirst()</a> </li><li data-api-symbol="limittolast()" data-astro-cid-mw7aashj> <a href="#limittolast" data-astro-cid-mw7aashj>limitToLast()</a> </li><li data-api-symbol="off()" data-astro-cid-mw7aashj> <a href="#off" data-astro-cid-mw7aashj>off()</a> </li><li data-api-symbol="onchildadded()" data-astro-cid-mw7aashj> <a href="#onchildadded" data-astro-cid-mw7aashj>onChildAdded()</a> </li><li data-api-symbol="onchildchanged()" data-astro-cid-mw7aashj> <a href="#onchildchanged" data-astro-cid-mw7aashj>onChildChanged()</a> </li><li data-api-symbol="onchildmoved()" data-astro-cid-mw7aashj> <a href="#onchildmoved" data-astro-cid-mw7aashj>onChildMoved()</a> </li><li data-api-symbol="onchildremoved()" data-astro-cid-mw7aashj> <a href="#onchildremoved" data-astro-cid-mw7aashj>onChildRemoved()</a> </li><li data-api-symbol="ondisconnect()" data-astro-cid-mw7aashj> <a href="#ondisconnect-1" data-astro-cid-mw7aashj>onDisconnect()</a> </li><li data-api-symbol="onvalue()" data-astro-cid-mw7aashj> <a href="#onvalue" data-astro-cid-mw7aashj>onValue()</a> </li><li data-api-symbol="orderbychild()" data-astro-cid-mw7aashj> <a href="#orderbychild" data-astro-cid-mw7aashj>orderByChild()</a> </li><li data-api-symbol="orderbykey()" data-astro-cid-mw7aashj> <a href="#orderbykey" data-astro-cid-mw7aashj>orderByKey()</a> </li><li data-api-symbol="orderbypriority()" data-astro-cid-mw7aashj> <a href="#orderbypriority" data-astro-cid-mw7aashj>orderByPriority()</a> </li><li data-api-symbol="orderbyvalue()" data-astro-cid-mw7aashj> <a href="#orderbyvalue" data-astro-cid-mw7aashj>orderByValue()</a> </li><li data-api-symbol="push()" data-astro-cid-mw7aashj> <a href="#push" data-astro-cid-mw7aashj>push()</a> </li><li data-api-symbol="pushkey()" data-astro-cid-mw7aashj> <a href="#pushkey" data-astro-cid-mw7aashj>pushKey()</a> </li><li data-api-symbol="query()" data-astro-cid-mw7aashj> <a href="#query-1" data-astro-cid-mw7aashj>query()</a> </li><li data-api-symbol="ref()" data-astro-cid-mw7aashj> <a href="#ref" data-astro-cid-mw7aashj>ref()</a> </li><li data-api-symbol="reffromurl()" data-astro-cid-mw7aashj> <a href="#reffromurl" data-astro-cid-mw7aashj>refFromURL()</a> </li><li data-api-symbol="remove()" data-astro-cid-mw7aashj> <a href="#remove-1" data-astro-cid-mw7aashj>remove()</a> </li><li data-api-symbol="runtransaction()" data-astro-cid-mw7aashj> <a href="#runtransaction" data-astro-cid-mw7aashj>runTransaction()</a> </li><li data-api-symbol="servertimestamp()" data-astro-cid-mw7aashj> <a href="#servertimestamp" data-astro-cid-mw7aashj>serverTimestamp()</a> </li><li data-api-symbol="set()" data-astro-cid-mw7aashj> <a href="#set-1" data-astro-cid-mw7aashj>set()</a> </li><li data-api-symbol="setpriority()" data-astro-cid-mw7aashj> <a href="#setpriority" data-astro-cid-mw7aashj>setPriority()</a> </li><li data-api-symbol="setwithpriority()" data-astro-cid-mw7aashj> <a href="#setwithpriority-1" data-astro-cid-mw7aashj>setWithPriority()</a> </li><li data-api-symbol="startafter()" data-astro-cid-mw7aashj> <a href="#startafter" data-astro-cid-mw7aashj>startAfter()</a> </li><li data-api-symbol="startat()" data-astro-cid-mw7aashj> <a href="#startat" data-astro-cid-mw7aashj>startAt()</a> </li><li data-api-symbol="update()" data-astro-cid-mw7aashj> <a href="#update-1" data-astro-cid-mw7aashj>update()</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#references" data-astro-cid-mw7aashj> References </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="authstate" data-astro-cid-mw7aashj> <a href="#authstate" data-astro-cid-mw7aashj>AuthState</a> </li><li data-api-symbol="sandbox" data-astro-cid-mw7aashj> <a href="#sandbox-1" data-astro-cid-mw7aashj>Sandbox</a> </li><li data-api-symbol="sandboxcontext" data-astro-cid-mw7aashj> <a href="#sandboxcontext" data-astro-cid-mw7aashj>SandboxContext</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden data-astro-cid-mw7aashj>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>
2712
+ <p>Re-exports <a href="/docs/pyric-firestore-reference-api/#sandboxcontext">SandboxContext</a></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter data-astro-cid-mw7aashj> <div class="api-symbol-groups" data-api-symbol-groups data-astro-cid-mw7aashj> <section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#classes" data-astro-cid-mw7aashj> Classes </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="database" data-astro-cid-mw7aashj> <a href="#database" data-astro-cid-mw7aashj>Database</a> </li><li data-api-symbol="datasnapshot" data-astro-cid-mw7aashj> <a href="#datasnapshot" data-astro-cid-mw7aashj>DataSnapshot</a> </li><li data-api-symbol="ondisconnect" data-astro-cid-mw7aashj> <a href="#ondisconnect" data-astro-cid-mw7aashj>OnDisconnect</a> </li><li data-api-symbol="queryconstraint" data-astro-cid-mw7aashj> <a href="#queryconstraint" data-astro-cid-mw7aashj>QueryConstraint</a> </li><li data-api-symbol="transactionresult" data-astro-cid-mw7aashj> <a href="#transactionresult" data-astro-cid-mw7aashj>TransactionResult</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#interfaces" data-astro-cid-mw7aashj> Interfaces </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="databasereference" data-astro-cid-mw7aashj> <a href="#databasereference" data-astro-cid-mw7aashj>DatabaseReference</a> </li><li data-api-symbol="datasnapshotimplementation" data-astro-cid-mw7aashj> <a href="#datasnapshotimplementation" data-astro-cid-mw7aashj>DataSnapshotImplementation</a> </li><li data-api-symbol="iterateddatasnapshot" data-astro-cid-mw7aashj> <a href="#iterateddatasnapshot" data-astro-cid-mw7aashj>IteratedDataSnapshot</a> </li><li data-api-symbol="listenoptions" data-astro-cid-mw7aashj> <a href="#listenoptions" data-astro-cid-mw7aashj>ListenOptions</a> </li><li data-api-symbol="query" data-astro-cid-mw7aashj> <a href="#query" data-astro-cid-mw7aashj>Query</a> </li><li data-api-symbol="thenablereference" data-astro-cid-mw7aashj> <a href="#thenablereference" data-astro-cid-mw7aashj>ThenableReference</a> </li><li data-api-symbol="transactionoptions" data-astro-cid-mw7aashj> <a href="#transactionoptions" data-astro-cid-mw7aashj>TransactionOptions</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#type-aliases" data-astro-cid-mw7aashj> Type Aliases </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="appdatabase" data-astro-cid-mw7aashj> <a href="#appdatabase" data-astro-cid-mw7aashj>AppDatabase</a> </li><li data-api-symbol="emulatormocktokenoptions" data-astro-cid-mw7aashj> <a href="#emulatormocktokenoptions" data-astro-cid-mw7aashj>EmulatorMockTokenOptions</a> </li><li data-api-symbol="eventtype" data-astro-cid-mw7aashj> <a href="#eventtype" data-astro-cid-mw7aashj>EventType</a> </li><li data-api-symbol="jsonvalue" data-astro-cid-mw7aashj> <a href="#jsonvalue" data-astro-cid-mw7aashj>JsonValue</a> </li><li data-api-symbol="queryconstrainttype" data-astro-cid-mw7aashj> <a href="#queryconstrainttype" data-astro-cid-mw7aashj>QueryConstraintType</a> </li><li data-api-symbol="unsubscribe()" data-astro-cid-mw7aashj> <a href="#unsubscribe" data-astro-cid-mw7aashj>Unsubscribe()</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#variables" data-astro-cid-mw7aashj> Variables </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="constraint_symbol" data-astro-cid-mw7aashj> <a href="#constraint_symbol" data-astro-cid-mw7aashj>CONSTRAINT_SYMBOL</a> </li><li data-api-symbol="default_deny_rtdb_rules" data-astro-cid-mw7aashj> <a href="#default_deny_rtdb_rules" data-astro-cid-mw7aashj>DEFAULT_DENY_RTDB_RULES</a> </li><li data-api-symbol="default_open_rtdb_rules" data-astro-cid-mw7aashj> <a href="#default_open_rtdb_rules" data-astro-cid-mw7aashj>DEFAULT_OPEN_RTDB_RULES</a> </li><li data-api-symbol="query_symbol" data-astro-cid-mw7aashj> <a href="#query_symbol" data-astro-cid-mw7aashj>QUERY_SYMBOL</a> </li><li data-api-symbol="sandbox" data-astro-cid-mw7aashj> <a href="#sandbox" data-astro-cid-mw7aashj>sandbox</a> </li><li data-api-symbol="target_symbol" data-astro-cid-mw7aashj> <a href="#target_symbol" data-astro-cid-mw7aashj>TARGET_SYMBOL</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#functions" data-astro-cid-mw7aashj> Functions </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="buildsandboxref()" data-astro-cid-mw7aashj> <a href="#buildsandboxref" data-astro-cid-mw7aashj>buildSandboxRef()</a> </li><li data-api-symbol="child()" data-astro-cid-mw7aashj> <a href="#child-3" data-astro-cid-mw7aashj>child()</a> </li><li data-api-symbol="connectdatabaseemulator()" data-astro-cid-mw7aashj> <a href="#connectdatabaseemulator" data-astro-cid-mw7aashj>connectDatabaseEmulator()</a> </li><li data-api-symbol="enablelogging()" data-astro-cid-mw7aashj> <a href="#enablelogging" data-astro-cid-mw7aashj>enableLogging()</a> </li><li data-api-symbol="endat()" data-astro-cid-mw7aashj> <a href="#endat" data-astro-cid-mw7aashj>endAt()</a> </li><li data-api-symbol="endbefore()" data-astro-cid-mw7aashj> <a href="#endbefore" data-astro-cid-mw7aashj>endBefore()</a> </li><li data-api-symbol="equalto()" data-astro-cid-mw7aashj> <a href="#equalto" data-astro-cid-mw7aashj>equalTo()</a> </li><li data-api-symbol="forcelongpolling()" data-astro-cid-mw7aashj> <a href="#forcelongpolling" data-astro-cid-mw7aashj>forceLongPolling()</a> </li><li data-api-symbol="forcewebsockets()" data-astro-cid-mw7aashj> <a href="#forcewebsockets" data-astro-cid-mw7aashj>forceWebSockets()</a> </li><li data-api-symbol="get()" data-astro-cid-mw7aashj> <a href="#get" data-astro-cid-mw7aashj>get()</a> </li><li data-api-symbol="getadmindatabase()" data-astro-cid-mw7aashj> <a href="#getadmindatabase" data-astro-cid-mw7aashj>getAdminDatabase()</a> </li><li data-api-symbol="getdatabase()" data-astro-cid-mw7aashj> <a href="#getdatabase" data-astro-cid-mw7aashj>getDatabase()</a> </li><li data-api-symbol="gooffline()" data-astro-cid-mw7aashj> <a href="#gooffline" data-astro-cid-mw7aashj>goOffline()</a> </li><li data-api-symbol="goonline()" data-astro-cid-mw7aashj> <a href="#goonline" data-astro-cid-mw7aashj>goOnline()</a> </li><li data-api-symbol="increment()" data-astro-cid-mw7aashj> <a href="#increment" data-astro-cid-mw7aashj>increment()</a> </li><li data-api-symbol="limittofirst()" data-astro-cid-mw7aashj> <a href="#limittofirst" data-astro-cid-mw7aashj>limitToFirst()</a> </li><li data-api-symbol="limittolast()" data-astro-cid-mw7aashj> <a href="#limittolast" data-astro-cid-mw7aashj>limitToLast()</a> </li><li data-api-symbol="off()" data-astro-cid-mw7aashj> <a href="#off" data-astro-cid-mw7aashj>off()</a> </li><li data-api-symbol="onchildadded()" data-astro-cid-mw7aashj> <a href="#onchildadded" data-astro-cid-mw7aashj>onChildAdded()</a> </li><li data-api-symbol="onchildchanged()" data-astro-cid-mw7aashj> <a href="#onchildchanged" data-astro-cid-mw7aashj>onChildChanged()</a> </li><li data-api-symbol="onchildmoved()" data-astro-cid-mw7aashj> <a href="#onchildmoved" data-astro-cid-mw7aashj>onChildMoved()</a> </li><li data-api-symbol="onchildremoved()" data-astro-cid-mw7aashj> <a href="#onchildremoved" data-astro-cid-mw7aashj>onChildRemoved()</a> </li><li data-api-symbol="ondisconnect()" data-astro-cid-mw7aashj> <a href="#ondisconnect-1" data-astro-cid-mw7aashj>onDisconnect()</a> </li><li data-api-symbol="onvalue()" data-astro-cid-mw7aashj> <a href="#onvalue" data-astro-cid-mw7aashj>onValue()</a> </li><li data-api-symbol="orderbychild()" data-astro-cid-mw7aashj> <a href="#orderbychild" data-astro-cid-mw7aashj>orderByChild()</a> </li><li data-api-symbol="orderbykey()" data-astro-cid-mw7aashj> <a href="#orderbykey" data-astro-cid-mw7aashj>orderByKey()</a> </li><li data-api-symbol="orderbypriority()" data-astro-cid-mw7aashj> <a href="#orderbypriority" data-astro-cid-mw7aashj>orderByPriority()</a> </li><li data-api-symbol="orderbyvalue()" data-astro-cid-mw7aashj> <a href="#orderbyvalue" data-astro-cid-mw7aashj>orderByValue()</a> </li><li data-api-symbol="push()" data-astro-cid-mw7aashj> <a href="#push" data-astro-cid-mw7aashj>push()</a> </li><li data-api-symbol="pushkey()" data-astro-cid-mw7aashj> <a href="#pushkey" data-astro-cid-mw7aashj>pushKey()</a> </li><li data-api-symbol="query()" data-astro-cid-mw7aashj> <a href="#query-1" data-astro-cid-mw7aashj>query()</a> </li><li data-api-symbol="ref()" data-astro-cid-mw7aashj> <a href="#ref" data-astro-cid-mw7aashj>ref()</a> </li><li data-api-symbol="reffromurl()" data-astro-cid-mw7aashj> <a href="#reffromurl" data-astro-cid-mw7aashj>refFromURL()</a> </li><li data-api-symbol="remove()" data-astro-cid-mw7aashj> <a href="#remove-1" data-astro-cid-mw7aashj>remove()</a> </li><li data-api-symbol="runtransaction()" data-astro-cid-mw7aashj> <a href="#runtransaction" data-astro-cid-mw7aashj>runTransaction()</a> </li><li data-api-symbol="servertimestamp()" data-astro-cid-mw7aashj> <a href="#servertimestamp" data-astro-cid-mw7aashj>serverTimestamp()</a> </li><li data-api-symbol="set()" data-astro-cid-mw7aashj> <a href="#set-1" data-astro-cid-mw7aashj>set()</a> </li><li data-api-symbol="setpriority()" data-astro-cid-mw7aashj> <a href="#setpriority" data-astro-cid-mw7aashj>setPriority()</a> </li><li data-api-symbol="setwithpriority()" data-astro-cid-mw7aashj> <a href="#setwithpriority-1" data-astro-cid-mw7aashj>setWithPriority()</a> </li><li data-api-symbol="startafter()" data-astro-cid-mw7aashj> <a href="#startafter" data-astro-cid-mw7aashj>startAfter()</a> </li><li data-api-symbol="startat()" data-astro-cid-mw7aashj> <a href="#startat" data-astro-cid-mw7aashj>startAt()</a> </li><li data-api-symbol="update()" data-astro-cid-mw7aashj> <a href="#update-1" data-astro-cid-mw7aashj>update()</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#references" data-astro-cid-mw7aashj> References </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="authstate" data-astro-cid-mw7aashj> <a href="#authstate" data-astro-cid-mw7aashj>AuthState</a> </li><li data-api-symbol="sandbox" data-astro-cid-mw7aashj> <a href="#sandbox-1" data-astro-cid-mw7aashj>Sandbox</a> </li><li data-api-symbol="sandboxcontext" data-astro-cid-mw7aashj> <a href="#sandboxcontext" data-astro-cid-mw7aashj>SandboxContext</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden data-astro-cid-mw7aashj>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>