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