@pyric/cli 0.1.0-alpha.30.2 → 0.1.0-alpha.31

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 (1327) hide show
  1. package/dist/assurance/.generated/conformance-verdicts.d.ts +107 -40
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  3. package/dist/assurance/.generated/conformance-verdicts.js +107 -40
  4. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  5. package/dist/assurance/capabilities.d.ts.map +1 -1
  6. package/dist/assurance/capabilities.js +12 -14
  7. package/dist/assurance/capabilities.js.map +1 -1
  8. package/dist/bounded-request.d.ts +27 -5
  9. package/dist/bounded-request.d.ts.map +1 -1
  10. package/dist/bounded-request.js +48 -4
  11. package/dist/bounded-request.js.map +1 -1
  12. package/dist/bridge/client/bridge-url.d.ts +5 -1
  13. package/dist/bridge/client/bridge-url.d.ts.map +1 -1
  14. package/dist/bridge/client/bridge-url.js +5 -1
  15. package/dist/bridge/client/bridge-url.js.map +1 -1
  16. package/dist/bridge/client/bridge.d.ts +9 -3
  17. package/dist/bridge/client/bridge.d.ts.map +1 -1
  18. package/dist/bridge/client/bridge.js +17 -3
  19. package/dist/bridge/client/bridge.js.map +1 -1
  20. package/dist/bridge/frame-output.d.ts.map +1 -1
  21. package/dist/bridge/frame-output.js +46 -0
  22. package/dist/bridge/frame-output.js.map +1 -1
  23. package/dist/bridge/protocol.d.ts +10 -0
  24. package/dist/bridge/protocol.d.ts.map +1 -1
  25. package/dist/bridge/protocol.js +10 -0
  26. package/dist/bridge/protocol.js.map +1 -1
  27. package/dist/bridge/server/in-process.d.ts +16 -7
  28. package/dist/bridge/server/in-process.d.ts.map +1 -1
  29. package/dist/bridge/server/in-process.js +51 -17
  30. package/dist/bridge/server/in-process.js.map +1 -1
  31. package/dist/bridge/server/peer.d.ts +8 -0
  32. package/dist/bridge/server/peer.d.ts.map +1 -1
  33. package/dist/bridge/server/peer.js +10 -0
  34. package/dist/bridge/server/peer.js.map +1 -1
  35. package/dist/bridge/server/standalone.d.ts +7 -2
  36. package/dist/bridge/server/standalone.d.ts.map +1 -1
  37. package/dist/bridge/server/standalone.js +27 -99
  38. package/dist/bridge/server/standalone.js.map +1 -1
  39. package/dist/bridge/surface/arguments/firestore.d.ts +6 -6
  40. package/dist/bridge/surface/arguments/sandbox.d.ts +0 -47
  41. package/dist/bridge/surface/arguments/sandbox.d.ts.map +1 -1
  42. package/dist/bridge/surface/arguments/sandbox.js +2 -59
  43. package/dist/bridge/surface/arguments/sandbox.js.map +1 -1
  44. package/dist/bridge/surface/arguments/seed.d.ts +61 -0
  45. package/dist/bridge/surface/arguments/seed.d.ts.map +1 -0
  46. package/dist/bridge/surface/arguments/seed.js +67 -0
  47. package/dist/bridge/surface/arguments/seed.js.map +1 -0
  48. package/dist/bridge/surface/arguments/storage.d.ts +2 -2
  49. package/dist/bridge/surface/context.d.ts +5 -10
  50. package/dist/bridge/surface/context.d.ts.map +1 -1
  51. package/dist/bridge/surface/context.js +11 -23
  52. package/dist/bridge/surface/context.js.map +1 -1
  53. package/dist/bridge/surface/database-instance-catalog.d.ts +0 -3
  54. package/dist/bridge/surface/database-instance-catalog.d.ts.map +1 -1
  55. package/dist/bridge/surface/database-instance-catalog.js +4 -27
  56. package/dist/bridge/surface/database-instance-catalog.js.map +1 -1
  57. package/dist/bridge/surface/database-instance-project.d.ts +5 -0
  58. package/dist/bridge/surface/database-instance-project.d.ts.map +1 -0
  59. package/dist/bridge/surface/database-instance-project.js +32 -0
  60. package/dist/bridge/surface/database-instance-project.js.map +1 -0
  61. package/dist/bridge/surface/database-instance.d.ts +3 -3
  62. package/dist/bridge/surface/database-instance.d.ts.map +1 -1
  63. package/dist/bridge/surface/database-instance.js +1 -2
  64. package/dist/bridge/surface/database-instance.js.map +1 -1
  65. package/dist/bridge/surface/functions-runtime.d.ts +2 -2
  66. package/dist/bridge/surface/functions-runtime.js +5 -5
  67. package/dist/bridge/surface/functions-runtime.js.map +1 -1
  68. package/dist/bridge/surface/held-identity.d.ts +4 -4
  69. package/dist/bridge/surface/held-identity.d.ts.map +1 -1
  70. package/dist/bridge/surface/held-identity.js.map +1 -1
  71. package/dist/bridge/surface/manifest.sandbox.generated.d.ts +3 -0
  72. package/dist/bridge/surface/manifest.sandbox.generated.d.ts.map +1 -0
  73. package/dist/bridge/surface/manifest.sandbox.generated.js +135 -0
  74. package/dist/bridge/surface/manifest.sandbox.generated.js.map +1 -0
  75. package/dist/bridge/surface/method-types.d.ts +48 -7
  76. package/dist/bridge/surface/method-types.d.ts.map +1 -1
  77. package/dist/bridge/surface/method-types.js +15 -0
  78. package/dist/bridge/surface/method-types.js.map +1 -1
  79. package/dist/bridge/surface/methods/ai_logic/clearScripts.d.ts +2 -1
  80. package/dist/bridge/surface/methods/ai_logic/clearScripts.d.ts.map +1 -1
  81. package/dist/bridge/surface/methods/ai_logic/clearScripts.js +2 -1
  82. package/dist/bridge/surface/methods/ai_logic/clearScripts.js.map +1 -1
  83. package/dist/bridge/surface/methods/ai_logic/script.d.ts +2 -1
  84. package/dist/bridge/surface/methods/ai_logic/script.d.ts.map +1 -1
  85. package/dist/bridge/surface/methods/ai_logic/script.js +2 -1
  86. package/dist/bridge/surface/methods/ai_logic/script.js.map +1 -1
  87. package/dist/bridge/surface/methods/ai_logic/scripts.d.ts +2 -1
  88. package/dist/bridge/surface/methods/ai_logic/scripts.d.ts.map +1 -1
  89. package/dist/bridge/surface/methods/ai_logic/scripts.js +2 -1
  90. package/dist/bridge/surface/methods/ai_logic/scripts.js.map +1 -1
  91. package/dist/bridge/surface/methods/ai_logic/status.d.ts +2 -1
  92. package/dist/bridge/surface/methods/ai_logic/status.d.ts.map +1 -1
  93. package/dist/bridge/surface/methods/ai_logic/status.js +1 -0
  94. package/dist/bridge/surface/methods/ai_logic/status.js.map +1 -1
  95. package/dist/bridge/surface/methods/assurance/attach.d.ts +1 -0
  96. package/dist/bridge/surface/methods/assurance/attach.d.ts.map +1 -1
  97. package/dist/bridge/surface/methods/assurance/attach.js +1 -0
  98. package/dist/bridge/surface/methods/assurance/attach.js.map +1 -1
  99. package/dist/bridge/surface/methods/assurance/canIUse.d.ts +1 -0
  100. package/dist/bridge/surface/methods/assurance/canIUse.d.ts.map +1 -1
  101. package/dist/bridge/surface/methods/assurance/canIUse.js +1 -0
  102. package/dist/bridge/surface/methods/assurance/canIUse.js.map +1 -1
  103. package/dist/bridge/surface/methods/assurance/define.d.ts +1 -0
  104. package/dist/bridge/surface/methods/assurance/define.d.ts.map +1 -1
  105. package/dist/bridge/surface/methods/assurance/define.js +1 -0
  106. package/dist/bridge/surface/methods/assurance/define.js.map +1 -1
  107. package/dist/bridge/surface/methods/assurance/export.d.ts +1 -0
  108. package/dist/bridge/surface/methods/assurance/export.d.ts.map +1 -1
  109. package/dist/bridge/surface/methods/assurance/export.js +1 -0
  110. package/dist/bridge/surface/methods/assurance/export.js.map +1 -1
  111. package/dist/bridge/surface/methods/assurance/inspect.d.ts +1 -0
  112. package/dist/bridge/surface/methods/assurance/inspect.d.ts.map +1 -1
  113. package/dist/bridge/surface/methods/assurance/inspect.js +1 -0
  114. package/dist/bridge/surface/methods/assurance/inspect.js.map +1 -1
  115. package/dist/bridge/surface/methods/assurance/map.d.ts +1 -0
  116. package/dist/bridge/surface/methods/assurance/map.d.ts.map +1 -1
  117. package/dist/bridge/surface/methods/assurance/map.js +1 -0
  118. package/dist/bridge/surface/methods/assurance/map.js.map +1 -1
  119. package/dist/bridge/surface/methods/assurance/minimize.d.ts +1 -0
  120. package/dist/bridge/surface/methods/assurance/minimize.d.ts.map +1 -1
  121. package/dist/bridge/surface/methods/assurance/minimize.js +1 -0
  122. package/dist/bridge/surface/methods/assurance/minimize.js.map +1 -1
  123. package/dist/bridge/surface/methods/assurance/propose.d.ts +1 -0
  124. package/dist/bridge/surface/methods/assurance/propose.d.ts.map +1 -1
  125. package/dist/bridge/surface/methods/assurance/propose.js +1 -0
  126. package/dist/bridge/surface/methods/assurance/propose.js.map +1 -1
  127. package/dist/bridge/surface/methods/assurance/replaySession.d.ts +1 -0
  128. package/dist/bridge/surface/methods/assurance/replaySession.d.ts.map +1 -1
  129. package/dist/bridge/surface/methods/assurance/replaySession.js +1 -0
  130. package/dist/bridge/surface/methods/assurance/replaySession.js.map +1 -1
  131. package/dist/bridge/surface/methods/assurance/run.d.ts +1 -0
  132. package/dist/bridge/surface/methods/assurance/run.d.ts.map +1 -1
  133. package/dist/bridge/surface/methods/assurance/run.js +1 -0
  134. package/dist/bridge/surface/methods/assurance/run.js.map +1 -1
  135. package/dist/bridge/surface/methods/assurance/start.d.ts +1 -0
  136. package/dist/bridge/surface/methods/assurance/start.d.ts.map +1 -1
  137. package/dist/bridge/surface/methods/assurance/start.js +1 -0
  138. package/dist/bridge/surface/methods/assurance/start.js.map +1 -1
  139. package/dist/bridge/surface/methods/assurance/testRulesHosted.d.ts +1 -0
  140. package/dist/bridge/surface/methods/assurance/testRulesHosted.d.ts.map +1 -1
  141. package/dist/bridge/surface/methods/assurance/testRulesHosted.js +1 -0
  142. package/dist/bridge/surface/methods/assurance/testRulesHosted.js.map +1 -1
  143. package/dist/bridge/surface/methods/assurance/verify.d.ts +1 -0
  144. package/dist/bridge/surface/methods/assurance/verify.d.ts.map +1 -1
  145. package/dist/bridge/surface/methods/assurance/verify.js +1 -0
  146. package/dist/bridge/surface/methods/assurance/verify.js.map +1 -1
  147. package/dist/bridge/surface/methods/assurance/verifyCases.d.ts +1 -0
  148. package/dist/bridge/surface/methods/assurance/verifyCases.d.ts.map +1 -1
  149. package/dist/bridge/surface/methods/assurance/verifyCases.js +1 -0
  150. package/dist/bridge/surface/methods/assurance/verifyCases.js.map +1 -1
  151. package/dist/bridge/surface/methods/auth/actAsAdmin.d.ts +2 -1
  152. package/dist/bridge/surface/methods/auth/actAsAdmin.d.ts.map +1 -1
  153. package/dist/bridge/surface/methods/auth/actAsAdmin.js +1 -0
  154. package/dist/bridge/surface/methods/auth/actAsAdmin.js.map +1 -1
  155. package/dist/bridge/surface/methods/auth/actAsAnonymous.d.ts +2 -1
  156. package/dist/bridge/surface/methods/auth/actAsAnonymous.d.ts.map +1 -1
  157. package/dist/bridge/surface/methods/auth/actAsAnonymous.js +1 -0
  158. package/dist/bridge/surface/methods/auth/actAsAnonymous.js.map +1 -1
  159. package/dist/bridge/surface/methods/auth/createCustomToken.d.ts +1 -0
  160. package/dist/bridge/surface/methods/auth/createCustomToken.d.ts.map +1 -1
  161. package/dist/bridge/surface/methods/auth/createCustomToken.js +1 -0
  162. package/dist/bridge/surface/methods/auth/createCustomToken.js.map +1 -1
  163. package/dist/bridge/surface/methods/auth/createUser.d.ts +2 -1
  164. package/dist/bridge/surface/methods/auth/createUser.d.ts.map +1 -1
  165. package/dist/bridge/surface/methods/auth/createUser.js +2 -1
  166. package/dist/bridge/surface/methods/auth/createUser.js.map +1 -1
  167. package/dist/bridge/surface/methods/auth/deleteUser.d.ts +2 -1
  168. package/dist/bridge/surface/methods/auth/deleteUser.d.ts.map +1 -1
  169. package/dist/bridge/surface/methods/auth/deleteUser.js +2 -1
  170. package/dist/bridge/surface/methods/auth/deleteUser.js.map +1 -1
  171. package/dist/bridge/surface/methods/auth/getUser.d.ts +2 -1
  172. package/dist/bridge/surface/methods/auth/getUser.d.ts.map +1 -1
  173. package/dist/bridge/surface/methods/auth/getUser.js +2 -1
  174. package/dist/bridge/surface/methods/auth/getUser.js.map +1 -1
  175. package/dist/bridge/surface/methods/auth/getUserByEmail.d.ts +2 -1
  176. package/dist/bridge/surface/methods/auth/getUserByEmail.d.ts.map +1 -1
  177. package/dist/bridge/surface/methods/auth/getUserByEmail.js +2 -1
  178. package/dist/bridge/surface/methods/auth/getUserByEmail.js.map +1 -1
  179. package/dist/bridge/surface/methods/auth/impersonate.d.ts +2 -1
  180. package/dist/bridge/surface/methods/auth/impersonate.d.ts.map +1 -1
  181. package/dist/bridge/surface/methods/auth/impersonate.js +1 -0
  182. package/dist/bridge/surface/methods/auth/impersonate.js.map +1 -1
  183. package/dist/bridge/surface/methods/auth/importUsers.d.ts +2 -1
  184. package/dist/bridge/surface/methods/auth/importUsers.d.ts.map +1 -1
  185. package/dist/bridge/surface/methods/auth/importUsers.js +3 -2
  186. package/dist/bridge/surface/methods/auth/importUsers.js.map +1 -1
  187. package/dist/bridge/surface/methods/auth/listUsers.d.ts +2 -1
  188. package/dist/bridge/surface/methods/auth/listUsers.d.ts.map +1 -1
  189. package/dist/bridge/surface/methods/auth/listUsers.js +2 -1
  190. package/dist/bridge/surface/methods/auth/listUsers.js.map +1 -1
  191. package/dist/bridge/surface/methods/auth/sessions.d.ts +2 -1
  192. package/dist/bridge/surface/methods/auth/sessions.d.ts.map +1 -1
  193. package/dist/bridge/surface/methods/auth/sessions.js +1 -0
  194. package/dist/bridge/surface/methods/auth/sessions.js.map +1 -1
  195. package/dist/bridge/surface/methods/auth/setCustomUserClaims.d.ts +2 -1
  196. package/dist/bridge/surface/methods/auth/setCustomUserClaims.d.ts.map +1 -1
  197. package/dist/bridge/surface/methods/auth/setCustomUserClaims.js +2 -1
  198. package/dist/bridge/surface/methods/auth/setCustomUserClaims.js.map +1 -1
  199. package/dist/bridge/surface/methods/auth/signInAnonymously.d.ts +2 -1
  200. package/dist/bridge/surface/methods/auth/signInAnonymously.d.ts.map +1 -1
  201. package/dist/bridge/surface/methods/auth/signInAnonymously.js +1 -0
  202. package/dist/bridge/surface/methods/auth/signInAnonymously.js.map +1 -1
  203. package/dist/bridge/surface/methods/auth/signInWithCredential.d.ts +2 -1
  204. package/dist/bridge/surface/methods/auth/signInWithCredential.d.ts.map +1 -1
  205. package/dist/bridge/surface/methods/auth/signInWithCredential.js +1 -0
  206. package/dist/bridge/surface/methods/auth/signInWithCredential.js.map +1 -1
  207. package/dist/bridge/surface/methods/auth/signInWithCustomToken.d.ts +2 -1
  208. package/dist/bridge/surface/methods/auth/signInWithCustomToken.d.ts.map +1 -1
  209. package/dist/bridge/surface/methods/auth/signInWithCustomToken.js +1 -0
  210. package/dist/bridge/surface/methods/auth/signInWithCustomToken.js.map +1 -1
  211. package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.d.ts +2 -1
  212. package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.d.ts.map +1 -1
  213. package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.js +1 -0
  214. package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.js.map +1 -1
  215. package/dist/bridge/surface/methods/auth/signOut.d.ts +2 -1
  216. package/dist/bridge/surface/methods/auth/signOut.d.ts.map +1 -1
  217. package/dist/bridge/surface/methods/auth/signOut.js +1 -0
  218. package/dist/bridge/surface/methods/auth/signOut.js.map +1 -1
  219. package/dist/bridge/surface/methods/auth/takeAuthMail.d.ts +2 -1
  220. package/dist/bridge/surface/methods/auth/takeAuthMail.d.ts.map +1 -1
  221. package/dist/bridge/surface/methods/auth/takeAuthMail.js +1 -0
  222. package/dist/bridge/surface/methods/auth/takeAuthMail.js.map +1 -1
  223. package/dist/bridge/surface/methods/auth/updateUser.d.ts +2 -1
  224. package/dist/bridge/surface/methods/auth/updateUser.d.ts.map +1 -1
  225. package/dist/bridge/surface/methods/auth/updateUser.js +2 -1
  226. package/dist/bridge/surface/methods/auth/updateUser.js.map +1 -1
  227. package/dist/bridge/surface/methods/auth/useAppSession.d.ts +2 -1
  228. package/dist/bridge/surface/methods/auth/useAppSession.d.ts.map +1 -1
  229. package/dist/bridge/surface/methods/auth/useAppSession.js +1 -0
  230. package/dist/bridge/surface/methods/auth/useAppSession.js.map +1 -1
  231. package/dist/bridge/surface/methods/auth/whoami.d.ts +2 -1
  232. package/dist/bridge/surface/methods/auth/whoami.d.ts.map +1 -1
  233. package/dist/bridge/surface/methods/auth/whoami.js +1 -0
  234. package/dist/bridge/surface/methods/auth/whoami.js.map +1 -1
  235. package/dist/bridge/surface/methods/database/crawl.d.ts +2 -1
  236. package/dist/bridge/surface/methods/database/crawl.d.ts.map +1 -1
  237. package/dist/bridge/surface/methods/database/crawl.js +1 -0
  238. package/dist/bridge/surface/methods/database/crawl.js.map +1 -1
  239. package/dist/bridge/surface/methods/database/get.d.ts +2 -1
  240. package/dist/bridge/surface/methods/database/get.d.ts.map +1 -1
  241. package/dist/bridge/surface/methods/database/get.js +1 -0
  242. package/dist/bridge/surface/methods/database/get.js.map +1 -1
  243. package/dist/bridge/surface/methods/database/push.d.ts +2 -1
  244. package/dist/bridge/surface/methods/database/push.d.ts.map +1 -1
  245. package/dist/bridge/surface/methods/database/push.js +1 -0
  246. package/dist/bridge/surface/methods/database/push.js.map +1 -1
  247. package/dist/bridge/surface/methods/database/query.d.ts +2 -1
  248. package/dist/bridge/surface/methods/database/query.d.ts.map +1 -1
  249. package/dist/bridge/surface/methods/database/query.js +1 -0
  250. package/dist/bridge/surface/methods/database/query.js.map +1 -1
  251. package/dist/bridge/surface/methods/database/remove.d.ts +2 -1
  252. package/dist/bridge/surface/methods/database/remove.d.ts.map +1 -1
  253. package/dist/bridge/surface/methods/database/remove.js +1 -0
  254. package/dist/bridge/surface/methods/database/remove.js.map +1 -1
  255. package/dist/bridge/surface/methods/database/set.d.ts +2 -1
  256. package/dist/bridge/surface/methods/database/set.d.ts.map +1 -1
  257. package/dist/bridge/surface/methods/database/set.js +1 -0
  258. package/dist/bridge/surface/methods/database/set.js.map +1 -1
  259. package/dist/bridge/surface/methods/database/update.d.ts +2 -1
  260. package/dist/bridge/surface/methods/database/update.d.ts.map +1 -1
  261. package/dist/bridge/surface/methods/database/update.js +1 -0
  262. package/dist/bridge/surface/methods/database/update.js.map +1 -1
  263. package/dist/bridge/surface/methods/firestore/addDoc.d.ts +2 -1
  264. package/dist/bridge/surface/methods/firestore/addDoc.d.ts.map +1 -1
  265. package/dist/bridge/surface/methods/firestore/addDoc.js +2 -1
  266. package/dist/bridge/surface/methods/firestore/addDoc.js.map +1 -1
  267. package/dist/bridge/surface/methods/firestore/deleteDoc.d.ts +2 -1
  268. package/dist/bridge/surface/methods/firestore/deleteDoc.d.ts.map +1 -1
  269. package/dist/bridge/surface/methods/firestore/deleteDoc.js +2 -1
  270. package/dist/bridge/surface/methods/firestore/deleteDoc.js.map +1 -1
  271. package/dist/bridge/surface/methods/firestore/discoverPaths.d.ts +2 -1
  272. package/dist/bridge/surface/methods/firestore/discoverPaths.d.ts.map +1 -1
  273. package/dist/bridge/surface/methods/firestore/discoverPaths.js +1 -0
  274. package/dist/bridge/surface/methods/firestore/discoverPaths.js.map +1 -1
  275. package/dist/bridge/surface/methods/firestore/extractIndexes.d.ts +7 -6
  276. package/dist/bridge/surface/methods/firestore/extractIndexes.d.ts.map +1 -1
  277. package/dist/bridge/surface/methods/firestore/extractIndexes.js +1 -0
  278. package/dist/bridge/surface/methods/firestore/extractIndexes.js.map +1 -1
  279. package/dist/bridge/surface/methods/firestore/findCollectionGroup.d.ts +2 -1
  280. package/dist/bridge/surface/methods/firestore/findCollectionGroup.d.ts.map +1 -1
  281. package/dist/bridge/surface/methods/firestore/findCollectionGroup.js +1 -0
  282. package/dist/bridge/surface/methods/firestore/findCollectionGroup.js.map +1 -1
  283. package/dist/bridge/surface/methods/firestore/getAggregateFromServer.d.ts +6 -5
  284. package/dist/bridge/surface/methods/firestore/getAggregateFromServer.d.ts.map +1 -1
  285. package/dist/bridge/surface/methods/firestore/getAggregateFromServer.js +1 -0
  286. package/dist/bridge/surface/methods/firestore/getAggregateFromServer.js.map +1 -1
  287. package/dist/bridge/surface/methods/firestore/getCountFromServer.d.ts +6 -5
  288. package/dist/bridge/surface/methods/firestore/getCountFromServer.d.ts.map +1 -1
  289. package/dist/bridge/surface/methods/firestore/getCountFromServer.js +1 -0
  290. package/dist/bridge/surface/methods/firestore/getCountFromServer.js.map +1 -1
  291. package/dist/bridge/surface/methods/firestore/getDoc.d.ts +2 -1
  292. package/dist/bridge/surface/methods/firestore/getDoc.d.ts.map +1 -1
  293. package/dist/bridge/surface/methods/firestore/getDoc.js +2 -1
  294. package/dist/bridge/surface/methods/firestore/getDoc.js.map +1 -1
  295. package/dist/bridge/surface/methods/firestore/getDocs.d.ts +6 -5
  296. package/dist/bridge/surface/methods/firestore/getDocs.d.ts.map +1 -1
  297. package/dist/bridge/surface/methods/firestore/getDocs.js +2 -1
  298. package/dist/bridge/surface/methods/firestore/getDocs.js.map +1 -1
  299. package/dist/bridge/surface/methods/firestore/setDoc.d.ts +2 -1
  300. package/dist/bridge/surface/methods/firestore/setDoc.d.ts.map +1 -1
  301. package/dist/bridge/surface/methods/firestore/setDoc.js +2 -1
  302. package/dist/bridge/surface/methods/firestore/setDoc.js.map +1 -1
  303. package/dist/bridge/surface/methods/firestore/updateDoc.d.ts +2 -1
  304. package/dist/bridge/surface/methods/firestore/updateDoc.d.ts.map +1 -1
  305. package/dist/bridge/surface/methods/firestore/updateDoc.js +2 -1
  306. package/dist/bridge/surface/methods/firestore/updateDoc.js.map +1 -1
  307. package/dist/bridge/surface/methods/firestore/writeBatch.d.ts +2 -1
  308. package/dist/bridge/surface/methods/firestore/writeBatch.d.ts.map +1 -1
  309. package/dist/bridge/surface/methods/firestore/writeBatch.js +2 -1
  310. package/dist/bridge/surface/methods/firestore/writeBatch.js.map +1 -1
  311. package/dist/bridge/surface/methods/firestore/writeIndexes.d.ts +1 -0
  312. package/dist/bridge/surface/methods/firestore/writeIndexes.d.ts.map +1 -1
  313. package/dist/bridge/surface/methods/firestore/writeIndexes.js +1 -0
  314. package/dist/bridge/surface/methods/firestore/writeIndexes.js.map +1 -1
  315. package/dist/bridge/surface/methods/functions/executions.d.ts +3 -2
  316. package/dist/bridge/surface/methods/functions/executions.d.ts.map +1 -1
  317. package/dist/bridge/surface/methods/functions/executions.js +2 -1
  318. package/dist/bridge/surface/methods/functions/executions.js.map +1 -1
  319. package/dist/bridge/surface/methods/functions/fire.d.ts +1 -0
  320. package/dist/bridge/surface/methods/functions/fire.d.ts.map +1 -1
  321. package/dist/bridge/surface/methods/functions/fire.js +6 -5
  322. package/dist/bridge/surface/methods/functions/fire.js.map +1 -1
  323. package/dist/bridge/surface/methods/functions/listTriggers.d.ts +2 -1
  324. package/dist/bridge/surface/methods/functions/listTriggers.d.ts.map +1 -1
  325. package/dist/bridge/surface/methods/functions/listTriggers.js +1 -0
  326. package/dist/bridge/surface/methods/functions/listTriggers.js.map +1 -1
  327. package/dist/bridge/surface/methods/messaging/deliveries.d.ts +2 -1
  328. package/dist/bridge/surface/methods/messaging/deliveries.d.ts.map +1 -1
  329. package/dist/bridge/surface/methods/messaging/deliveries.js +1 -0
  330. package/dist/bridge/surface/methods/messaging/deliveries.js.map +1 -1
  331. package/dist/bridge/surface/methods/messaging/send.d.ts +2 -1
  332. package/dist/bridge/surface/methods/messaging/send.d.ts.map +1 -1
  333. package/dist/bridge/surface/methods/messaging/send.js +2 -1
  334. package/dist/bridge/surface/methods/messaging/send.js.map +1 -1
  335. package/dist/bridge/surface/methods/messaging/subscribeToTopic.d.ts +2 -1
  336. package/dist/bridge/surface/methods/messaging/subscribeToTopic.d.ts.map +1 -1
  337. package/dist/bridge/surface/methods/messaging/subscribeToTopic.js +1 -0
  338. package/dist/bridge/surface/methods/messaging/subscribeToTopic.js.map +1 -1
  339. package/dist/bridge/surface/methods/messaging/tokens.d.ts +2 -1
  340. package/dist/bridge/surface/methods/messaging/tokens.d.ts.map +1 -1
  341. package/dist/bridge/surface/methods/messaging/tokens.js +1 -0
  342. package/dist/bridge/surface/methods/messaging/tokens.js.map +1 -1
  343. package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.d.ts +2 -1
  344. package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.d.ts.map +1 -1
  345. package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.js +1 -0
  346. package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.js.map +1 -1
  347. package/dist/bridge/surface/methods/registry.d.ts.map +1 -1
  348. package/dist/bridge/surface/methods/registry.js +2 -8
  349. package/dist/bridge/surface/methods/registry.js.map +1 -1
  350. package/dist/bridge/surface/methods/rules/explainDenial.d.ts +1 -0
  351. package/dist/bridge/surface/methods/rules/explainDenial.d.ts.map +1 -1
  352. package/dist/bridge/surface/methods/rules/explainDenial.js +1 -0
  353. package/dist/bridge/surface/methods/rules/explainDenial.js.map +1 -1
  354. package/dist/bridge/surface/methods/rules/getStdlib.d.ts +1 -0
  355. package/dist/bridge/surface/methods/rules/getStdlib.d.ts.map +1 -1
  356. package/dist/bridge/surface/methods/rules/getStdlib.js +1 -0
  357. package/dist/bridge/surface/methods/rules/getStdlib.js.map +1 -1
  358. package/dist/bridge/surface/methods/rules/lint.d.ts +1 -0
  359. package/dist/bridge/surface/methods/rules/lint.d.ts.map +1 -1
  360. package/dist/bridge/surface/methods/rules/lint.js +1 -0
  361. package/dist/bridge/surface/methods/rules/lint.js.map +1 -1
  362. package/dist/bridge/surface/methods/rules/listStdlib.d.ts +1 -0
  363. package/dist/bridge/surface/methods/rules/listStdlib.d.ts.map +1 -1
  364. package/dist/bridge/surface/methods/rules/listStdlib.js +1 -0
  365. package/dist/bridge/surface/methods/rules/listStdlib.js.map +1 -1
  366. package/dist/bridge/surface/methods/rules/set.d.ts +1 -0
  367. package/dist/bridge/surface/methods/rules/set.d.ts.map +1 -1
  368. package/dist/bridge/surface/methods/rules/set.js +1 -0
  369. package/dist/bridge/surface/methods/rules/set.js.map +1 -1
  370. package/dist/bridge/surface/methods/rules/simulate.d.ts +1 -0
  371. package/dist/bridge/surface/methods/rules/simulate.d.ts.map +1 -1
  372. package/dist/bridge/surface/methods/rules/simulate.js +1 -0
  373. package/dist/bridge/surface/methods/rules/simulate.js.map +1 -1
  374. package/dist/bridge/surface/methods/sandbox/activity.d.ts +2 -1
  375. package/dist/bridge/surface/methods/sandbox/activity.d.ts.map +1 -1
  376. package/dist/bridge/surface/methods/sandbox/activity.js +2 -1
  377. package/dist/bridge/surface/methods/sandbox/activity.js.map +1 -1
  378. package/dist/bridge/surface/methods/sandbox/advanceClock.d.ts +2 -1
  379. package/dist/bridge/surface/methods/sandbox/advanceClock.d.ts.map +1 -1
  380. package/dist/bridge/surface/methods/sandbox/advanceClock.js +1 -0
  381. package/dist/bridge/surface/methods/sandbox/advanceClock.js.map +1 -1
  382. package/dist/bridge/surface/methods/sandbox/apply.d.ts +1 -0
  383. package/dist/bridge/surface/methods/sandbox/apply.d.ts.map +1 -1
  384. package/dist/bridge/surface/methods/sandbox/apply.js +1 -0
  385. package/dist/bridge/surface/methods/sandbox/apply.js.map +1 -1
  386. package/dist/bridge/surface/methods/sandbox/checkpoint.d.ts +1 -0
  387. package/dist/bridge/surface/methods/sandbox/checkpoint.d.ts.map +1 -1
  388. package/dist/bridge/surface/methods/sandbox/checkpoint.js +1 -0
  389. package/dist/bridge/surface/methods/sandbox/checkpoint.js.map +1 -1
  390. package/dist/bridge/surface/methods/sandbox/deleteCapture.d.ts +1 -0
  391. package/dist/bridge/surface/methods/sandbox/deleteCapture.d.ts.map +1 -1
  392. package/dist/bridge/surface/methods/sandbox/deleteCapture.js +1 -1
  393. package/dist/bridge/surface/methods/sandbox/deleteCapture.js.map +1 -1
  394. package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.d.ts +1 -0
  395. package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.d.ts.map +1 -1
  396. package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.js +1 -0
  397. package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.js.map +1 -1
  398. package/dist/bridge/surface/methods/sandbox/diff.d.ts +1 -0
  399. package/dist/bridge/surface/methods/sandbox/diff.d.ts.map +1 -1
  400. package/dist/bridge/surface/methods/sandbox/diff.js +1 -0
  401. package/dist/bridge/surface/methods/sandbox/diff.js.map +1 -1
  402. package/dist/bridge/surface/methods/sandbox/discard.d.ts +1 -0
  403. package/dist/bridge/surface/methods/sandbox/discard.d.ts.map +1 -1
  404. package/dist/bridge/surface/methods/sandbox/discard.js +1 -0
  405. package/dist/bridge/surface/methods/sandbox/discard.js.map +1 -1
  406. package/dist/bridge/surface/methods/sandbox/events.d.ts +2 -1
  407. package/dist/bridge/surface/methods/sandbox/events.d.ts.map +1 -1
  408. package/dist/bridge/surface/methods/sandbox/events.js +2 -1
  409. package/dist/bridge/surface/methods/sandbox/events.js.map +1 -1
  410. package/dist/bridge/surface/methods/sandbox/exportFixture.d.ts +1 -0
  411. package/dist/bridge/surface/methods/sandbox/exportFixture.d.ts.map +1 -1
  412. package/dist/bridge/surface/methods/sandbox/exportFixture.js +1 -0
  413. package/dist/bridge/surface/methods/sandbox/exportFixture.js.map +1 -1
  414. package/dist/bridge/surface/methods/sandbox/fork.d.ts +1 -0
  415. package/dist/bridge/surface/methods/sandbox/fork.d.ts.map +1 -1
  416. package/dist/bridge/surface/methods/sandbox/fork.js +1 -0
  417. package/dist/bridge/surface/methods/sandbox/fork.js.map +1 -1
  418. package/dist/bridge/surface/methods/sandbox/inspect.d.ts +2 -1
  419. package/dist/bridge/surface/methods/sandbox/inspect.d.ts.map +1 -1
  420. package/dist/bridge/surface/methods/sandbox/inspect.js +2 -1
  421. package/dist/bridge/surface/methods/sandbox/inspect.js.map +1 -1
  422. package/dist/bridge/surface/methods/sandbox/listBranches.d.ts +1 -0
  423. package/dist/bridge/surface/methods/sandbox/listBranches.d.ts.map +1 -1
  424. package/dist/bridge/surface/methods/sandbox/listBranches.js +1 -0
  425. package/dist/bridge/surface/methods/sandbox/listBranches.js.map +1 -1
  426. package/dist/bridge/surface/methods/sandbox/listCaptures.d.ts +1 -0
  427. package/dist/bridge/surface/methods/sandbox/listCaptures.d.ts.map +1 -1
  428. package/dist/bridge/surface/methods/sandbox/listCaptures.js +1 -1
  429. package/dist/bridge/surface/methods/sandbox/listCaptures.js.map +1 -1
  430. package/dist/bridge/surface/methods/sandbox/listCheckpoints.d.ts +1 -0
  431. package/dist/bridge/surface/methods/sandbox/listCheckpoints.d.ts.map +1 -1
  432. package/dist/bridge/surface/methods/sandbox/listCheckpoints.js +1 -0
  433. package/dist/bridge/surface/methods/sandbox/listCheckpoints.js.map +1 -1
  434. package/dist/bridge/surface/methods/sandbox/listeners.d.ts +2 -1
  435. package/dist/bridge/surface/methods/sandbox/listeners.d.ts.map +1 -1
  436. package/dist/bridge/surface/methods/sandbox/listeners.js +1 -0
  437. package/dist/bridge/surface/methods/sandbox/listeners.js.map +1 -1
  438. package/dist/bridge/surface/methods/sandbox/openCapture.d.ts +1 -0
  439. package/dist/bridge/surface/methods/sandbox/openCapture.d.ts.map +1 -1
  440. package/dist/bridge/surface/methods/sandbox/openCapture.js +1 -1
  441. package/dist/bridge/surface/methods/sandbox/openCapture.js.map +1 -1
  442. package/dist/bridge/surface/methods/sandbox/promote.d.ts +1 -0
  443. package/dist/bridge/surface/methods/sandbox/promote.d.ts.map +1 -1
  444. package/dist/bridge/surface/methods/sandbox/promote.js +1 -0
  445. package/dist/bridge/surface/methods/sandbox/promote.js.map +1 -1
  446. package/dist/bridge/surface/methods/sandbox/renameCapture.d.ts +3 -2
  447. package/dist/bridge/surface/methods/sandbox/renameCapture.d.ts.map +1 -1
  448. package/dist/bridge/surface/methods/sandbox/renameCapture.js +1 -1
  449. package/dist/bridge/surface/methods/sandbox/renameCapture.js.map +1 -1
  450. package/dist/bridge/surface/methods/sandbox/reset.d.ts +3 -2
  451. package/dist/bridge/surface/methods/sandbox/reset.d.ts.map +1 -1
  452. package/dist/bridge/surface/methods/sandbox/reset.js +1 -0
  453. package/dist/bridge/surface/methods/sandbox/reset.js.map +1 -1
  454. package/dist/bridge/surface/methods/sandbox/resetClock.d.ts +2 -1
  455. package/dist/bridge/surface/methods/sandbox/resetClock.d.ts.map +1 -1
  456. package/dist/bridge/surface/methods/sandbox/resetClock.js +1 -0
  457. package/dist/bridge/surface/methods/sandbox/resetClock.js.map +1 -1
  458. package/dist/bridge/surface/methods/sandbox/restore.d.ts +1 -0
  459. package/dist/bridge/surface/methods/sandbox/restore.d.ts.map +1 -1
  460. package/dist/bridge/surface/methods/sandbox/restore.js +1 -0
  461. package/dist/bridge/surface/methods/sandbox/restore.js.map +1 -1
  462. package/dist/bridge/surface/methods/sandbox/saveCapture.d.ts +1 -0
  463. package/dist/bridge/surface/methods/sandbox/saveCapture.d.ts.map +1 -1
  464. package/dist/bridge/surface/methods/sandbox/saveCapture.js +1 -1
  465. package/dist/bridge/surface/methods/sandbox/saveCapture.js.map +1 -1
  466. package/dist/bridge/surface/methods/sandbox/seed.d.ts +2 -1
  467. package/dist/bridge/surface/methods/sandbox/seed.d.ts.map +1 -1
  468. package/dist/bridge/surface/methods/sandbox/seed.js +3 -2
  469. package/dist/bridge/surface/methods/sandbox/seed.js.map +1 -1
  470. package/dist/bridge/surface/methods/sandbox/seedFromFixture.d.ts +1 -0
  471. package/dist/bridge/surface/methods/sandbox/seedFromFixture.d.ts.map +1 -1
  472. package/dist/bridge/surface/methods/sandbox/seedFromFixture.js +1 -0
  473. package/dist/bridge/surface/methods/sandbox/seedFromFixture.js.map +1 -1
  474. package/dist/bridge/surface/methods/sandbox/setClock.d.ts +2 -1
  475. package/dist/bridge/surface/methods/sandbox/setClock.d.ts.map +1 -1
  476. package/dist/bridge/surface/methods/sandbox/setClock.js +1 -0
  477. package/dist/bridge/surface/methods/sandbox/setClock.js.map +1 -1
  478. package/dist/bridge/surface/methods/sandbox-registry.d.ts +6 -0
  479. package/dist/bridge/surface/methods/sandbox-registry.d.ts.map +1 -0
  480. package/dist/bridge/surface/methods/sandbox-registry.js +21 -0
  481. package/dist/bridge/surface/methods/sandbox-registry.js.map +1 -0
  482. package/dist/bridge/surface/methods/storage/deleteObject.d.ts +2 -1
  483. package/dist/bridge/surface/methods/storage/deleteObject.d.ts.map +1 -1
  484. package/dist/bridge/surface/methods/storage/deleteObject.js +1 -0
  485. package/dist/bridge/surface/methods/storage/deleteObject.js.map +1 -1
  486. package/dist/bridge/surface/methods/storage/getBytes.d.ts +2 -1
  487. package/dist/bridge/surface/methods/storage/getBytes.d.ts.map +1 -1
  488. package/dist/bridge/surface/methods/storage/getBytes.js +1 -0
  489. package/dist/bridge/surface/methods/storage/getBytes.js.map +1 -1
  490. package/dist/bridge/surface/methods/storage/getDownloadURL.d.ts +2 -1
  491. package/dist/bridge/surface/methods/storage/getDownloadURL.d.ts.map +1 -1
  492. package/dist/bridge/surface/methods/storage/getDownloadURL.js +1 -0
  493. package/dist/bridge/surface/methods/storage/getDownloadURL.js.map +1 -1
  494. package/dist/bridge/surface/methods/storage/getMetadata.d.ts +2 -1
  495. package/dist/bridge/surface/methods/storage/getMetadata.d.ts.map +1 -1
  496. package/dist/bridge/surface/methods/storage/getMetadata.js +1 -0
  497. package/dist/bridge/surface/methods/storage/getMetadata.js.map +1 -1
  498. package/dist/bridge/surface/methods/storage/listAll.d.ts +2 -1
  499. package/dist/bridge/surface/methods/storage/listAll.d.ts.map +1 -1
  500. package/dist/bridge/surface/methods/storage/listAll.js +1 -0
  501. package/dist/bridge/surface/methods/storage/listAll.js.map +1 -1
  502. package/dist/bridge/surface/methods/storage/provision.d.ts +1 -0
  503. package/dist/bridge/surface/methods/storage/provision.d.ts.map +1 -1
  504. package/dist/bridge/surface/methods/storage/provision.js +1 -0
  505. package/dist/bridge/surface/methods/storage/provision.js.map +1 -1
  506. package/dist/bridge/surface/methods/storage/setCrossServiceIam.d.ts +2 -1
  507. package/dist/bridge/surface/methods/storage/setCrossServiceIam.d.ts.map +1 -1
  508. package/dist/bridge/surface/methods/storage/setCrossServiceIam.js +1 -0
  509. package/dist/bridge/surface/methods/storage/setCrossServiceIam.js.map +1 -1
  510. package/dist/bridge/surface/methods/storage/status.d.ts +1 -0
  511. package/dist/bridge/surface/methods/storage/status.d.ts.map +1 -1
  512. package/dist/bridge/surface/methods/storage/status.js +1 -0
  513. package/dist/bridge/surface/methods/storage/status.js.map +1 -1
  514. package/dist/bridge/surface/methods/storage/updateMetadata.d.ts +6 -5
  515. package/dist/bridge/surface/methods/storage/updateMetadata.d.ts.map +1 -1
  516. package/dist/bridge/surface/methods/storage/updateMetadata.js +1 -0
  517. package/dist/bridge/surface/methods/storage/updateMetadata.js.map +1 -1
  518. package/dist/bridge/surface/methods/storage/uploadBytes.d.ts +1 -0
  519. package/dist/bridge/surface/methods/storage/uploadBytes.d.ts.map +1 -1
  520. package/dist/bridge/surface/methods/storage/uploadBytes.js +1 -0
  521. package/dist/bridge/surface/methods/storage/uploadBytes.js.map +1 -1
  522. package/dist/bridge/surface/render/discriminator-schemas.d.ts +2 -2
  523. package/dist/bridge/surface/request-instant.d.ts +2 -2
  524. package/dist/bridge/surface/request-instant.d.ts.map +1 -1
  525. package/dist/bridge/surface/request-instant.js.map +1 -1
  526. package/dist/bridge/surface/rules-engines/database.d.ts.map +1 -1
  527. package/dist/bridge/surface/rules-engines/database.js +1 -2
  528. package/dist/bridge/surface/rules-engines/database.js.map +1 -1
  529. package/dist/bridge/surface/rules-engines/storage-request-resource.d.ts +38 -0
  530. package/dist/bridge/surface/rules-engines/storage-request-resource.d.ts.map +1 -0
  531. package/dist/bridge/surface/rules-engines/storage-request-resource.js +246 -0
  532. package/dist/bridge/surface/rules-engines/storage-request-resource.js.map +1 -0
  533. package/dist/bridge/surface/rules-engines/storage.d.ts.map +1 -1
  534. package/dist/bridge/surface/rules-engines/storage.js +44 -65
  535. package/dist/bridge/surface/rules-engines/storage.js.map +1 -1
  536. package/dist/bridge/surface/sandbox-context.d.ts +25 -0
  537. package/dist/bridge/surface/sandbox-context.d.ts.map +1 -0
  538. package/dist/bridge/surface/sandbox-context.js +29 -0
  539. package/dist/bridge/surface/sandbox-context.js.map +1 -0
  540. package/dist/bridge/surface/service-handles.d.ts +6 -6
  541. package/dist/bridge/surface/service-handles.d.ts.map +1 -1
  542. package/dist/bridge/surface/service-handles.js +7 -4
  543. package/dist/bridge/surface/service-handles.js.map +1 -1
  544. package/dist/bridge/surface/sign-in.d.ts +2 -2
  545. package/dist/bridge/surface/sign-in.d.ts.map +1 -1
  546. package/dist/bridge/surface/sign-in.js +1 -1
  547. package/dist/bridge/surface/sign-in.js.map +1 -1
  548. package/dist/bridge/surface/storage-rules.d.ts +2 -9
  549. package/dist/bridge/surface/storage-rules.d.ts.map +1 -1
  550. package/dist/bridge/surface/storage-rules.js +0 -10
  551. package/dist/bridge/surface/storage-rules.js.map +1 -1
  552. package/dist/bridge/surface/stored-identity.d.ts +3 -3
  553. package/dist/bridge/surface/stored-identity.d.ts.map +1 -1
  554. package/dist/bridge/surface/stored-identity.js.map +1 -1
  555. package/dist/bridge/surface/types.d.ts +29 -8
  556. package/dist/bridge/surface/types.d.ts.map +1 -1
  557. package/dist/cli/firebase-json.d.ts +35 -7
  558. package/dist/cli/firebase-json.d.ts.map +1 -1
  559. package/dist/cli/firebase-json.js +13 -0
  560. package/dist/cli/firebase-json.js.map +1 -1
  561. package/dist/cli/firestore-indexes.d.ts.map +1 -1
  562. package/dist/cli/firestore-indexes.js +2 -1
  563. package/dist/cli/firestore-indexes.js.map +1 -1
  564. package/dist/cli/index.d.ts +6 -0
  565. package/dist/cli/index.d.ts.map +1 -1
  566. package/dist/cli/index.js +44 -11
  567. package/dist/cli/index.js.map +1 -1
  568. package/dist/cli/public-dir-hint.d.ts +8 -0
  569. package/dist/cli/public-dir-hint.d.ts.map +1 -0
  570. package/dist/cli/public-dir-hint.js +30 -0
  571. package/dist/cli/public-dir-hint.js.map +1 -0
  572. package/dist/cli/run.d.ts +8 -2
  573. package/dist/cli/run.d.ts.map +1 -1
  574. package/dist/cli/run.js +28 -5
  575. package/dist/cli/run.js.map +1 -1
  576. package/dist/cli/sandbox-runner.d.ts.map +1 -1
  577. package/dist/cli/sandbox-runner.js +11 -2
  578. package/dist/cli/sandbox-runner.js.map +1 -1
  579. package/dist/cli/serve-diagnostics.d.ts.map +1 -1
  580. package/dist/cli/serve-diagnostics.js +11 -1
  581. package/dist/cli/serve-diagnostics.js.map +1 -1
  582. package/dist/cli/serve.d.ts.map +1 -1
  583. package/dist/cli/serve.js +25 -24
  584. package/dist/cli/serve.js.map +1 -1
  585. package/dist/cli/snapshot.d.ts.map +1 -1
  586. package/dist/cli/snapshot.js +13 -5
  587. package/dist/cli/snapshot.js.map +1 -1
  588. package/dist/cli/surface-method-runner.js +1 -1
  589. package/dist/cli/surface-method-runner.js.map +1 -1
  590. package/dist/cli/verify.d.ts.map +1 -1
  591. package/dist/cli/verify.js +10 -1
  592. package/dist/cli/verify.js.map +1 -1
  593. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  594. package/dist/conformance/.generated/can-i-use-browser.js +19 -3
  595. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  596. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  597. package/dist/conformance/.generated/can-i-use.js +1 -1
  598. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  599. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  600. package/dist/conformance/.generated/conformance-docs.js +1 -1
  601. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  602. package/dist/conformance/.generated/served-availability.d.ts.map +1 -1
  603. package/dist/conformance/.generated/served-availability.js +1 -1
  604. package/dist/conformance/.generated/served-availability.js.map +1 -1
  605. package/dist/discover/merge.d.ts.map +1 -1
  606. package/dist/discover/merge.js +11 -3
  607. package/dist/discover/merge.js.map +1 -1
  608. package/dist/functions/child-protocol.d.ts +43 -0
  609. package/dist/functions/child-protocol.d.ts.map +1 -0
  610. package/dist/functions/child-protocol.js +14 -0
  611. package/dist/functions/child-protocol.js.map +1 -0
  612. package/dist/functions/child.d.ts +2 -0
  613. package/dist/functions/child.d.ts.map +1 -0
  614. package/dist/functions/child.js +92 -0
  615. package/dist/functions/child.js.map +1 -0
  616. package/dist/{functions-rtdb → functions}/development-runtime.d.ts +5 -4
  617. package/dist/functions/development-runtime.d.ts.map +1 -0
  618. package/dist/{functions-rtdb → functions}/development-runtime.js +2 -2
  619. package/dist/functions/development-runtime.js.map +1 -0
  620. package/dist/functions/endpoints.d.ts +39 -0
  621. package/dist/functions/endpoints.d.ts.map +1 -0
  622. package/dist/functions/endpoints.js +48 -0
  623. package/dist/functions/endpoints.js.map +1 -0
  624. package/dist/functions/events.d.ts.map +1 -0
  625. package/dist/functions/events.js.map +1 -0
  626. package/dist/functions/execution-log.d.ts.map +1 -0
  627. package/dist/functions/execution-log.js.map +1 -0
  628. package/dist/functions/module-loader.d.ts.map +1 -0
  629. package/dist/functions/module-loader.js.map +1 -0
  630. package/dist/functions/project.d.ts +7 -0
  631. package/dist/functions/project.d.ts.map +1 -0
  632. package/dist/{functions-rtdb → functions}/project.js +1 -1
  633. package/dist/functions/project.js.map +1 -0
  634. package/dist/functions/rtdb/child-runtime.d.ts +23 -0
  635. package/dist/functions/rtdb/child-runtime.d.ts.map +1 -0
  636. package/dist/functions/rtdb/child-runtime.js +102 -0
  637. package/dist/functions/rtdb/child-runtime.js.map +1 -0
  638. package/dist/functions/rtdb/delivery.d.ts.map +1 -0
  639. package/dist/functions/rtdb/delivery.js.map +1 -0
  640. package/dist/{functions-rtdb → functions/rtdb}/discovery.d.ts +3 -20
  641. package/dist/functions/rtdb/discovery.d.ts.map +1 -0
  642. package/dist/{functions-rtdb → functions/rtdb}/discovery.js +6 -21
  643. package/dist/functions/rtdb/discovery.js.map +1 -0
  644. package/dist/functions/rtdb/event.d.ts.map +1 -0
  645. package/dist/functions/rtdb/event.js.map +1 -0
  646. package/dist/functions/rtdb/execution.d.ts.map +1 -0
  647. package/dist/functions/rtdb/execution.js.map +1 -0
  648. package/dist/functions/rtdb/in-memory-delivery.d.ts.map +1 -0
  649. package/dist/functions/rtdb/in-memory-delivery.js.map +1 -0
  650. package/dist/functions/rtdb/projection.d.ts.map +1 -0
  651. package/dist/functions/rtdb/projection.js.map +1 -0
  652. package/dist/functions/rtdb/reference-pattern.d.ts.map +1 -0
  653. package/dist/functions/rtdb/reference-pattern.js.map +1 -0
  654. package/dist/{functions-rtdb → functions/rtdb}/remote-delivery.d.ts +1 -1
  655. package/dist/functions/rtdb/remote-delivery.d.ts.map +1 -0
  656. package/dist/functions/rtdb/remote-delivery.js.map +1 -0
  657. package/dist/{functions-rtdb/child.d.ts → functions/spawn.d.ts} +16 -38
  658. package/dist/functions/spawn.d.ts.map +1 -0
  659. package/dist/functions/spawn.js +166 -0
  660. package/dist/functions/spawn.js.map +1 -0
  661. package/dist/functions/unsupported.d.ts +23 -0
  662. package/dist/functions/unsupported.d.ts.map +1 -0
  663. package/dist/functions/unsupported.js +25 -0
  664. package/dist/functions/unsupported.js.map +1 -0
  665. package/dist/google-endpoints.d.ts +9 -2
  666. package/dist/google-endpoints.d.ts.map +1 -1
  667. package/dist/google-endpoints.js +72 -3
  668. package/dist/google-endpoints.js.map +1 -1
  669. package/dist/next/bridge-import-loader.d.ts +9 -0
  670. package/dist/next/bridge-import-loader.d.ts.map +1 -0
  671. package/dist/next/bridge-import-loader.js +45 -0
  672. package/dist/next/bridge-import-loader.js.map +1 -0
  673. package/dist/next/bridge-imports.d.ts +26 -0
  674. package/dist/next/bridge-imports.d.ts.map +1 -0
  675. package/dist/next/bridge-imports.js +90 -0
  676. package/dist/next/bridge-imports.js.map +1 -0
  677. package/dist/next/client-aliases.d.ts +13 -5
  678. package/dist/next/client-aliases.d.ts.map +1 -1
  679. package/dist/next/client-aliases.js +14 -27
  680. package/dist/next/client-aliases.js.map +1 -1
  681. package/dist/next/guard.d.ts +3 -2
  682. package/dist/next/guard.d.ts.map +1 -1
  683. package/dist/next/guard.js +28 -10
  684. package/dist/next/guard.js.map +1 -1
  685. package/dist/next/turbopack-config.d.ts +9 -0
  686. package/dist/next/turbopack-config.d.ts.map +1 -1
  687. package/dist/next/turbopack-config.js +21 -0
  688. package/dist/next/turbopack-config.js.map +1 -1
  689. package/dist/next/webpack-config.d.ts +9 -0
  690. package/dist/next/webpack-config.d.ts.map +1 -1
  691. package/dist/next/webpack-config.js +18 -0
  692. package/dist/next/webpack-config.js.map +1 -1
  693. package/dist/next/with-pyric.d.ts +1 -0
  694. package/dist/next/with-pyric.d.ts.map +1 -1
  695. package/dist/next/with-pyric.js +25 -0
  696. package/dist/next/with-pyric.js.map +1 -1
  697. package/dist/register/activation.d.ts +16 -0
  698. package/dist/register/activation.d.ts.map +1 -0
  699. package/dist/register/activation.js +22 -0
  700. package/dist/register/activation.js.map +1 -0
  701. package/dist/register/app-bridge-admin-app-check.d.ts.map +1 -1
  702. package/dist/register/app-bridge-admin-app-check.js +3 -1
  703. package/dist/register/app-bridge-admin-app-check.js.map +1 -1
  704. package/dist/register/child-process-guard.d.ts +43 -0
  705. package/dist/register/child-process-guard.d.ts.map +1 -0
  706. package/dist/register/child-process-guard.js +165 -0
  707. package/dist/register/child-process-guard.js.map +1 -0
  708. package/dist/register/client/bootstrap.js +6 -1
  709. package/dist/register/client/bootstrap.js.map +1 -1
  710. package/dist/register/connect-prototypes.d.ts +9 -0
  711. package/dist/register/connect-prototypes.d.ts.map +1 -1
  712. package/dist/register/connect-prototypes.js +11 -0
  713. package/dist/register/connect-prototypes.js.map +1 -1
  714. package/dist/register/hooks.d.ts +7 -1
  715. package/dist/register/hooks.d.ts.map +1 -1
  716. package/dist/register/hooks.js +44 -2
  717. package/dist/register/hooks.js.map +1 -1
  718. package/dist/register/index.d.ts.map +1 -1
  719. package/dist/register/index.js +93 -23
  720. package/dist/register/index.js.map +1 -1
  721. package/dist/register/mapping.d.ts +33 -0
  722. package/dist/register/mapping.d.ts.map +1 -1
  723. package/dist/register/mapping.js +45 -3
  724. package/dist/register/mapping.js.map +1 -1
  725. package/dist/register/net-guard.d.ts +17 -0
  726. package/dist/register/net-guard.d.ts.map +1 -1
  727. package/dist/register/net-guard.js +118 -41
  728. package/dist/register/net-guard.js.map +1 -1
  729. package/dist/register/package-identity.d.ts +16 -0
  730. package/dist/register/package-identity.d.ts.map +1 -0
  731. package/dist/register/package-identity.js +97 -0
  732. package/dist/register/package-identity.js.map +1 -0
  733. package/dist/register/swap-or-stop.d.ts +27 -0
  734. package/dist/register/swap-or-stop.d.ts.map +1 -0
  735. package/dist/register/swap-or-stop.js +170 -0
  736. package/dist/register/swap-or-stop.js.map +1 -0
  737. package/dist/register/worker-guard.d.ts +20 -0
  738. package/dist/register/worker-guard.d.ts.map +1 -0
  739. package/dist/register/worker-guard.js +77 -0
  740. package/dist/register/worker-guard.js.map +1 -0
  741. package/dist/remote/resolve-host.d.ts +9 -0
  742. package/dist/remote/resolve-host.d.ts.map +1 -1
  743. package/dist/remote/resolve-host.js +13 -2
  744. package/dist/remote/resolve-host.js.map +1 -1
  745. package/dist/serve/ai-proxy.d.ts +2 -0
  746. package/dist/serve/ai-proxy.d.ts.map +1 -1
  747. package/dist/serve/ai-proxy.js +33 -8
  748. package/dist/serve/ai-proxy.js.map +1 -1
  749. package/dist/serve/app-ports.d.ts +48 -0
  750. package/dist/serve/app-ports.d.ts.map +1 -0
  751. package/dist/serve/app-ports.js +82 -0
  752. package/dist/serve/app-ports.js.map +1 -0
  753. package/dist/serve/bridge-mount.d.ts +13 -0
  754. package/dist/serve/bridge-mount.d.ts.map +1 -1
  755. package/dist/serve/bridge-mount.js +28 -8
  756. package/dist/serve/bridge-mount.js.map +1 -1
  757. package/dist/serve/bundler.d.ts +6 -0
  758. package/dist/serve/bundler.d.ts.map +1 -1
  759. package/dist/serve/bundler.js +78 -26
  760. package/dist/serve/bundler.js.map +1 -1
  761. package/dist/serve/discovery.d.ts +17 -3
  762. package/dist/serve/discovery.d.ts.map +1 -1
  763. package/dist/serve/discovery.js +199 -63
  764. package/dist/serve/discovery.js.map +1 -1
  765. package/dist/serve/entries/auth.d.ts.map +1 -1
  766. package/dist/serve/entries/auth.js +19 -1
  767. package/dist/serve/entries/auth.js.map +1 -1
  768. package/dist/serve/entries/firestore-surface.d.ts +1 -0
  769. package/dist/serve/entries/firestore-surface.d.ts.map +1 -1
  770. package/dist/serve/entries/firestore-surface.js +1 -0
  771. package/dist/serve/entries/firestore-surface.js.map +1 -1
  772. package/dist/serve/entries/init-payload.d.ts +9 -2
  773. package/dist/serve/entries/init-payload.d.ts.map +1 -1
  774. package/dist/serve/entries/init-payload.js +25 -5
  775. package/dist/serve/entries/init-payload.js.map +1 -1
  776. package/dist/serve/entries/moved-host.d.ts +18 -0
  777. package/dist/serve/entries/moved-host.d.ts.map +1 -0
  778. package/dist/serve/entries/moved-host.js +14 -0
  779. package/dist/serve/entries/moved-host.js.map +1 -0
  780. package/dist/serve/entries/runtime-origin.d.ts +6 -0
  781. package/dist/serve/entries/runtime-origin.d.ts.map +1 -1
  782. package/dist/serve/entries/runtime-origin.js.map +1 -1
  783. package/dist/serve/entries/unsupported/firestore.d.ts +0 -1
  784. package/dist/serve/entries/unsupported/firestore.d.ts.map +1 -1
  785. package/dist/serve/entries/unsupported/firestore.js +0 -1
  786. package/dist/serve/entries/unsupported/firestore.js.map +1 -1
  787. package/dist/serve/entries/worker-runtime.d.ts.map +1 -1
  788. package/dist/serve/entries/worker-runtime.js +19 -7
  789. package/dist/serve/entries/worker-runtime.js.map +1 -1
  790. package/dist/serve/firebase-module-swap.d.ts +19 -2
  791. package/dist/serve/firebase-module-swap.d.ts.map +1 -1
  792. package/dist/serve/firebase-module-swap.js +92 -16
  793. package/dist/serve/firebase-module-swap.js.map +1 -1
  794. package/dist/serve/gemini-proxy.js +2 -2
  795. package/dist/serve/gemini-proxy.js.map +1 -1
  796. package/dist/serve/hosted/runtime.d.ts.map +1 -1
  797. package/dist/serve/hosted/runtime.js +10 -3
  798. package/dist/serve/hosted/runtime.js.map +1 -1
  799. package/dist/serve/namespace.d.ts +7 -0
  800. package/dist/serve/namespace.d.ts.map +1 -1
  801. package/dist/serve/namespace.js +32 -24
  802. package/dist/serve/namespace.js.map +1 -1
  803. package/dist/serve/repro/compare.d.ts +2 -1
  804. package/dist/serve/repro/compare.d.ts.map +1 -1
  805. package/dist/serve/repro/compare.js +9 -1
  806. package/dist/serve/repro/compare.js.map +1 -1
  807. package/dist/serve/rules-fixture-check.d.ts.map +1 -1
  808. package/dist/serve/rules-fixture-check.js +22 -10
  809. package/dist/serve/rules-fixture-check.js.map +1 -1
  810. package/dist/serve/rules.d.ts +35 -9
  811. package/dist/serve/rules.d.ts.map +1 -1
  812. package/dist/serve/rules.js +72 -21
  813. package/dist/serve/rules.js.map +1 -1
  814. package/dist/serve/sandbox-session.d.ts +3 -0
  815. package/dist/serve/sandbox-session.d.ts.map +1 -1
  816. package/dist/serve/sandbox-session.js +10 -3
  817. package/dist/serve/sandbox-session.js.map +1 -1
  818. package/dist/serve/server.d.ts +10 -2
  819. package/dist/serve/server.d.ts.map +1 -1
  820. package/dist/serve/server.js +24 -4
  821. package/dist/serve/server.js.map +1 -1
  822. package/dist/serve/site-ui/_astro/{RulesCodeEditor.Cp_-FK3b.js → RulesCodeEditor.D-eQLCvu.js} +1 -1
  823. package/dist/serve/site-ui/_astro/app.BjQiEBOY.js +1 -0
  824. package/dist/serve/site-ui/_astro/app.C84Qr10v.js +151 -0
  825. package/dist/serve/site-ui/_astro/{chess-showcase.CVhCNUi_.js → chess-showcase.CsH1s4g7.js} +1 -1
  826. package/dist/serve/site-ui/_astro/{example-runtime.zC1l-Yka.js → example-runtime.CTp8mh7I.js} +1 -1
  827. package/dist/serve/site-ui/_astro/sandbox-controls.DI8MTU3L.js +1725 -0
  828. package/dist/serve/site-ui/_astro/{seed.B4vza_Bv.js → seed.BvtbLu-q.js} +1 -1
  829. package/dist/serve/site-ui/_astro/writes.D8gcuovU.js +1 -0
  830. package/dist/serve/site-ui/auth/index.html +1 -1
  831. package/dist/serve/site-ui/docs/ai-compat/index.html +48 -9
  832. package/dist/serve/site-ui/docs/ai-compat.md +53 -8
  833. package/dist/serve/site-ui/docs/app-check-compat/index.html +102 -26
  834. package/dist/serve/site-ui/docs/app-check-compat.md +107 -25
  835. package/dist/serve/site-ui/docs/auth-compat/index.html +33 -21
  836. package/dist/serve/site-ui/docs/auth-compat.md +35 -20
  837. package/dist/serve/site-ui/docs/build/ai-logic/index.html +13 -4
  838. package/dist/serve/site-ui/docs/build/ai-logic.md +14 -4
  839. package/dist/serve/site-ui/docs/conformance-scores/index.html +2 -2
  840. package/dist/serve/site-ui/docs/conformance-scores.md +2 -2
  841. package/dist/serve/site-ui/docs/database-compat/index.html +113 -49
  842. package/dist/serve/site-ui/docs/database-compat.md +118 -48
  843. package/dist/serve/site-ui/docs/firestore-compat/index.html +144 -37
  844. package/dist/serve/site-ui/docs/firestore-compat.md +149 -36
  845. package/dist/serve/site-ui/docs/firestore-swift-compat/index.html +1 -1
  846. package/dist/serve/site-ui/docs/firestore-swift-compat.md +1 -1
  847. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +12 -12
  848. package/dist/serve/site-ui/docs/functions-rtdb-compat.md +12 -12
  849. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +1 -1
  850. package/dist/serve/site-ui/docs/get-started/how-the-swap-works.md +1 -1
  851. package/dist/serve/site-ui/docs/get-started/node-host/index.html +1 -0
  852. package/dist/serve/site-ui/docs/get-started/node-host.md +2 -0
  853. package/dist/serve/site-ui/docs/index.json +45 -5
  854. package/dist/serve/site-ui/docs/messaging-compat/index.html +2 -2
  855. package/dist/serve/site-ui/docs/messaging-compat.md +2 -2
  856. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +3 -1
  857. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api.md +2 -0
  858. package/dist/serve/site-ui/docs/pyric-app-check-reference-api/index.html +11 -3
  859. package/dist/serve/site-ui/docs/pyric-app-check-reference-api.md +13 -3
  860. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +1 -1
  861. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api.md +1 -1
  862. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +1 -0
  863. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +1 -0
  864. package/dist/serve/site-ui/docs/pyric-cli-register-client-firestore-reference-api/index.html +1 -1
  865. package/dist/serve/site-ui/docs/pyric-cli-register-client-firestore-reference-api.md +1 -1
  866. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +17 -9
  867. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +13 -11
  868. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +8 -4
  869. package/dist/serve/site-ui/docs/pyric-database-reference-api.md +9 -4
  870. package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +15 -4
  871. package/dist/serve/site-ui/docs/pyric-rules-reference-api.md +21 -4
  872. package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +7 -1
  873. package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +1 -0
  874. package/dist/serve/site-ui/docs/reference/cli/index.html +4 -3
  875. package/dist/serve/site-ui/docs/reference/cli.md +5 -3
  876. package/dist/serve/site-ui/docs/rules-compat/index.html +150 -49
  877. package/dist/serve/site-ui/docs/rules-compat.md +149 -51
  878. package/dist/serve/site-ui/docs/storage-compat/index.html +20 -20
  879. package/dist/serve/site-ui/docs/storage-compat.md +20 -20
  880. package/dist/serve/site-ui/docs/tutorial/index.html +2 -1
  881. package/dist/serve/site-ui/docs/tutorial.md +2 -1
  882. package/dist/serve/site-ui/examples/chess/index.html +1 -1
  883. package/dist/serve/site-ui/firestore/index.html +1 -1
  884. package/dist/serve/site-ui/rtdb/index.html +1 -1
  885. package/dist/serve/site-ui/settings/index.html +1 -1
  886. package/dist/serve/site-ui/storage/index.html +1 -1
  887. package/dist/serve/site-ui/studio/index.html +1 -1
  888. package/dist/serve/site-ui/traffic/index.html +1 -1
  889. package/dist/serve/vite-ai-config.d.ts +8 -0
  890. package/dist/serve/vite-ai-config.d.ts.map +1 -1
  891. package/dist/serve/vite-ai-config.js +16 -1
  892. package/dist/serve/vite-ai-config.js.map +1 -1
  893. package/dist/serve/vite-functions-development.d.ts +3 -3
  894. package/dist/serve/vite-functions-development.d.ts.map +1 -1
  895. package/dist/serve/vite-functions-development.js +1 -1
  896. package/dist/serve/vite-functions-development.js.map +1 -1
  897. package/dist/serve/vite-generation-bridge.d.ts +2 -2
  898. package/dist/serve/vite-generation-bridge.d.ts.map +1 -1
  899. package/dist/serve/vite-generation-functions.d.ts +3 -3
  900. package/dist/serve/vite-generation-functions.d.ts.map +1 -1
  901. package/dist/serve/vite-generation-functions.js +1 -1
  902. package/dist/serve/vite-generation-functions.js.map +1 -1
  903. package/dist/serve/vite-generation-middleware.d.ts +1 -1
  904. package/dist/serve/vite-generation-middleware.d.ts.map +1 -1
  905. package/dist/serve/vite-generation-middleware.js +36 -1
  906. package/dist/serve/vite-generation-middleware.js.map +1 -1
  907. package/dist/serve/vite-module-swap.d.ts.map +1 -1
  908. package/dist/serve/vite-module-swap.js +8 -0
  909. package/dist/serve/vite-module-swap.js.map +1 -1
  910. package/dist/serve/vite-page-runtime.d.ts.map +1 -1
  911. package/dist/serve/vite-page-runtime.js +7 -1
  912. package/dist/serve/vite-page-runtime.js.map +1 -1
  913. package/dist/serve/vite-rules-source.d.ts +1 -1
  914. package/dist/serve/vite-rules-source.d.ts.map +1 -1
  915. package/dist/serve/vite-rules-source.js +2 -4
  916. package/dist/serve/vite-rules-source.js.map +1 -1
  917. package/dist/serve/vite-sandbox-generation.d.ts +2 -2
  918. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
  919. package/dist/serve/vite-sandbox-generation.js +2 -2
  920. package/dist/serve/vite-sandbox-generation.js.map +1 -1
  921. package/dist/serve/worker/client/auth.d.ts +29 -5
  922. package/dist/serve/worker/client/auth.d.ts.map +1 -1
  923. package/dist/serve/worker/client/auth.js +61 -11
  924. package/dist/serve/worker/client/auth.js.map +1 -1
  925. package/dist/serve/worker/client/clock.d.ts +0 -16
  926. package/dist/serve/worker/client/clock.d.ts.map +1 -1
  927. package/dist/serve/worker/client/clock.js +23 -10
  928. package/dist/serve/worker/client/clock.js.map +1 -1
  929. package/dist/serve/worker/client/firestore-reads.d.ts +12 -5
  930. package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -1
  931. package/dist/serve/worker/client/firestore-reads.js +47 -16
  932. package/dist/serve/worker/client/firestore-reads.js.map +1 -1
  933. package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -1
  934. package/dist/serve/worker/client/firestore-refs.js +4 -14
  935. package/dist/serve/worker/client/firestore-refs.js.map +1 -1
  936. package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts.map +1 -1
  937. package/dist/serve/worker/client/rtdb-connection-lifecycle.js +5 -0
  938. package/dist/serve/worker/client/rtdb-connection-lifecycle.js.map +1 -1
  939. package/dist/serve/worker/client/rtdb-snapshots.d.ts +7 -0
  940. package/dist/serve/worker/client/rtdb-snapshots.d.ts.map +1 -1
  941. package/dist/serve/worker/client/rtdb-snapshots.js +25 -1
  942. package/dist/serve/worker/client/rtdb-snapshots.js.map +1 -1
  943. package/dist/serve/worker/client/rtdb-value-validation.d.ts +21 -0
  944. package/dist/serve/worker/client/rtdb-value-validation.d.ts.map +1 -0
  945. package/dist/serve/worker/client/rtdb-value-validation.js +183 -0
  946. package/dist/serve/worker/client/rtdb-value-validation.js.map +1 -0
  947. package/dist/serve/worker/client/rtdb-writes.d.ts.map +1 -1
  948. package/dist/serve/worker/client/rtdb-writes.js +7 -0
  949. package/dist/serve/worker/client/rtdb-writes.js.map +1 -1
  950. package/dist/serve/worker/client/snapshots.d.ts +2 -0
  951. package/dist/serve/worker/client/snapshots.d.ts.map +1 -1
  952. package/dist/serve/worker/client/snapshots.js +13 -7
  953. package/dist/serve/worker/client/snapshots.js.map +1 -1
  954. package/dist/serve/worker/client/websocket-connection.d.ts +6 -0
  955. package/dist/serve/worker/client/websocket-connection.d.ts.map +1 -1
  956. package/dist/serve/worker/client/websocket-connection.js +32 -3
  957. package/dist/serve/worker/client/websocket-connection.js.map +1 -1
  958. package/dist/serve/worker/host/auth-credential-sign-in.d.ts +33 -0
  959. package/dist/serve/worker/host/auth-credential-sign-in.d.ts.map +1 -0
  960. package/dist/serve/worker/host/auth-credential-sign-in.js +70 -0
  961. package/dist/serve/worker/host/auth-credential-sign-in.js.map +1 -0
  962. package/dist/serve/worker/host/auth-reauthentication.js +3 -3
  963. package/dist/serve/worker/host/auth-reauthentication.js.map +1 -1
  964. package/dist/serve/worker/host/rules.d.ts +15 -1
  965. package/dist/serve/worker/host/rules.d.ts.map +1 -1
  966. package/dist/serve/worker/host/rules.js +43 -34
  967. package/dist/serve/worker/host/rules.js.map +1 -1
  968. package/dist/serve/worker/host/staged-sign-in-results.d.ts +24 -0
  969. package/dist/serve/worker/host/staged-sign-in-results.d.ts.map +1 -0
  970. package/dist/serve/worker/host/staged-sign-in-results.js +40 -0
  971. package/dist/serve/worker/host/staged-sign-in-results.js.map +1 -0
  972. package/dist/serve/worker/host/storage.d.ts.map +1 -1
  973. package/dist/serve/worker/host/storage.js +20 -12
  974. package/dist/serve/worker/host/storage.js.map +1 -1
  975. package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
  976. package/dist/serve/worker/host/subscriptions.js +6 -2
  977. package/dist/serve/worker/host/subscriptions.js.map +1 -1
  978. package/dist/serve/worker/host-auth.d.ts +3 -0
  979. package/dist/serve/worker/host-auth.d.ts.map +1 -1
  980. package/dist/serve/worker/host-auth.js +32 -13
  981. package/dist/serve/worker/host-auth.js.map +1 -1
  982. package/dist/serve/worker/inbound-validation/operation-arguments.d.ts.map +1 -1
  983. package/dist/serve/worker/inbound-validation/operation-arguments.js +27 -14
  984. package/dist/serve/worker/inbound-validation/operation-arguments.js.map +1 -1
  985. package/dist/serve/worker/operation-persistence.d.ts +1 -0
  986. package/dist/serve/worker/operation-persistence.d.ts.map +1 -1
  987. package/dist/serve/worker/operation-persistence.js +1 -0
  988. package/dist/serve/worker/operation-persistence.js.map +1 -1
  989. package/dist/serve/worker/protocol.d.ts +9 -1
  990. package/dist/serve/worker/protocol.d.ts.map +1 -1
  991. package/dist/serve/worker/protocol.js.map +1 -1
  992. package/dist/serve/worker/rtdb-value-equality.d.ts.map +1 -1
  993. package/dist/serve/worker/rtdb-value-equality.js +3 -1
  994. package/dist/serve/worker/rtdb-value-equality.js.map +1 -1
  995. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  996. package/dist/serve/worker/serve-init.js +3 -9
  997. package/dist/serve/worker/serve-init.js.map +1 -1
  998. package/dist/serve/worker-build-lock.d.ts +23 -0
  999. package/dist/serve/worker-build-lock.d.ts.map +1 -0
  1000. package/dist/serve/worker-build-lock.js +179 -0
  1001. package/dist/serve/worker-build-lock.js.map +1 -0
  1002. package/dist/serve/worker-bundle-cache.d.ts +17 -0
  1003. package/dist/serve/worker-bundle-cache.d.ts.map +1 -0
  1004. package/dist/serve/worker-bundle-cache.js +89 -0
  1005. package/dist/serve/worker-bundle-cache.js.map +1 -0
  1006. package/dist/verify/cases.js +7 -3
  1007. package/dist/verify/cases.js.map +1 -1
  1008. package/dist/verify/index.d.ts.map +1 -1
  1009. package/dist/verify/index.js +11 -5
  1010. package/dist/verify/index.js.map +1 -1
  1011. package/package.json +10 -4
  1012. package/src/assurance/.generated/conformance-verdicts.ts +107 -40
  1013. package/src/assurance/capabilities.ts +11 -15
  1014. package/src/bounded-request.ts +66 -7
  1015. package/src/bridge/client/bridge-url.ts +5 -1
  1016. package/src/bridge/client/bridge.ts +19 -3
  1017. package/src/bridge/frame-output.ts +45 -0
  1018. package/src/bridge/protocol.ts +13 -0
  1019. package/src/bridge/server/in-process.ts +57 -17
  1020. package/src/bridge/server/peer.ts +11 -0
  1021. package/src/bridge/server/standalone.ts +29 -107
  1022. package/src/bridge/surface/arguments/sandbox.ts +2 -69
  1023. package/src/bridge/surface/arguments/seed.ts +78 -0
  1024. package/src/bridge/surface/context.ts +26 -37
  1025. package/src/bridge/surface/database-instance-catalog.ts +4 -32
  1026. package/src/bridge/surface/database-instance-project.ts +40 -0
  1027. package/src/bridge/surface/database-instance.ts +4 -4
  1028. package/src/bridge/surface/functions-runtime.ts +5 -5
  1029. package/src/bridge/surface/held-identity.ts +4 -4
  1030. package/src/bridge/surface/manifest.sandbox.generated.ts +137 -0
  1031. package/src/bridge/surface/method-types.ts +61 -7
  1032. package/src/bridge/surface/methods/ai_logic/clearScripts.ts +2 -1
  1033. package/src/bridge/surface/methods/ai_logic/script.ts +2 -1
  1034. package/src/bridge/surface/methods/ai_logic/scripts.ts +2 -1
  1035. package/src/bridge/surface/methods/ai_logic/status.ts +1 -0
  1036. package/src/bridge/surface/methods/assurance/attach.ts +1 -0
  1037. package/src/bridge/surface/methods/assurance/canIUse.ts +1 -0
  1038. package/src/bridge/surface/methods/assurance/define.ts +1 -0
  1039. package/src/bridge/surface/methods/assurance/export.ts +1 -0
  1040. package/src/bridge/surface/methods/assurance/inspect.ts +1 -0
  1041. package/src/bridge/surface/methods/assurance/map.ts +1 -0
  1042. package/src/bridge/surface/methods/assurance/minimize.ts +1 -0
  1043. package/src/bridge/surface/methods/assurance/propose.ts +1 -0
  1044. package/src/bridge/surface/methods/assurance/replaySession.ts +1 -0
  1045. package/src/bridge/surface/methods/assurance/run.ts +1 -0
  1046. package/src/bridge/surface/methods/assurance/start.ts +1 -0
  1047. package/src/bridge/surface/methods/assurance/testRulesHosted.ts +1 -0
  1048. package/src/bridge/surface/methods/assurance/verify.ts +1 -0
  1049. package/src/bridge/surface/methods/assurance/verifyCases.ts +1 -0
  1050. package/src/bridge/surface/methods/auth/actAsAdmin.ts +1 -0
  1051. package/src/bridge/surface/methods/auth/actAsAnonymous.ts +1 -0
  1052. package/src/bridge/surface/methods/auth/createCustomToken.ts +1 -0
  1053. package/src/bridge/surface/methods/auth/createUser.ts +2 -1
  1054. package/src/bridge/surface/methods/auth/deleteUser.ts +2 -1
  1055. package/src/bridge/surface/methods/auth/getUser.ts +2 -1
  1056. package/src/bridge/surface/methods/auth/getUserByEmail.ts +2 -1
  1057. package/src/bridge/surface/methods/auth/impersonate.ts +1 -0
  1058. package/src/bridge/surface/methods/auth/importUsers.ts +3 -2
  1059. package/src/bridge/surface/methods/auth/listUsers.ts +2 -1
  1060. package/src/bridge/surface/methods/auth/sessions.ts +1 -0
  1061. package/src/bridge/surface/methods/auth/setCustomUserClaims.ts +2 -1
  1062. package/src/bridge/surface/methods/auth/signInAnonymously.ts +1 -0
  1063. package/src/bridge/surface/methods/auth/signInWithCredential.ts +1 -0
  1064. package/src/bridge/surface/methods/auth/signInWithCustomToken.ts +1 -0
  1065. package/src/bridge/surface/methods/auth/signInWithEmailAndPassword.ts +1 -0
  1066. package/src/bridge/surface/methods/auth/signOut.ts +1 -0
  1067. package/src/bridge/surface/methods/auth/takeAuthMail.ts +1 -0
  1068. package/src/bridge/surface/methods/auth/updateUser.ts +2 -1
  1069. package/src/bridge/surface/methods/auth/useAppSession.ts +1 -0
  1070. package/src/bridge/surface/methods/auth/whoami.ts +1 -0
  1071. package/src/bridge/surface/methods/database/crawl.ts +1 -0
  1072. package/src/bridge/surface/methods/database/get.ts +1 -0
  1073. package/src/bridge/surface/methods/database/push.ts +1 -0
  1074. package/src/bridge/surface/methods/database/query.ts +1 -0
  1075. package/src/bridge/surface/methods/database/remove.ts +1 -0
  1076. package/src/bridge/surface/methods/database/set.ts +1 -0
  1077. package/src/bridge/surface/methods/database/update.ts +1 -0
  1078. package/src/bridge/surface/methods/firestore/addDoc.ts +2 -1
  1079. package/src/bridge/surface/methods/firestore/deleteDoc.ts +2 -1
  1080. package/src/bridge/surface/methods/firestore/discoverPaths.ts +1 -0
  1081. package/src/bridge/surface/methods/firestore/extractIndexes.ts +1 -0
  1082. package/src/bridge/surface/methods/firestore/findCollectionGroup.ts +1 -0
  1083. package/src/bridge/surface/methods/firestore/getAggregateFromServer.ts +1 -0
  1084. package/src/bridge/surface/methods/firestore/getCountFromServer.ts +1 -0
  1085. package/src/bridge/surface/methods/firestore/getDoc.ts +2 -1
  1086. package/src/bridge/surface/methods/firestore/getDocs.ts +2 -1
  1087. package/src/bridge/surface/methods/firestore/setDoc.ts +2 -1
  1088. package/src/bridge/surface/methods/firestore/updateDoc.ts +2 -1
  1089. package/src/bridge/surface/methods/firestore/writeBatch.ts +2 -1
  1090. package/src/bridge/surface/methods/firestore/writeIndexes.ts +1 -0
  1091. package/src/bridge/surface/methods/functions/executions.ts +2 -1
  1092. package/src/bridge/surface/methods/functions/fire.ts +7 -6
  1093. package/src/bridge/surface/methods/functions/listTriggers.ts +1 -0
  1094. package/src/bridge/surface/methods/messaging/deliveries.ts +1 -0
  1095. package/src/bridge/surface/methods/messaging/send.ts +2 -1
  1096. package/src/bridge/surface/methods/messaging/subscribeToTopic.ts +1 -0
  1097. package/src/bridge/surface/methods/messaging/tokens.ts +1 -0
  1098. package/src/bridge/surface/methods/messaging/unsubscribeFromTopic.ts +1 -0
  1099. package/src/bridge/surface/methods/registry.ts +2 -12
  1100. package/src/bridge/surface/methods/rules/explainDenial.ts +1 -0
  1101. package/src/bridge/surface/methods/rules/getStdlib.ts +1 -0
  1102. package/src/bridge/surface/methods/rules/lint.ts +1 -0
  1103. package/src/bridge/surface/methods/rules/listStdlib.ts +1 -0
  1104. package/src/bridge/surface/methods/rules/set.ts +1 -0
  1105. package/src/bridge/surface/methods/rules/simulate.ts +1 -0
  1106. package/src/bridge/surface/methods/sandbox/activity.ts +2 -1
  1107. package/src/bridge/surface/methods/sandbox/advanceClock.ts +1 -0
  1108. package/src/bridge/surface/methods/sandbox/apply.ts +1 -0
  1109. package/src/bridge/surface/methods/sandbox/checkpoint.ts +1 -0
  1110. package/src/bridge/surface/methods/sandbox/deleteCapture.ts +1 -1
  1111. package/src/bridge/surface/methods/sandbox/deleteCheckpoint.ts +1 -0
  1112. package/src/bridge/surface/methods/sandbox/diff.ts +1 -0
  1113. package/src/bridge/surface/methods/sandbox/discard.ts +1 -0
  1114. package/src/bridge/surface/methods/sandbox/events.ts +2 -1
  1115. package/src/bridge/surface/methods/sandbox/exportFixture.ts +1 -0
  1116. package/src/bridge/surface/methods/sandbox/fork.ts +1 -0
  1117. package/src/bridge/surface/methods/sandbox/inspect.ts +2 -1
  1118. package/src/bridge/surface/methods/sandbox/listBranches.ts +1 -0
  1119. package/src/bridge/surface/methods/sandbox/listCaptures.ts +1 -1
  1120. package/src/bridge/surface/methods/sandbox/listCheckpoints.ts +1 -0
  1121. package/src/bridge/surface/methods/sandbox/listeners.ts +1 -0
  1122. package/src/bridge/surface/methods/sandbox/openCapture.ts +1 -1
  1123. package/src/bridge/surface/methods/sandbox/promote.ts +1 -0
  1124. package/src/bridge/surface/methods/sandbox/renameCapture.ts +1 -1
  1125. package/src/bridge/surface/methods/sandbox/reset.ts +3 -2
  1126. package/src/bridge/surface/methods/sandbox/resetClock.ts +1 -0
  1127. package/src/bridge/surface/methods/sandbox/restore.ts +1 -0
  1128. package/src/bridge/surface/methods/sandbox/saveCapture.ts +1 -1
  1129. package/src/bridge/surface/methods/sandbox/seed.ts +3 -2
  1130. package/src/bridge/surface/methods/sandbox/seedFromFixture.ts +1 -0
  1131. package/src/bridge/surface/methods/sandbox/setClock.ts +1 -0
  1132. package/src/bridge/surface/methods/sandbox-registry.ts +24 -0
  1133. package/src/bridge/surface/methods/storage/deleteObject.ts +1 -0
  1134. package/src/bridge/surface/methods/storage/getBytes.ts +1 -0
  1135. package/src/bridge/surface/methods/storage/getDownloadURL.ts +1 -0
  1136. package/src/bridge/surface/methods/storage/getMetadata.ts +1 -0
  1137. package/src/bridge/surface/methods/storage/listAll.ts +1 -0
  1138. package/src/bridge/surface/methods/storage/provision.ts +1 -0
  1139. package/src/bridge/surface/methods/storage/setCrossServiceIam.ts +1 -0
  1140. package/src/bridge/surface/methods/storage/status.ts +1 -0
  1141. package/src/bridge/surface/methods/storage/updateMetadata.ts +1 -0
  1142. package/src/bridge/surface/methods/storage/uploadBytes.ts +1 -0
  1143. package/src/bridge/surface/request-instant.ts +2 -2
  1144. package/src/bridge/surface/rules-engines/database.ts +1 -2
  1145. package/src/bridge/surface/rules-engines/storage-request-resource.ts +275 -0
  1146. package/src/bridge/surface/rules-engines/storage.ts +54 -81
  1147. package/src/bridge/surface/sandbox-context.ts +49 -0
  1148. package/src/bridge/surface/service-handles.ts +13 -9
  1149. package/src/bridge/surface/sign-in.ts +3 -3
  1150. package/src/bridge/surface/storage-rules.ts +2 -14
  1151. package/src/bridge/surface/stored-identity.ts +3 -3
  1152. package/src/bridge/surface/types.ts +30 -8
  1153. package/src/cli/firebase-json.ts +45 -7
  1154. package/src/cli/firestore-indexes.ts +2 -1
  1155. package/src/cli/index.ts +46 -11
  1156. package/src/cli/public-dir-hint.ts +35 -0
  1157. package/src/cli/run.ts +35 -7
  1158. package/src/cli/sandbox-runner.ts +10 -2
  1159. package/src/cli/serve-diagnostics.ts +12 -1
  1160. package/src/cli/serve.ts +27 -26
  1161. package/src/cli/service-commands.test.ts +7 -0
  1162. package/src/cli/snapshot.ts +15 -6
  1163. package/src/cli/surface-method-runner.ts +1 -1
  1164. package/src/cli/verify.ts +11 -1
  1165. package/src/conformance/.generated/can-i-use-browser.ts +22 -3
  1166. package/src/conformance/.generated/can-i-use.ts +1 -1
  1167. package/src/conformance/.generated/conformance-docs.ts +1 -1
  1168. package/src/conformance/.generated/served-availability.ts +1 -1
  1169. package/src/discover/merge.ts +12 -3
  1170. package/src/functions/child-protocol.ts +59 -0
  1171. package/src/functions/child.ts +107 -0
  1172. package/src/{functions-rtdb → functions}/development-runtime.ts +13 -14
  1173. package/src/functions/endpoints.ts +80 -0
  1174. package/src/{functions-rtdb → functions}/project.ts +2 -2
  1175. package/src/functions/rtdb/child-runtime.ts +139 -0
  1176. package/src/{functions-rtdb → functions/rtdb}/discovery.ts +9 -43
  1177. package/src/{functions-rtdb → functions/rtdb}/remote-delivery.ts +1 -1
  1178. package/src/functions/spawn.ts +212 -0
  1179. package/src/functions/unsupported.ts +42 -0
  1180. package/src/google-endpoints.ts +74 -3
  1181. package/src/next/bridge-import-loader.ts +56 -0
  1182. package/src/next/bridge-imports.ts +108 -0
  1183. package/src/next/client-aliases.ts +14 -27
  1184. package/src/next/guard.ts +33 -11
  1185. package/src/next/turbopack-config.ts +26 -0
  1186. package/src/next/webpack-config.ts +26 -0
  1187. package/src/next/with-pyric.ts +26 -0
  1188. package/src/register/activation.ts +26 -0
  1189. package/src/register/app-bridge-admin-app-check.ts +3 -1
  1190. package/src/register/child-process-guard.ts +189 -0
  1191. package/src/register/client/bootstrap.ts +7 -1
  1192. package/src/register/connect-prototypes.ts +12 -0
  1193. package/src/register/hooks.ts +56 -3
  1194. package/src/register/index.ts +92 -20
  1195. package/src/register/mapping.ts +57 -3
  1196. package/src/register/net-guard.ts +149 -39
  1197. package/src/register/package-identity.ts +98 -0
  1198. package/src/register/swap-or-stop.ts +194 -0
  1199. package/src/register/worker-guard.ts +90 -0
  1200. package/src/remote/resolve-host.ts +14 -2
  1201. package/src/serve/ai-proxy.ts +36 -8
  1202. package/src/serve/app-ports.ts +119 -0
  1203. package/src/serve/bridge-mount.ts +36 -8
  1204. package/src/serve/bundler.ts +87 -29
  1205. package/src/serve/discovery.ts +244 -67
  1206. package/src/serve/entries/auth.ts +22 -1
  1207. package/src/serve/entries/firestore-surface.ts +1 -0
  1208. package/src/serve/entries/init-payload.ts +28 -5
  1209. package/src/serve/entries/moved-host.ts +28 -0
  1210. package/src/serve/entries/runtime-origin.ts +6 -0
  1211. package/src/serve/entries/unsupported/firestore.ts +0 -1
  1212. package/src/serve/entries/worker-runtime.ts +19 -6
  1213. package/src/serve/firebase-module-swap.ts +98 -15
  1214. package/src/serve/gemini-proxy.ts +2 -2
  1215. package/src/serve/hosted/runtime.ts +10 -2
  1216. package/src/serve/namespace.ts +41 -29
  1217. package/src/serve/repro/compare.ts +9 -1
  1218. package/src/serve/rules-fixture-check.ts +34 -9
  1219. package/src/serve/rules.ts +104 -20
  1220. package/src/serve/sandbox-session.ts +11 -3
  1221. package/src/serve/server.ts +29 -2
  1222. package/src/serve/vite-ai-config.ts +19 -1
  1223. package/src/serve/vite-functions-development.ts +3 -3
  1224. package/src/serve/vite-generation-bridge.ts +2 -2
  1225. package/src/serve/vite-generation-functions.ts +5 -5
  1226. package/src/serve/vite-generation-middleware.ts +38 -2
  1227. package/src/serve/vite-module-swap.ts +8 -0
  1228. package/src/serve/vite-page-runtime.ts +6 -0
  1229. package/src/serve/vite-rules-source.ts +2 -5
  1230. package/src/serve/vite-sandbox-generation.ts +5 -5
  1231. package/src/serve/worker/__tests__/auth-credential-sign-in.test.ts +343 -0
  1232. package/src/serve/worker/__tests__/auth-m2-parity.test.ts +45 -1
  1233. package/src/serve/worker/__tests__/staged-sign-in-results.test.ts +139 -0
  1234. package/src/serve/worker/client/auth.ts +97 -21
  1235. package/src/serve/worker/client/clock.ts +10 -12
  1236. package/src/serve/worker/client/firestore-reads.ts +70 -21
  1237. package/src/serve/worker/client/firestore-refs.ts +4 -14
  1238. package/src/serve/worker/client/rtdb-connection-lifecycle.ts +5 -0
  1239. package/src/serve/worker/client/rtdb-snapshots.ts +24 -2
  1240. package/src/serve/worker/client/rtdb-value-validation.ts +198 -0
  1241. package/src/serve/worker/client/rtdb-writes.ts +7 -0
  1242. package/src/serve/worker/client/snapshots.ts +15 -6
  1243. package/src/serve/worker/client/websocket-connection.ts +39 -3
  1244. package/src/serve/worker/host/auth-credential-sign-in.ts +97 -0
  1245. package/src/serve/worker/host/auth-reauthentication.ts +3 -3
  1246. package/src/serve/worker/host/rules.ts +53 -34
  1247. package/src/serve/worker/host/staged-sign-in-results.ts +53 -0
  1248. package/src/serve/worker/host/storage.ts +26 -11
  1249. package/src/serve/worker/host/subscriptions.ts +7 -4
  1250. package/src/serve/worker/host-auth.ts +33 -15
  1251. package/src/serve/worker/inbound-validation/operation-arguments.ts +27 -14
  1252. package/src/serve/worker/operation-persistence.ts +1 -0
  1253. package/src/serve/worker/protocol.ts +7 -1
  1254. package/src/serve/worker/rtdb-value-equality.ts +3 -1
  1255. package/src/serve/worker/serve-init.ts +3 -9
  1256. package/src/serve/worker-build-lock.ts +207 -0
  1257. package/src/serve/worker-bundle-cache.ts +90 -0
  1258. package/src/verify/cases.ts +6 -3
  1259. package/src/verify/index.ts +16 -4
  1260. package/dist/functions-rtdb/child.d.ts.map +0 -1
  1261. package/dist/functions-rtdb/child.js +0 -386
  1262. package/dist/functions-rtdb/child.js.map +0 -1
  1263. package/dist/functions-rtdb/delivery.d.ts.map +0 -1
  1264. package/dist/functions-rtdb/delivery.js.map +0 -1
  1265. package/dist/functions-rtdb/development-runtime.d.ts.map +0 -1
  1266. package/dist/functions-rtdb/development-runtime.js.map +0 -1
  1267. package/dist/functions-rtdb/discovery.d.ts.map +0 -1
  1268. package/dist/functions-rtdb/discovery.js.map +0 -1
  1269. package/dist/functions-rtdb/event.d.ts.map +0 -1
  1270. package/dist/functions-rtdb/event.js.map +0 -1
  1271. package/dist/functions-rtdb/events.d.ts.map +0 -1
  1272. package/dist/functions-rtdb/events.js.map +0 -1
  1273. package/dist/functions-rtdb/execution-log.d.ts.map +0 -1
  1274. package/dist/functions-rtdb/execution-log.js.map +0 -1
  1275. package/dist/functions-rtdb/execution.d.ts.map +0 -1
  1276. package/dist/functions-rtdb/execution.js.map +0 -1
  1277. package/dist/functions-rtdb/in-memory-delivery.d.ts.map +0 -1
  1278. package/dist/functions-rtdb/in-memory-delivery.js.map +0 -1
  1279. package/dist/functions-rtdb/module-loader.d.ts.map +0 -1
  1280. package/dist/functions-rtdb/module-loader.js.map +0 -1
  1281. package/dist/functions-rtdb/project.d.ts +0 -7
  1282. package/dist/functions-rtdb/project.d.ts.map +0 -1
  1283. package/dist/functions-rtdb/project.js.map +0 -1
  1284. package/dist/functions-rtdb/projection.d.ts.map +0 -1
  1285. package/dist/functions-rtdb/projection.js.map +0 -1
  1286. package/dist/functions-rtdb/reference-pattern.d.ts.map +0 -1
  1287. package/dist/functions-rtdb/reference-pattern.js.map +0 -1
  1288. package/dist/functions-rtdb/remote-delivery.d.ts.map +0 -1
  1289. package/dist/functions-rtdb/remote-delivery.js.map +0 -1
  1290. package/dist/serve/gemini-error-redaction.d.ts +0 -6
  1291. package/dist/serve/gemini-error-redaction.d.ts.map +0 -1
  1292. package/dist/serve/gemini-error-redaction.js +0 -61
  1293. package/dist/serve/gemini-error-redaction.js.map +0 -1
  1294. package/dist/serve/site-ui/_astro/app.C--T2qDK.js +0 -151
  1295. package/dist/serve/site-ui/_astro/app.DqyhRyrU.js +0 -1
  1296. package/dist/serve/site-ui/_astro/sandbox-controls.Bv6lfpIe.js +0 -1725
  1297. package/dist/serve/site-ui/_astro/writes.Bg0YEEA7.js +0 -1
  1298. package/src/functions-rtdb/child.ts +0 -512
  1299. package/src/serve/gemini-error-redaction.ts +0 -60
  1300. /package/dist/{functions-rtdb → functions}/events.d.ts +0 -0
  1301. /package/dist/{functions-rtdb → functions}/events.js +0 -0
  1302. /package/dist/{functions-rtdb → functions}/execution-log.d.ts +0 -0
  1303. /package/dist/{functions-rtdb → functions}/execution-log.js +0 -0
  1304. /package/dist/{functions-rtdb → functions}/module-loader.d.ts +0 -0
  1305. /package/dist/{functions-rtdb → functions}/module-loader.js +0 -0
  1306. /package/dist/{functions-rtdb → functions/rtdb}/delivery.d.ts +0 -0
  1307. /package/dist/{functions-rtdb → functions/rtdb}/delivery.js +0 -0
  1308. /package/dist/{functions-rtdb → functions/rtdb}/event.d.ts +0 -0
  1309. /package/dist/{functions-rtdb → functions/rtdb}/event.js +0 -0
  1310. /package/dist/{functions-rtdb → functions/rtdb}/execution.d.ts +0 -0
  1311. /package/dist/{functions-rtdb → functions/rtdb}/execution.js +0 -0
  1312. /package/dist/{functions-rtdb → functions/rtdb}/in-memory-delivery.d.ts +0 -0
  1313. /package/dist/{functions-rtdb → functions/rtdb}/in-memory-delivery.js +0 -0
  1314. /package/dist/{functions-rtdb → functions/rtdb}/projection.d.ts +0 -0
  1315. /package/dist/{functions-rtdb → functions/rtdb}/projection.js +0 -0
  1316. /package/dist/{functions-rtdb → functions/rtdb}/reference-pattern.d.ts +0 -0
  1317. /package/dist/{functions-rtdb → functions/rtdb}/reference-pattern.js +0 -0
  1318. /package/dist/{functions-rtdb → functions/rtdb}/remote-delivery.js +0 -0
  1319. /package/src/{functions-rtdb → functions}/events.ts +0 -0
  1320. /package/src/{functions-rtdb → functions}/execution-log.ts +0 -0
  1321. /package/src/{functions-rtdb → functions}/module-loader.ts +0 -0
  1322. /package/src/{functions-rtdb → functions/rtdb}/delivery.ts +0 -0
  1323. /package/src/{functions-rtdb → functions/rtdb}/event.ts +0 -0
  1324. /package/src/{functions-rtdb → functions/rtdb}/execution.ts +0 -0
  1325. /package/src/{functions-rtdb → functions/rtdb}/in-memory-delivery.ts +0 -0
  1326. /package/src/{functions-rtdb → functions/rtdb}/projection.ts +0 -0
  1327. /package/src/{functions-rtdb → functions/rtdb}/reference-pattern.ts +0 -0
@@ -1,4 +1,4 @@
1
- import{s as f,b8 as h,b9 as w}from"./sandbox-controls.Bv6lfpIe.js";import{s as o,d as s}from"./writes.Bg0YEEA7.js";import{s as n,a as A,b as y,u as m,r as d}from"./app.C--T2qDK.js";import"./index.DBy5LfQW.js";import"./index.DNyk7q8W.js";class g{static serverTimestamp(){return{__type:"serverTimestamp"}}static increment(a){return{__type:"increment",value:a}}static arrayUnion(...a){return{__type:"arrayUnion",values:a}}static arrayRemove(...a){return{__type:"arrayRemove",values:a}}static delete(){return{__type:"deleteField"}}}function p(){return g.serverTimestamp()}async function b(t){n.createUser(t,{uid:"alice",email:"alice@gmail.com",displayName:"Alice Nguyen",emailVerified:!0,photoUrl:"https://lh3.googleusercontent.com/a/alice",providerUserInfo:[{providerId:"google.com"}],customClaims:{plan:"pro"}}),n.createUser(t,{uid:"bob",email:"bob@example.com",password:"pyric-demo",displayName:"Bob Carter",emailVerified:!0,customClaims:{role:"editor"}}),n.createUser(t,{uid:"carol",email:"carol@example.com",displayName:"Carol Diaz",emailVerified:!1}),await A(t),await y(t)}const v=new w(37.7749,-122.4194);async function R(t){const a=Date.now(),i=e=>h.fromMillis(a-e*6e4),l=[{id:"alice",name:"Alice Nguyen",email:"alice@gmail.com",plan:"pro"},{id:"bob",name:"Bob Carter",email:"bob@example.com",plan:"free"},{id:"carol",name:"Carol Diaz",email:"carol@example.com",plan:"free"}];for(const e of l)await o(s(t,"users",e.id),{name:e.name,email:e.email,plan:e.plan,createdAt:p()});const r=["alice","bob","carol"],c=["Ship the redesign","Reply to carol","Buy milk","Draft the launch post","Review the rules","Plan offsite","Renew the domain","Read the spec","Fix the flaky test","Call the bank","Water the plants","Book the flights"];for(let e=0;e<c.length;e++){const u=r[e%r.length];await o(s(t,"notes",`note-${String(e+1).padStart(2,"0")}`),{title:c[e],done:e%3===0,pinned:e===0,priority:e%3+1,ownerId:u,ownerRef:`users/${u}`,tags:e%2===0?["work","urgent"]:["personal"],meta:{source:e%2===0?"app":"import",revision:e+1,flags:{starred:e%4===0,archived:!1}},location:e%3===0?v:null,createdAt:i(120-e*7),updatedAt:p()})}await o(s(t,"posts","post-hello"),{title:"Hello world",body:"First post from the seeded sandbox.",authorRef:"users/alice",published:!0,publishedAt:i(8)}),await o(s(t,"posts","post-draft"),{title:"Draft: roadmap",body:"Unpublished draft.",authorRef:"users/bob",published:!1})}async function C(t){const a=new TextEncoder,l=Uint8Array.from(atob("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="),r=>r.charCodeAt(0));await m(d(t,"avatars/alice.png"),l,{contentType:"image/png"}),await m(d(t,"notes/note-01/attachment.txt"),a.encode(`Attachment for the redesign note.
1
+ import{s as f,bm as h,bn as w}from"./sandbox-controls.DI8MTU3L.js";import{s as o,d as s}from"./writes.D8gcuovU.js";import{s as n,a as A,b as y,u as m,r as d}from"./app.C84Qr10v.js";import"./index.DBy5LfQW.js";import"./index.DNyk7q8W.js";class g{static serverTimestamp(){return{__type:"serverTimestamp"}}static increment(a){return{__type:"increment",value:a}}static arrayUnion(...a){return{__type:"arrayUnion",values:a}}static arrayRemove(...a){return{__type:"arrayRemove",values:a}}static delete(){return{__type:"deleteField"}}}function p(){return g.serverTimestamp()}async function b(t){n.createUser(t,{uid:"alice",email:"alice@gmail.com",displayName:"Alice Nguyen",emailVerified:!0,photoUrl:"https://lh3.googleusercontent.com/a/alice",providerUserInfo:[{providerId:"google.com"}],customClaims:{plan:"pro"}}),n.createUser(t,{uid:"bob",email:"bob@example.com",password:"pyric-demo",displayName:"Bob Carter",emailVerified:!0,customClaims:{role:"editor"}}),n.createUser(t,{uid:"carol",email:"carol@example.com",displayName:"Carol Diaz",emailVerified:!1}),await A(t),await y(t)}const v=new w(37.7749,-122.4194);async function R(t){const a=Date.now(),i=e=>h.fromMillis(a-e*6e4),l=[{id:"alice",name:"Alice Nguyen",email:"alice@gmail.com",plan:"pro"},{id:"bob",name:"Bob Carter",email:"bob@example.com",plan:"free"},{id:"carol",name:"Carol Diaz",email:"carol@example.com",plan:"free"}];for(const e of l)await o(s(t,"users",e.id),{name:e.name,email:e.email,plan:e.plan,createdAt:p()});const r=["alice","bob","carol"],c=["Ship the redesign","Reply to carol","Buy milk","Draft the launch post","Review the rules","Plan offsite","Renew the domain","Read the spec","Fix the flaky test","Call the bank","Water the plants","Book the flights"];for(let e=0;e<c.length;e++){const u=r[e%r.length];await o(s(t,"notes",`note-${String(e+1).padStart(2,"0")}`),{title:c[e],done:e%3===0,pinned:e===0,priority:e%3+1,ownerId:u,ownerRef:`users/${u}`,tags:e%2===0?["work","urgent"]:["personal"],meta:{source:e%2===0?"app":"import",revision:e+1,flags:{starred:e%4===0,archived:!1}},location:e%3===0?v:null,createdAt:i(120-e*7),updatedAt:p()})}await o(s(t,"posts","post-hello"),{title:"Hello world",body:"First post from the seeded sandbox.",authorRef:"users/alice",published:!0,publishedAt:i(8)}),await o(s(t,"posts","post-draft"),{title:"Draft: roadmap",body:"Unpublished draft.",authorRef:"users/bob",published:!1})}async function C(t){const a=new TextEncoder,l=Uint8Array.from(atob("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="),r=>r.charCodeAt(0));await m(d(t,"avatars/alice.png"),l,{contentType:"image/png"}),await m(d(t,"notes/note-01/attachment.txt"),a.encode(`Attachment for the redesign note.
2
2
  `),{contentType:"text/plain"})}const U=`rules_version = '2';
3
3
  service cloud.firestore {
4
4
  match /databases/{database}/documents {
@@ -0,0 +1 @@
1
+ import{c as jt,bo as ve,b0 as ne,aO as f,bp as _t,bq as Tt,bm as le,br as Pt,bs as qt,bt as M,aX as K,bu as Vt,bv as Mt,aL as et,bw as Re,aK as Oe,bx as P,by as ke,bz as j,b1 as tt,bA as ce,bB as It,bC as zt,a0 as nt,P as w,aN as T,aZ as $t,bD as Lt,bE as Wt,bF as Qt,Z as Ee,F as I,bG as Fe,K as Ut,L as Nt,bl as Bt,bn as Gt,bH as Ht,bI as Yt,X as Jt,aj as Xt,bJ as Kt,_ as Zt,bK as en,bL as tn}from"./sandbox-controls.DI8MTU3L.js";const nn=Symbol.for("pyric.remote.sandbox");function Ce(e){return e!=null&&e[nn]===!0}let Z;function ts(e){Z=e}function st(e){return Z?.resolve(e,!1)}function sn(){if(!Z)throw new TypeError("No default sandbox app registry is installed - import and initialize pyric/app before calling a service factory without an app.");return Z.defaultApp()}function Me(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function rn(e,t,n,s){const r={collectionGroup:e.split("/").filter(Boolean).at(-1)??"",queryScope:t?"COLLECTION_GROUP":"COLLECTION",filters:[],orders:[]},i=(o,a)=>{const c=Me(o);if(!c||a>12||r.filters.length>=64){r.unsupported="This query exceeds the index checker’s supported limits.";return}if(c.kind==="and"&&Array.isArray(c.filters)){c.filters.forEach(u=>i(u,a+1));return}if(c.kind!=="where"||typeof c.field!="string"||typeof c.op!="string"){r.unsupported="This query uses a filter the index checker does not support yet.";return}r.filters.push({field:c.field,op:c.op})};n.forEach(o=>i(o,0));for(const o of s.slice(0,64)){const a=Me(o);if(!a||typeof a.field!="string"||a.direction!=="asc"&&a.direction!=="desc"){r.unsupported="This sort order cannot be checked yet.";continue}r.orders.push({field:a.field,direction:a.direction})}return s.length>64&&(r.unsupported="This query exceeds the index checker’s supported limits."),r}async function se(e,t,n){try{const s=await t();return e.complete(n?.()),s}catch(s){throw e.fail(),s}}const Ie=new Set;function on(e){return Ie.add(e),()=>{Ie.delete(e)}}function ns(e={}){return jt()}function z(e){return e.replace(/^\/+|\/+$/g,"").split("/")}function rt(e){return z(e).length%2===0&&z(e).length>0}function Ae(e){return z(e).length%2===1}function re(e){const t=z(e);return t[t.length-1]??""}function it(e){return z(e).slice(0,-1).join("/")}function ot(e,t){const n=t!==void 0,s=n?ve(t):void 0;return{id:e.id,ref:e,exists:n,data:()=>n?s:void 0,get:r=>ne(s,r)}}const ze=200,B=10,an=4;function cn(e){return e.length<=ze?{type:"string",value:e}:{type:"string",value:e.slice(0,ze),truncated:!0}}function at(e,t){const n=e*1e3+Math.floor(t/1e6);if(!Number.isFinite(n))return{type:"opaque"};try{return{type:"timestamp",iso:new Date(n).toISOString()}}catch{return{type:"opaque"}}}function un(e){if(typeof e!="object"||e===null)return{type:"opaque"};const t=e;return typeof t.path=="string"?{type:"reference",path:t.path}:t.type==="timestamp"&&typeof t.seconds=="number"&&typeof t.nanoseconds=="number"?at(t.seconds,t.nanoseconds):t.type==="geo-point"&&typeof t.latitude=="number"&&typeof t.longitude=="number"?{type:"geoPoint",latitude:t.latitude,longitude:t.longitude}:t.type==="bytes"&&Array.isArray(t.values)?{type:"bytes",length:t.values.length}:t.type==="vector"&&Array.isArray(t.values)?{type:"vector",length:t.values.length}:{type:"opaque"}}function he(e,t){if(e===null)return{type:"null"};if(typeof e=="string")return cn(e);if(typeof e=="number")return{type:"number",value:e};if(typeof e=="boolean")return{type:"boolean",value:e};if(typeof e!="object")return{type:"opaque"};if(t>=an)return{type:"opaque"};const n=e;if(n.type==="registered-firestore-value")return un(n.value);if(n.type==="timestamp"&&typeof n.seconds=="number"&&typeof n.nanoseconds=="number")return at(n.seconds,n.nanoseconds);if(n.type==="bytes"&&Array.isArray(n.values))return{type:"bytes",length:n.values.length};if(n.type==="array"&&Array.isArray(n.values)){const s=n.values.slice(0,B).map(r=>he(r,t+1));return n.values.length>B?{type:"array",values:s,truncated:!0}:{type:"array",values:s}}if(n.type==="map"&&Array.isArray(n.entries)){const s=n.entries.slice(0,B).filter(r=>Array.isArray(r)&&typeof r[0]=="string").map(([r,i])=>[r,he(i,t+1)]);return n.entries.length>B?{type:"map",entries:s,truncated:!0}:{type:"map",entries:s}}return{type:"opaque"}}function $e(e){return he(e,0)}function fe(e){if(e===null||typeof e!="object")return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(n=>fe(n)).join(",")}]`;const t=e;return`{${Object.keys(t).sort().map(n=>`${JSON.stringify(n)}:${fe(t[n])}`).join(",")}}`}function dn(e){if(e!==null&&typeof e=="object"){const n="type"in e&&e.type==="timestamp",s="seconds"in e&&typeof e.seconds=="number",r="nanoseconds"in e&&typeof e.nanoseconds=="number";return n&&s&&r}return!1}function E(e){return new f({code:"invalid-argument",message:e})}function pe(e,t,n,s=!1,r=!1){if(e===null||typeof e=="string"||typeof e=="boolean")return{comparison:e,execution:e};if(typeof e=="number")return{comparison:e,execution:e};if(typeof e>"u"||typeof e=="bigint"||typeof e=="function"||typeof e=="symbol")throw E(`Unsupported Firestore query value: ${typeof e}.`);if(typeof e!="object")throw E("Unsupported Firestore query value.");const u=_t(e);if(u!==void 0){const m=Tt(e);if(m!==void 0&&n!==void 0&&m!==n)throw E("Document reference belongs to a different Firestore database.");if(dn(u)){const p=Math.floor(u.nanoseconds/1e3)*1e3,g=new le(u.seconds,p);return{comparison:{type:"registered-firestore-value",value:Object.freeze({type:"timestamp",seconds:g.seconds,nanoseconds:p})},execution:g}}return{comparison:{type:"registered-firestore-value",value:u},execution:Pt(e)}}if(e instanceof Date){const m=e.getTime();if(!Number.isFinite(m))throw E("Invalid Date query value.");const S=Math.floor(m/1e3),p=Object.freeze({seconds:S,nanoseconds:Math.floor((m-S*1e3)*1e6)}),g={type:"timestamp",...p};return qt(p,g,()=>Object.freeze({...p})),{comparison:{type:"registered-firestore-value",value:g},execution:p}}if(e instanceof Uint8Array){const m=e.slice();return{comparison:{type:"bytes",values:Array.from(m)},execution:m}}if(t.has(e))throw E("Cyclic query operands are not Firestore values.");const b=Object.getPrototypeOf(e);if(b!==Object.prototype&&b!==null&&!Array.isArray(e))throw E("Firestore query maps must be plain objects.");t.add(e);try{if(Array.isArray(e)){if(r&&!s)throw E("Nested arrays are not supported.");const g=e.map(q=>pe(q,t,n,s,!0)),N=g.map(q=>q.execution);return M(N,K(e)),{comparison:{type:"array",values:g.map(q=>q.comparison)},execution:N}}const O=Object.keys(e).sort().map(p=>({key:p,captured:pe(e[p],t,n,s,!1)})),S=Object.fromEntries(O.map(({key:p,captured:g})=>[p,g.execution]));return M(S,K(e)),{comparison:{type:"map",entries:O.map(({key:p,captured:g})=>[p,g.comparison])},execution:S}}finally{t.delete(e)}}function ct(e,t,n=!1){try{const s=pe(e,new Set,t,n);return Object.freeze({kind:"canonical",value:s.comparison,executionValue:s.execution})}catch(s){if(s instanceof f)throw s;const r=s instanceof Error?s.message:String(s);throw E(`Invalid Firestore query value: ${r}`)}}function ut(e,t){return Vt(e.value,t.value)}const ln=["<","<=","==","!=",">=",">","in","not-in","array-contains","array-contains-any"],hn=new Set(ln);function fn(e,t){if(!hn.has(e))throw new f({code:"invalid-argument",message:"Unsupported Firestore filter operator."});if((e==="in"||e==="not-in"||e==="array-contains-any")&&!Array.isArray(t))throw new f({code:"invalid-argument",message:`Firestore ${e} filter requires an array operand.`})}function H(e,t){if(e.kind==="where"){fn(e.op,e.value);const s="comparisonValue"in e,r=e.op==="in"||e.op==="not-in",i=s?e.comparisonValue:ct(e.value,t,r);return Object.freeze({kind:"where",field:e.field,op:e.op,value:i.executionValue,comparisonValue:i})}return Object.freeze({kind:e.kind,filters:Object.freeze(e.filters.map(s=>H(s,t)))})}function G(e,t,n,s){const r=e.map(i=>ct(i,s));return Object.freeze({values:Object.freeze(r.map(i=>i.executionValue)),comparisonValues:Object.freeze(r),inclusive:t,fromSnapshot:n})}function dt(e,t){return e.length!==t.length?!1:e.every((n,s)=>{const r=t[s];return n.kind!==r.kind?!1:n.kind==="where"&&r.kind==="where"?n.field===r.field&&n.op===r.op&&ut(n.comparisonValue,r.comparisonValue):n.kind!=="where"&&r.kind!=="where"&&dt(n.filters,r.filters)})}function Le(e,t){return e===void 0||t===void 0?e===t:e.inclusive===t.inclusive&&e.comparisonValues.length===t.comparisonValues.length&&e.comparisonValues.every((n,s)=>ut(n,t.comparisonValues[s]))}function pn(e,t){return e.kind!==t.kind?!1:e.kind==="collection"&&t.kind==="collection"?e.path===t.path:e.kind==="collection-group"&&t.kind==="collection-group"&&e.collectionId===t.collectionId}function lt(e){return e.kind==="where"?Object.freeze({kind:e.kind,field:e.field,op:e.op,value:e.value}):Object.freeze({kind:e.kind,filters:Object.freeze(e.filters.map(lt))})}function We(e){if(e!==void 0)return Object.freeze({values:e.values,inclusive:e.inclusive,fromSnapshot:e.fromSnapshot})}function mn(e,t){return dt(e.filters,t.filters)&&e.orders.length===t.orders.length&&e.orders.every((n,s)=>{const r=t.orders[s];return n.field===r.field&&n.direction===r.direction})&&e.limitCount===t.limitCount&&e.limitFromEnd===t.limitFromEnd&&Le(e.start,t.start)&&Le(e.end,t.end)}const ht="__name__";function Qe(e,t){const n=e.data();if(n===void 0)throw new f({code:"not-found",message:`Snapshot-based cursors require an existing document — got an empty snapshot for ${e.id??"<unknown>"}.`});return t.map(s=>s.field===ht?e.ref:n[s.field])}class ${env;auth;collectionPath;clauses;orders;limitCount;limitFromEnd;start;end;bypassRules;documentRef;constructor(t){this.env=t.env,this.auth=t.auth,this.collectionPath=t.collectionPath,this.documentRef=t.documentRef,this.clauses=Object.freeze((t.clauses??[]).map(n=>H(n))),this.orders=Object.freeze((t.orders??[]).map(n=>Object.freeze({...n}))),this.limitCount=t.limitCount,this.limitFromEnd=t.limitFromEnd??!1,this.start=t.start===void 0?void 0:Object.freeze({...t.start,values:Object.freeze(t.start.comparisonValues.map(n=>n.executionValue)),comparisonValues:t.start.comparisonValues}),this.end=t.end===void 0?void 0:Object.freeze({...t.end,values:Object.freeze(t.end.comparisonValues.map(n=>n.executionValue)),comparisonValues:t.end.comparisonValues}),this.bypassRules=t.bypassRules??!1}where(t,n,s){return this.clone({clauses:[...this.clauses,H({kind:"where",field:t,op:n,value:s})]})}applyFilter(t){return this.clone({clauses:[...this.clauses,H(t)]})}orderBy(t,n="asc"){if(n!=="asc"&&n!=="desc")throw new f({code:"invalid-argument",message:"orderBy() direction must be 'asc' or 'desc'."});return this.clone({orders:[...this.orders,{field:t,direction:n}]})}limit(t){return Ue(t),this.clone({limitCount:t,limitFromEnd:!1})}limitToLast(t){return Ue(t),this.clone({limitCount:t,limitFromEnd:!0})}startCursor(t,n){return this.clone({start:G(this.normalizeExplicitCursorValues(t),n,!1)})}endCursor(t,n){return this.clone({end:G(this.normalizeExplicitCursorValues(t),n,!1)})}startCursorFromSnapshot(t,n){return this.clone({start:G(Qe(t,this.normalizedOrders()),n,!0)})}endCursorFromSnapshot(t,n){return this.clone({end:G(Qe(t,this.normalizedOrders()),n,!0)})}isStructurallyEqual(t){return t instanceof $?this.env===t.env&&this.bypassRules===t.bypassRules&&pn(this.queryScope(),t.queryScope())&&mn(this.comparableExecutionSpec(),t.comparableExecutionSpec()):!1}clone(t){return new $({env:this.env,auth:this.auth,collectionPath:this.collectionPath,documentRef:this.documentRef,clauses:t.clauses??this.clauses,orders:t.orders??this.orders,limitCount:"limitCount"in t?t.limitCount:this.limitCount,limitFromEnd:t.limitFromEnd??this.limitFromEnd,start:"start"in t?t.start:this.start,end:"end"in t?t.end:this.end,bypassRules:this.bypassRules})}queryScope(){return{kind:"collection",path:this.collectionPath}}sdkActivitySource(){const t=this.queryScope();return{service:"firestore",target:t.kind==="collection"?t.path:t.collectionId,key:fe({scope:t,query:this.activityQuery()}),isQuery:!0,indexQuery:rn(t.kind==="collection"?t.path:t.collectionId,t.kind==="collection-group",this.clauses,this.orders)}}readQueryRows(t){const n=t?.auth!==void 0?t.auth:this.auth;let s;try{s=this.env.runQuery({scope:this.queryScope(),auth:n,execution:this.executionSpec(),bypassRules:this.bypassRules,activityQuery:this.activityQuery()})}catch(r){const i=r?.simError;throw i?new f(i):r}if(!s.allowed)throw new f(s.error);return s.docs}activityQuery(){const t=s=>s.kind==="where"?{kind:"where",field:s.field,op:s.op,value:K(s.value),display:$e(s.comparisonValue.value)}:{kind:s.kind,filters:s.filters.map(t)},n=s=>s===void 0?null:{values:s.values.map(r=>K(r)),display:s.comparisonValues.map(r=>$e(r.value)),inclusive:s.inclusive,fromSnapshot:s.fromSnapshot};return{scope:this.activityScope(),filters:this.clauses.map(t),orderBy:this.orders.map(s=>({...s})),limit:this.limitCount??null,limitFromEnd:this.limitFromEnd,start:n(this.start),end:n(this.end)}}activityScope(){return{kind:"collection"}}normalizedOrders(){return Mt(this.executionSpec())}normalizeExplicitCursorValues(t){const n=this.orders;return t.map((s,r)=>{if(n[r]?.field!==ht)return s;if(typeof s!="string")throw new f({code:"invalid-argument",message:"Expected a string for a document ID cursor value."});const i=s.includes("/")?s:`${this.collectionPath}/${s}`;return this.documentRef(i)})}executionSpec(){const t={filters:Object.freeze(this.clauses.map(lt)),orders:this.orders,limitCount:this.limitCount,limitFromEnd:this.limitFromEnd,start:We(this.start),end:We(this.end)};return Object.freeze(t)}comparableExecutionSpec(){return{filters:this.clauses,orders:this.orders,limitCount:this.limitCount,limitFromEnd:this.limitFromEnd,start:this.start,end:this.end}}snapshotScope(){return this.queryScope()}snapshotConstraints(){return Object.freeze({execution:this.executionSpec(),activityQuery:this.activityQuery()})}async get(t){const s=this.readQueryRows(t).map(r=>{const i=this.documentRef(r.path),o=ve(r.data);return{id:i.id,ref:i,exists:!0,data:()=>o,get:a=>ne(o,a)}});return{size:s.length,empty:s.length===0,docs:s,forEach:et(s)}}async aggregate(t,n){const s=this.readQueryRows(n),r={};for(const i of Object.keys(t))r[i]=bn(t[i],s);return{data:()=>r}}}function yn(e,t){if(!t.includes("."))return e[t];let n=e;for(const s of t.split(".")){if(typeof n!="object"||n===null||Array.isArray(n))return;n=n[s]}return n}function bn(e,t){if(e.kind==="count")return t.length;let n=0,s=0;for(const r of t){const i=yn(r.data,e.field);typeof i=="number"&&Number.isFinite(i)&&(n+=i,s++)}return e.kind==="sum"?n:s===0?null:n/s}function Ue(e){if(!Number.isFinite(e))throw new f({code:"invalid-argument",message:"Query limit must be a finite number."})}function D(e,t){if(e.error)throw new f(e.error);const n=e.debugMessages.length>0?e.debugMessages.join("; "):"(no debug message)";throw new f(j("permission-denied",`${t}: ${n}`))}class gn{env;auth;bypassRules;collectionRef;id;path;constructor(t,n,s,r=!1,i){this.env=t,this.auth=n,this.bypassRules=r,this.collectionRef=i,this.path=s,this.id=re(s),M(this,Re("reference",s)),Oe(this,s,t)}get parent(){return this.collectionRef(it(this.path))}collection(t){return this.collectionRef(`${this.path}/${t}`)}async get(t){const n=this.env.execute({method:"get",path:this.path,auth:t?.auth!==void 0?t.auth:this.auth,bypassRules:this.bypassRules});n.allowed||D(n,"get denied");const s=n.data===void 0||n.data===null?void 0:n.data;return ot(this,s)}async create(t,n){const s=this.env.execute({method:"create",path:this.path,data:t,auth:n?.auth!==void 0?n.auth:this.auth,bypassRules:this.bypassRules});s.allowed||D(s,"create denied")}async set(t,n){const s=n?.auth!==void 0?n.auth:this.auth;if(n?.mergeFields!==void 0){const i=n.mergeFields.map(u=>String(u)),a=this.env.getDocument(this.path)===null?"create":"update",c=this.env.execute({method:a,path:this.path,data:t,auth:s,merge:{mergeFields:i},bypassRules:this.bypassRules});c.allowed||D(c,`set denied (as ${a})`);return}if(n?.merge===!0){const o=this.env.getDocument(this.path)===null?"create":"update",a=this.env.execute({method:o,path:this.path,data:t,auth:s,merge:!0,bypassRules:this.bypassRules});a.allowed||D(a,`set denied (as ${o})`);return}const r=this.env.execute({method:"set",path:this.path,data:t,auth:s,bypassRules:this.bypassRules});r.allowed||D(r,"set denied")}update(t,...n){const{fields:s,options:r}=P(t,n);return this.commitUpdate(s,r)}async commitUpdate(t,n){const s=this.env.execute({method:"update",path:this.path,data:ke(t),auth:n?.auth!==void 0?n.auth:this.auth,bypassRules:this.bypassRules});s.allowed||D(s,"update denied")}async delete(t){const n=this.env.execute({method:"delete",path:this.path,auth:t?.auth!==void 0?t.auth:this.auth,bypassRules:this.bypassRules});n.allowed||D(n,"delete denied")}}function V(e,t,n,s){return new gn(e,t,n,s,r=>new ft(e,t,r,s))}class ft extends ${id;path;constructor(t,n,s,r=!1){super({env:t,auth:n,collectionPath:s,bypassRules:r,documentRef:i=>V(t,n,i,r)}),this.path=s,this.id=re(s)}doc(t){const n=t??tt();return V(this.env,this.auth,`${this.path}/${n}`,this.bypassRules)}async add(t,n){const s=n?.auth!==void 0?n.auth:this.auth,{path:r,result:i}=this.env.createWithAutoId(this.path,t,s,this.bypassRules);if(!i.allowed){if(i.error)throw new f(i.error);let o="(no debug message)";throw i.debugMessages.length>0&&(o=i.debugMessages.join("; ")),new f(j("permission-denied",`set denied: ${o}`))}return V(this.env,this.auth,r,this.bypassRules)}}class De extends ${collectionId;constructor(t){super({...t,collectionPath:"",documentRef:n=>V(t.env,t.auth,n,t.bypassRules??!1)}),this.collectionId=t.collectionId}clone(t){return new De({env:this.env,auth:this.auth,collectionId:this.collectionId,clauses:t.clauses??this.clauses,orders:t.orders??this.orders,limitCount:"limitCount"in t?t.limitCount:this.limitCount,limitFromEnd:t.limitFromEnd??this.limitFromEnd,start:"start"in t?t.start:this.start,end:"end"in t?t.end:this.end,bypassRules:this.bypassRules})}queryScope(){return{kind:"collection-group",collectionId:this.collectionId}}activityScope(){return{kind:"collection-group"}}}class wn{env;auth;bypassRules;ops=[];constructor(t,n,s=!1){this.env=t,this.auth=n,this.bypassRules=s}create(t,n){return this.ops.push({method:"create",path:t.path,data:ce(n)}),this}set(t,n,s){const r={method:"set",path:t.path,data:ce(n)},i=s?.mergeFields;return i!==void 0?r.merge={mergeFields:[...i]}:s?.merge===!0&&(r.merge=!0),this.ops.push(r),this}update(t,n,...s){const{fields:r}=P(n,s);return this.ops.push({method:"update",path:t.path,data:ce(ke(r))}),this}delete(t){return this.ops.push({method:"delete",path:t.path}),this}async commit(t){if(this.ops.length===0)return;const s=t?.auth,r=s!==void 0,i=this.env.batch(this.ops,r?s:this.auth,this.bypassRules),{allowed:o,error:a}=i;if(o)return;if(a!==void 0)throw new f(a);const y=i.results.find(d=>!d.allowed)?.debugMessages.join("; ")??"batch denied";throw new f(j("permission-denied",`batch failed: ${y}`))}}function xn(e){return typeof e.where=="function"}class Sn{simTx;constructor(t){this.simTx=t}async get(t){if(xn(t)){const i=await t.get();return i.size>0&&this.simTx.getAll(...i.docs.map(a=>a.ref.path)),i}const r=this.simTx.get(t.path).data();return ot(t,r)}create(t,n){return this.simTx.create(t.path,n),this}set(t,n,s){const r=s?.mergeFields;if(r!==void 0)return this.simTx.set(t.path,n,{mergeFields:r}),this;const o=s?.merge===!0;return this.simTx.set(t.path,n,o?!0:void 0),this}update(t,n,...s){const{fields:r}=P(n,s);return this.simTx.update(t.path,ke(r)),this}delete(t){return this.simTx.delete(t.path),this}}class vn{env;auth;bypassRules;provenance;constructor(t,n,s=!1,r){this.env=t,this.auth=n,this.bypassRules=s,this.provenance=r}collection(t){if(!Ae(t))throw new f(j("invalid-argument",`collection path must have an odd number of segments: ${t}`));return new ft(this.env,this.auth,t,this.bypassRules)}doc(t){if(!rt(t))throw new f(j("invalid-argument",`document path must have an even number of segments: ${t}`));return V(this.env,this.auth,t,this.bypassRules)}collectionGroup(t){if(t.length===0||t.includes("/"))throw new f(j("invalid-argument",`collection group id must be a single non-empty segment with no '/': ${t}`));return new De({env:this.env,auth:this.auth,collectionId:t,bypassRules:this.bypassRules})}batch(){return new wn(this.env,this.auth,this.bypassRules)}async runTransaction(t,n){let s;try{s=await this.env.transaction(r=>{const i=new Sn(r);return t(i)},{auth:n?.auth!==void 0?n.auth:this.auth,bypassRules:this.bypassRules,provenance:this.provenance,maxAttempts:n?.maxAttempts})}catch(r){throw r instanceof It?new f(r.simError):r instanceof zt?new f(r.simError):r}if(!s.allowed){if(s.error)throw new f(s.error);const i=s.writes.find(o=>!o.allowed)?.debugMessages.join("; ")??"transaction denied at commit";throw new f(j("permission-denied",`transaction failed: ${i}`))}return s.returnValue}}function Rn(e,t){return new vn(e,t?.auth??null,t?.bypassRules??!1,t?.provenance)}const On=Symbol("pyric/sandbox/context"),kn=Symbol("pyric/sandbox/bypassRules");let me=null;function ss(e){me=e}const En=Symbol.for("pyric.firestore.modular-value");function Ne(e){return En in e}function Fn(e){const t=e;return typeof t.path=="string"&&t.path.length>0||typeof t.collectionPath=="string"&&t.collectionPath.length>0||typeof t.snapshotScope=="function"}function Cn(e){const t=e.trim();if(!t)return[];const n=t.indexOf(": ");if(n!==-1){const r=t.slice(n+2).trim().split("; ").map(i=>i.trim()).filter(i=>i.length>0);if(r.length>0)return r}return[t]}function Be(e,t){if(e instanceof f===!1)return e;const s=e.code;if(s==="permission-denied"===!1)return new w(s,e.message);const i={engine:"firestore",auth:t.auth,reasons:Cn(e.message)},o=e.simError;if(o!==void 0){if(o.queryProof!==void 0&&(i.queryProof=o.queryProof),o.request!==void 0){const l=o.request;i.request={method:l.method,path:l.path},l.resourceData!==void 0&&(i.request.resourceData=l.resourceData),l.updateMask!==void 0&&(i.request.updateMask=l.updateMask)}if(o.resource!==void 0&&(i.resource={data:o.resource.data,exists:o.resource.exists}),o.query!==void 0&&(i.query=o.query),o.rule!==void 0&&(i.rule=o.rule),o.repro!==void 0&&(i.repro=o.repro),o.remediation!==void 0)return new w({code:s,message:e.message,denialContext:i,remediation:o.remediation})}return new w(s,e.message,i)}function ee(e,t,n=!1){return new Proxy(e,{get(s,r,i){if(r===On)return t;if(r===kn)return n;if(r==="onSnapshot"&&me!==null&&!(r in s)&&Fn(s))return(...a)=>me(i,...a);const o=Reflect.get(s,r,i);return typeof o!="function"?o:function(...a){let c;try{const u=()=>o.apply(s,a);c=typeof t.sandbox.runWithProvenance=="function"?t.sandbox.runWithProvenance(nt(t.operationContext),u):u()}catch(u){throw Be(u,t)}return c instanceof Promise?c.then(u=>u&&typeof u=="object"&&!Ne(u)?ee(u,t,n):u).catch(u=>{throw Be(u,t)}):c&&typeof c=="object"&&!Ne(c)?ee(c,t,n):c}}})}function pt(e,t=!1){if(Ce(e.sandbox))throw new Error("pyric/sandbox/admin-firestore: internal — a remote sandbox context reached the local engine builder; remote dispatch should have handled it. Please report this.");const n=()=>Rn(T(e.sandbox),{auth:e.auth,bypassRules:t,provenance:nt(e.operationContext)});return{collection(s){return n().collection(s)},doc(s){return n().doc(s)},collectionGroup(s){return n().collectionGroup(s)},batch(){return n().batch()},runTransaction(s,r){return n().runTransaction(s,r)},setRules(s){return T(e.sandbox).deployRules(s)},seed(s){const r=T(e.sandbox);return r.seed({rules:r.getRules(),documents:s?.documents??{}})},snapshot(){return T(e.sandbox).snapshot()}}}function ye(e){if(e instanceof w)return e;if(e!==null&&typeof e=="object"){const t=e;if(typeof t.code=="string"&&typeof t.message=="string"){const n=t.denialContext!==null&&typeof t.denialContext=="object"?t.denialContext:void 0;return new w(t.code,t.message,n)}}return e}function k(e){return new w("invalid-argument",e)}async function x(e,t){try{return await e.sandbox.channel.op({...t,actAs:e.lens})}catch(n){throw ye(n)}}const An=new Set(["serverTimestamp","increment","arrayUnion","arrayRemove","deleteField"]);function Dn(e){return e!==null&&typeof e=="object"&&typeof e.__type=="string"&&An.has(e.__type)}function jn(e){switch(e.__type){case"serverTimestamp":return{__sentinel:"serverTimestamp"};case"increment":return{__sentinel:"increment",n:e.value};case"arrayUnion":return{__sentinel:"arrayUnion",values:e.values.map(v)};case"arrayRemove":return{__sentinel:"arrayRemove",values:e.values.map(v)};case"deleteField":return{__sentinel:"deleteField"}}}function v(e){if(e===null||typeof e!="object")return e;if(Dn(e))return jn(e);if(e instanceof le)return e.toJSON();if(e instanceof Date)return le.fromDate(e).toJSON();if(Array.isArray(e))return e.map(v);const t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null){const s=e.toJSON;if(typeof s=="function")return s.call(e);throw k(`remote Firestore: cannot serialize a ${t.constructor?.name??"class"} instance for the wire — use plain data, Timestamp, Date, or FieldValue sentinels.`)}const n={};for(const[s,r]of Object.entries(e))n[s]=v(r);return n}function _(e){return v(e)}function je(e){return e.map(t=>({path:[...t.path],value:v(t.value)}))}function be(e){return $t(JSON.parse(e.json),e.valueEncoding)}function mt(e){return ve(be(e))}function yt(e,t){const n=t.exists&&t.data?mt(t.data):void 0;return{id:e.id,ref:e,exists:t.exists,data:()=>n,get:s=>ne(n,s)}}function bt(e,t){const n=t.docs.map(s=>{const r=s.path??s.id,i=te(e,r),o=s.data?mt(s.data):{};return{id:i.id,ref:i,exists:!0,data:()=>o,get:a=>ne(o,a)}});return{size:n.length,empty:n.length===0,docs:n,forEach:et(n)}}const _e=Symbol("pyric/sandbox/admin-firestore/remoteSnapshotRegistrar");function rs(e){if(e===null||typeof e!="object")return;const t=e[_e];return typeof t=="function"?t:void 0}let ge=null;function is(e){ge=e}function gt(...e){if(ge===null)throw new w("failed-precondition","remote Firestore: onSnapshot is not wired yet — import pyric-admin/firestore (or pyric/sandbox/admin-firestore) before subscribing.");return ge(this,...e)}function wt(e,t,n,s,r){const i=n.includeMetadataChanges!==!0;let o;function a(u){const y=ye(u);r!==void 0?r(y):console.error("pyric remote Firestore: uncaught onSnapshot error:",y)}let c;try{c=e.sandbox.channel.subscribe({target:t,actAs:e.lens},u=>{if(s===void 0)return;let d;try{const l=u,b=l.docs;if(Array.isArray(b)){const m=b.map(O=>{const S=O.data,p=S!==void 0;return{path:O.path??O.id,data:p?be(S):{}}});d=Lt({path:xt(t)},m,{excludesMetadataChanges:i},o),o=m}else{const m=l.id;if(typeof m=="string"){const S=l.path??m,p=l.data,N=l.exists===!0&&p!==void 0?be(p):null;d=Wt(S,N)}}}catch(l){c(),a(l);return}d!==void 0&&s(d)},a)}catch(u){throw ye(u)}return c}function xt(e){switch(e.__ref){case"query":return xt(e.source);case"group":return e.collectionId;default:return e.path}}const St=Symbol("pyric/sandbox/admin-firestore/remoteQueryState");function _n(e){if(!(e===null||typeof e!="object"))return e[St]}function vt(e){return e.kind==="where"?(Rt(e.op),{kind:"where",field:e.field,op:e.op,value:v(e.value)}):{kind:e.kind,filters:e.filters.map(vt)}}const Tn=new Set(["<","<=","==","!=",">=",">","in","not-in","array-contains","array-contains-any"]);function Rt(e){if(!Tn.has(e))throw k(`invalid where operator: ${String(e)}`)}function Y(e){const t=[...e.filters];for(const n of e.orders)t.push({kind:"orderBy",field:n.field,direction:n.direction});return e.start&&t.push({kind:e.start.inclusive?"startAt":"startAfter",values:e.start.values.map(v)}),e.end&&t.push({kind:e.end.inclusive?"endAt":"endBefore",values:e.end.values.map(v)}),e.limitCount!==void 0&&t.push(e.limitFromEnd?{kind:"limitToLast",n:e.limitCount}:{kind:"limit",n:e.limitCount}),t.length===0?e.source:{__ref:"query",source:e.source,constraints:t}}function Ge(e,t,n){if(t.length===0)throw k(`${n}(snapshot) on a remote sandbox requires at least one explicit orderBy() clause — the relay protocol has no document-key cursor.`);if(t.some(r=>r.field==="__name__"))throw k(`${n}(snapshot) on a remote sandbox does not support orderBy('__name__') — the relay protocol has no document-key cursor, and __name__ is not a data field a value cursor can carry. Order by a real document field instead.`);const s=e.data();if(s===void 0)throw new w("not-found",`Snapshot-based cursors require an existing document — got an empty snapshot for ${e.id??"<unknown>"}.`);return t.map(r=>s[r.field])}function Te(e,t){const n=r=>Te(e,{...t,...r});return{[St]:t,where(r,i,o){return Rt(i),n({filters:[...t.filters,{kind:"where",field:r,op:i,value:v(o)}]})},applyFilter(r){return n({filters:[...t.filters,vt(r)]})},orderBy(r,i="asc"){return n({orders:[...t.orders,{field:r,direction:i}]})},limit(r){return n({limitCount:r,limitFromEnd:!1})},limitToLast(r){return n({limitCount:r,limitFromEnd:!0})},startCursor(r,i){return n({start:{values:[...r],inclusive:i}})},endCursor(r,i){return n({end:{values:[...r],inclusive:i}})},startCursorFromSnapshot(r,i){return n({start:{values:Ge(r,t.orders,i?"startAt":"startAfter"),inclusive:i}})},endCursorFromSnapshot(r,i){return n({end:{values:Ge(r,t.orders,i?"endAt":"endBefore"),inclusive:i}})},async get(r){J(t);const i=await x(e,{method:"getDocs",source:Y(t)});return bt(e,i)},async aggregate(r){J(t);const i=await x(e,{method:"aggregate",source:Y(t),spec:r});return{data:()=>i.data}},[_e]:(r,i,o)=>(J(t),wt(e,Y(t),r,i,o)),onSnapshot:gt}}function J(e){if(e.limitFromEnd&&e.orders.length===0)throw k("limitToLast() queries require at least one orderBy clause.")}function we(e,t){const n=Te(e,{source:{__ref:"collection",path:t},filters:[],orders:[],limitFromEnd:!1});return Object.assign(Object.create(Object.getPrototypeOf(n)),n,{id:re(t),path:t,doc(r){const i=r??tt();return te(e,`${t}/${i}`)},async add(r,i){const o=await x(e,{method:"addDoc",collectionPath:t,data:_(r)});return te(e,o.path)}})}function te(e,t){const n={id:re(t),path:t,get parent(){return we(e,it(t))},collection(s){const r=`${t}/${s}`;if(!Ae(r))throw k(`collection path must have an odd number of segments: ${r}`);return we(e,r)},async get(s){const r=await x(e,{method:"getDoc",path:t});return yt(n,r)},async create(s,r){await x(e,{method:"batchCommit",writes:[{method:"create",path:t,data:_(s)}]})},async set(s,r){await x(e,{method:"setDoc",path:t,data:_(s),...He(r)?{options:He(r)}:{}})},update(s,...r){const{fields:i}=P(s,r),o=je(i);return x(e,{method:"updateDoc",path:t,fields:o}).then(()=>{})},async delete(s){await x(e,{method:"deleteDoc",path:t})},[_e]:(s,r,i)=>wt(e,{__ref:"doc",path:t},s,r,i),onSnapshot:gt};return n}function He(e){if(!e)return;const t={};return e.merge!==void 0&&(t.merge=e.merge),e.mergeFields!==void 0&&(t.mergeFields=[...e.mergeFields]),t.merge!==void 0||t.mergeFields!==void 0?t:void 0}function Ot(e){if(e===void 0)return;const t={};return"merge"in e&&e.merge!==void 0&&(t.merge=e.merge),"mergeFields"in e&&e.mergeFields!==void 0&&(t.mergeFields=e.mergeFields.map(n=>String(n))),t}function Pn(e){const t=[];let n=!1;const s={create(i,o){return r(),t.push({method:"create",path:i.path,data:_(o)}),s},set(i,o,a){r();const c={method:"set",path:i.path,data:_(o)},u=Ot(a);return u!==void 0&&(c.options=u),t.push(c),s},update(i,o,...a){r();const{fields:c}=P(o,a);return t.push({method:"update",path:i.path,fields:je(c)}),s},delete(i){return r(),t.push({method:"delete",path:i.path}),s},async commit(i){r(),n=!0,await x(e,{method:"batchCommit",writes:t})}};function r(){if(n)throw new w("failed-precondition","WriteBatch has already been committed.")}return s}const qn=5;async function Vn(e,t,n=qn){for(let s=0;s<n;s++){const r=[],i=[],o=()=>{if(i.length>0)throw new w("failed-precondition",Qt)},a={get(d){o();const h=_n(d);return h!==void 0?u(h):c(d)},create(d,h){return i.push({method:"create",path:d.path,data:_(h)}),a},set(d,h,l){const b={method:"set",path:d.path,data:_(h)},A=Ot(l);return A!==void 0&&(b.options=A),i.push(b),a},update(d,h,...l){const{fields:b}=P(h,l);return i.push({method:"update",path:d.path,fields:je(b)}),a},delete(d){return i.push({method:"delete",path:d.path}),a}};async function c(d){const h=await x(e,{method:"getDoc",path:d.path});return r.push({path:h.path??d.path,data:h.exists&&h.data?h.data:null}),yt(d,h)}async function u(d){J(d);const h=await x(e,{method:"getDocs",source:Y(d)});for(const l of h.docs)r.push({path:l.path??l.id,data:l.data??null});return bt(e,h)}const y=await t(a);try{return await x(e,{method:"txnCommit",reads:r,writes:i}),y}catch(d){if(d instanceof w&&d.code==="aborted")continue;throw d}}throw new w("aborted",`Transaction failed after ${n} attempts due to repeated conflicts. Another writer is concurrently updating the same documents.`)}function ue(e,t){return new w("unimplemented",`SandboxFirestore.${e} is not available on a remote sandbox — its return value is synchronous and the data lives in the browser worker. ${t}`)}function kt(e,t){const n={sandbox:e,lens:t};return{collection(s){if(!Ae(s))throw k(`collection path must have an odd number of segments: ${s}`);return we(n,s)},doc(s){if(!rt(s))throw k(`document path must have an even number of segments: ${s}`);return te(n,s)},collectionGroup(s){if(s.length===0||s.includes("/"))throw k(`collection group id must be a single non-empty segment with no '/': ${s}`);return Te(n,{source:{__ref:"group",collectionId:s},filters:[],orders:[],limitFromEnd:!1})},batch(){return Pn(n)},runTransaction(s,r){return Vn(n,s,r?.maxAttempts)},setRules(){throw ue("setRules","Deploy rules asynchronously through the relay instead: `await sandbox.channel.op({ method: 'setFirestoreRules', source })`.")},seed(){throw ue("seed","The relay has no atomic seed op; write seed docs through this handle (`db.doc(path).set(data)` / `db.batch()`), or drive `sandbox.channel.op({ method: 'admin.setDocument', path, data })` per document.")},snapshot(){throw ue("snapshot","Read the worker state asynchronously instead: `await sandbox.channel.op({ method: 'admin.readState' })`.")}}}const Ye=new WeakMap;function Et(e){const t=Ye.get(e);if(t)return t;const n=Ce(e.sandbox)?kt(e.sandbox,Mn(e.auth)):ee(pt(e),e);return Ye.set(e,n),n}function Mn(e){if(e==null)return{mode:"anon"};const t={mode:"as",uid:e.uid};return e.token!==void 0&&(t.token=e.token),e.tenant!==void 0&&(t.tenant=e.tenant),t}const Je=new WeakMap;function In(e){const t=zn(e)?e:e.withAuth(null),n=Je.get(t);if(n)return n;const s=t.operationContext.authLens.mode==="admin"?t:Ee(t,{source:t.operationContext.source,authLens:{mode:"admin"},...t.operationContext.planId===void 0?{}:{planId:t.operationContext.planId}}),r=Ce(s.sandbox)?kt(s.sandbox,{mode:"admin"}):ee(pt(s,!0),s,!0);return Je.set(t,r),r}function zn(e){return e!==null&&typeof e=="object"&&"sandbox"in e&&typeof e.withAuth=="function"}function $n(e){return e instanceof Error&&"code"in e&&typeof e.code=="string"}function Ln(e){if(e instanceof I||!$n(e))return e;const t={};e.denialContext!==void 0&&(t.denialContext=e.denialContext),e.remediation!==void 0&&(t.remediation=e.remediation);const n=new I(e.code,e.message,Object.keys(t).length===0?void 0:t);e.denialContext!==void 0&&Object.assign(n,{denialContext:e.denialContext}),e.remediation!==void 0&&Object.assign(n,{remediation:e.remediation});for(const s of["request","resource","query","rule","queryProof"])e[s]!==void 0&&Object.assign(n,{[s]:e[s]});return n}async function ie(e){try{return await e()}catch(t){throw Ln(t)}}class Wn{static[Symbol.hasInstance](t){return!!(t&&typeof t=="object"&&"id"in t&&"path"in t&&typeof t.path=="string"&&!("docs"in t)&&!("exists"in t)&&!("doc"in t)&&!("add"in t))}}function Ft(e,t){const n=R(e);if(t===null)return n;const r=C(e),i=Ve(n,r,t);return Fe(n,i),xe(i)}function xe(e){function t(n){return Ft(e,n)}return Object.assign(e,{withConverter:t})}function X(e,t,n,s=null){function r(c){return c===null?Xe(a,null):Xe(a,c)}const i=R(e),o=Ve(i,n,s),a=Object.assign(o,{withConverter:r});return M(a,Re("reference",t)),Oe(i,t,n),Fe(i,a),a}function os(e,...t){const n=C(e),s=F in e,r=s?void 0:qe(e),i=Q(n);if(s){if(t.length===0)throw new TypeError("doc(db, path) requires at least one path segment.");const l=t.join("/"),b=i.doc(l),A=W(b,n,m=>m.doc(l));return X(A,l,n)}const o=R(e),a=t.length===0;let c;a?c=o.doc():c=o.doc(t.join("/"));const u=c.path,y=W(c,n,h=>h.doc(u));return r!=null?X(y,u,n,r):X(y,u,n)}function as(e,...t){const n=C(e),s=F in e;if(t.length===0)throw new TypeError("collection() requires at least one path segment.");if(s){const c=t.join("/"),u=xe(Q(n).collection(c));return W(u,n,y=>y.collection(c))}const r=R(e),i=t.join("/"),o=xe(r.collection(i)),a=o.path;return W(o,n,c=>c.collection(a))}function Xe(e,t){const n=C(e),s=R(e);return s instanceof Wn?X(s,s.path,n,t):Ft(e,t)}class Qn{started=!1;networkEnabled=!0;persistenceMode;pending=new Set;cachedPaths=new Set;cachedQueries=new WeakSet;syncObservers=new Set;syncScheduled=!1;markStarted(){this.started=!0}enablePersistence(t){if(this.started||this.persistenceMode!==void 0)throw new I("failed-precondition","Firestore has already been started and persistence can no longer be enabled.");this.persistenceMode=t,this.started=!0}disableNetwork(){this.started=!0,this.networkEnabled=!1}async enableNetwork(){this.started=!0,this.networkEnabled=!0;for(const t of this.pending)t.localDone&&t.resolve(t.value);await Promise.all([...this.pending].map(t=>t.promise))}runWrite(t,n){if(this.started=!0,n&&this.cachedPaths.add(n),this.networkEnabled)return t();let s,r;const i=new Promise((a,c)=>{s=a,r=c}),o={path:n,promise:i,localDone:!1,resolve:s,reject:r};return this.pending.add(o),t().then(a=>{o.localDone=!0,o.value=a,this.networkEnabled&&o.resolve(a)},a=>o.reject(a)),i.then(()=>this.pending.delete(o),()=>this.pending.delete(o)),i}waitForPendingWrites(){this.started=!0;const t=[...this.pending].map(n=>n.promise);return Promise.all(t).then(()=>{})}cachePath(t){this.started=!0,this.cachedPaths.add(t)}assertPathCached(t){if(this.started=!0,!this.cachedPaths.has(t))throw new I("unavailable","Failed to get document from cache. (However, this document may exist on the server.)")}cacheQuery(t){this.started=!0,this.cachedQueries.add(t)}hasCachedQuery(t){return this.started=!0,this.cachedQueries.has(t)||this.cachedPaths.size>0}snapshotMetadata(t){return Object.freeze({fromCache:!this.networkEnabled,hasPendingWrites:[...this.pending].some(n=>n.path===t)})}querySnapshotMetadata(){return Object.freeze({fromCache:!this.networkEnabled,hasPendingWrites:this.pending.size>0})}addSnapshotsInSyncObserver(t){return this.syncObservers.add(t),t(),()=>this.syncObservers.delete(t)}notifySnapshotDelivered(){this.syncScheduled||this.syncObservers.size===0||(this.syncScheduled=!0,queueMicrotask(()=>{this.syncScheduled=!1;for(const t of[...this.syncObservers])t()}))}}const Ke=new WeakMap;function L(e){let t=Ke.get(e);return t||(t=new Qn,Ke.set(e,t)),t}function oe(e,t,n,s,r){const i=R(t),o=typeof i.sdkActivitySource=="function"?i.sdkActivitySource():{service:"firestore",target:i.path,key:`doc:${i.path}`};return Ut.begin({app:e.activityApp??e,source:o,method:n,kind:s,owners:Nt(r?.owner,r?.owners)})}const F=Symbol("pyric/firestore/target");function Q(e){return e.kind==="sandbox"?e.db:e.getDb()}const ae=new WeakMap;function Un(e,t){return ae.set(e,t),e}const U=new WeakMap;function Nn(e,t,n){return ae.set(e,t),U.set(e,n),e}function Pe(e,t){const n=R(t);if(e.kind==="sandbox")return n;const s=U.get(n);if(!s)throw new TypeError("pyric/firestore: live ref missing rebuild closure — was it produced by a factory in this package?");return s(Q(e))}function Bn(e,t){const n=R(t);if(e.kind==="sandbox")return n;const s=U.get(n);if(!s)throw new TypeError("pyric/firestore: live collection ref missing rebuild closure.");return s(Q(e))}function cs(e,t){const n=R(t);if(e.kind==="sandbox")return n;const s=U.get(n);if(!s)throw new TypeError("pyric/firestore: live query missing rebuild closure.");return s(Q(e))}function W(e,t,n){return t.kind==="sandbox-live"?Nn(e,t,n):Un(e,t)}function us(e){const t=R(e),n=U.get(t);return n||(()=>t)}function C(e){const t=Gn(e);return t.assertUsable?.(),t}function Gn(e){let t;if(F in e?t=e[F]:t=ae.get(e),!t)throw new TypeError("pyric/firestore: unrecognized reference — was it produced by a factory in this package?");return t}const Hn=Symbol.for("pyric.firestore.modular-value"),Ct=new WeakMap,At=new WeakMap;function qe(e){return Ct.get(e)}function R(e){return At.get(e)??e}function Ve(e,t,n){const s={id:e.id??"",path:e.path??""};return Object.defineProperty(s,Hn,{value:!0}),Ct.set(s,n),At.set(s,e),ae.set(s,t),s}function Yn(e){return e instanceof Kt?Array.from(e.value):null}function Se(e,t){if(e instanceof Yt)return t?.create(e.path)??e;if(e instanceof Jt)return Bt.fromUint8Array(e.data);if(e instanceof Xt)return new Gt(e.lat,e.lng);const i=Yn(e);if(i!==null)return Ht(i);if(Array.isArray(e))return e.map(u=>Se(u,t));if(e!==null&&typeof e=="object"){const u=Object.getPrototypeOf(e);if(u===Object.prototype||u===null){const d={};for(const[h,l]of Object.entries(e))d[h]=Se(l,t);return d}}return e}function ds(e,t){if(e!==void 0)return Se(e,t)}function Jn(e){if(e===void 0)return Jn(sn());const t=st(e);if(t)return t.service("firestore/default",()=>{const{sandbox:n,session:s}=t,r=de();t.onDelete(r.terminate);const i=t.authScope;i&&(r.own(s.onCurrentUserChanged(a=>{T(n).reevaluateLiveListeners(a,i)})),r.own(on(a=>{const c=a?.mode==="anon"?null:a?.mode==="as"?{uid:a.uid,...a.tenant?{tenant:a.tenant}:{}}:s.currentUser;T(n).reevaluateLiveListeners(c,i)})));const o={kind:"sandbox-live",activityApp:e,sandbox:n,getDb:Ze(n,()=>s.currentUser),authScope:i,...r};return{[F]:o,app:e}});if(Dt(e)){const n=Et(e),s={kind:"sandbox",activityApp:e,db:n,sandbox:e.sandbox,...de()};return{[F]:s}}if(Kn(e)){const n={kind:"sandbox-live",activityApp:e,sandbox:e,getDb:Ze(e),...de()};return{[F]:n}}throw new TypeError("pyric/firestore is a sandbox-only mirror. Package resolution must leave firebase/firestore unchanged for production; activate pyric sandbox or @pyric/cli/register before importing to select the sandbox.")}function de(){let e=!1;const t=new Set;return{own(n){return e?(n(),()=>{}):(t.add(n),()=>t.delete(n))},assertUsable(){if(e)throw new I("failed-precondition","The client has already been terminated.")},terminate(){if(!e){e=!0;for(const n of t)n();t.clear()}}}}function Xn(e){const t=st(e);if(t){t.assertAlive();const o=t.sandbox;return Xn(Ee(o.withAuth(null),{source:{kind:"app"},authLens:{mode:"admin"}}))}const n=Dt(e)?e:e.withAuth(null),s=n.sandbox,i={kind:"sandbox",db:In(n),sandbox:s};return{[F]:i}}function Dt(e){return e instanceof Zt}function Kn(e){if(e===null||typeof e!="object")return!1;const t=e;return typeof t.withAuth=="function"&&typeof t.onCurrentUserChanged=="function"&&"currentUser"in t&&"admin"in t}function Ze(e,t=()=>e.currentUser){return()=>{const n=t(),s=Ee(e.withAuth(n),{source:{kind:"app"},authLens:{mode:"app-session"}});return Et(s)}}function Zn(e,t,n,s){const r=en(e,t,n,s);if(r.length===0)return[{}];const i=[];for(const o of r)i.push(new tn(...o.path),o.value);return i}async function ls(e,t,n){const s=C(e);return se(oe(s,e,"setDoc","operation"),async()=>{const r=qe(e),i=r?r.toFirestore(t):t;return L(s).runWrite(()=>ie(()=>Pe(s,e).set(i,n)),e.path)})}function hs(e,t,...n){const s=C(e),r=Zn("updateDoc",e.path,t,n);return se(oe(s,e,"updateDoc","operation"),async()=>L(s).runWrite(()=>ie(()=>Pe(s,e).update(...r)),e.path))}async function fs(e){const t=C(e);return se(oe(t,e,"deleteDoc","operation"),async()=>L(t).runWrite(()=>ie(()=>Pe(t,e).delete()),e.path))}async function ps(e,t){const n=C(e);return se(oe(n,e,"addDoc","operation"),async()=>{const s=qe(e),r=s?s.toFirestore(t):t,i=await L(n).runWrite(async()=>{const c=await ie(()=>Bn(n,e).add(r));return L(n).cachePath(c.path),c}),o=i.path,a=W(i,n,c=>c.doc(o));if(M(a,Re("reference",o)),Oe(a,o,n,a),s){const c=Ve(a,n,s);return Fe(a,c),c}return a})}export{us as A,kn as B,On as C,Ln as D,xe as E,W as F,Ft as G,as as H,ps as I,hs as J,fs as K,ts as L,rn as M,se as N,Xn as O,ln as Q,F as T,sn as a,fe as b,L as c,os as d,qe as e,ds as f,Jn as g,At as h,ns as i,Q as j,U as k,ct as l,ut as m,oe as n,C as o,cs as p,Pe as q,st as r,ls as s,Un as t,R as u,ss as v,ie as w,is as x,rs as y,Be as z};
@@ -6,7 +6,7 @@
6
6
  </script><link rel="preconnect" href="https://use.typekit.net" crossorigin><link rel="stylesheet" href="https://use.typekit.net/jwb3ycu.css"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_studio_.CzyEuvVS.css">
7
7
  <style>html{scrollbar-gutter:stable}
8
8
  </style>
9
- <link rel="stylesheet" href="/__pyric/ui/_astro/app.8TtSeQQX.css"></head> <body> <div id="root" data-astro-cid-w5sm6wlz> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event("astro:only"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="b1btC" component-url="/__pyric/ui/_astro/app.DqyhRyrU.js" component-export="StudioApp" renderer-url="/__pyric/ui/_astro/client.D2ORs4B-.js" props="{&quot;data-astro-cid-w5sm6wlz&quot;:[0,true]}" ssr client="only" opts="{&quot;name&quot;:&quot;StudioApp&quot;,&quot;value&quot;:&quot;react&quot;}" await-children><p class="studio-loading" aria-live="polite" data-astro-cid-w5sm6wlz>
9
+ <link rel="stylesheet" href="/__pyric/ui/_astro/app.8TtSeQQX.css"></head> <body> <div id="root" data-astro-cid-w5sm6wlz> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style><script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event("astro:only"));})();</script><script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script><astro-island uid="b1btC" component-url="/__pyric/ui/_astro/app.BjQiEBOY.js" component-export="StudioApp" renderer-url="/__pyric/ui/_astro/client.D2ORs4B-.js" props="{&quot;data-astro-cid-w5sm6wlz&quot;:[0,true]}" ssr client="only" opts="{&quot;name&quot;:&quot;StudioApp&quot;,&quot;value&quot;:&quot;react&quot;}" await-children><p class="studio-loading" aria-live="polite" data-astro-cid-w5sm6wlz>
10
10
  Starting Pyric Studio…
11
11
  </p><template data-astro-template="fallback"><p class="studio-loading" aria-live="polite" data-astro-cid-w5sm6wlz>
12
12
  Starting Pyric Studio…
@@ -18,6 +18,7 @@ html{scrollbar-gutter:stable}
18
18
  <div class="compat-key">
19
19
  <span class="compat-key-item"><span class="compat-dot" data-status="ok"></span><strong>Conforming</strong>: sandbox matches prod, locked by a passing probe</span>
20
20
  <span class="compat-key-item"><span class="compat-dot" data-status="diverged"></span><strong>Diverged (documented)</strong>: intentional difference with a written reason</span>
21
+ <span class="compat-key-item"><span class="compat-dot" data-status="bug"></span><strong>Bug</strong>: should match prod but doesn't; failing probe pins it</span>
21
22
  </div>
22
23
  <h2 id="getaitarget-and-dispatch"><code>getAI(target)</code> and dispatch</h2>
23
24
  <div class="compat-list">
@@ -102,16 +103,20 @@ html{scrollbar-gutter:stable}
102
103
  <div class="compat-evidence"><div class="compat-probe">Capture ai-system-instruction-accepted replayed by packages/pyric/test/ai/generate-content.test.ts test <code>ai#generate-system-instruction</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-system-instruction-accepted.json" target="_blank" rel="noopener noreferrer"><code>ai-system-instruction-accepted</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L100" target="_blank" rel="noopener noreferrer"><code>generate-content.test.ts</code></a>)</div></div>
103
104
  </details>
104
105
  <details class="compat-row" data-status="ok">
106
+ <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">generateContent(request)</code><span class="compat-sub"><span class="compat-behavior">A <code>contents</code> turn under role <code>assistant</code> is accepted (200, finishReason STOP), although the unknown-role text lists only MODEL, USER</span></span></span></summary>
107
+ <div class="compat-evidence"><div class="compat-probe">Capture ai-contents-role-assistant replayed by packages/pyric/test/ai/generate-content.test.ts test <code>ai#contents-role-assistant</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-contents-role-assistant.json" target="_blank" rel="noopener noreferrer"><code>ai-contents-role-assistant</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L110" target="_blank" rel="noopener noreferrer"><code>generate-content.test.ts</code></a>)</div></div>
108
+ </details>
109
+ <details class="compat-row" data-status="ok">
105
110
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">generateContent(request)</code><span class="compat-sub"><span class="compat-behavior"><code>responseMimeType</code> <code>application/json</code> plus a <code>responseSchema</code> yields a text part that parses as JSON with the schema key set</span></span></span></summary>
106
- <div class="compat-evidence"><div class="compat-probe">Capture ai-structured-output-shape replayed by packages/pyric/test/ai/generate-content.test.ts test <code>ai#generate-structured-output</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-structured-output-shape.json" target="_blank" rel="noopener noreferrer"><code>ai-structured-output-shape</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L110" target="_blank" rel="noopener noreferrer"><code>generate-content.test.ts</code></a>)</div></div>
111
+ <div class="compat-evidence"><div class="compat-probe">Capture ai-structured-output-shape replayed by packages/pyric/test/ai/generate-content.test.ts test <code>ai#generate-structured-output</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-structured-output-shape.json" target="_blank" rel="noopener noreferrer"><code>ai-structured-output-shape</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L123" target="_blank" rel="noopener noreferrer"><code>generate-content.test.ts</code></a>)</div></div>
107
112
  </details>
108
113
  <details class="compat-row" data-status="ok">
109
114
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">generateContent(request)</code><span class="compat-sub"><span class="compat-behavior">With <code>thinkingConfig</code> on the probe model, text parts carry <code>thoughtSignature</code> and no part is flagged <code>thought: true</code></span></span></span></summary>
110
- <div class="compat-evidence"><div class="compat-probe">Capture ai-thinking-thought-parts (partKeySets, anyThoughtPart false) replayed by packages/pyric/test/ai/generate-content.test.ts test <code>ai#generate-thinking-signature</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-thinking-thought-parts.json" target="_blank" rel="noopener noreferrer"><code>ai-thinking-thought-parts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L125" target="_blank" rel="noopener noreferrer"><code>generate-content.test.ts</code></a>)</div></div>
115
+ <div class="compat-evidence"><div class="compat-probe">Capture ai-thinking-thought-parts (partKeySets, anyThoughtPart false) replayed by packages/pyric/test/ai/generate-content.test.ts test <code>ai#generate-thinking-signature</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-thinking-thought-parts.json" target="_blank" rel="noopener noreferrer"><code>ai-thinking-thought-parts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L138" target="_blank" rel="noopener noreferrer"><code>generate-content.test.ts</code></a>)</div></div>
111
116
  </details>
112
117
  <details class="compat-row" data-status="ok">
113
118
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">generateContent(request, singleRequestOptions)</code><span class="compat-sub"><span class="compat-behavior">A pre-aborted <code>SingleRequestOptions.signal</code> rejects the call</span></span></span></summary>
114
- <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L138" target="_blank" rel="noopener noreferrer"><code>unit:generate-content.test.ts</code></a> test <code>ai#generate-abort-signal</code> (no capture; upstream SingleRequestOptions contract)</div></div>
119
+ <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/generate-content.test.ts#L151" target="_blank" rel="noopener noreferrer"><code>unit:generate-content.test.ts</code></a> test <code>ai#generate-abort-signal</code> (no capture; upstream SingleRequestOptions contract)</div></div>
115
120
  </details>
116
121
  <details class="compat-row" data-status="ok">
117
122
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">generateContent()</code><span class="compat-sub"><span class="compat-behavior">Token counts are minted without a tokenizer, and the minimal envelope omits <code>safetyRatings</code>, matching the captured candidate key set</span></span></span></summary>
@@ -211,6 +216,10 @@ html{scrollbar-gutter:stable}
211
216
  <div class="compat-evidence"><div class="compat-probe">Capture ai-error-fncall-missing-thought-signature replayed by packages/pyric/test/ai/function-calling.test.ts test <code>ai#fncall-thought-signature-required</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-error-fncall-missing-thought-signature.json" target="_blank" rel="noopener noreferrer"><code>ai-error-fncall-missing-thought-signature</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/function-calling.test.ts#L4" target="_blank" rel="noopener noreferrer"><code>function-calling.test.ts</code></a>)</div></div>
212
217
  </details>
213
218
  <details class="compat-row" data-status="ok">
219
+ <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">functionResponse round trip</code><span class="compat-sub"><span class="compat-behavior">A function response under role <code>function</code>, the role the SDK <code>ChatSession</code> sends, is refused 400 INVALID_ARGUMENT with a message that names the role; the same round trip under role <code>user</code> is accepted</span></span></span></summary>
220
+ <div class="compat-evidence"><div class="compat-probe">Capture ai-error-function-role-refused replayed by packages/pyric/test/ai/function-calling.test.ts test <code>ai#fncall-function-role-refused</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-error-function-role-refused.json" target="_blank" rel="noopener noreferrer"><code>ai-error-function-role-refused</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/function-calling.test.ts#L5" target="_blank" rel="noopener noreferrer"><code>function-calling.test.ts</code></a>)</div></div>
221
+ </details>
222
+ <details class="compat-row" data-status="ok">
214
223
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">scripted engine synthesis</code><span class="compat-sub"><span class="compat-behavior">The engine mints a <code>thoughtSignature</code> on every functionCall part it synthesizes, so scripted tool round trips replay cleanly</span></span></span></summary>
215
224
  <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/function-calling.test.ts#L4" target="_blank" rel="noopener noreferrer"><code>unit:function-calling.test.ts</code></a> test <code>ai#fncall-signature-minted</code> (capture ai-error-fncall-missing-thought-signature cited as the motivating rejection) (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-error-fncall-missing-thought-signature.json" target="_blank" rel="noopener noreferrer"><code>ai-error-fncall-missing-thought-signature</code></a>)</div></div>
216
225
  </details>
@@ -245,16 +254,36 @@ html{scrollbar-gutter:stable}
245
254
  <div class="compat-evidence"><div class="compat-probe">Capture ai-error-empty-contents replayed by packages/pyric/test/ai/errors-counttokens.test.ts test <code>ai#error-empty-contents</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-error-empty-contents.json" target="_blank" rel="noopener noreferrer"><code>ai-error-empty-contents</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/errors-counttokens.test.ts#L116" target="_blank" rel="noopener noreferrer"><code>errors-counttokens.test.ts</code></a>)</div></div>
246
255
  </details>
247
256
  <details class="compat-row" data-status="ok">
248
- <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">error envelope</code><span class="compat-sub"><span class="compat-behavior">An invalid content role fails 400 INVALID_ARGUMENT and the message lists the production role vocabulary: SYSTEM, SYSTEM_1, USER, ASSISTANT, DEVELOPER, CONTEXT, USER_CONTEXT, MODEL, USER</span></span></span></summary>
257
+ <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">error envelope</code><span class="compat-sub"><span class="compat-behavior">An invalid content role fails 400 INVALID_ARGUMENT and the message lists the production role vocabulary: MODEL, USER</span></span></span></summary>
249
258
  <div class="compat-evidence"><div class="compat-probe">Capture ai-error-bad-role replayed by packages/pyric/test/ai/errors-counttokens.test.ts test <code>ai#error-bad-role</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-error-bad-role.json" target="_blank" rel="noopener noreferrer"><code>ai-error-bad-role</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/errors-counttokens.test.ts#L125" target="_blank" rel="noopener noreferrer"><code>errors-counttokens.test.ts</code></a>)</div></div>
250
259
  </details>
251
260
  <details class="compat-row" data-status="ok">
261
+ <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">error envelope</code><span class="compat-sub"><span class="compat-behavior">A <code>contents</code> turn under role <code>system</code> fails 400 INVALID_ARGUMENT with the unknown-role text that lists MODEL, USER, although the role <code>function</code> refusal lists SYSTEM</span></span></span></summary>
262
+ <div class="compat-evidence"><div class="compat-probe">Capture ai-contents-role-system replayed by packages/pyric/test/ai/errors-counttokens.test.ts test <code>ai#contents-role-system</code> (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-contents-role-system.json" target="_blank" rel="noopener noreferrer"><code>ai-contents-role-system</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/errors-counttokens.test.ts#L138" target="_blank" rel="noopener noreferrer"><code>errors-counttokens.test.ts</code></a>)</div></div>
263
+ </details>
264
+ <details class="compat-row" data-status="ok">
252
265
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">AIError</code><span class="compat-sub"><span class="compat-behavior">HTTP failures surface as <code>AIError</code> with an <code>AIErrorCode</code> code and <code>customErrorData</code> carrying <code>status</code>, <code>statusText</code>, and <code>errorDetails</code></span></span></span></summary>
253
266
  <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/errors-counttokens.test.ts#L83" target="_blank" rel="noopener noreferrer"><code>unit:errors-counttokens.test.ts</code></a> test <code>ai#error-aierror-shape</code> (capture ai-error-bad-api-key cited as the sample envelope) (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-error-bad-api-key.json" target="_blank" rel="noopener noreferrer"><code>ai-error-bad-api-key</code></a>)</div></div>
254
267
  </details>
255
268
  <details class="compat-row" data-status="ok">
256
269
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">AIErrorCode</code><span class="compat-sub"><span class="compat-behavior"><code>AIErrorCode</code> exposes the 14 documented codes, from <code>error</code> through <code>unsupported</code></span></span></span></summary>
257
- <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/errors-counttokens.test.ts#L154" target="_blank" rel="noopener noreferrer"><code>unit:errors-counttokens.test.ts</code></a> test <code>ai#error-code-vocabulary</code> (upstream constant vocabulary)</div></div>
270
+ <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/errors-counttokens.test.ts#L170" target="_blank" rel="noopener noreferrer"><code>unit:errors-counttokens.test.ts</code></a> test <code>ai#error-code-vocabulary</code> (upstream constant vocabulary)</div></div>
271
+ </details>
272
+ </div>
273
+ <h2 id="requests-checked-against-production-captures">Requests checked against production captures</h2>
274
+ <p>Each row cites a production capture from the App Check and AI Logic hunt. A <code>bug</code> row states production’s behavior and pyric’s; its replay holds both answers until the fix lands.</p>
275
+ <div class="compat-list">
276
+ <details class="compat-row" data-status="bug">
277
+ <summary class="compat-line"><span class="compat-dot" data-status="bug" role="img" aria-label="Bug" title="Bug"></span><span class="compat-main"><code class="compat-api">generateContent({ contents: [{ parts }] }) with no role</code><span class="compat-sub"><span class="compat-behavior">AI-21: production answers contents with no role (200); pyric refuses it (400, Role '' is not supported).</span></span></span></summary>
278
+ <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-request-edge-roleless-contents.json" target="_blank" rel="noopener noreferrer"><code>oracle:ai-request-edge-roleless-contents</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/hunt-captures.test.ts#L56" target="_blank" rel="noopener noreferrer"><code>hunt-captures.test.ts</code></a>)</div></div>
279
+ </details>
280
+ <details class="compat-row" data-status="bug">
281
+ <summary class="compat-line"><span class="compat-dot" data-status="bug" role="img" aria-label="Bug" title="Bug"></span><span class="compat-main"><code class="compat-api">startChat({ systemInstruction: 'text' }).sendMessage(prompt)</code><span class="compat-sub"><span class="compat-behavior">AI-22: production refuses a string systemInstruction from startChat (400 INVALID_ARGUMENT); pyric answers.</span></span></span></summary>
282
+ <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-request-edge-string-system-instruction.json" target="_blank" rel="noopener noreferrer"><code>oracle:ai-request-edge-string-system-instruction</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/hunt-captures.test.ts#L64" target="_blank" rel="noopener noreferrer"><code>hunt-captures.test.ts</code></a>)</div></div>
283
+ </details>
284
+ <details class="compat-row" data-status="bug">
285
+ <summary class="compat-line"><span class="compat-dot" data-status="bug" role="img" aria-label="Bug" title="Bug"></span><span class="compat-main"><code class="compat-api">getGenerativeModel(ai, { model: 'gemini-pro' }).generateContent(prompt)</code><span class="compat-sub"><span class="compat-behavior">AI-23: production refuses the model gemini-pro (404 NOT_FOUND); pyric answers.</span></span></span></summary>
286
+ <div class="compat-evidence"><div class="compat-probe"><a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-request-edge-model-gemini-pro.json" target="_blank" rel="noopener noreferrer"><code>oracle:ai-request-edge-model-gemini-pro</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/hunt-captures.test.ts#L74" target="_blank" rel="noopener noreferrer"><code>hunt-captures.test.ts</code></a>)</div></div>
258
287
  </details>
259
288
  </div>
260
289
  <h2 id="response-helpers-enhancedgeneratecontentresponse">Response helpers (<code>EnhancedGenerateContentResponse</code>)</h2>
@@ -374,7 +403,7 @@ html{scrollbar-gutter:stable}
374
403
  <div class="compat-list">
375
404
  <details class="compat-row" data-status="diverged">
376
405
  <summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">getAI(app) in a registered server process</code><span class="compat-sub"><span class="compat-behavior">Under a remote register activation, <code>getAI(app)</code> in a server process fails with <code>failed-precondition</code> and a message that names the client services that do reach the Node host: <code>firebase/ai</code> has no path to the host, and no in-process sandbox stands in for it. Production AI pass-through (<code>PYRIC_AI=production</code>) loads the real <code>firebase/ai</code> and is unaffected.</span></span></span></summary>
377
- <div class="compat-evidence"><div class="compat-probe">App scenario <code>test/apps/client-sdk-under-register</code> calls it under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server and asserts the refusal; on main (942cb175) it returned a handle on a private in-process sandbox. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#L80" target="_blank" rel="noopener noreferrer"><code>mapping.test.ts</code></a> pins that the subpath keeps its mirror under a remote activation, and <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>node-origin.test.ts</code></a> that a mirror resolved from such an app refuses. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div>
406
+ <div class="compat-evidence"><div class="compat-probe">App scenario <code>test/apps/client-sdk-under-register</code> calls it under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server and asserts the refusal; on main (942cb175) it returned a handle on a private in-process sandbox. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#L78" target="_blank" rel="noopener noreferrer"><code>mapping.test.ts</code></a> pins that the subpath keeps its mirror under a remote activation, and <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>node-origin.test.ts</code></a> that a mirror resolved from such an app refuses. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div>
378
407
  <div class="compat-note">refused in a server process; production runs it in Node</div></div>
379
408
  </details>
380
409
  <details class="compat-row" data-status="diverged">
@@ -422,7 +451,7 @@ html{scrollbar-gutter:stable}
422
451
  </details>
423
452
  <details class="compat-row" data-status="ok">
424
453
  <summary class="compat-line"><span class="compat-dot" data-status="ok" role="img" aria-label="Conforming" title="Conforming"></span><span class="compat-main"><code class="compat-api">generateContentStream and countTokens without App Check in sandbox AI mode</code><span class="compat-sub"><span class="compat-behavior">Streaming and <code>countTokens</code> are refused with the same 403 <code>AIError</code> as <code>generateContent</code>. In process <code>generateContentStream</code> rejects before any chunk; on the SharedWorker and Node host planes the error reaches the caller through the stream and <code>response</code>, as other request errors do there.</span></span></span></summary>
425
- <div class="compat-evidence"><div class="compat-probe">AI Logic applies App Check to every request (https://firebase.google.com/docs/ai-logic/app-check); the captures cover only <code>generateContent</code>. Unit-backed by the gate suite and the worker protocol suite. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L193" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L12" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L40" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
454
+ <div class="compat-evidence"><div class="compat-probe">AI Logic applies App Check to every request (https://firebase.google.com/docs/ai-logic/app-check); the captures cover only <code>generateContent</code>. Unit-backed by the gate suite and the worker protocol suite. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/app-check-gate.test.ts#L311" target="_blank" rel="noopener noreferrer"><code>app-check-gate.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/worker/ai-ops.test.ts#L12" target="_blank" rel="noopener noreferrer"><code>ai-ops.test.ts</code></a>, <a href="https://github.com/davideast/pyric/blob/main/test/apps/sandbox-app-check/scenario.ts#L77" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div>
426
455
  </details>
427
456
  </div>
428
457
  <h2 id="current-gaps">Current gaps</h2>
@@ -442,10 +471,20 @@ html{scrollbar-gutter:stable}
442
471
  <details class="compat-row" data-status="diverged"><summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">Schema.enumString()</code><span class="compat-sub"><span class="compat-behavior"><code>Schema.enumString</code> serializes the enum values with type <code>string</code> and format <code>enum</code></span></span></span></summary>
443
472
  <div class="compat-evidence"><div class="compat-note"><a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/helpers-schema.test.ts#L153" target="_blank" rel="noopener noreferrer"><code>unit:helpers-schema.test.ts</code></a> test <code>ai#schema-string-enum</code> (upstream toJSON request shape; GoogleAI accepts only enum and date-time formats)</div></div></details>
444
473
  <details class="compat-row" data-status="diverged"><summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">getAI(app) in a registered server process</code><span class="compat-sub"><span class="compat-behavior">Under a remote register activation, <code>getAI(app)</code> in a server process fails with <code>failed-precondition</code> and a message that names the client services that do reach the Node host: <code>firebase/ai</code> has no path to the host, and no in-process sandbox stands in for it. Production AI pass-through (<code>PYRIC_AI=production</code>) loads the real <code>firebase/ai</code> and is unaffected.</span></span></span></summary>
445
- <div class="compat-evidence"><div class="compat-note">App scenario <code>test/apps/client-sdk-under-register</code> calls it under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server and asserts the refusal; on main (942cb175) it returned a handle on a private in-process sandbox. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#L80" target="_blank" rel="noopener noreferrer"><code>mapping.test.ts</code></a> pins that the subpath keeps its mirror under a remote activation, and <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>node-origin.test.ts</code></a> that a mirror resolved from such an app refuses. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div></details>
474
+ <div class="compat-evidence"><div class="compat-note">App scenario <code>test/apps/client-sdk-under-register</code> calls it under <code>node --import @pyric/cli/register</code> against a hosted Vite dev server and asserts the refusal; on main (942cb175) it returned a handle on a private in-process sandbox. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/mapping.test.ts#L78" target="_blank" rel="noopener noreferrer"><code>mapping.test.ts</code></a> pins that the subpath keeps its mirror under a remote activation, and <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/register/node-origin.test.ts#L2" target="_blank" rel="noopener noreferrer"><code>node-origin.test.ts</code></a> that a mirror resolved from such an app refuses. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/test/apps/client-sdk-under-register/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div></details>
446
475
  <details class="compat-row" data-status="diverged"><summary class="compat-line"><span class="compat-dot" data-status="diverged" role="img" aria-label="Diverged (documented)" title="Diverged (documented)"></span><span class="compat-main"><code class="compat-api">getAI(app) in a server-rendered module under vite dev</code><span class="compat-sub"><span class="compat-behavior">Under <code>vite dev</code>, <code>getAI(app)</code> in a server-rendered module fails with <code>failed-precondition</code> in the default sandbox AI mode, naming the client services that reach the host: <code>firebase/ai</code> has no path to the dev server's host from server code. In production AI mode the real <code>firebase/ai</code> loads and the network guard permits Firebase AI Logic. A SharedWorker dev server refuses it the same way.</span></span></span></summary>
447
476
  <div class="compat-evidence"><div class="compat-note">App scenario <code>test/apps/vite-ssr-client-sdk</code> calls it in SSR on a hosted dev server and asserts the refusal; a second dev server in production AI mode lets the real SDK reach only <code>firebasevertexai.googleapis.com</code>, which a stand-in beneath the guard refuses. On main (ba2c0bf0a) it was the real SDK. <a href="https://github.com/davideast/pyric/blob/main/packages/cli/test/serve/vite-module-swap.test.ts#L4" target="_blank" rel="noopener noreferrer"><code>vite-module-swap.test.ts</code></a> pins the routing. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/test/apps/vite-ssr-client-sdk/scenario.ts#L1" target="_blank" rel="noopener noreferrer"><code>scenario.ts</code></a>)</div></div></details>
448
477
  </div>
478
+ <h3 id="bugs">Bugs</h3>
479
+ <p>Behavior that should match production Firebase but currently does not.</p>
480
+ <div class="compat-list">
481
+ <details class="compat-row" data-status="bug"><summary class="compat-line"><span class="compat-dot" data-status="bug" role="img" aria-label="Bug" title="Bug"></span><span class="compat-main"><code class="compat-api">generateContent({ contents: [{ parts }] }) with no role</code><span class="compat-sub"><span class="compat-behavior">AI-21: production answers contents with no role (200); pyric refuses it (400, Role '' is not supported).</span></span></span></summary>
482
+ <div class="compat-evidence"><div class="compat-note"><a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-request-edge-roleless-contents.json" target="_blank" rel="noopener noreferrer"><code>oracle:ai-request-edge-roleless-contents</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/hunt-captures.test.ts#L56" target="_blank" rel="noopener noreferrer"><code>hunt-captures.test.ts</code></a>)</div></div></details>
483
+ <details class="compat-row" data-status="bug"><summary class="compat-line"><span class="compat-dot" data-status="bug" role="img" aria-label="Bug" title="Bug"></span><span class="compat-main"><code class="compat-api">startChat({ systemInstruction: 'text' }).sendMessage(prompt)</code><span class="compat-sub"><span class="compat-behavior">AI-22: production refuses a string systemInstruction from startChat (400 INVALID_ARGUMENT); pyric answers.</span></span></span></summary>
484
+ <div class="compat-evidence"><div class="compat-note"><a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-request-edge-string-system-instruction.json" target="_blank" rel="noopener noreferrer"><code>oracle:ai-request-edge-string-system-instruction</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/hunt-captures.test.ts#L64" target="_blank" rel="noopener noreferrer"><code>hunt-captures.test.ts</code></a>)</div></div></details>
485
+ <details class="compat-row" data-status="bug"><summary class="compat-line"><span class="compat-dot" data-status="bug" role="img" aria-label="Bug" title="Bug"></span><span class="compat-main"><code class="compat-api">getGenerativeModel(ai, { model: 'gemini-pro' }).generateContent(prompt)</code><span class="compat-sub"><span class="compat-behavior">AI-23: production refuses the model gemini-pro (404 NOT_FOUND); pyric answers.</span></span></span></summary>
486
+ <div class="compat-evidence"><div class="compat-note"><a href="https://github.com/davideast/pyric/blob/main/packages/conformance/observations/ai/ai-request-edge-model-gemini-pro.json" target="_blank" rel="noopener noreferrer"><code>oracle:ai-request-edge-model-gemini-pro</code></a>. (Structured evidence: <a href="https://github.com/davideast/pyric/blob/main/packages/pyric/test/ai/hunt-captures.test.ts#L74" target="_blank" rel="noopener noreferrer"><code>hunt-captures.test.ts</code></a>)</div></div></details>
487
+ </div>
449
488
  <h2 id="reviewed-public-runtime-gaps">Reviewed public-runtime gaps</h2>
450
489
  <div class="compat-list">
451
490
  <details class="compat-row" data-status="unsupported">
@@ -473,4 +512,4 @@ html{scrollbar-gutter:stable}
473
512
  <div class="compat-evidence"><div class="compat-note"><code>startAudioConversation</code></div>
474
513
  <div class="compat-note">disposition:ai.live-api</div></div>
475
514
  </details>
476
- </div> </article> </main> <aside class="doc-toc" aria-label="On this page" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>On this page</h2> <ul data-astro-cid-mw7aashj> <li data-depth="2" data-astro-cid-mw7aashj> <a href="#status-legend" data-astro-cid-mw7aashj>Status legend</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#getaitarget-and-dispatch" data-astro-cid-mw7aashj>getAI(target) and dispatch</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generativemodelgeneratecontent-envelope" data-astro-cid-mw7aashj>GenerativeModel.generateContent envelope</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generatecontentstream-framing-and-aggregation" data-astro-cid-mw7aashj>generateContentStream framing and aggregation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#chatsession-history-and-streaming-turns" data-astro-cid-mw7aashj>ChatSession history and streaming turns</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#function-calling" data-astro-cid-mw7aashj>Function calling</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#counttokens" data-astro-cid-mw7aashj>countTokens</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#error-envelopes" data-astro-cid-mw7aashj>Error envelopes</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#response-helpers-enhancedgeneratecontentresponse" data-astro-cid-mw7aashj>Response helpers (EnhancedGenerateContentResponse)</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#schema-builders" data-astro-cid-mw7aashj>Schema builders</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-scripted" data-astro-cid-mw7aashj>Sandbox answer engine: scripted</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-openai-translation" data-astro-cid-mw7aashj>Sandbox answer engine: openai translation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#client-sdks-in-a-registered-server-process" data-astro-cid-mw7aashj>Client SDKs in a registered server process</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#app-check-on-the-ai-path" data-astro-cid-mw7aashj>App Check on the AI path</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#app-check-in-sandbox-ai-mode" data-astro-cid-mw7aashj>App Check in sandbox AI mode</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#current-gaps" data-astro-cid-mw7aashj>Current gaps</a> </li><li data-depth="3" data-astro-cid-mw7aashj> <a href="#documented-divergences" data-astro-cid-mw7aashj>Documented divergences</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#reviewed-public-runtime-gaps" data-astro-cid-mw7aashj>Reviewed public-runtime gaps</a> </li> </ul> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>
515
+ </div> </article> </main> <aside class="doc-toc" aria-label="On this page" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>On this page</h2> <ul data-astro-cid-mw7aashj> <li data-depth="2" data-astro-cid-mw7aashj> <a href="#status-legend" data-astro-cid-mw7aashj>Status legend</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#getaitarget-and-dispatch" data-astro-cid-mw7aashj>getAI(target) and dispatch</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generativemodelgeneratecontent-envelope" data-astro-cid-mw7aashj>GenerativeModel.generateContent envelope</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#generatecontentstream-framing-and-aggregation" data-astro-cid-mw7aashj>generateContentStream framing and aggregation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#chatsession-history-and-streaming-turns" data-astro-cid-mw7aashj>ChatSession history and streaming turns</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#function-calling" data-astro-cid-mw7aashj>Function calling</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#counttokens" data-astro-cid-mw7aashj>countTokens</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#error-envelopes" data-astro-cid-mw7aashj>Error envelopes</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#requests-checked-against-production-captures" data-astro-cid-mw7aashj>Requests checked against production captures</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#response-helpers-enhancedgeneratecontentresponse" data-astro-cid-mw7aashj>Response helpers (EnhancedGenerateContentResponse)</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#schema-builders" data-astro-cid-mw7aashj>Schema builders</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-scripted" data-astro-cid-mw7aashj>Sandbox answer engine: scripted</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#sandbox-answer-engine-openai-translation" data-astro-cid-mw7aashj>Sandbox answer engine: openai translation</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#client-sdks-in-a-registered-server-process" data-astro-cid-mw7aashj>Client SDKs in a registered server process</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#app-check-on-the-ai-path" data-astro-cid-mw7aashj>App Check on the AI path</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#app-check-in-sandbox-ai-mode" data-astro-cid-mw7aashj>App Check in sandbox AI mode</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#current-gaps" data-astro-cid-mw7aashj>Current gaps</a> </li><li data-depth="3" data-astro-cid-mw7aashj> <a href="#documented-divergences" data-astro-cid-mw7aashj>Documented divergences</a> </li><li data-depth="3" data-astro-cid-mw7aashj> <a href="#bugs" data-astro-cid-mw7aashj>Bugs</a> </li><li data-depth="2" data-astro-cid-mw7aashj> <a href="#reviewed-public-runtime-gaps" data-astro-cid-mw7aashj>Reviewed public-runtime gaps</a> </li> </ul> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>