@pyric/cli 0.1.0-alpha.14 → 0.1.0-alpha.16

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 (606) hide show
  1. package/dist/assurance/.generated/conformance-verdicts.d.ts +120 -75
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  3. package/dist/assurance/.generated/conformance-verdicts.js +120 -75
  4. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  5. package/dist/bridge/client/dispatch.js +1 -1
  6. package/dist/bridge/client/dispatch.js.map +1 -1
  7. package/dist/cli/serve.d.ts +1 -1
  8. package/dist/cli/serve.d.ts.map +1 -1
  9. package/dist/cli/serve.js +207 -284
  10. package/dist/cli/serve.js.map +1 -1
  11. package/dist/cli/service-command-records/database-rules-generate.d.ts +4 -0
  12. package/dist/cli/service-command-records/database-rules-generate.d.ts.map +1 -0
  13. package/dist/cli/service-command-records/database-rules-generate.js +3 -0
  14. package/dist/cli/service-command-records/database-rules-generate.js.map +1 -0
  15. package/dist/cli/service-command-records/database-rules-lint.d.ts +4 -0
  16. package/dist/cli/service-command-records/database-rules-lint.d.ts.map +1 -0
  17. package/dist/cli/service-command-records/database-rules-lint.js +3 -0
  18. package/dist/cli/service-command-records/database-rules-lint.js.map +1 -0
  19. package/dist/cli/service-command-records/database-rules-simulate.d.ts +4 -0
  20. package/dist/cli/service-command-records/database-rules-simulate.d.ts.map +1 -0
  21. package/dist/cli/service-command-records/database-rules-simulate.js +3 -0
  22. package/dist/cli/service-command-records/database-rules-simulate.js.map +1 -0
  23. package/dist/cli/service-command-records/database-rules-validate.d.ts +4 -0
  24. package/dist/cli/service-command-records/database-rules-validate.d.ts.map +1 -0
  25. package/dist/cli/service-command-records/database-rules-validate.js +3 -0
  26. package/dist/cli/service-command-records/database-rules-validate.js.map +1 -0
  27. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts +4 -0
  28. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts.map +1 -0
  29. package/dist/cli/service-command-records/firestore-indexes-generate.js +3 -0
  30. package/dist/cli/service-command-records/firestore-indexes-generate.js.map +1 -0
  31. package/dist/cli/service-command-records/firestore-rules-lint.d.ts +4 -0
  32. package/dist/cli/service-command-records/firestore-rules-lint.d.ts.map +1 -0
  33. package/dist/cli/service-command-records/firestore-rules-lint.js +3 -0
  34. package/dist/cli/service-command-records/firestore-rules-lint.js.map +1 -0
  35. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts +4 -0
  36. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts.map +1 -0
  37. package/dist/cli/service-command-records/firestore-rules-resolve.js +3 -0
  38. package/dist/cli/service-command-records/firestore-rules-resolve.js.map +1 -0
  39. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts +4 -0
  40. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts.map +1 -0
  41. package/dist/cli/service-command-records/firestore-rules-simulate.js +3 -0
  42. package/dist/cli/service-command-records/firestore-rules-simulate.js.map +1 -0
  43. package/dist/cli/service-command-records/firestore-rules-validate.d.ts +4 -0
  44. package/dist/cli/service-command-records/firestore-rules-validate.d.ts.map +1 -0
  45. package/dist/cli/service-command-records/firestore-rules-validate.js +3 -0
  46. package/dist/cli/service-command-records/firestore-rules-validate.js.map +1 -0
  47. package/dist/cli/service-command-records/storage-rules-lint.d.ts +4 -0
  48. package/dist/cli/service-command-records/storage-rules-lint.d.ts.map +1 -0
  49. package/dist/cli/service-command-records/storage-rules-lint.js +3 -0
  50. package/dist/cli/service-command-records/storage-rules-lint.js.map +1 -0
  51. package/dist/cli/service-command-records/storage-rules-simulate.d.ts +4 -0
  52. package/dist/cli/service-command-records/storage-rules-simulate.d.ts.map +1 -0
  53. package/dist/cli/service-command-records/storage-rules-simulate.js +3 -0
  54. package/dist/cli/service-command-records/storage-rules-simulate.js.map +1 -0
  55. package/dist/cli/service-commands.d.ts +7 -0
  56. package/dist/cli/service-commands.d.ts.map +1 -1
  57. package/dist/cli/service-commands.generated.d.ts +35 -0
  58. package/dist/cli/service-commands.generated.d.ts.map +1 -0
  59. package/dist/cli/service-commands.generated.js +25 -0
  60. package/dist/cli/service-commands.generated.js.map +1 -0
  61. package/dist/cli/service-commands.js +23 -40
  62. package/dist/cli/service-commands.js.map +1 -1
  63. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  64. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  65. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  66. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  67. package/dist/conformance/.generated/can-i-use.js +1 -1
  68. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  69. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  70. package/dist/conformance/.generated/conformance-docs.js +1 -1
  71. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  72. package/dist/functions-rtdb/development-runtime.d.ts +63 -0
  73. package/dist/functions-rtdb/development-runtime.d.ts.map +1 -0
  74. package/dist/functions-rtdb/development-runtime.js +244 -0
  75. package/dist/functions-rtdb/development-runtime.js.map +1 -0
  76. package/dist/serve/bridge-mount.d.ts +32 -2
  77. package/dist/serve/bridge-mount.d.ts.map +1 -1
  78. package/dist/serve/bridge-mount.js +232 -18
  79. package/dist/serve/bridge-mount.js.map +1 -1
  80. package/dist/serve/bundler.d.ts +2 -18
  81. package/dist/serve/bundler.d.ts.map +1 -1
  82. package/dist/serve/bundler.js +7 -35
  83. package/dist/serve/bundler.js.map +1 -1
  84. package/dist/serve/entries/app-client.d.ts.map +1 -1
  85. package/dist/serve/entries/app-client.js +5 -5
  86. package/dist/serve/entries/app-client.js.map +1 -1
  87. package/dist/serve/entries/auth-helper-core.d.ts +32 -6
  88. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
  89. package/dist/serve/entries/auth-helper-core.js +82 -24
  90. package/dist/serve/entries/auth-helper-core.js.map +1 -1
  91. package/dist/serve/entries/auth.d.ts.map +1 -1
  92. package/dist/serve/entries/auth.js +6 -4
  93. package/dist/serve/entries/auth.js.map +1 -1
  94. package/dist/serve/entries/database.d.ts +28 -0
  95. package/dist/serve/entries/database.d.ts.map +1 -1
  96. package/dist/serve/entries/database.js +95 -26
  97. package/dist/serve/entries/database.js.map +1 -1
  98. package/dist/serve/entries/init.d.ts.map +1 -1
  99. package/dist/serve/entries/init.js +21 -12
  100. package/dist/serve/entries/init.js.map +1 -1
  101. package/dist/serve/html-injection.d.ts +5 -0
  102. package/dist/serve/html-injection.d.ts.map +1 -0
  103. package/dist/serve/html-injection.js +59 -0
  104. package/dist/serve/html-injection.js.map +1 -0
  105. package/dist/serve/namespace.d.ts +6 -22
  106. package/dist/serve/namespace.d.ts.map +1 -1
  107. package/dist/serve/namespace.js +23 -145
  108. package/dist/serve/namespace.js.map +1 -1
  109. package/dist/serve/runtime/worker-replacement.d.ts +1 -2
  110. package/dist/serve/runtime/worker-replacement.d.ts.map +1 -1
  111. package/dist/serve/sandbox-session.d.ts +78 -0
  112. package/dist/serve/sandbox-session.d.ts.map +1 -0
  113. package/dist/serve/sandbox-session.js +171 -0
  114. package/dist/serve/sandbox-session.js.map +1 -0
  115. package/dist/serve/server.d.ts +5 -2
  116. package/dist/serve/server.d.ts.map +1 -1
  117. package/dist/serve/server.js +21 -5
  118. package/dist/serve/server.js.map +1 -1
  119. package/dist/serve/site-tree.d.ts +8 -0
  120. package/dist/serve/site-tree.d.ts.map +1 -0
  121. package/dist/serve/site-tree.js +113 -0
  122. package/dist/serve/site-tree.js.map +1 -0
  123. package/dist/serve/site-ui/_astro/RulesCodeEditor.CzwHdCi9.js +23 -0
  124. package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +1 -0
  125. package/dist/serve/site-ui/_astro/_slug_.BoKXYrnu.css +1 -0
  126. package/dist/serve/site-ui/_astro/_studio_.BtYpqe1A.css +1 -0
  127. package/dist/serve/site-ui/_astro/app.4HeLP_FA.js +109 -0
  128. package/dist/serve/site-ui/_astro/app.BgSnCR5G.js +1 -0
  129. package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +1 -0
  130. package/dist/serve/site-ui/_astro/chess-showcase.CnoxIle5.js +1 -0
  131. package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +1 -0
  132. package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +354 -0
  133. package/dist/serve/site-ui/_astro/client.D2ORs4B-.js +25 -0
  134. package/dist/serve/site-ui/_astro/example-runtime.R1d96L6-.js +291 -0
  135. package/dist/serve/site-ui/_astro/index.BJiOemMX.js +1 -0
  136. package/dist/serve/site-ui/_astro/index.DBy5LfQW.js +9 -0
  137. package/dist/serve/site-ui/_astro/index.DNyk7q8W.js +9 -0
  138. package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +9 -0
  139. package/dist/serve/site-ui/_astro/reads.BrKNdKAa.js +1 -0
  140. package/dist/serve/site-ui/_astro/sandbox-controls.BTb3EbQp.js +1153 -0
  141. package/dist/serve/site-ui/_astro/seed.EyI3VYEu.js +20 -0
  142. package/dist/serve/site-ui/auth/index.html +11 -0
  143. package/dist/serve/site-ui/docs/_rhythm/index.html +100 -0
  144. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +43 -0
  145. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +26 -0
  146. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +70 -0
  147. package/dist/serve/{docs-ui → site-ui}/docs/ai-compat/index.html +3 -3
  148. package/dist/serve/site-ui/docs/api-reference/index.html +68 -0
  149. package/dist/serve/{docs-ui → site-ui}/docs/app-compat/index.html +3 -3
  150. package/dist/serve/{docs-ui → site-ui}/docs/auth-compat/index.html +3 -3
  151. package/dist/serve/site-ui/docs/build/ai-logic/index.html +64 -0
  152. package/dist/serve/site-ui/docs/build/authentication/index.html +66 -0
  153. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +84 -0
  154. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +71 -0
  155. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +66 -0
  156. package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-storage.md +2 -2
  157. package/dist/serve/site-ui/docs/build/realtime-database/index.html +67 -0
  158. package/dist/serve/site-ui/docs/conformance-scores/index.html +50 -0
  159. package/dist/serve/{docs-ui → site-ui}/docs/conformance-scores.md +3 -3
  160. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +531 -0
  161. package/dist/serve/{docs-ui → site-ui}/docs/database-compat/index.html +211 -168
  162. package/dist/serve/{docs-ui → site-ui}/docs/database-compat.md +208 -170
  163. package/dist/serve/site-ui/docs/examples/chess/index.html +384 -0
  164. package/dist/serve/site-ui/docs/examples/chess.md +57 -0
  165. package/dist/serve/site-ui/docs/examples/index.html +3 -0
  166. package/dist/serve/site-ui/docs/examples.md +4 -0
  167. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat/index.html +55 -91
  168. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat.md +52 -88
  169. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +73 -0
  170. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +29 -0
  171. package/dist/serve/site-ui/docs/get-started/start-building/index.html +33 -0
  172. package/dist/serve/{docs-ui → site-ui}/docs/index.json +595 -26
  173. package/dist/serve/site-ui/docs/messaging-compat/index.html +324 -0
  174. package/dist/serve/{docs-ui → site-ui}/docs/messaging-compat.md +71 -1
  175. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +28 -0
  176. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +74 -0
  177. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +45 -0
  178. package/dist/serve/site-ui/docs/overview/index.html +17 -0
  179. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +186 -0
  180. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api/index.html +4 -4
  181. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api/index.html +4 -4
  182. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api/index.html +318 -202
  183. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api.md +154 -27
  184. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api/index.html +5 -5
  185. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +318 -0
  186. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api/index.html +5 -5
  187. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +160 -0
  188. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +425 -0
  189. package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api/index.html +6 -6
  190. package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api.md +1 -1
  191. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +60 -0
  192. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api/index.html +4 -4
  193. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api/index.html +4 -4
  194. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +507 -0
  195. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +258 -0
  196. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
  197. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +308 -0
  198. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +68 -0
  199. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api/index.html +4 -4
  200. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +11 -0
  201. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api/index.html +4 -4
  202. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api/index.html +1186 -1384
  203. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api.md +817 -1291
  204. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api/index.html +4 -4
  205. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +126 -0
  206. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-vite-reference-api.md +1 -1
  207. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2641 -0
  208. package/dist/serve/{docs-ui → site-ui}/docs/pyric-database-reference-api.md +1055 -158
  209. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api/index.html +311 -249
  210. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api.md +72 -54
  211. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +509 -0
  212. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +182 -0
  213. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api/index.html +7 -26
  214. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api.md +13 -23
  215. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +121 -0
  216. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +203 -0
  217. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api/index.html +26 -5
  218. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api.md +22 -22
  219. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api/index.html +5 -15
  220. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api.md +0 -13
  221. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +639 -0
  222. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +100 -0
  223. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api/index.html +4 -4
  224. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +24 -0
  225. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api/index.html +4 -4
  226. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +136 -0
  227. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api/index.html +7 -7
  228. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api.md +4 -4
  229. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api/index.html +4 -4
  230. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api/index.html +4 -4
  231. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +16 -0
  232. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api/index.html +4 -4
  233. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +176 -0
  234. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api/index.html +10 -11
  235. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api.md +7 -8
  236. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +188 -0
  237. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api/index.html +4 -4
  238. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat/index.html +87 -57
  239. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat.md +84 -54
  240. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +51 -0
  241. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +106 -0
  242. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +41 -0
  243. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +67 -0
  244. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +159 -0
  245. package/dist/serve/{docs-ui → site-ui}/docs/secure/rules-standard-library.md +2 -2
  246. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +47 -0
  247. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +95 -0
  248. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +82 -0
  249. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +37 -0
  250. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +75 -0
  251. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat/index.html +8 -8
  252. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat.md +5 -5
  253. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +132 -0
  254. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +861 -0
  255. package/dist/serve/site-ui/docs/trust/rules-standard-library.md +344 -0
  256. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +582 -0
  257. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +448 -0
  258. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +14 -0
  259. package/dist/serve/{docs-ui → site-ui}/docs/tutorial/index.html +4 -4
  260. package/dist/serve/{docs-ui → site-ui}/docs/tutorial.md +1 -1
  261. package/dist/serve/site-ui/examples/chess/index.html +2 -0
  262. package/dist/serve/site-ui/examples/firestore-first-write/index.html +2 -0
  263. package/dist/serve/site-ui/firestore/index.html +11 -0
  264. package/dist/serve/site-ui/index.html +11 -0
  265. package/dist/serve/{docs-ui → site-ui}/llms.txt +6 -2
  266. package/dist/serve/site-ui/rtdb/index.html +11 -0
  267. package/dist/serve/site-ui/settings/index.html +11 -0
  268. package/dist/serve/site-ui/storage/index.html +11 -0
  269. package/dist/serve/site-ui/studio-routes.json +1 -0
  270. package/dist/serve/site-ui/traffic/index.html +11 -0
  271. package/dist/serve/standalone-assets.d.ts +4 -10
  272. package/dist/serve/standalone-assets.d.ts.map +1 -1
  273. package/dist/serve/standalone-assets.js +8 -21
  274. package/dist/serve/standalone-assets.js.map +1 -1
  275. package/dist/serve/vite-functions-development.d.ts +29 -0
  276. package/dist/serve/vite-functions-development.d.ts.map +1 -0
  277. package/dist/serve/vite-functions-development.js +150 -0
  278. package/dist/serve/vite-functions-development.js.map +1 -0
  279. package/dist/serve/vite-generation-bridge.d.ts +17 -0
  280. package/dist/serve/vite-generation-bridge.d.ts.map +1 -0
  281. package/dist/serve/vite-generation-bridge.js +47 -0
  282. package/dist/serve/vite-generation-bridge.js.map +1 -0
  283. package/dist/serve/vite-generation-functions.d.ts +35 -0
  284. package/dist/serve/vite-generation-functions.d.ts.map +1 -0
  285. package/dist/serve/vite-generation-functions.js +46 -0
  286. package/dist/serve/vite-generation-functions.js.map +1 -0
  287. package/dist/serve/vite-generation-middleware.d.ts +10 -0
  288. package/dist/serve/vite-generation-middleware.d.ts.map +1 -0
  289. package/dist/serve/vite-generation-middleware.js +40 -0
  290. package/dist/serve/vite-generation-middleware.js.map +1 -0
  291. package/dist/serve/vite-generation-rules-watch.d.ts +8 -0
  292. package/dist/serve/vite-generation-rules-watch.d.ts.map +1 -0
  293. package/dist/serve/vite-generation-rules-watch.js +33 -0
  294. package/dist/serve/vite-generation-rules-watch.js.map +1 -0
  295. package/dist/serve/vite-module-swap.d.ts +16 -0
  296. package/dist/serve/vite-module-swap.d.ts.map +1 -0
  297. package/dist/serve/vite-module-swap.js +96 -0
  298. package/dist/serve/vite-module-swap.js.map +1 -0
  299. package/dist/serve/vite-page-runtime.d.ts +29 -0
  300. package/dist/serve/vite-page-runtime.d.ts.map +1 -0
  301. package/dist/serve/vite-page-runtime.js +71 -0
  302. package/dist/serve/vite-page-runtime.js.map +1 -0
  303. package/dist/serve/vite-plugin.d.ts +44 -4
  304. package/dist/serve/vite-plugin.d.ts.map +1 -1
  305. package/dist/serve/vite-plugin.js +62 -864
  306. package/dist/serve/vite-plugin.js.map +1 -1
  307. package/dist/serve/vite-sandbox-generation.d.ts +57 -0
  308. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -0
  309. package/dist/serve/vite-sandbox-generation.js +178 -0
  310. package/dist/serve/vite-sandbox-generation.js.map +1 -0
  311. package/dist/serve/worker/client/disconnect.d.ts.map +1 -1
  312. package/dist/serve/worker/client/disconnect.js +2 -0
  313. package/dist/serve/worker/client/disconnect.js.map +1 -1
  314. package/dist/serve/worker/client/handles.d.ts +5 -0
  315. package/dist/serve/worker/client/handles.d.ts.map +1 -1
  316. package/dist/serve/worker/client/handles.js.map +1 -1
  317. package/dist/serve/worker/client/pagehide.d.ts +13 -0
  318. package/dist/serve/worker/client/pagehide.d.ts.map +1 -0
  319. package/dist/serve/worker/client/pagehide.js +19 -0
  320. package/dist/serve/worker/client/pagehide.js.map +1 -0
  321. package/dist/serve/worker/client/rtdb-admin.d.ts +8 -0
  322. package/dist/serve/worker/client/rtdb-admin.d.ts.map +1 -0
  323. package/dist/serve/worker/client/rtdb-admin.js +39 -0
  324. package/dist/serve/worker/client/rtdb-admin.js.map +1 -0
  325. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts +15 -0
  326. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts.map +1 -0
  327. package/dist/serve/worker/client/rtdb-connection-lifecycle.js +45 -0
  328. package/dist/serve/worker/client/rtdb-connection-lifecycle.js.map +1 -0
  329. package/dist/serve/worker/client/rtdb-controls.d.ts +6 -0
  330. package/dist/serve/worker/client/rtdb-controls.d.ts.map +1 -0
  331. package/dist/serve/worker/client/rtdb-controls.js +8 -0
  332. package/dist/serve/worker/client/rtdb-controls.js.map +1 -0
  333. package/dist/serve/worker/client/rtdb-listeners.d.ts +24 -0
  334. package/dist/serve/worker/client/rtdb-listeners.d.ts.map +1 -0
  335. package/dist/serve/worker/client/rtdb-listeners.js +262 -0
  336. package/dist/serve/worker/client/rtdb-listeners.js.map +1 -0
  337. package/dist/serve/worker/client/rtdb-reads.d.ts +4 -0
  338. package/dist/serve/worker/client/rtdb-reads.d.ts.map +1 -0
  339. package/dist/serve/worker/client/rtdb-reads.js +11 -0
  340. package/dist/serve/worker/client/rtdb-reads.js.map +1 -0
  341. package/dist/serve/worker/client/rtdb-references.d.ts +19 -0
  342. package/dist/serve/worker/client/rtdb-references.d.ts.map +1 -0
  343. package/dist/serve/worker/client/rtdb-references.js +63 -0
  344. package/dist/serve/worker/client/rtdb-references.js.map +1 -0
  345. package/dist/serve/worker/client/rtdb-snapshots.d.ts +20 -0
  346. package/dist/serve/worker/client/rtdb-snapshots.d.ts.map +1 -0
  347. package/dist/serve/worker/client/rtdb-snapshots.js +64 -0
  348. package/dist/serve/worker/client/rtdb-snapshots.js.map +1 -0
  349. package/dist/serve/worker/client/rtdb-transactions.d.ts +14 -0
  350. package/dist/serve/worker/client/rtdb-transactions.d.ts.map +1 -0
  351. package/dist/serve/worker/client/rtdb-transactions.js +34 -0
  352. package/dist/serve/worker/client/rtdb-transactions.js.map +1 -0
  353. package/dist/serve/worker/client/rtdb-writes.d.ts +8 -0
  354. package/dist/serve/worker/client/rtdb-writes.d.ts.map +1 -0
  355. package/dist/serve/worker/client/rtdb-writes.js +65 -0
  356. package/dist/serve/worker/client/rtdb-writes.js.map +1 -0
  357. package/dist/serve/worker/client.d.ts +0 -2
  358. package/dist/serve/worker/client.d.ts.map +1 -1
  359. package/dist/serve/worker/client.js +0 -2
  360. package/dist/serve/worker/client.js.map +1 -1
  361. package/dist/serve/worker/entry.js +2 -2
  362. package/dist/serve/worker/entry.js.map +1 -1
  363. package/dist/serve/worker/host/dispatch.d.ts +2 -0
  364. package/dist/serve/worker/host/dispatch.d.ts.map +1 -1
  365. package/dist/serve/worker/host/dispatch.js +24 -2
  366. package/dist/serve/worker/host/dispatch.js.map +1 -1
  367. package/dist/serve/worker/host/rtdb.d.ts +6 -2
  368. package/dist/serve/worker/host/rtdb.d.ts.map +1 -1
  369. package/dist/serve/worker/host/rtdb.js +224 -2
  370. package/dist/serve/worker/host/rtdb.js.map +1 -1
  371. package/dist/serve/worker/host/studio.d.ts.map +1 -1
  372. package/dist/serve/worker/host/studio.js +2 -0
  373. package/dist/serve/worker/host/studio.js.map +1 -1
  374. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  375. package/dist/serve/worker/host/subscriptions.js +3 -3
  376. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  377. package/dist/serve/worker/host.d.ts +1 -1
  378. package/dist/serve/worker/host.d.ts.map +1 -1
  379. package/dist/serve/worker/host.js +1 -1
  380. package/dist/serve/worker/host.js.map +1 -1
  381. package/dist/serve/worker/index.d.ts +16 -1
  382. package/dist/serve/worker/index.d.ts.map +1 -1
  383. package/dist/serve/worker/index.js +17 -4
  384. package/dist/serve/worker/index.js.map +1 -1
  385. package/dist/serve/worker/protocol.d.ts +57 -0
  386. package/dist/serve/worker/protocol.d.ts.map +1 -1
  387. package/dist/serve/worker/protocol.js.map +1 -1
  388. package/dist/serve/worker/rtdb-value-equality.d.ts +3 -0
  389. package/dist/serve/worker/rtdb-value-equality.d.ts.map +1 -0
  390. package/dist/serve/worker/rtdb-value-equality.js +18 -0
  391. package/dist/serve/worker/rtdb-value-equality.js.map +1 -0
  392. package/dist/serve/worker/serve-init.js +2 -2
  393. package/dist/serve/worker/serve-init.js.map +1 -1
  394. package/dist/serve/worker/service-worker-relay.js +2 -2
  395. package/dist/serve/worker/service-worker-relay.js.map +1 -1
  396. package/package.json +7 -5
  397. package/src/assurance/.generated/conformance-verdicts.ts +120 -75
  398. package/src/bridge/client/dispatch.ts +1 -1
  399. package/src/cli/serve.ts +215 -307
  400. package/src/cli/service-command-records/database-rules-generate.ts +3 -0
  401. package/src/cli/service-command-records/database-rules-lint.ts +3 -0
  402. package/src/cli/service-command-records/database-rules-simulate.ts +3 -0
  403. package/src/cli/service-command-records/database-rules-validate.ts +3 -0
  404. package/src/cli/service-command-records/firestore-indexes-generate.ts +3 -0
  405. package/src/cli/service-command-records/firestore-rules-lint.ts +3 -0
  406. package/src/cli/service-command-records/firestore-rules-resolve.ts +3 -0
  407. package/src/cli/service-command-records/firestore-rules-simulate.ts +3 -0
  408. package/src/cli/service-command-records/firestore-rules-validate.ts +3 -0
  409. package/src/cli/service-command-records/storage-rules-lint.ts +3 -0
  410. package/src/cli/service-command-records/storage-rules-simulate.ts +3 -0
  411. package/src/cli/service-commands.generated.ts +27 -0
  412. package/src/cli/service-commands.test.ts +43 -0
  413. package/src/cli/service-commands.ts +36 -51
  414. package/src/conformance/.generated/can-i-use-browser.ts +1 -1
  415. package/src/conformance/.generated/can-i-use.ts +1 -1
  416. package/src/conformance/.generated/conformance-docs.ts +1 -1
  417. package/src/functions-rtdb/development-runtime.ts +299 -0
  418. package/src/serve/bridge-mount.ts +253 -19
  419. package/src/serve/bundler.ts +8 -34
  420. package/src/serve/entries/app-client.ts +5 -4
  421. package/src/serve/entries/auth-helper-core.ts +117 -30
  422. package/src/serve/entries/auth.ts +8 -4
  423. package/src/serve/entries/database.ts +180 -57
  424. package/src/serve/entries/init.ts +30 -20
  425. package/src/serve/html-injection.ts +65 -0
  426. package/src/serve/namespace.ts +26 -169
  427. package/src/serve/runtime/worker-replacement.ts +1 -1
  428. package/src/serve/sandbox-session.ts +233 -0
  429. package/src/serve/server.ts +20 -5
  430. package/src/serve/site-tree.ts +146 -0
  431. package/src/serve/standalone-assets.ts +9 -26
  432. package/src/serve/vite-functions-development.ts +201 -0
  433. package/src/serve/vite-generation-bridge.ts +66 -0
  434. package/src/serve/vite-generation-functions.ts +78 -0
  435. package/src/serve/vite-generation-middleware.ts +56 -0
  436. package/src/serve/vite-generation-rules-watch.ts +37 -0
  437. package/src/serve/vite-module-swap.ts +119 -0
  438. package/src/serve/vite-page-runtime.ts +100 -0
  439. package/src/serve/vite-plugin.ts +78 -883
  440. package/src/serve/vite-sandbox-generation.ts +255 -0
  441. package/src/serve/worker/client/disconnect.ts +3 -1
  442. package/src/serve/worker/client/handles.ts +5 -0
  443. package/src/serve/worker/client/pagehide.ts +31 -0
  444. package/src/serve/worker/client/rtdb-admin.ts +74 -0
  445. package/src/serve/worker/client/rtdb-connection-lifecycle.ts +52 -0
  446. package/src/serve/worker/client/rtdb-controls.ts +8 -0
  447. package/src/serve/worker/client/rtdb-listeners.ts +337 -0
  448. package/src/serve/worker/client/rtdb-reads.ts +12 -0
  449. package/src/serve/worker/client/rtdb-references.ts +85 -0
  450. package/src/serve/worker/client/rtdb-snapshots.ts +118 -0
  451. package/src/serve/worker/client/rtdb-transactions.ts +51 -0
  452. package/src/serve/worker/client/rtdb-writes.ts +74 -0
  453. package/src/serve/worker/client.ts +0 -2
  454. package/src/serve/worker/entry.ts +2 -2
  455. package/src/serve/worker/host/dispatch.ts +22 -2
  456. package/src/serve/worker/host/rtdb.ts +243 -2
  457. package/src/serve/worker/host/studio.ts +2 -0
  458. package/src/serve/worker/host/subscriptions.ts +8 -4
  459. package/src/serve/worker/host.ts +1 -1
  460. package/src/serve/worker/index.ts +58 -10
  461. package/src/serve/worker/protocol.ts +23 -2
  462. package/src/serve/worker/rtdb-value-equality.ts +17 -0
  463. package/src/serve/worker/serve-init.ts +2 -2
  464. package/src/serve/worker/service-worker-relay.ts +2 -2
  465. package/dist/serve/docs-ui/_astro/_slug_.DUci-duz.css +0 -1
  466. package/dist/serve/docs-ui/docs/_rhythm/index.html +0 -100
  467. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +0 -43
  468. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +0 -26
  469. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +0 -70
  470. package/dist/serve/docs-ui/docs/api-reference/index.html +0 -68
  471. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +0 -64
  472. package/dist/serve/docs-ui/docs/build/authentication/index.html +0 -66
  473. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +0 -70
  474. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +0 -71
  475. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +0 -66
  476. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +0 -67
  477. package/dist/serve/docs-ui/docs/conformance-scores/index.html +0 -50
  478. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +0 -531
  479. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +0 -73
  480. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +0 -29
  481. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +0 -33
  482. package/dist/serve/docs-ui/docs/messaging-compat/index.html +0 -265
  483. package/dist/serve/docs-ui/docs/observe/resolve-runtime-status/index.html +0 -28
  484. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +0 -74
  485. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +0 -45
  486. package/dist/serve/docs-ui/docs/overview/index.html +0 -17
  487. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +0 -186
  488. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +0 -318
  489. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +0 -160
  490. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +0 -425
  491. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +0 -60
  492. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +0 -507
  493. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +0 -258
  494. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +0 -51
  495. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +0 -308
  496. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +0 -68
  497. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +0 -11
  498. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +0 -126
  499. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +0 -1852
  500. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +0 -509
  501. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +0 -182
  502. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +0 -121
  503. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +0 -203
  504. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +0 -639
  505. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +0 -100
  506. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +0 -24
  507. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +0 -136
  508. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +0 -16
  509. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +0 -176
  510. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +0 -188
  511. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +0 -51
  512. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +0 -106
  513. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +0 -41
  514. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +0 -67
  515. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +0 -159
  516. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +0 -47
  517. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +0 -95
  518. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +0 -82
  519. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +0 -37
  520. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +0 -75
  521. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +0 -132
  522. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +0 -14
  523. package/dist/serve/docs-ui/index.html +0 -1
  524. package/dist/serve/studio-ui/assets/RulesCodeEditor-BDlH-5lp.js +0 -23
  525. package/dist/serve/studio-ui/assets/index-Bf9SSE8L.js +0 -1218
  526. package/dist/serve/studio-ui/assets/index-BlSGru_r.css +0 -1
  527. package/dist/serve/studio-ui/assets/seed-D_UjxfOU.js +0 -20
  528. package/dist/serve/studio-ui/index.html +0 -32
  529. package/dist/serve/worker/client/rtdb.d.ts +0 -36
  530. package/dist/serve/worker/client/rtdb.d.ts.map +0 -1
  531. package/dist/serve/worker/client/rtdb.js +0 -241
  532. package/dist/serve/worker/client/rtdb.js.map +0 -1
  533. package/src/serve/worker/client/rtdb.ts +0 -311
  534. /package/dist/serve/{docs-ui → site-ui}/404.html +0 -0
  535. /package/dist/serve/{docs-ui → site-ui}/_astro/_slug_.CXh9yTP1.css +0 -0
  536. /package/dist/serve/{docs-ui → site-ui}/docs/_rhythm.md +0 -0
  537. /package/dist/serve/{docs-ui → site-ui}/docs/agent/set-up-your-agent.md +0 -0
  538. /package/dist/serve/{docs-ui → site-ui}/docs/agent/watch-and-review.md +0 -0
  539. /package/dist/serve/{docs-ui → site-ui}/docs/agent/work-with-an-agent.md +0 -0
  540. /package/dist/serve/{docs-ui → site-ui}/docs/ai-compat.md +0 -0
  541. /package/dist/serve/{docs-ui → site-ui}/docs/api-reference.md +0 -0
  542. /package/dist/serve/{docs-ui → site-ui}/docs/app-compat.md +0 -0
  543. /package/dist/serve/{docs-ui → site-ui}/docs/auth-compat.md +0 -0
  544. /package/dist/serve/{docs-ui → site-ui}/docs/build/ai-logic.md +0 -0
  545. /package/dist/serve/{docs-ui → site-ui}/docs/build/authentication.md +0 -0
  546. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-firestore.md +0 -0
  547. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-messaging.md +0 -0
  548. /package/dist/serve/{docs-ui → site-ui}/docs/build/realtime-database.md +0 -0
  549. /package/dist/serve/{docs-ui → site-ui}/docs/create-pyric-reference-api.md +0 -0
  550. /package/dist/serve/{docs-ui → site-ui}/docs/functions-rtdb-compat.md +0 -0
  551. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/how-the-swap-works.md +0 -0
  552. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/start-building.md +0 -0
  553. /package/dist/serve/{docs-ui → site-ui}/docs/index.html +0 -0
  554. /package/dist/serve/{docs-ui → site-ui}/docs/observe/resolve-runtime-status.md +0 -0
  555. /package/dist/serve/{docs-ui → site-ui}/docs/observe/see-whats-happening.md +0 -0
  556. /package/dist/serve/{docs-ui → site-ui}/docs/observe/shape-your-data.md +0 -0
  557. /package/dist/serve/{docs-ui → site-ui}/docs/overview.md +0 -0
  558. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-app-reference-api.md +0 -0
  559. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api.md +0 -0
  560. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api.md +0 -0
  561. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api.md +0 -0
  562. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-storage-reference-api.md +0 -0
  563. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api.md +0 -0
  564. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-scripting-reference-api.md +0 -0
  565. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-app-reference-api.md +0 -0
  566. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-browser-reference-api.md +0 -0
  567. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api.md +0 -0
  568. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api.md +0 -0
  569. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-reference-api.md +0 -0
  570. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-browser-reference-api.md +0 -0
  571. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-docs-reference-api.md +0 -0
  572. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-reference-api.md +0 -0
  573. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-credentials-node-reference-api.md +0 -0
  574. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api.md +0 -0
  575. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-register-reference-api.md +0 -0
  576. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api.md +0 -0
  577. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api.md +0 -0
  578. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-reference-api.md +0 -0
  579. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-sw-reference-api.md +0 -0
  580. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-database-reference-api.md +0 -0
  581. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-firestore-reference-api.md +0 -0
  582. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-agents-reference-api.md +0 -0
  583. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-hooks-reference-api.md +0 -0
  584. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api.md +0 -0
  585. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-hooks-reference-api.md +0 -0
  586. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api.md +0 -0
  587. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-hooks-reference-api.md +0 -0
  588. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api.md +0 -0
  589. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api.md +0 -0
  590. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-hooks-reference-api.md +0 -0
  591. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api.md +0 -0
  592. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-hooks-reference-api.md +0 -0
  593. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-hooks-reference-api.md +0 -0
  594. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api.md +0 -0
  595. /package/dist/serve/{docs-ui → site-ui}/docs/secure/audit-your-rules.md +0 -0
  596. /package/dist/serve/{docs-ui → site-ui}/docs/secure/firestore-rules-limits.md +0 -0
  597. /package/dist/serve/{docs-ui → site-ui}/docs/secure/read-a-denial.md +0 -0
  598. /package/dist/serve/{docs-ui → site-ui}/docs/secure/rtdb-rules-in-typescript.md +0 -0
  599. /package/dist/serve/{docs-ui → site-ui}/docs/secure/secure-it-with-rules.md +0 -0
  600. /package/dist/serve/{docs-ui → site-ui}/docs/secure/simulate-and-lint.md +0 -0
  601. /package/dist/serve/{docs-ui → site-ui}/docs/secure/write-a-rules-test-suite.md +0 -0
  602. /package/dist/serve/{docs-ui → site-ui}/docs/ship/ship-to-production.md +0 -0
  603. /package/dist/serve/{docs-ui → site-ui}/docs/ship/test-in-node.md +0 -0
  604. /package/dist/serve/{docs-ui → site-ui}/docs/trust/how-we-know-it-matches-firebase.md +0 -0
  605. /package/dist/serve/{docs-ui → site-ui}/docs/trust/versioning-and-compatibility.md +0 -0
  606. /package/dist/serve/{studio-ui → site-ui}/pyric-logo.svg +0 -0
@@ -67,41 +67,15 @@ export function defaultSdkEntries(): Record<string, string> {
67
67
  };
68
68
  }
69
69
 
70
- /**
71
- * Resolve the built Studio app dir (the plugin's `ui` option + the CLI's
72
- * `--ui`). Reached by file path so @pyric/cli never imports `@pyric/studio`:
73
- * the packaged location (`dist/serve/studio-ui`, copied at build) or, in the
74
- * monorepo, the sibling studio build. Null when neither exists. The standalone
75
- * binary embeds these same bytes instead (see `standalone-assets.ts`).
76
- */
77
- export function resolveStudioUiDir(): string | null {
78
- const candidates = [
79
- new URL('./studio-ui/', import.meta.url),
80
- new URL('../../../studio/dist/app/', import.meta.url),
81
- ];
82
- for (const candidate of candidates) {
83
- const dir = fileURLToPath(candidate);
84
- if (existsSync(dir)) return dir;
85
- }
86
- return null;
87
- }
88
-
89
- /**
90
- * Resolve the built docs site dir (site-docs). `pyric dev --ui` embeds it so
91
- * the Studio Docs tab has local docs without the hosted site. Built with base
92
- * `/__pyric/ui/` (see scripts/build.sh) so every page/asset/twin URL resolves
93
- * under the CLI mount: pages at `/__pyric/ui/docs/<slug>/`, assets at
94
- * `/__pyric/ui/_astro/*`, the search index at `/__pyric/ui/docs/index.json`,
95
- * and the shell chrome's tab links back at `/__pyric/ui/<tab>`. The dir holds
96
- * the site-docs `dist/` verbatim: `docs/`, `_astro/`, `index.html`, `llms.txt`.
97
- */
98
- export function resolveDocsUiDir(): string | null {
99
- const candidates = [
100
- new URL('./docs-ui/', import.meta.url),
101
- ];
70
+ /** Resolve the unified Astro documentation + Studio tree embedded by the build. */
71
+ export function resolveSiteUiDir(
72
+ candidates: readonly string[] = [
73
+ fileURLToPath(new URL('./site-ui/', import.meta.url)),
74
+ fileURLToPath(new URL('../../../site-docs/dist/', import.meta.url)),
75
+ ],
76
+ ): string | null {
102
77
  for (const candidate of candidates) {
103
- const dir = fileURLToPath(candidate);
104
- if (existsSync(dir)) return dir;
78
+ if (existsSync(candidate)) return candidate;
105
79
  }
106
80
  return null;
107
81
  }
@@ -3,7 +3,7 @@ import type { FirebaseApp } from 'pyric/app';
3
3
  import { registerAppCleanup } from 'pyric/app/internal';
4
4
  import type { ClientDb } from '../worker/client.js';
5
5
  import type { InboundMessage } from '../worker/protocol.js';
6
- import { disconnectClient } from '../worker/client/disconnect.js';
6
+ import { ownClientUntilPagehide } from '../worker/client/pagehide.js';
7
7
  import { openWorkerDb } from './worker-runtime.js';
8
8
 
9
9
  const clients = new WeakMap<FirebaseApp, ClientDb>();
@@ -11,12 +11,13 @@ const clients = new WeakMap<FirebaseApp, ClientDb>();
11
11
  export function workerClientForApp(app: FirebaseApp): ClientDb {
12
12
  const existing = clients.get(app);
13
13
  if (existing) return existing;
14
- let client: ClientDb | undefined;
14
+ const client = openWorkerDb(app.name);
15
+ const lifecycle = ownClientUntilPagehide(client);
15
16
  registerAppCleanup(app, async () => {
16
17
  clients.delete(app);
17
- if (client) await disconnectClient(client);
18
+ lifecycle.dispose();
19
+ await lifecycle.disconnect();
18
20
  });
19
- client = openWorkerDb(app.name);
20
21
  client.port.postMessage({
21
22
  t: 'appConfig',
22
23
  options: app.options as Record<string, unknown>,
@@ -5,8 +5,9 @@
5
5
  * directory and returns a Firebase-shaped credential; it never constructs an
6
6
  * Auth handle or mutates a Sandbox. In SharedWorker mode the directory reads
7
7
  * the worker's user pool and the picked credential is committed by
8
- * `auth.acceptIdentity`. The in-page fallback supplies a small adapter over its
9
- * local auth user store.
8
+ * `auth.acceptIdentity`. The in-page fallback supplies a mint that calls
9
+ * `sandbox.createSignInCredential` so the resolved User carries real
10
+ * provider metadata.
10
11
  */
11
12
  import type {
12
13
  AuthFlowRequest,
@@ -31,10 +32,22 @@ export interface HelperIdentity {
31
32
 
32
33
  export interface HelperIdentityDirectory {
33
34
  list(): HelperIdentity[] | Promise<HelperIdentity[]>;
34
- /** Optional on the worker path: `auth.acceptIdentity` performs the write. */
35
+ /** Optional on the worker path: `auth.acceptIdentity` performs the write.
36
+ * Unused when a custom {@link HelperCredentialMint} owns creation. */
35
37
  add?(identity: HelperIdentity): void | Promise<void>;
36
38
  }
37
39
 
40
+ /**
41
+ * Mint a Firebase-shaped credential for a picker pick/add. The default mint
42
+ * builds a bare helper User (worker path → discarded by `acceptIdentity`).
43
+ * The in-page fallback injects `sandbox.createSignInCredential`.
44
+ */
45
+ export type HelperCredentialMint = (
46
+ request:
47
+ | { kind: 'pick'; identity: HelperIdentity; providerId: string }
48
+ | { kind: 'add'; spec: NewIdentitySpec; providerId: string },
49
+ ) => UserCredential | Promise<UserCredential>;
50
+
38
51
  export interface HelperSnapshot {
39
52
  /** The in-flight request, or null when no popup/redirect is pending. */
40
53
  request: AuthFlowRequest | null;
@@ -52,8 +65,13 @@ export class ServeAuthHelper {
52
65
  private readonly listeners = new Set<() => void>();
53
66
  private cached: HelperSnapshot | null = null;
54
67
  private identities: HelperIdentity[] = [];
68
+ private readonly mint: HelperCredentialMint;
55
69
 
56
- constructor(private readonly directory: HelperIdentityDirectory) {
70
+ constructor(
71
+ private readonly directory: HelperIdentityDirectory,
72
+ mint?: HelperCredentialMint,
73
+ ) {
74
+ this.mint = mint ?? ((request) => this.defaultMint(request));
57
75
  this.refreshIdentities();
58
76
  }
59
77
 
@@ -118,22 +136,17 @@ export class ServeAuthHelper {
118
136
  pending.reject(authError('auth/internal-error', `unknown identity ${uid}`));
119
137
  return;
120
138
  }
121
- pending.resolve(this.credential(identity, pending.req.providerId));
139
+ void Promise.resolve(
140
+ this.mint({ kind: 'pick', identity, providerId: pending.req.providerId }),
141
+ ).then(pending.resolve, pending.reject);
122
142
  }
123
143
 
124
144
  add(spec: NewIdentitySpec): void {
125
145
  const pending = this.take();
126
146
  if (!pending) return;
127
- const identity: HelperIdentity = {
128
- uid: `${pending.req.providerId}:${spec.email}`,
129
- email: spec.email,
130
- displayName: spec.displayName ?? null,
131
- customClaims: spec.customClaims ?? {},
132
- };
133
- void Promise.resolve(this.directory.add?.(identity)).then(
134
- () => pending.resolve(this.credential(identity, pending.req.providerId)),
135
- pending.reject,
136
- );
147
+ void Promise.resolve(
148
+ this.mint({ kind: 'add', spec, providerId: pending.req.providerId }),
149
+ ).then(pending.resolve, pending.reject);
137
150
  }
138
151
 
139
152
  cancel(): void {
@@ -154,25 +167,99 @@ export class ServeAuthHelper {
154
167
  return pending;
155
168
  }
156
169
 
157
- private credential(identity: HelperIdentity, providerId: string): UserCredential {
158
- const user: User = {
159
- uid: identity.uid,
160
- email: identity.email,
161
- displayName: identity.displayName,
162
- isAnonymous: false,
163
- getIdToken: async () => `pyric-serve-${identity.uid}`,
164
- getIdTokenResult: async () => ({
165
- token: `pyric-serve-${identity.uid}`,
166
- claims: { sub: identity.uid, ...identity.customClaims },
167
- expirationTime: new Date(Date.now() + 3600_000).toISOString(),
168
- issuedAtTime: new Date().toISOString(),
169
- authTime: new Date().toISOString(),
170
- }),
170
+ private async defaultMint(
171
+ request:
172
+ | { kind: 'pick'; identity: HelperIdentity; providerId: string }
173
+ | { kind: 'add'; spec: NewIdentitySpec; providerId: string },
174
+ ): Promise<UserCredential> {
175
+ if (request.kind === 'pick') {
176
+ return bareCredential(request.identity, request.providerId);
177
+ }
178
+ // Same-email add resolves to the existing identity (Google-style account
179
+ // reuse) mirrors `createSignInCredential`'s in-page policy, and keeps a
180
+ // repeated add idempotent instead of seeding a second account whose email
181
+ // mapping orphans the first.
182
+ const existing = this.findIdentityByEmail(request.spec.email);
183
+ if (existing) {
184
+ return bareCredential(existing, request.providerId);
185
+ }
186
+ const identity: HelperIdentity = {
187
+ uid: mintProviderUid(),
188
+ email: request.spec.email,
189
+ displayName: request.spec.displayName ?? null,
190
+ customClaims: request.spec.customClaims ?? {},
171
191
  };
172
- return { user, providerId, operationType: 'signIn' };
192
+ await Promise.resolve(this.directory.add?.(identity));
193
+ return bareCredential(identity, request.providerId);
194
+ }
195
+
196
+ private findIdentityByEmail(email: string): HelperIdentity | undefined {
197
+ const normalized = email.toLowerCase();
198
+ return this.identities.find(
199
+ (identity) => identity.email?.toLowerCase() === normalized,
200
+ );
173
201
  }
174
202
  }
175
203
 
204
+ /**
205
+ * Recover the original custom claims from a helper credential's token claims.
206
+ * `bareCredential` (and the in-page backend mint) seed `sub` and the
207
+ * synthesized `firebase` envelope alongside the custom claims; neither is a
208
+ * custom claim, and seeding them back into the worker would persist
209
+ * synthesized metadata as user data.
210
+ */
211
+ export function customClaimsFromTokenClaims(
212
+ claims: Record<string, unknown>,
213
+ ): Record<string, unknown> {
214
+ const { sub: _sub, firebase: _firebase, ...customClaims } = claims;
215
+ return customClaims;
216
+ }
217
+
218
+ /** Provider UIDs are opaque Firebase identifiers, not encoded credentials. */
219
+ function mintProviderUid(): string {
220
+ return `provider-${globalThis.crypto.randomUUID()}`;
221
+ }
222
+
223
+ /** Bare helper User — worker path discards this in favor of `acceptIdentity`. */
224
+ function bareCredential(identity: HelperIdentity, providerId: string): UserCredential {
225
+ const issuedAtTime = new Date().toISOString();
226
+ const expirationTime = new Date(Date.now() + 3600_000).toISOString();
227
+ const user: User = {
228
+ uid: identity.uid,
229
+ email: identity.email,
230
+ displayName: identity.displayName,
231
+ isAnonymous: false,
232
+ emailVerified: false,
233
+ photoURL: null,
234
+ phoneNumber: null,
235
+ providerId: 'firebase',
236
+ providerData: [
237
+ {
238
+ uid: identity.uid,
239
+ displayName: identity.displayName,
240
+ email: identity.email,
241
+ phoneNumber: null,
242
+ photoURL: null,
243
+ providerId,
244
+ },
245
+ ],
246
+ getIdToken: async () => `pyric-serve-${identity.uid}`,
247
+ getIdTokenResult: async () => ({
248
+ token: `pyric-serve-${identity.uid}`,
249
+ claims: {
250
+ sub: identity.uid,
251
+ ...identity.customClaims,
252
+ firebase: { sign_in_provider: providerId },
253
+ },
254
+ signInProvider: providerId,
255
+ expirationTime,
256
+ issuedAtTime,
257
+ authTime: issuedAtTime,
258
+ }),
259
+ };
260
+ return { user, providerId, operationType: 'signIn' };
261
+ }
262
+
176
263
  function authError(code: string, message: string): Error & { code: string } {
177
264
  const error = new Error(message) as Error & { code: string };
178
265
  error.name = 'FirebaseError';
@@ -19,6 +19,7 @@ import * as wcRaw from '../worker/client.js';
19
19
  import { acceptProviderCredential, restorePortSession } from '../worker/client.js';
20
20
  import { useWorker } from './worker-runtime.js';
21
21
  import { sessionStoreForApp } from './app-session-store.js';
22
+ import { customClaimsFromTokenClaims } from './auth-helper-core.js';
22
23
  import { resolveServeAuthFlow } from './auth-helper-runtime.js';
23
24
  import type { SessionMode } from './session-store.js';
24
25
  import { getApp, type FirebaseApp } from 'pyric/app';
@@ -153,9 +154,10 @@ export const setPersistence = (
153
154
 
154
155
  /**
155
156
  * Resolve a provider identity through the backend-free ServeAuthHelper, then
156
- * hand it to the worker. The
157
- * helper seeds `{ sub, ...claims }` into the resolved credential's token, so we
158
- * strip `sub` to recover the original custom claims for the worker seed.
157
+ * hand it to the worker. The helper seeds `{ sub, ...claims, firebase }` into
158
+ * the resolved credential's token, so we strip the synthesized `sub` and
159
+ * `firebase` entries to recover the original custom claims for the worker
160
+ * seed (see `customClaimsFromTokenClaims`).
159
161
  *
160
162
  * Enforcement lives at the hand-off: `auth.acceptIdentity` gates against the
161
163
  * WORKER's provider config and rejects `auth/operation-not-allowed` for a
@@ -173,7 +175,9 @@ async function bridgeProviderSignIn(
173
175
  kind,
174
176
  );
175
177
  const tokenResult = await cred.user.getIdTokenResult();
176
- const { sub: _sub, ...customClaims } = (tokenResult.claims ?? {}) as Record<string, unknown>;
178
+ const customClaims = customClaimsFromTokenClaims(
179
+ (tokenResult.claims ?? {}) as Record<string, unknown>,
180
+ );
177
181
  return acceptProviderCredential(auth as never, {
178
182
  uid: cred.user.uid,
179
183
  email: cred.user.email,
@@ -7,46 +7,137 @@
7
7
  */
8
8
  import * as ip from 'pyric/database';
9
9
  import { getDatabase as pyricGetDatabase } from 'pyric/database';
10
+ import { queryIdentifier } from 'pyric/database/internal';
11
+ import { rtdbChild, rtdbGetDatabase, rtdbRef } from '../worker/client/rtdb-references.js';
12
+ import { rtdbGet } from '../worker/client/rtdb-reads.js';
10
13
  import {
11
- rtdbChild,
12
- rtdbConnectDatabaseEmulator,
13
- rtdbGet,
14
- rtdbGetDatabase,
15
- rtdbOff,
16
- rtdbOnValue,
17
14
  rtdbPush,
18
- rtdbRef,
19
15
  rtdbRemove,
20
- rtdbServerTimestamp,
21
16
  rtdbSet,
17
+ rtdbSetPriority,
18
+ rtdbSetWithPriority,
22
19
  rtdbUpdate,
23
- } from '../worker/client.js';
20
+ } from '../worker/client/rtdb-writes.js';
21
+ import {
22
+ rtdbOff,
23
+ rtdbOnChildAdded,
24
+ rtdbOnChildChanged,
25
+ rtdbOnChildMoved,
26
+ rtdbOnChildRemoved,
27
+ rtdbOnValue,
28
+ } from '../worker/client/rtdb-listeners.js';
29
+ import { rtdbRunTransaction } from '../worker/client/rtdb-transactions.js';
30
+ import {
31
+ RtdbOnDisconnect,
32
+ rtdbGoOffline,
33
+ rtdbGoOnline,
34
+ rtdbOnDisconnect,
35
+ } from '../worker/client/rtdb-connection-lifecycle.js';
36
+ import {
37
+ rtdbConnectDatabaseEmulator,
38
+ rtdbServerTimestamp,
39
+ } from '../worker/client/rtdb-controls.js';
24
40
  import { useWorker } from './worker-runtime.js';
25
41
  import { getApp, type FirebaseApp } from 'pyric/app';
26
42
  import { workerClientForApp } from './app-client.js';
27
43
 
28
44
  const workerDatabaseByApp = new WeakMap<FirebaseApp, ReturnType<typeof pyricGetDatabase>>();
29
45
 
46
+ type WorkerSnapshot = Awaited<ReturnType<typeof rtdbGet>>;
47
+
48
+ function wrapWorkerSnapshot(snapshot: WorkerSnapshot): ip.DataSnapshot {
49
+ return new ip.DataSnapshot({
50
+ key: snapshot.key,
51
+ size: snapshot.size,
52
+ priority: snapshot.priority,
53
+ ref: snapshot.ref as unknown as ip.DatabaseReference,
54
+ exists: () => snapshot.exists(),
55
+ val: () => snapshot.val() as ip.JsonValue,
56
+ child: (path) => wrapWorkerSnapshot(snapshot.child(path)),
57
+ hasChild: (path) => snapshot.hasChild(path),
58
+ hasChildren: () => snapshot.hasChildren(),
59
+ exportVal: () => snapshot.exportVal() as ip.JsonValue,
60
+ toJSON: () => snapshot.toJSON() as ip.JsonValue,
61
+ forEach: (callback) => snapshot.forEach((childSnapshot) =>
62
+ callback(wrapWorkerSnapshot(childSnapshot))),
63
+ });
64
+ }
65
+
30
66
  export const getDatabase = ((app?: FirebaseApp) => {
31
67
  const resolved = app ?? getApp();
32
68
  if (!useWorker) return pyricGetDatabase(resolved);
33
69
  const existing = workerDatabaseByApp.get(resolved);
34
70
  if (existing) return existing;
35
71
  const client = workerClientForApp(resolved);
36
- const handle = Object.assign(rtdbGetDatabase(client), { app: resolved }) as unknown as ReturnType<typeof pyricGetDatabase>;
72
+ const handle = Object.assign(
73
+ new ip.Database(undefined, resolved),
74
+ rtdbGetDatabase(client),
75
+ { app: resolved },
76
+ ) as ReturnType<typeof pyricGetDatabase>;
37
77
  workerDatabaseByApp.set(resolved, handle);
38
78
  return handle;
39
79
  }) as typeof pyricGetDatabase;
40
80
 
41
81
  export const ref = (useWorker ? rtdbRef : ip.ref) as typeof ip.ref;
42
82
  export const child = (useWorker ? rtdbChild : ip.child) as typeof ip.child;
43
- export const get = (useWorker ? rtdbGet : ip.get) as typeof ip.get;
83
+ export const get = (
84
+ useWorker
85
+ ? (async (target: Parameters<typeof ip.get>[0]) =>
86
+ wrapWorkerSnapshot(await rtdbGet(target as never)))
87
+ : ip.get
88
+ ) as typeof ip.get;
44
89
  export const set = (useWorker ? rtdbSet : ip.set) as typeof ip.set;
45
90
  export const update = (useWorker ? rtdbUpdate : ip.update) as typeof ip.update;
46
91
  export const remove = (useWorker ? rtdbRemove : ip.remove) as typeof ip.remove;
47
92
  export const push = (useWorker ? rtdbPush : ip.push) as typeof ip.push;
48
- export const onValue = (useWorker ? rtdbOnValue : ip.onValue) as typeof ip.onValue;
93
+ export const onValue = (
94
+ useWorker
95
+ ? ((
96
+ target: Parameters<typeof ip.onValue>[0],
97
+ callback: Parameters<typeof ip.onValue>[1],
98
+ cancelOrOptions?: Parameters<typeof ip.onValue>[2],
99
+ options?: Parameters<typeof ip.onValue>[3],
100
+ ) => rtdbOnValue(
101
+ target as never,
102
+ (snapshot) => callback(wrapWorkerSnapshot(snapshot)),
103
+ cancelOrOptions as never,
104
+ options,
105
+ callback,
106
+ ))
107
+ : ip.onValue
108
+ ) as typeof ip.onValue;
109
+ export const onChildAdded = (
110
+ useWorker
111
+ ? ((target: Parameters<typeof ip.onChildAdded>[0], callback: Parameters<typeof ip.onChildAdded>[1], cancelOrOptions?: Parameters<typeof ip.onChildAdded>[2], options?: Parameters<typeof ip.onChildAdded>[3]) =>
112
+ rtdbOnChildAdded(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
113
+ : ip.onChildAdded
114
+ ) as typeof ip.onChildAdded;
115
+ export const onChildChanged = (
116
+ useWorker
117
+ ? ((target: Parameters<typeof ip.onChildChanged>[0], callback: Parameters<typeof ip.onChildChanged>[1], cancelOrOptions?: Parameters<typeof ip.onChildChanged>[2], options?: Parameters<typeof ip.onChildChanged>[3]) =>
118
+ rtdbOnChildChanged(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
119
+ : ip.onChildChanged
120
+ ) as typeof ip.onChildChanged;
121
+ export const onChildRemoved = (
122
+ useWorker
123
+ ? ((target: Parameters<typeof ip.onChildRemoved>[0], callback: Parameters<typeof ip.onChildRemoved>[1], cancelOrOptions?: Parameters<typeof ip.onChildRemoved>[2], options?: Parameters<typeof ip.onChildRemoved>[3]) =>
124
+ rtdbOnChildRemoved(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
125
+ : ip.onChildRemoved
126
+ ) as typeof ip.onChildRemoved;
127
+ export const onChildMoved = (
128
+ useWorker
129
+ ? ((target: Parameters<typeof ip.onChildMoved>[0], callback: Parameters<typeof ip.onChildMoved>[1], cancelOrOptions?: Parameters<typeof ip.onChildMoved>[2], options?: Parameters<typeof ip.onChildMoved>[3]) =>
130
+ rtdbOnChildMoved(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
131
+ : ip.onChildMoved
132
+ ) as typeof ip.onChildMoved;
133
+ export const onDisconnect = (
134
+ useWorker ? rtdbOnDisconnect : ip.onDisconnect
135
+ ) as typeof ip.onDisconnect;
136
+ export const OnDisconnect = (
137
+ useWorker ? RtdbOnDisconnect : ip.OnDisconnect
138
+ ) as typeof ip.OnDisconnect;
49
139
  export const off = (useWorker ? rtdbOff : ip.off) as typeof ip.off;
140
+ export const increment = ip.increment;
50
141
  export const serverTimestamp = (
51
142
  useWorker ? rtdbServerTimestamp : ip.serverTimestamp
52
143
  ) as typeof ip.serverTimestamp;
@@ -55,12 +146,12 @@ export const connectDatabaseEmulator = (
55
146
  ) as typeof ip.connectDatabaseEmulator;
56
147
 
57
148
  // ── Low-hanging-fruit exports (issue #149) ────────────────────────────────
58
- // Served mode is always sandbox-backed (never a prod handle), and these are
59
- // honest no-ops in the sandbox model regardless of the worker/in-page split,
60
- // so they are unconditional no-ops here — no worker RPC needed. This also
61
- // gives served apps import-time parity for the `firebase/database` surface.
62
- export const goOffline = ((_db?: unknown) => {}) as typeof ip.goOffline;
63
- export const goOnline = ((_db?: unknown) => {}) as typeof ip.goOnline;
149
+ // Served mode is always sandbox-backed (never a prod handle). The connection
150
+ // controls still cross the worker boundary because goOffline drains that
151
+ // port's one-shot onDisconnect queue; transport-selection controls remain
152
+ // honest no-ops in either runtime.
153
+ export const goOffline = (useWorker ? rtdbGoOffline : ip.goOffline) as typeof ip.goOffline;
154
+ export const goOnline = (useWorker ? rtdbGoOnline : ip.goOnline) as typeof ip.goOnline;
64
155
  export const forceLongPolling = (() => {}) as typeof ip.forceLongPolling;
65
156
  export const forceWebSockets = (() => {}) as typeof ip.forceWebSockets;
66
157
  export const enableLogging = ((_logger?: unknown, _persistent?: unknown) => {}) as typeof ip.enableLogging;
@@ -83,47 +174,79 @@ export const refFromURL = ((db: unknown, url: string) => {
83
174
  return (ref as (db: unknown, path?: string) => unknown)(db, path);
84
175
  }) as typeof ip.refFromURL;
85
176
 
86
- function unsupportedWorkerApi(name: string): never {
87
- throw new Error(
88
- `firebase/database ${name}() is not supported over the pyric SharedWorker yet. ` +
89
- 'Use the in-page fallback for this operation.',
90
- );
91
- }
92
-
93
177
  export const runTransaction = (
94
- useWorker ? (() => unsupportedWorkerApi('runTransaction')) : ip.runTransaction
178
+ useWorker
179
+ ? (async (
180
+ target: Parameters<typeof ip.runTransaction>[0],
181
+ update: Parameters<typeof ip.runTransaction>[1],
182
+ options?: Parameters<typeof ip.runTransaction>[2],
183
+ ) => {
184
+ const result = await rtdbRunTransaction(
185
+ target as never,
186
+ update as (current: unknown) => unknown,
187
+ options,
188
+ );
189
+ return new ip.TransactionResult(result.committed, wrapWorkerSnapshot(result.snapshot));
190
+ })
191
+ : ip.runTransaction
95
192
  ) as typeof ip.runTransaction;
96
193
 
97
194
  export const query = (
98
- useWorker ? (() => unsupportedWorkerApi('query')) : ip.query
195
+ useWorker
196
+ ? ((target: Parameters<typeof ip.query>[0], ...constraints: Parameters<typeof ip.query>[1][]) => {
197
+ const built = ip.query(target, ...constraints);
198
+ return {
199
+ ...built,
200
+ isEqual(other: ip.Query | null) {
201
+ return other !== null
202
+ && 'port' in built.ref
203
+ && 'port' in other.ref
204
+ && built.ref.port === other.ref.port
205
+ && built.ref._path === other.ref._path
206
+ && queryIdentifier(built._spec) === queryIdentifier(other._spec);
207
+ },
208
+ };
209
+ })
210
+ : ip.query
99
211
  ) as typeof ip.query;
100
- export const orderByChild = (
101
- useWorker ? (() => unsupportedWorkerApi('orderByChild')) : ip.orderByChild
102
- ) as typeof ip.orderByChild;
103
- export const orderByKey = (
104
- useWorker ? (() => unsupportedWorkerApi('orderByKey')) : ip.orderByKey
105
- ) as typeof ip.orderByKey;
106
- export const orderByValue = (
107
- useWorker ? (() => unsupportedWorkerApi('orderByValue')) : ip.orderByValue
108
- ) as typeof ip.orderByValue;
109
- export const startAt = (
110
- useWorker ? (() => unsupportedWorkerApi('startAt')) : ip.startAt
111
- ) as typeof ip.startAt;
112
- export const startAfter = (
113
- useWorker ? (() => unsupportedWorkerApi('startAfter')) : ip.startAfter
114
- ) as typeof ip.startAfter;
115
- export const endAt = (
116
- useWorker ? (() => unsupportedWorkerApi('endAt')) : ip.endAt
117
- ) as typeof ip.endAt;
118
- export const endBefore = (
119
- useWorker ? (() => unsupportedWorkerApi('endBefore')) : ip.endBefore
120
- ) as typeof ip.endBefore;
121
- export const equalTo = (
122
- useWorker ? (() => unsupportedWorkerApi('equalTo')) : ip.equalTo
123
- ) as typeof ip.equalTo;
124
- export const limitToFirst = (
125
- useWorker ? (() => unsupportedWorkerApi('limitToFirst')) : ip.limitToFirst
126
- ) as typeof ip.limitToFirst;
127
- export const limitToLast = (
128
- useWorker ? (() => unsupportedWorkerApi('limitToLast')) : ip.limitToLast
129
- ) as typeof ip.limitToLast;
212
+ export const orderByChild = ip.orderByChild;
213
+ export const orderByKey = ip.orderByKey;
214
+ export const orderByPriority = ip.orderByPriority;
215
+ export const orderByValue = ip.orderByValue;
216
+ export const startAt = ip.startAt;
217
+ export const startAfter = ip.startAfter;
218
+ export const endAt = ip.endAt;
219
+ export const endBefore = ip.endBefore;
220
+ export const equalTo = ip.equalTo;
221
+ export const limitToFirst = ip.limitToFirst;
222
+ export const limitToLast = ip.limitToLast;
223
+
224
+ export const setPriority = (
225
+ useWorker ? rtdbSetPriority : ip.setPriority
226
+ ) as typeof ip.setPriority;
227
+ export const setWithPriority = (
228
+ useWorker ? rtdbSetWithPriority : ip.setWithPriority
229
+ ) as typeof ip.setWithPriority;
230
+
231
+ // Runtime constructors and type-only declarations expected by common
232
+ // `firebase/database` imports. Served worker results are wrapped above so the
233
+ // public handles, snapshots, constraints, and transaction results keep these
234
+ // observable constructor identities.
235
+ export const Database = ip.Database;
236
+ export const DataSnapshot = ip.DataSnapshot;
237
+ export const QueryConstraint = ip.QueryConstraint;
238
+ export const TransactionResult = ip.TransactionResult;
239
+ export type Database = ip.Database;
240
+ export type DataSnapshot = ip.DataSnapshot;
241
+ export type QueryConstraint = ip.QueryConstraint;
242
+ export type TransactionResult = ip.TransactionResult;
243
+ export type OnDisconnect = ip.OnDisconnect;
244
+ export type DatabaseReference = ip.DatabaseReference;
245
+ export type EmulatorMockTokenOptions = ip.EmulatorMockTokenOptions;
246
+ export type EventType = ip.EventType;
247
+ export type ListenOptions = ip.ListenOptions;
248
+ export type Query = ip.Query;
249
+ export type QueryConstraintType = ip.QueryConstraintType;
250
+ export type ThenableReference = ip.ThenableReference;
251
+ export type TransactionOptions = ip.TransactionOptions;
252
+ export type Unsubscribe = ip.Unsubscribe;
@@ -2,7 +2,8 @@
2
2
  * `/__pyric/sdk/init.js` — the script tag `pyric dev` injects into every
3
3
  * served HTML page. Pulls the shared runtime and mounts the sign-in helper.
4
4
  * In worker mode the helper reads the worker user directory and owns UI state
5
- * only; in fallback mode it adapts the page sandbox's Auth store.
5
+ * only; in fallback mode it mints credentials via `createSignInCredential`
6
+ * so OAuth users carry real provider metadata.
6
7
  */
7
8
  import { getAuth, sandbox as authSandbox } from 'pyric/auth';
8
9
  import {
@@ -19,27 +20,36 @@ import { getPyricRuntimeStatus } from '../runtime/status.js';
19
20
 
20
21
  const localAuth = useWorker ? null : getAuth(sandbox);
21
22
  const workerAuth = useWorker && workerDb ? getWorkerAuth(workerDb) : null;
22
- const helper = new ServeAuthHelper(
23
- workerAuth
24
- ? {
25
- list: async () => (await listUsers(workerAuth)).map((user) => ({
26
- uid: user.uid,
27
- email: user.email,
28
- displayName: user.displayName,
29
- customClaims: user.customClaims,
30
- })),
31
- }
32
- : {
23
+ const helper = workerAuth
24
+ ? new ServeAuthHelper({
25
+ list: async () => (await listUsers(workerAuth)).map((user) => ({
26
+ uid: user.uid,
27
+ email: user.email,
28
+ displayName: user.displayName,
29
+ customClaims: user.customClaims,
30
+ })),
31
+ })
32
+ : new ServeAuthHelper(
33
+ {
33
34
  list: () => authSandbox.listIdentities(localAuth!),
34
- add: (identity) => authSandbox.seedUsers(localAuth!, [{
35
- uid: identity.uid,
36
- email: identity.email ?? '',
37
- password: '__pyric_popup_no_password__',
38
- displayName: identity.displayName ?? undefined,
39
- customClaims: identity.customClaims,
40
- }]),
41
35
  },
42
- );
36
+ (request) => {
37
+ if (request.kind === 'pick') {
38
+ return authSandbox.createSignInCredential(localAuth!, {
39
+ providerId: request.providerId,
40
+ uid: request.identity.uid,
41
+ });
42
+ }
43
+ return authSandbox.createSignInCredential(localAuth!, {
44
+ providerId: request.providerId,
45
+ spec: {
46
+ email: request.spec.email,
47
+ displayName: request.spec.displayName,
48
+ customClaims: request.spec.customClaims,
49
+ },
50
+ });
51
+ },
52
+ );
43
53
  const resolver = helper.resolver();
44
54
  installServeAuthResolver(resolver);
45
55
  if (localAuth) authSandbox.setAuthFlowResolver(localAuth, resolver);