@pyric/cli 0.1.0-alpha.13 → 0.1.0-alpha.15

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 (614) 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/cli/serve.d.ts +1 -1
  6. package/dist/cli/serve.d.ts.map +1 -1
  7. package/dist/cli/serve.js +208 -285
  8. package/dist/cli/serve.js.map +1 -1
  9. package/dist/cli/service-command-records/database-rules-generate.d.ts +4 -0
  10. package/dist/cli/service-command-records/database-rules-generate.d.ts.map +1 -0
  11. package/dist/cli/service-command-records/database-rules-generate.js +3 -0
  12. package/dist/cli/service-command-records/database-rules-generate.js.map +1 -0
  13. package/dist/cli/service-command-records/database-rules-lint.d.ts +4 -0
  14. package/dist/cli/service-command-records/database-rules-lint.d.ts.map +1 -0
  15. package/dist/cli/service-command-records/database-rules-lint.js +3 -0
  16. package/dist/cli/service-command-records/database-rules-lint.js.map +1 -0
  17. package/dist/cli/service-command-records/database-rules-simulate.d.ts +4 -0
  18. package/dist/cli/service-command-records/database-rules-simulate.d.ts.map +1 -0
  19. package/dist/cli/service-command-records/database-rules-simulate.js +3 -0
  20. package/dist/cli/service-command-records/database-rules-simulate.js.map +1 -0
  21. package/dist/cli/service-command-records/database-rules-validate.d.ts +4 -0
  22. package/dist/cli/service-command-records/database-rules-validate.d.ts.map +1 -0
  23. package/dist/cli/service-command-records/database-rules-validate.js +3 -0
  24. package/dist/cli/service-command-records/database-rules-validate.js.map +1 -0
  25. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts +4 -0
  26. package/dist/cli/service-command-records/firestore-indexes-generate.d.ts.map +1 -0
  27. package/dist/cli/service-command-records/firestore-indexes-generate.js +3 -0
  28. package/dist/cli/service-command-records/firestore-indexes-generate.js.map +1 -0
  29. package/dist/cli/service-command-records/firestore-rules-lint.d.ts +4 -0
  30. package/dist/cli/service-command-records/firestore-rules-lint.d.ts.map +1 -0
  31. package/dist/cli/service-command-records/firestore-rules-lint.js +3 -0
  32. package/dist/cli/service-command-records/firestore-rules-lint.js.map +1 -0
  33. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts +4 -0
  34. package/dist/cli/service-command-records/firestore-rules-resolve.d.ts.map +1 -0
  35. package/dist/cli/service-command-records/firestore-rules-resolve.js +3 -0
  36. package/dist/cli/service-command-records/firestore-rules-resolve.js.map +1 -0
  37. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts +4 -0
  38. package/dist/cli/service-command-records/firestore-rules-simulate.d.ts.map +1 -0
  39. package/dist/cli/service-command-records/firestore-rules-simulate.js +3 -0
  40. package/dist/cli/service-command-records/firestore-rules-simulate.js.map +1 -0
  41. package/dist/cli/service-command-records/firestore-rules-validate.d.ts +4 -0
  42. package/dist/cli/service-command-records/firestore-rules-validate.d.ts.map +1 -0
  43. package/dist/cli/service-command-records/firestore-rules-validate.js +3 -0
  44. package/dist/cli/service-command-records/firestore-rules-validate.js.map +1 -0
  45. package/dist/cli/service-command-records/storage-rules-lint.d.ts +4 -0
  46. package/dist/cli/service-command-records/storage-rules-lint.d.ts.map +1 -0
  47. package/dist/cli/service-command-records/storage-rules-lint.js +3 -0
  48. package/dist/cli/service-command-records/storage-rules-lint.js.map +1 -0
  49. package/dist/cli/service-command-records/storage-rules-simulate.d.ts +4 -0
  50. package/dist/cli/service-command-records/storage-rules-simulate.d.ts.map +1 -0
  51. package/dist/cli/service-command-records/storage-rules-simulate.js +3 -0
  52. package/dist/cli/service-command-records/storage-rules-simulate.js.map +1 -0
  53. package/dist/cli/service-commands.d.ts +7 -0
  54. package/dist/cli/service-commands.d.ts.map +1 -1
  55. package/dist/cli/service-commands.generated.d.ts +35 -0
  56. package/dist/cli/service-commands.generated.d.ts.map +1 -0
  57. package/dist/cli/service-commands.generated.js +25 -0
  58. package/dist/cli/service-commands.generated.js.map +1 -0
  59. package/dist/cli/service-commands.js +23 -40
  60. package/dist/cli/service-commands.js.map +1 -1
  61. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  62. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  63. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  64. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  65. package/dist/conformance/.generated/can-i-use.js +1 -1
  66. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  67. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  68. package/dist/conformance/.generated/conformance-docs.js +1 -1
  69. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  70. package/dist/functions-rtdb/development-runtime.d.ts +63 -0
  71. package/dist/functions-rtdb/development-runtime.d.ts.map +1 -0
  72. package/dist/functions-rtdb/development-runtime.js +244 -0
  73. package/dist/functions-rtdb/development-runtime.js.map +1 -0
  74. package/dist/serve/bridge-mount.d.ts +32 -2
  75. package/dist/serve/bridge-mount.d.ts.map +1 -1
  76. package/dist/serve/bridge-mount.js +232 -18
  77. package/dist/serve/bridge-mount.js.map +1 -1
  78. package/dist/serve/bundler.d.ts +4 -18
  79. package/dist/serve/bundler.d.ts.map +1 -1
  80. package/dist/serve/bundler.js +15 -37
  81. package/dist/serve/bundler.js.map +1 -1
  82. package/dist/serve/entries/app-client.d.ts.map +1 -1
  83. package/dist/serve/entries/app-client.js +5 -5
  84. package/dist/serve/entries/app-client.js.map +1 -1
  85. package/dist/serve/entries/auth-helper-core.d.ts +23 -6
  86. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
  87. package/dist/serve/entries/auth-helper-core.js +55 -24
  88. package/dist/serve/entries/auth-helper-core.js.map +1 -1
  89. package/dist/serve/entries/database.d.ts +28 -0
  90. package/dist/serve/entries/database.d.ts.map +1 -1
  91. package/dist/serve/entries/database.js +95 -26
  92. package/dist/serve/entries/database.js.map +1 -1
  93. package/dist/serve/entries/init.d.ts.map +1 -1
  94. package/dist/serve/entries/init.js +21 -12
  95. package/dist/serve/entries/init.js.map +1 -1
  96. package/dist/serve/html-injection.d.ts +5 -0
  97. package/dist/serve/html-injection.d.ts.map +1 -0
  98. package/dist/serve/html-injection.js +59 -0
  99. package/dist/serve/html-injection.js.map +1 -0
  100. package/dist/serve/namespace.d.ts +6 -22
  101. package/dist/serve/namespace.d.ts.map +1 -1
  102. package/dist/serve/namespace.js +23 -145
  103. package/dist/serve/namespace.js.map +1 -1
  104. package/dist/serve/runtime/worker-generation.d.ts +10 -2
  105. package/dist/serve/runtime/worker-generation.d.ts.map +1 -1
  106. package/dist/serve/runtime/worker-generation.js +29 -8
  107. package/dist/serve/runtime/worker-generation.js.map +1 -1
  108. package/dist/serve/runtime/worker-replacement.d.ts +1 -2
  109. package/dist/serve/runtime/worker-replacement.d.ts.map +1 -1
  110. package/dist/serve/sandbox-session.d.ts +78 -0
  111. package/dist/serve/sandbox-session.d.ts.map +1 -0
  112. package/dist/serve/sandbox-session.js +171 -0
  113. package/dist/serve/sandbox-session.js.map +1 -0
  114. package/dist/serve/server.d.ts +5 -2
  115. package/dist/serve/server.d.ts.map +1 -1
  116. package/dist/serve/server.js +21 -5
  117. package/dist/serve/server.js.map +1 -1
  118. package/dist/serve/site-tree.d.ts +8 -0
  119. package/dist/serve/site-tree.d.ts.map +1 -0
  120. package/dist/serve/site-tree.js +113 -0
  121. package/dist/serve/site-tree.js.map +1 -0
  122. package/dist/serve/site-ui/_astro/RulesCodeEditor.CzwHdCi9.js +23 -0
  123. package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +1 -0
  124. package/dist/serve/site-ui/_astro/_slug_.BoKXYrnu.css +1 -0
  125. package/dist/serve/site-ui/_astro/_studio_.BtYpqe1A.css +1 -0
  126. package/dist/serve/site-ui/_astro/app.BnMC0ywl.js +109 -0
  127. package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +1 -0
  128. package/dist/serve/site-ui/_astro/app.DVXXR-WI.js +1 -0
  129. package/dist/serve/site-ui/_astro/chess-showcase.DzPO6kz0.js +1 -0
  130. package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +1 -0
  131. package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +354 -0
  132. package/dist/serve/site-ui/_astro/client.D2ORs4B-.js +25 -0
  133. package/dist/serve/site-ui/_astro/example-runtime.CM0H02rx.js +291 -0
  134. package/dist/serve/site-ui/_astro/index.B4Kh80he.js +1 -0
  135. package/dist/serve/site-ui/_astro/index.DBy5LfQW.js +9 -0
  136. package/dist/serve/site-ui/_astro/index.DNyk7q8W.js +9 -0
  137. package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +9 -0
  138. package/dist/serve/site-ui/_astro/reads.D1exkX1-.js +1 -0
  139. package/dist/serve/site-ui/_astro/sandbox-controls.BqMePr5V.js +1153 -0
  140. package/dist/serve/site-ui/_astro/seed.BCn5DhHS.js +20 -0
  141. package/dist/serve/site-ui/auth/index.html +11 -0
  142. package/dist/serve/site-ui/docs/_rhythm/index.html +100 -0
  143. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +43 -0
  144. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +26 -0
  145. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +70 -0
  146. package/dist/serve/{docs-ui → site-ui}/docs/ai-compat/index.html +3 -3
  147. package/dist/serve/site-ui/docs/api-reference/index.html +68 -0
  148. package/dist/serve/{docs-ui → site-ui}/docs/app-compat/index.html +3 -3
  149. package/dist/serve/{docs-ui → site-ui}/docs/auth-compat/index.html +3 -3
  150. package/dist/serve/site-ui/docs/build/ai-logic/index.html +64 -0
  151. package/dist/serve/site-ui/docs/build/authentication/index.html +66 -0
  152. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +84 -0
  153. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +71 -0
  154. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +66 -0
  155. package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-storage.md +2 -2
  156. package/dist/serve/site-ui/docs/build/realtime-database/index.html +67 -0
  157. package/dist/serve/site-ui/docs/conformance-scores/index.html +50 -0
  158. package/dist/serve/{docs-ui → site-ui}/docs/conformance-scores.md +3 -3
  159. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +531 -0
  160. package/dist/serve/{docs-ui → site-ui}/docs/database-compat/index.html +211 -168
  161. package/dist/serve/{docs-ui → site-ui}/docs/database-compat.md +208 -170
  162. package/dist/serve/site-ui/docs/examples/chess/index.html +384 -0
  163. package/dist/serve/site-ui/docs/examples/chess.md +57 -0
  164. package/dist/serve/site-ui/docs/examples/index.html +3 -0
  165. package/dist/serve/site-ui/docs/examples.md +4 -0
  166. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat/index.html +55 -91
  167. package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat.md +52 -88
  168. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +73 -0
  169. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +29 -0
  170. package/dist/serve/site-ui/docs/get-started/start-building/index.html +33 -0
  171. package/dist/serve/{docs-ui → site-ui}/docs/index.json +595 -26
  172. package/dist/serve/site-ui/docs/messaging-compat/index.html +324 -0
  173. package/dist/serve/{docs-ui → site-ui}/docs/messaging-compat.md +71 -1
  174. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +28 -0
  175. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +74 -0
  176. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +45 -0
  177. package/dist/serve/site-ui/docs/overview/index.html +17 -0
  178. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +186 -0
  179. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api/index.html +4 -4
  180. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api/index.html +4 -4
  181. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api/index.html +318 -202
  182. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api.md +154 -27
  183. package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api/index.html +5 -5
  184. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +318 -0
  185. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api/index.html +5 -5
  186. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +160 -0
  187. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +425 -0
  188. package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api/index.html +5 -5
  189. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +60 -0
  190. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api/index.html +4 -4
  191. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api/index.html +4 -4
  192. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +507 -0
  193. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +258 -0
  194. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
  195. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +308 -0
  196. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +68 -0
  197. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api/index.html +4 -4
  198. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +11 -0
  199. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api/index.html +4 -4
  200. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api/index.html +1186 -1384
  201. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api.md +817 -1291
  202. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api/index.html +4 -4
  203. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +126 -0
  204. package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-vite-reference-api.md +1 -1
  205. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2641 -0
  206. package/dist/serve/{docs-ui → site-ui}/docs/pyric-database-reference-api.md +1055 -158
  207. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api/index.html +311 -249
  208. package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api.md +72 -54
  209. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +509 -0
  210. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +182 -0
  211. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api/index.html +7 -26
  212. package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api.md +13 -23
  213. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +121 -0
  214. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +203 -0
  215. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api/index.html +26 -5
  216. package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api.md +22 -22
  217. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api/index.html +5 -15
  218. package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api.md +0 -13
  219. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +639 -0
  220. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +100 -0
  221. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api/index.html +4 -4
  222. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +24 -0
  223. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api/index.html +4 -4
  224. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +136 -0
  225. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api/index.html +7 -7
  226. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api.md +4 -4
  227. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api/index.html +4 -4
  228. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api/index.html +4 -4
  229. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +16 -0
  230. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api/index.html +4 -4
  231. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +176 -0
  232. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api/index.html +10 -11
  233. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api.md +7 -8
  234. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +188 -0
  235. package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api/index.html +4 -4
  236. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat/index.html +87 -57
  237. package/dist/serve/{docs-ui → site-ui}/docs/rules-compat.md +84 -54
  238. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +51 -0
  239. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +106 -0
  240. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +41 -0
  241. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +67 -0
  242. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +159 -0
  243. package/dist/serve/{docs-ui → site-ui}/docs/secure/rules-standard-library.md +2 -2
  244. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +47 -0
  245. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +95 -0
  246. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +82 -0
  247. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +37 -0
  248. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +75 -0
  249. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat/index.html +8 -8
  250. package/dist/serve/{docs-ui → site-ui}/docs/storage-compat.md +5 -5
  251. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +132 -0
  252. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +861 -0
  253. package/dist/serve/site-ui/docs/trust/rules-standard-library.md +344 -0
  254. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +582 -0
  255. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +448 -0
  256. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +14 -0
  257. package/dist/serve/{docs-ui → site-ui}/docs/tutorial/index.html +4 -4
  258. package/dist/serve/{docs-ui → site-ui}/docs/tutorial.md +1 -1
  259. package/dist/serve/site-ui/examples/chess/index.html +2 -0
  260. package/dist/serve/site-ui/examples/firestore-first-write/index.html +2 -0
  261. package/dist/serve/site-ui/firestore/index.html +11 -0
  262. package/dist/serve/site-ui/index.html +11 -0
  263. package/dist/serve/{docs-ui → site-ui}/llms.txt +6 -2
  264. package/dist/serve/site-ui/rtdb/index.html +11 -0
  265. package/dist/serve/site-ui/settings/index.html +11 -0
  266. package/dist/serve/site-ui/storage/index.html +11 -0
  267. package/dist/serve/site-ui/studio-routes.json +1 -0
  268. package/dist/serve/site-ui/traffic/index.html +11 -0
  269. package/dist/serve/standalone-assets.d.ts +4 -10
  270. package/dist/serve/standalone-assets.d.ts.map +1 -1
  271. package/dist/serve/standalone-assets.js +8 -21
  272. package/dist/serve/standalone-assets.js.map +1 -1
  273. package/dist/serve/vite-ai-config.d.ts +2 -0
  274. package/dist/serve/vite-ai-config.d.ts.map +1 -1
  275. package/dist/serve/vite-ai-config.js +4 -0
  276. package/dist/serve/vite-ai-config.js.map +1 -1
  277. package/dist/serve/vite-functions-development.d.ts +29 -0
  278. package/dist/serve/vite-functions-development.d.ts.map +1 -0
  279. package/dist/serve/vite-functions-development.js +150 -0
  280. package/dist/serve/vite-functions-development.js.map +1 -0
  281. package/dist/serve/vite-generation-bridge.d.ts +17 -0
  282. package/dist/serve/vite-generation-bridge.d.ts.map +1 -0
  283. package/dist/serve/vite-generation-bridge.js +47 -0
  284. package/dist/serve/vite-generation-bridge.js.map +1 -0
  285. package/dist/serve/vite-generation-functions.d.ts +35 -0
  286. package/dist/serve/vite-generation-functions.d.ts.map +1 -0
  287. package/dist/serve/vite-generation-functions.js +46 -0
  288. package/dist/serve/vite-generation-functions.js.map +1 -0
  289. package/dist/serve/vite-generation-middleware.d.ts +10 -0
  290. package/dist/serve/vite-generation-middleware.d.ts.map +1 -0
  291. package/dist/serve/vite-generation-middleware.js +40 -0
  292. package/dist/serve/vite-generation-middleware.js.map +1 -0
  293. package/dist/serve/vite-generation-rules-watch.d.ts +8 -0
  294. package/dist/serve/vite-generation-rules-watch.d.ts.map +1 -0
  295. package/dist/serve/vite-generation-rules-watch.js +33 -0
  296. package/dist/serve/vite-generation-rules-watch.js.map +1 -0
  297. package/dist/serve/vite-module-swap.d.ts +16 -0
  298. package/dist/serve/vite-module-swap.d.ts.map +1 -0
  299. package/dist/serve/vite-module-swap.js +96 -0
  300. package/dist/serve/vite-module-swap.js.map +1 -0
  301. package/dist/serve/vite-page-runtime.d.ts +29 -0
  302. package/dist/serve/vite-page-runtime.d.ts.map +1 -0
  303. package/dist/serve/vite-page-runtime.js +71 -0
  304. package/dist/serve/vite-page-runtime.js.map +1 -0
  305. package/dist/serve/vite-plugin.d.ts +44 -4
  306. package/dist/serve/vite-plugin.d.ts.map +1 -1
  307. package/dist/serve/vite-plugin.js +62 -864
  308. package/dist/serve/vite-plugin.js.map +1 -1
  309. package/dist/serve/vite-sandbox-generation.d.ts +57 -0
  310. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -0
  311. package/dist/serve/vite-sandbox-generation.js +178 -0
  312. package/dist/serve/vite-sandbox-generation.js.map +1 -0
  313. package/dist/serve/vite-worker-runtime.d.ts +1 -1
  314. package/dist/serve/vite-worker-runtime.d.ts.map +1 -1
  315. package/dist/serve/vite-worker-runtime.js +8 -4
  316. package/dist/serve/vite-worker-runtime.js.map +1 -1
  317. package/dist/serve/worker/client/disconnect.d.ts.map +1 -1
  318. package/dist/serve/worker/client/disconnect.js +2 -0
  319. package/dist/serve/worker/client/disconnect.js.map +1 -1
  320. package/dist/serve/worker/client/handles.d.ts +5 -0
  321. package/dist/serve/worker/client/handles.d.ts.map +1 -1
  322. package/dist/serve/worker/client/handles.js.map +1 -1
  323. package/dist/serve/worker/client/pagehide.d.ts +13 -0
  324. package/dist/serve/worker/client/pagehide.d.ts.map +1 -0
  325. package/dist/serve/worker/client/pagehide.js +19 -0
  326. package/dist/serve/worker/client/pagehide.js.map +1 -0
  327. package/dist/serve/worker/client/rtdb-admin.d.ts +8 -0
  328. package/dist/serve/worker/client/rtdb-admin.d.ts.map +1 -0
  329. package/dist/serve/worker/client/rtdb-admin.js +39 -0
  330. package/dist/serve/worker/client/rtdb-admin.js.map +1 -0
  331. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts +15 -0
  332. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts.map +1 -0
  333. package/dist/serve/worker/client/rtdb-connection-lifecycle.js +45 -0
  334. package/dist/serve/worker/client/rtdb-connection-lifecycle.js.map +1 -0
  335. package/dist/serve/worker/client/rtdb-controls.d.ts +6 -0
  336. package/dist/serve/worker/client/rtdb-controls.d.ts.map +1 -0
  337. package/dist/serve/worker/client/rtdb-controls.js +8 -0
  338. package/dist/serve/worker/client/rtdb-controls.js.map +1 -0
  339. package/dist/serve/worker/client/rtdb-listeners.d.ts +24 -0
  340. package/dist/serve/worker/client/rtdb-listeners.d.ts.map +1 -0
  341. package/dist/serve/worker/client/rtdb-listeners.js +262 -0
  342. package/dist/serve/worker/client/rtdb-listeners.js.map +1 -0
  343. package/dist/serve/worker/client/rtdb-reads.d.ts +4 -0
  344. package/dist/serve/worker/client/rtdb-reads.d.ts.map +1 -0
  345. package/dist/serve/worker/client/rtdb-reads.js +11 -0
  346. package/dist/serve/worker/client/rtdb-reads.js.map +1 -0
  347. package/dist/serve/worker/client/rtdb-references.d.ts +19 -0
  348. package/dist/serve/worker/client/rtdb-references.d.ts.map +1 -0
  349. package/dist/serve/worker/client/rtdb-references.js +63 -0
  350. package/dist/serve/worker/client/rtdb-references.js.map +1 -0
  351. package/dist/serve/worker/client/rtdb-snapshots.d.ts +20 -0
  352. package/dist/serve/worker/client/rtdb-snapshots.d.ts.map +1 -0
  353. package/dist/serve/worker/client/rtdb-snapshots.js +64 -0
  354. package/dist/serve/worker/client/rtdb-snapshots.js.map +1 -0
  355. package/dist/serve/worker/client/rtdb-transactions.d.ts +14 -0
  356. package/dist/serve/worker/client/rtdb-transactions.d.ts.map +1 -0
  357. package/dist/serve/worker/client/rtdb-transactions.js +34 -0
  358. package/dist/serve/worker/client/rtdb-transactions.js.map +1 -0
  359. package/dist/serve/worker/client/rtdb-writes.d.ts +8 -0
  360. package/dist/serve/worker/client/rtdb-writes.d.ts.map +1 -0
  361. package/dist/serve/worker/client/rtdb-writes.js +65 -0
  362. package/dist/serve/worker/client/rtdb-writes.js.map +1 -0
  363. package/dist/serve/worker/client.d.ts +0 -2
  364. package/dist/serve/worker/client.d.ts.map +1 -1
  365. package/dist/serve/worker/client.js +0 -2
  366. package/dist/serve/worker/client.js.map +1 -1
  367. package/dist/serve/worker/entry.js +2 -2
  368. package/dist/serve/worker/entry.js.map +1 -1
  369. package/dist/serve/worker/host/dispatch.d.ts +2 -0
  370. package/dist/serve/worker/host/dispatch.d.ts.map +1 -1
  371. package/dist/serve/worker/host/dispatch.js +24 -2
  372. package/dist/serve/worker/host/dispatch.js.map +1 -1
  373. package/dist/serve/worker/host/rtdb.d.ts +6 -2
  374. package/dist/serve/worker/host/rtdb.d.ts.map +1 -1
  375. package/dist/serve/worker/host/rtdb.js +224 -2
  376. package/dist/serve/worker/host/rtdb.js.map +1 -1
  377. package/dist/serve/worker/host/studio.d.ts.map +1 -1
  378. package/dist/serve/worker/host/studio.js +2 -0
  379. package/dist/serve/worker/host/studio.js.map +1 -1
  380. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  381. package/dist/serve/worker/host/subscriptions.js +3 -3
  382. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  383. package/dist/serve/worker/host.d.ts +1 -1
  384. package/dist/serve/worker/host.d.ts.map +1 -1
  385. package/dist/serve/worker/host.js +1 -1
  386. package/dist/serve/worker/host.js.map +1 -1
  387. package/dist/serve/worker/index.d.ts +16 -1
  388. package/dist/serve/worker/index.d.ts.map +1 -1
  389. package/dist/serve/worker/index.js +17 -4
  390. package/dist/serve/worker/index.js.map +1 -1
  391. package/dist/serve/worker/protocol.d.ts +57 -0
  392. package/dist/serve/worker/protocol.d.ts.map +1 -1
  393. package/dist/serve/worker/protocol.js.map +1 -1
  394. package/dist/serve/worker/rtdb-value-equality.d.ts +3 -0
  395. package/dist/serve/worker/rtdb-value-equality.d.ts.map +1 -0
  396. package/dist/serve/worker/rtdb-value-equality.js +18 -0
  397. package/dist/serve/worker/rtdb-value-equality.js.map +1 -0
  398. package/dist/serve/worker/serve-init.js +2 -2
  399. package/dist/serve/worker/serve-init.js.map +1 -1
  400. package/dist/serve/worker/service-worker-relay.js +2 -2
  401. package/dist/serve/worker/service-worker-relay.js.map +1 -1
  402. package/package.json +7 -5
  403. package/src/assurance/.generated/conformance-verdicts.ts +120 -75
  404. package/src/cli/serve.ts +216 -308
  405. package/src/cli/service-command-records/database-rules-generate.ts +3 -0
  406. package/src/cli/service-command-records/database-rules-lint.ts +3 -0
  407. package/src/cli/service-command-records/database-rules-simulate.ts +3 -0
  408. package/src/cli/service-command-records/database-rules-validate.ts +3 -0
  409. package/src/cli/service-command-records/firestore-indexes-generate.ts +3 -0
  410. package/src/cli/service-command-records/firestore-rules-lint.ts +3 -0
  411. package/src/cli/service-command-records/firestore-rules-resolve.ts +3 -0
  412. package/src/cli/service-command-records/firestore-rules-simulate.ts +3 -0
  413. package/src/cli/service-command-records/firestore-rules-validate.ts +3 -0
  414. package/src/cli/service-command-records/storage-rules-lint.ts +3 -0
  415. package/src/cli/service-command-records/storage-rules-simulate.ts +3 -0
  416. package/src/cli/service-commands.generated.ts +27 -0
  417. package/src/cli/service-commands.test.ts +43 -0
  418. package/src/cli/service-commands.ts +36 -51
  419. package/src/conformance/.generated/can-i-use-browser.ts +1 -1
  420. package/src/conformance/.generated/can-i-use.ts +1 -1
  421. package/src/conformance/.generated/conformance-docs.ts +1 -1
  422. package/src/functions-rtdb/development-runtime.ts +299 -0
  423. package/src/serve/bridge-mount.ts +253 -19
  424. package/src/serve/bundler.ts +17 -36
  425. package/src/serve/entries/app-client.ts +5 -4
  426. package/src/serve/entries/auth-helper-core.ts +83 -30
  427. package/src/serve/entries/database.ts +180 -57
  428. package/src/serve/entries/init.ts +30 -20
  429. package/src/serve/html-injection.ts +65 -0
  430. package/src/serve/namespace.ts +26 -169
  431. package/src/serve/runtime/worker-generation.ts +29 -7
  432. package/src/serve/runtime/worker-replacement.ts +1 -1
  433. package/src/serve/sandbox-session.ts +233 -0
  434. package/src/serve/server.ts +20 -5
  435. package/src/serve/site-tree.ts +146 -0
  436. package/src/serve/standalone-assets.ts +9 -26
  437. package/src/serve/vite-ai-config.ts +8 -0
  438. package/src/serve/vite-functions-development.ts +201 -0
  439. package/src/serve/vite-generation-bridge.ts +66 -0
  440. package/src/serve/vite-generation-functions.ts +78 -0
  441. package/src/serve/vite-generation-middleware.ts +56 -0
  442. package/src/serve/vite-generation-rules-watch.ts +37 -0
  443. package/src/serve/vite-module-swap.ts +119 -0
  444. package/src/serve/vite-page-runtime.ts +100 -0
  445. package/src/serve/vite-plugin.ts +78 -882
  446. package/src/serve/vite-sandbox-generation.ts +255 -0
  447. package/src/serve/vite-worker-runtime.ts +12 -5
  448. package/src/serve/worker/client/disconnect.ts +3 -1
  449. package/src/serve/worker/client/handles.ts +5 -0
  450. package/src/serve/worker/client/pagehide.ts +31 -0
  451. package/src/serve/worker/client/rtdb-admin.ts +74 -0
  452. package/src/serve/worker/client/rtdb-connection-lifecycle.ts +52 -0
  453. package/src/serve/worker/client/rtdb-controls.ts +8 -0
  454. package/src/serve/worker/client/rtdb-listeners.ts +337 -0
  455. package/src/serve/worker/client/rtdb-reads.ts +12 -0
  456. package/src/serve/worker/client/rtdb-references.ts +85 -0
  457. package/src/serve/worker/client/rtdb-snapshots.ts +118 -0
  458. package/src/serve/worker/client/rtdb-transactions.ts +51 -0
  459. package/src/serve/worker/client/rtdb-writes.ts +74 -0
  460. package/src/serve/worker/client.ts +0 -2
  461. package/src/serve/worker/entry.ts +2 -2
  462. package/src/serve/worker/host/dispatch.ts +22 -2
  463. package/src/serve/worker/host/rtdb.ts +243 -2
  464. package/src/serve/worker/host/studio.ts +2 -0
  465. package/src/serve/worker/host/subscriptions.ts +8 -4
  466. package/src/serve/worker/host.ts +1 -1
  467. package/src/serve/worker/index.ts +58 -10
  468. package/src/serve/worker/protocol.ts +23 -2
  469. package/src/serve/worker/rtdb-value-equality.ts +17 -0
  470. package/src/serve/worker/serve-init.ts +2 -2
  471. package/src/serve/worker/service-worker-relay.ts +2 -2
  472. package/dist/serve/docs-ui/_astro/_slug_.DUci-duz.css +0 -1
  473. package/dist/serve/docs-ui/docs/_rhythm/index.html +0 -100
  474. package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +0 -43
  475. package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +0 -26
  476. package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +0 -70
  477. package/dist/serve/docs-ui/docs/api-reference/index.html +0 -68
  478. package/dist/serve/docs-ui/docs/build/ai-logic/index.html +0 -64
  479. package/dist/serve/docs-ui/docs/build/authentication/index.html +0 -66
  480. package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +0 -70
  481. package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +0 -71
  482. package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +0 -66
  483. package/dist/serve/docs-ui/docs/build/realtime-database/index.html +0 -67
  484. package/dist/serve/docs-ui/docs/conformance-scores/index.html +0 -50
  485. package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +0 -531
  486. package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +0 -73
  487. package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +0 -29
  488. package/dist/serve/docs-ui/docs/get-started/start-building/index.html +0 -33
  489. package/dist/serve/docs-ui/docs/messaging-compat/index.html +0 -265
  490. package/dist/serve/docs-ui/docs/observe/resolve-runtime-status/index.html +0 -28
  491. package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +0 -74
  492. package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +0 -45
  493. package/dist/serve/docs-ui/docs/overview/index.html +0 -17
  494. package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +0 -186
  495. package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +0 -318
  496. package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +0 -160
  497. package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +0 -425
  498. package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +0 -60
  499. package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +0 -507
  500. package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +0 -258
  501. package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +0 -51
  502. package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +0 -308
  503. package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +0 -68
  504. package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +0 -11
  505. package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +0 -126
  506. package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +0 -1852
  507. package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +0 -509
  508. package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +0 -182
  509. package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +0 -121
  510. package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +0 -203
  511. package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +0 -639
  512. package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +0 -100
  513. package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +0 -24
  514. package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +0 -136
  515. package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +0 -16
  516. package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +0 -176
  517. package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +0 -188
  518. package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +0 -51
  519. package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +0 -106
  520. package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +0 -41
  521. package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +0 -67
  522. package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +0 -159
  523. package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +0 -47
  524. package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +0 -95
  525. package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +0 -82
  526. package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +0 -37
  527. package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +0 -75
  528. package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +0 -132
  529. package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +0 -14
  530. package/dist/serve/docs-ui/index.html +0 -1
  531. package/dist/serve/studio-ui/assets/RulesCodeEditor-BDlH-5lp.js +0 -23
  532. package/dist/serve/studio-ui/assets/index-Bf9SSE8L.js +0 -1218
  533. package/dist/serve/studio-ui/assets/index-BlSGru_r.css +0 -1
  534. package/dist/serve/studio-ui/assets/seed-D_UjxfOU.js +0 -20
  535. package/dist/serve/studio-ui/index.html +0 -32
  536. package/dist/serve/worker/client/rtdb.d.ts +0 -36
  537. package/dist/serve/worker/client/rtdb.d.ts.map +0 -1
  538. package/dist/serve/worker/client/rtdb.js +0 -241
  539. package/dist/serve/worker/client/rtdb.js.map +0 -1
  540. package/src/serve/worker/client/rtdb.ts +0 -311
  541. /package/dist/serve/{docs-ui → site-ui}/404.html +0 -0
  542. /package/dist/serve/{docs-ui → site-ui}/_astro/_slug_.CXh9yTP1.css +0 -0
  543. /package/dist/serve/{docs-ui → site-ui}/docs/_rhythm.md +0 -0
  544. /package/dist/serve/{docs-ui → site-ui}/docs/agent/set-up-your-agent.md +0 -0
  545. /package/dist/serve/{docs-ui → site-ui}/docs/agent/watch-and-review.md +0 -0
  546. /package/dist/serve/{docs-ui → site-ui}/docs/agent/work-with-an-agent.md +0 -0
  547. /package/dist/serve/{docs-ui → site-ui}/docs/ai-compat.md +0 -0
  548. /package/dist/serve/{docs-ui → site-ui}/docs/api-reference.md +0 -0
  549. /package/dist/serve/{docs-ui → site-ui}/docs/app-compat.md +0 -0
  550. /package/dist/serve/{docs-ui → site-ui}/docs/auth-compat.md +0 -0
  551. /package/dist/serve/{docs-ui → site-ui}/docs/build/ai-logic.md +0 -0
  552. /package/dist/serve/{docs-ui → site-ui}/docs/build/authentication.md +0 -0
  553. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-firestore.md +0 -0
  554. /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-messaging.md +0 -0
  555. /package/dist/serve/{docs-ui → site-ui}/docs/build/realtime-database.md +0 -0
  556. /package/dist/serve/{docs-ui → site-ui}/docs/create-pyric-reference-api.md +0 -0
  557. /package/dist/serve/{docs-ui → site-ui}/docs/functions-rtdb-compat.md +0 -0
  558. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/how-the-swap-works.md +0 -0
  559. /package/dist/serve/{docs-ui → site-ui}/docs/get-started/start-building.md +0 -0
  560. /package/dist/serve/{docs-ui → site-ui}/docs/index.html +0 -0
  561. /package/dist/serve/{docs-ui → site-ui}/docs/observe/resolve-runtime-status.md +0 -0
  562. /package/dist/serve/{docs-ui → site-ui}/docs/observe/see-whats-happening.md +0 -0
  563. /package/dist/serve/{docs-ui → site-ui}/docs/observe/shape-your-data.md +0 -0
  564. /package/dist/serve/{docs-ui → site-ui}/docs/overview.md +0 -0
  565. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-app-reference-api.md +0 -0
  566. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api.md +0 -0
  567. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api.md +0 -0
  568. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api.md +0 -0
  569. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-storage-reference-api.md +0 -0
  570. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api.md +0 -0
  571. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-scripting-reference-api.md +0 -0
  572. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-app-reference-api.md +0 -0
  573. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api.md +0 -0
  574. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-browser-reference-api.md +0 -0
  575. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api.md +0 -0
  576. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api.md +0 -0
  577. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-reference-api.md +0 -0
  578. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-browser-reference-api.md +0 -0
  579. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-docs-reference-api.md +0 -0
  580. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-reference-api.md +0 -0
  581. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-credentials-node-reference-api.md +0 -0
  582. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api.md +0 -0
  583. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-register-reference-api.md +0 -0
  584. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api.md +0 -0
  585. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api.md +0 -0
  586. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-reference-api.md +0 -0
  587. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-sw-reference-api.md +0 -0
  588. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-database-reference-api.md +0 -0
  589. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-firestore-reference-api.md +0 -0
  590. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-agents-reference-api.md +0 -0
  591. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-hooks-reference-api.md +0 -0
  592. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api.md +0 -0
  593. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-hooks-reference-api.md +0 -0
  594. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api.md +0 -0
  595. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-hooks-reference-api.md +0 -0
  596. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api.md +0 -0
  597. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api.md +0 -0
  598. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-hooks-reference-api.md +0 -0
  599. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api.md +0 -0
  600. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-hooks-reference-api.md +0 -0
  601. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-hooks-reference-api.md +0 -0
  602. /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api.md +0 -0
  603. /package/dist/serve/{docs-ui → site-ui}/docs/secure/audit-your-rules.md +0 -0
  604. /package/dist/serve/{docs-ui → site-ui}/docs/secure/firestore-rules-limits.md +0 -0
  605. /package/dist/serve/{docs-ui → site-ui}/docs/secure/read-a-denial.md +0 -0
  606. /package/dist/serve/{docs-ui → site-ui}/docs/secure/rtdb-rules-in-typescript.md +0 -0
  607. /package/dist/serve/{docs-ui → site-ui}/docs/secure/secure-it-with-rules.md +0 -0
  608. /package/dist/serve/{docs-ui → site-ui}/docs/secure/simulate-and-lint.md +0 -0
  609. /package/dist/serve/{docs-ui → site-ui}/docs/secure/write-a-rules-test-suite.md +0 -0
  610. /package/dist/serve/{docs-ui → site-ui}/docs/ship/ship-to-production.md +0 -0
  611. /package/dist/serve/{docs-ui → site-ui}/docs/ship/test-in-node.md +0 -0
  612. /package/dist/serve/{docs-ui → site-ui}/docs/trust/how-we-know-it-matches-firebase.md +0 -0
  613. /package/dist/serve/{docs-ui → site-ui}/docs/trust/versioning-and-compatibility.md +0 -0
  614. /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
  }
@@ -384,6 +358,8 @@ export interface WorkerBundleOptions {
384
358
  minify?: boolean;
385
359
  /** Test seam for proving epoch identity from an isolated executable graph. */
386
360
  entryPath?: string;
361
+ /** Restart-required boot identity mixed into the baked worker epoch. */
362
+ epochSalt?: string;
387
363
  }
388
364
 
389
365
  const WORKER_EPOCH_PLACEHOLDER = 'PYRIC_EPOCH_HERE';
@@ -470,7 +446,10 @@ export interface WorkerBundleResult {
470
446
  export async function bundleWorker(opts: WorkerBundleOptions): Promise<WorkerBundleResult> {
471
447
  const outFile = join(opts.outDir, 'worker.js');
472
448
  const marker = join(opts.outDir, '.worker-complete');
473
- const hash = workerSourceHash();
449
+ const sourceHash = workerSourceHash();
450
+ const hash = opts.epochSalt
451
+ ? createHash('sha256').update(sourceHash).update('\0').update(opts.epochSalt).digest('hex')
452
+ : sourceHash;
474
453
  if (
475
454
  !opts.noCache &&
476
455
  existsSync(outFile) &&
@@ -511,7 +490,9 @@ export async function bundleWorker(opts: WorkerBundleOptions): Promise<WorkerBun
511
490
  if (!canonicalSource.includes(WORKER_EPOCH_PLACEHOLDER)) {
512
491
  throw new Error('pyric dev: SharedWorker bundle omitted its epoch placeholder');
513
492
  }
514
- const epoch = createHash('sha256').update(canonicalSource).digest('hex').slice(0, 16);
493
+ const epochHash = createHash('sha256').update(canonicalSource);
494
+ if (opts.epochSalt) epochHash.update('\0').update(opts.epochSalt);
495
+ const epoch = epochHash.digest('hex').slice(0, 16);
515
496
  writeFileSync(outFile, canonicalSource.replaceAll(WORKER_EPOCH_PLACEHOLDER, epoch));
516
497
  writeFileSync(join(opts.outDir, WORKER_EPOCH_FILE), epoch);
517
498
  writeFileSync(marker, hash);
@@ -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,65 @@ 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
+ const identity: HelperIdentity = {
179
+ uid: `${request.providerId}:${request.spec.email}`,
180
+ email: request.spec.email,
181
+ displayName: request.spec.displayName ?? null,
182
+ customClaims: request.spec.customClaims ?? {},
171
183
  };
172
- return { user, providerId, operationType: 'signIn' };
184
+ await Promise.resolve(this.directory.add?.(identity));
185
+ return bareCredential(identity, request.providerId);
173
186
  }
174
187
  }
175
188
 
189
+ /** Bare helper User — worker path discards this in favor of `acceptIdentity`. */
190
+ function bareCredential(identity: HelperIdentity, providerId: string): UserCredential {
191
+ const issuedAtTime = new Date().toISOString();
192
+ const expirationTime = new Date(Date.now() + 3600_000).toISOString();
193
+ const user: User = {
194
+ uid: identity.uid,
195
+ email: identity.email,
196
+ displayName: identity.displayName,
197
+ isAnonymous: false,
198
+ emailVerified: false,
199
+ photoURL: null,
200
+ phoneNumber: null,
201
+ providerId: 'firebase',
202
+ providerData: [
203
+ {
204
+ uid: identity.uid,
205
+ displayName: identity.displayName,
206
+ email: identity.email,
207
+ phoneNumber: null,
208
+ photoURL: null,
209
+ providerId,
210
+ },
211
+ ],
212
+ getIdToken: async () => `pyric-serve-${identity.uid}`,
213
+ getIdTokenResult: async () => ({
214
+ token: `pyric-serve-${identity.uid}`,
215
+ claims: {
216
+ sub: identity.uid,
217
+ ...identity.customClaims,
218
+ firebase: { sign_in_provider: providerId },
219
+ },
220
+ signInProvider: providerId,
221
+ expirationTime,
222
+ issuedAtTime,
223
+ authTime: issuedAtTime,
224
+ }),
225
+ };
226
+ return { user, providerId, operationType: 'signIn' };
227
+ }
228
+
176
229
  function authError(code: string, message: string): Error & { code: string } {
177
230
  const error = new Error(message) as Error & { code: string };
178
231
  error.name = 'FirebaseError';
@@ -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);