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

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 (384) hide show
  1. package/README.md +13 -9
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts +80 -72
  3. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  4. package/dist/assurance/.generated/conformance-verdicts.js +80 -72
  5. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  6. package/dist/bridge/client/dispatch.js +1 -1
  7. package/dist/bridge/client/dispatch.js.map +1 -1
  8. package/dist/cli/database-rules.d.ts.map +1 -1
  9. package/dist/cli/database-rules.js +6 -4
  10. package/dist/cli/database-rules.js.map +1 -1
  11. package/dist/cli/dev-runner.d.ts +9 -0
  12. package/dist/cli/dev-runner.d.ts.map +1 -1
  13. package/dist/cli/dev-runner.js +18 -0
  14. package/dist/cli/dev-runner.js.map +1 -1
  15. package/dist/cli/serve.d.ts.map +1 -1
  16. package/dist/cli/serve.js +61 -6
  17. package/dist/cli/serve.js.map +1 -1
  18. package/dist/cli/verify.js +2 -2
  19. package/dist/cli/verify.js.map +1 -1
  20. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  21. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  22. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  23. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  24. package/dist/conformance/.generated/can-i-use.js +1 -1
  25. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  26. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  27. package/dist/conformance/.generated/conformance-docs.js +1 -1
  28. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  29. package/dist/next/client-aliases.d.ts +11 -0
  30. package/dist/next/client-aliases.d.ts.map +1 -0
  31. package/dist/next/client-aliases.js +38 -0
  32. package/dist/next/client-aliases.js.map +1 -0
  33. package/dist/next/dev-rewrites.d.ts +9 -0
  34. package/dist/next/dev-rewrites.d.ts.map +1 -0
  35. package/dist/next/dev-rewrites.js +53 -0
  36. package/dist/next/dev-rewrites.js.map +1 -0
  37. package/dist/next/guard.d.ts +15 -0
  38. package/dist/next/guard.d.ts.map +1 -0
  39. package/dist/next/guard.js +52 -0
  40. package/dist/next/guard.js.map +1 -0
  41. package/dist/next/index.d.ts +12 -0
  42. package/dist/next/index.d.ts.map +1 -0
  43. package/dist/next/index.js +11 -0
  44. package/dist/next/index.js.map +1 -0
  45. package/dist/next/runtime-env.d.ts +7 -0
  46. package/dist/next/runtime-env.d.ts.map +1 -0
  47. package/dist/next/runtime-env.js +13 -0
  48. package/dist/next/runtime-env.js.map +1 -0
  49. package/dist/next/server-external-packages.d.ts +10 -0
  50. package/dist/next/server-external-packages.d.ts.map +1 -0
  51. package/dist/next/server-external-packages.js +34 -0
  52. package/dist/next/server-external-packages.js.map +1 -0
  53. package/dist/next/target-url.d.ts +11 -0
  54. package/dist/next/target-url.d.ts.map +1 -0
  55. package/dist/next/target-url.js +36 -0
  56. package/dist/next/target-url.js.map +1 -0
  57. package/dist/next/turbopack-config.d.ts +9 -0
  58. package/dist/next/turbopack-config.d.ts.map +1 -0
  59. package/dist/next/turbopack-config.js +39 -0
  60. package/dist/next/turbopack-config.js.map +1 -0
  61. package/dist/next/types.d.ts +40 -0
  62. package/dist/next/types.d.ts.map +1 -0
  63. package/dist/next/types.js +5 -0
  64. package/dist/next/types.js.map +1 -0
  65. package/dist/next/webpack-config.d.ts +11 -0
  66. package/dist/next/webpack-config.d.ts.map +1 -0
  67. package/dist/next/webpack-config.js +51 -0
  68. package/dist/next/webpack-config.js.map +1 -0
  69. package/dist/next/with-pyric.d.ts +22 -0
  70. package/dist/next/with-pyric.d.ts.map +1 -0
  71. package/dist/next/with-pyric.js +49 -0
  72. package/dist/next/with-pyric.js.map +1 -0
  73. package/dist/register/app-bridge.d.ts +9 -0
  74. package/dist/register/app-bridge.d.ts.map +1 -0
  75. package/dist/register/app-bridge.js +56 -0
  76. package/dist/register/app-bridge.js.map +1 -0
  77. package/dist/register/hooks.d.ts.map +1 -1
  78. package/dist/register/hooks.js +6 -1
  79. package/dist/register/hooks.js.map +1 -1
  80. package/dist/register/index.js +1 -1
  81. package/dist/register/index.js.map +1 -1
  82. package/dist/register/mapping.d.ts +3 -1
  83. package/dist/register/mapping.d.ts.map +1 -1
  84. package/dist/register/mapping.js +41 -5
  85. package/dist/register/mapping.js.map +1 -1
  86. package/dist/rtdb/rules-json.d.ts +12 -0
  87. package/dist/rtdb/rules-json.d.ts.map +1 -1
  88. package/dist/rtdb/rules-json.js +98 -0
  89. package/dist/rtdb/rules-json.js.map +1 -1
  90. package/dist/serve/bundler.d.ts.map +1 -1
  91. package/dist/serve/bundler.js +2 -0
  92. package/dist/serve/bundler.js.map +1 -1
  93. package/dist/serve/discovery.d.ts +4 -4
  94. package/dist/serve/discovery.d.ts.map +1 -1
  95. package/dist/serve/discovery.js +59 -38
  96. package/dist/serve/discovery.js.map +1 -1
  97. package/dist/serve/entries/app-ai-passthrough.d.ts +8 -0
  98. package/dist/serve/entries/app-ai-passthrough.d.ts.map +1 -0
  99. package/dist/serve/entries/app-ai-passthrough.js +59 -0
  100. package/dist/serve/entries/app-ai-passthrough.js.map +1 -0
  101. package/dist/serve/entries/auth-helper-core.d.ts +9 -0
  102. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
  103. package/dist/serve/entries/auth-helper-core.js +37 -8
  104. package/dist/serve/entries/auth-helper-core.js.map +1 -1
  105. package/dist/serve/entries/auth.d.ts +1 -0
  106. package/dist/serve/entries/auth.d.ts.map +1 -1
  107. package/dist/serve/entries/auth.js +7 -4
  108. package/dist/serve/entries/auth.js.map +1 -1
  109. package/dist/serve/entries/bridge-url.d.ts.map +1 -1
  110. package/dist/serve/entries/bridge-url.js +7 -2
  111. package/dist/serve/entries/bridge-url.js.map +1 -1
  112. package/dist/serve/entries/database.d.ts +1 -0
  113. package/dist/serve/entries/database.d.ts.map +1 -1
  114. package/dist/serve/entries/database.js +1 -0
  115. package/dist/serve/entries/database.js.map +1 -1
  116. package/dist/serve/entries/firestore.d.ts +1 -0
  117. package/dist/serve/entries/firestore.d.ts.map +1 -1
  118. package/dist/serve/entries/firestore.js +1 -0
  119. package/dist/serve/entries/firestore.js.map +1 -1
  120. package/dist/serve/entries/init.d.ts.map +1 -1
  121. package/dist/serve/entries/init.js +4 -2
  122. package/dist/serve/entries/init.js.map +1 -1
  123. package/dist/serve/entries/runtime.js +23 -0
  124. package/dist/serve/entries/runtime.js.map +1 -1
  125. package/dist/serve/entries/storage.d.ts +2 -0
  126. package/dist/serve/entries/storage.d.ts.map +1 -1
  127. package/dist/serve/entries/storage.js +9 -2
  128. package/dist/serve/entries/storage.js.map +1 -1
  129. package/dist/serve/html-injection.d.ts +3 -1
  130. package/dist/serve/html-injection.d.ts.map +1 -1
  131. package/dist/serve/html-injection.js +27 -1
  132. package/dist/serve/html-injection.js.map +1 -1
  133. package/dist/serve/rules.js +2 -2
  134. package/dist/serve/rules.js.map +1 -1
  135. package/dist/serve/runtime/chip-config.d.ts +1 -1
  136. package/dist/serve/runtime/chip-config.d.ts.map +1 -1
  137. package/dist/serve/runtime/chip-config.js +16 -8
  138. package/dist/serve/runtime/chip-config.js.map +1 -1
  139. package/dist/serve/sandbox-session.d.ts +1 -0
  140. package/dist/serve/sandbox-session.d.ts.map +1 -1
  141. package/dist/serve/sandbox-session.js +30 -2
  142. package/dist/serve/sandbox-session.js.map +1 -1
  143. package/dist/serve/site-ui/_astro/_studio_.B6b_G1ev.css +1 -0
  144. package/dist/serve/site-ui/_astro/app.bnmVTkIY.js +11 -0
  145. package/dist/serve/site-ui/_astro/app.t6u-adB_.js +1 -0
  146. package/dist/serve/site-ui/_astro/{chess-showcase.DzPO6kz0.js → chess-showcase.kC8dXLKY.js} +1 -1
  147. package/dist/serve/site-ui/_astro/{example-runtime.CM0H02rx.js → example-runtime.D79PnoSk.js} +1 -1
  148. package/dist/serve/site-ui/_astro/index.DzVde04M.js +1 -0
  149. package/dist/serve/site-ui/_astro/reads.BYBRLbsE.js +1 -0
  150. package/dist/serve/site-ui/_astro/sandbox-controls.C9Aaazt8.js +1252 -0
  151. package/dist/serve/site-ui/_astro/{seed.BCn5DhHS.js → seed.DANAIyRw.js} +1 -1
  152. package/dist/serve/site-ui/auth/index.html +2 -2
  153. package/dist/serve/site-ui/docs/_rhythm/index.html +1 -1
  154. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +1 -1
  155. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +1 -1
  156. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +1 -1
  157. package/dist/serve/site-ui/docs/ai-compat/index.html +85 -85
  158. package/dist/serve/site-ui/docs/ai-compat.md +84 -84
  159. package/dist/serve/site-ui/docs/api-reference/index.html +3 -1
  160. package/dist/serve/site-ui/docs/api-reference.md +2 -0
  161. package/dist/serve/site-ui/docs/app-compat/index.html +28 -28
  162. package/dist/serve/site-ui/docs/app-compat.md +27 -27
  163. package/dist/serve/site-ui/docs/auth-compat/index.html +122 -122
  164. package/dist/serve/site-ui/docs/auth-compat.md +121 -121
  165. package/dist/serve/site-ui/docs/build/ai-logic/index.html +1 -1
  166. package/dist/serve/site-ui/docs/build/authentication/index.html +1 -1
  167. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +1 -1
  168. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +1 -1
  169. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +1 -1
  170. package/dist/serve/site-ui/docs/build/realtime-database/index.html +1 -1
  171. package/dist/serve/site-ui/docs/conformance-scores/index.html +4 -4
  172. package/dist/serve/site-ui/docs/conformance-scores.md +3 -3
  173. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +6 -6
  174. package/dist/serve/site-ui/docs/create-pyric-reference-api.md +5 -5
  175. package/dist/serve/site-ui/docs/database-compat/index.html +200 -448
  176. package/dist/serve/site-ui/docs/database-compat.md +198 -461
  177. package/dist/serve/site-ui/docs/examples/chess/index.html +2 -2
  178. package/dist/serve/site-ui/docs/examples/index.html +1 -1
  179. package/dist/serve/site-ui/docs/firestore-compat/index.html +186 -195
  180. package/dist/serve/site-ui/docs/firestore-compat.md +184 -195
  181. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +15 -15
  182. package/dist/serve/site-ui/docs/functions-rtdb-compat.md +14 -14
  183. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +1 -1
  184. package/dist/serve/site-ui/docs/get-started/nextjs/index.html +57 -0
  185. package/dist/serve/site-ui/docs/get-started/nextjs.md +86 -0
  186. package/dist/serve/site-ui/docs/get-started/start-building/index.html +25 -8
  187. package/dist/serve/site-ui/docs/get-started/start-building.md +34 -5
  188. package/dist/serve/site-ui/docs/get-started/vite/index.html +26 -0
  189. package/dist/serve/site-ui/docs/get-started/vite.md +45 -0
  190. package/dist/serve/site-ui/docs/index.json +668 -103
  191. package/dist/serve/site-ui/docs/messaging-compat/index.html +56 -56
  192. package/dist/serve/site-ui/docs/messaging-compat.md +55 -55
  193. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +1 -1
  194. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +1 -1
  195. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +1 -1
  196. package/dist/serve/site-ui/docs/overview/index.html +1 -1
  197. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +39 -13
  198. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api.md +28 -2
  199. package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +1 -1
  200. package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +38 -6
  201. package/dist/serve/site-ui/docs/pyric-admin-database-reference-api.md +43 -0
  202. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +9 -1
  203. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api.md +8 -0
  204. package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +1 -1
  205. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +27 -4
  206. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api.md +23 -0
  207. package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +1 -1
  208. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +1 -1
  209. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +1 -1
  210. package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +2 -2
  211. package/dist/serve/site-ui/docs/pyric-auth-reference-api.md +1 -1
  212. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +1 -1
  213. package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +1 -1
  214. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +1 -1
  215. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +1 -1
  216. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +1 -1
  217. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +1 -1
  218. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +1 -1
  219. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +1 -1
  220. package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +1 -1
  221. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +123 -0
  222. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +99 -0
  223. package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +127 -0
  224. package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api.md +174 -0
  225. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +1 -1
  226. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +1 -1
  227. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +570 -326
  228. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +198 -6
  229. package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +1 -1
  230. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +1 -1
  231. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +1 -1
  232. package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +2971 -627
  233. package/dist/serve/site-ui/docs/pyric-firestore-reference-api.md +2873 -517
  234. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +1 -1
  235. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +1 -1
  236. package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +43 -3
  237. package/dist/serve/site-ui/docs/pyric-rules-reference-api.md +8 -0
  238. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +26 -2
  239. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api.md +24 -0
  240. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +1 -1
  241. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +77 -9
  242. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api.md +28 -13
  243. package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +240 -63
  244. package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +164 -5
  245. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +1 -1
  246. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +1 -1
  247. package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +1 -1
  248. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +1 -1
  249. package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +1 -1
  250. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1 -1
  251. package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +1 -1
  252. package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +1 -1
  253. package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +1 -1
  254. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +1 -1
  255. package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +1 -1
  256. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1 -1
  257. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +2 -1
  258. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api.md +1 -0
  259. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1 -1
  260. package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +1 -1
  261. package/dist/serve/site-ui/docs/rules-compat/index.html +87 -79
  262. package/dist/serve/site-ui/docs/rules-compat.md +86 -78
  263. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +1 -1
  264. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +1 -1
  265. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +1 -1
  266. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +1 -1
  267. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +1 -1
  268. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +1 -1
  269. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +1 -1
  270. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +1 -1
  271. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +1 -1
  272. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +1 -1
  273. package/dist/serve/site-ui/docs/storage-compat/index.html +119 -125
  274. package/dist/serve/site-ui/docs/storage-compat.md +118 -124
  275. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +1 -1
  276. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +1 -1
  277. package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +1 -1
  278. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +1 -1
  279. package/dist/serve/site-ui/docs/tutorial/index.html +1 -1
  280. package/dist/serve/site-ui/examples/chess/index.html +1 -1
  281. package/dist/serve/site-ui/examples/firestore-first-write/index.html +1 -1
  282. package/dist/serve/site-ui/firestore/index.html +2 -2
  283. package/dist/serve/site-ui/index.html +2 -2
  284. package/dist/serve/site-ui/llms.txt +6 -2
  285. package/dist/serve/site-ui/rtdb/index.html +2 -2
  286. package/dist/serve/site-ui/settings/index.html +2 -2
  287. package/dist/serve/site-ui/storage/index.html +2 -2
  288. package/dist/serve/site-ui/traffic/index.html +2 -2
  289. package/dist/serve/vite-ai-config.d.ts +4 -1
  290. package/dist/serve/vite-ai-config.d.ts.map +1 -1
  291. package/dist/serve/vite-ai-config.js +83 -19
  292. package/dist/serve/vite-ai-config.js.map +1 -1
  293. package/dist/serve/vite-generation-rules-watch.d.ts.map +1 -1
  294. package/dist/serve/vite-generation-rules-watch.js +61 -14
  295. package/dist/serve/vite-generation-rules-watch.js.map +1 -1
  296. package/dist/serve/vite-module-swap.d.ts +4 -1
  297. package/dist/serve/vite-module-swap.d.ts.map +1 -1
  298. package/dist/serve/vite-module-swap.js +106 -21
  299. package/dist/serve/vite-module-swap.js.map +1 -1
  300. package/dist/serve/vite-plugin.d.ts.map +1 -1
  301. package/dist/serve/vite-plugin.js +45 -5
  302. package/dist/serve/vite-plugin.js.map +1 -1
  303. package/dist/serve/vite-sandbox-generation.js +1 -1
  304. package/dist/serve/vite-sandbox-generation.js.map +1 -1
  305. package/dist/serve/worker/client/resumable.d.ts +30 -0
  306. package/dist/serve/worker/client/resumable.d.ts.map +1 -0
  307. package/dist/serve/worker/client/resumable.js +416 -0
  308. package/dist/serve/worker/client/resumable.js.map +1 -0
  309. package/dist/serve/worker/client/rtdb-references.d.ts.map +1 -1
  310. package/dist/serve/worker/client/rtdb-references.js +4 -1
  311. package/dist/serve/worker/client/rtdb-references.js.map +1 -1
  312. package/dist/serve/worker/client/storage.d.ts +16 -2
  313. package/dist/serve/worker/client/storage.d.ts.map +1 -1
  314. package/dist/serve/worker/client/storage.js +57 -6
  315. package/dist/serve/worker/client/storage.js.map +1 -1
  316. package/dist/serve/worker/host/rules.d.ts.map +1 -1
  317. package/dist/serve/worker/host/rules.js +2 -1
  318. package/dist/serve/worker/host/rules.js.map +1 -1
  319. package/dist/serve/worker/index.d.ts +1 -1
  320. package/dist/serve/worker/index.d.ts.map +1 -1
  321. package/dist/serve/worker/index.js +1 -1
  322. package/dist/serve/worker/index.js.map +1 -1
  323. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  324. package/dist/serve/worker/serve-init.js +31 -0
  325. package/dist/serve/worker/serve-init.js.map +1 -1
  326. package/package.json +15 -4
  327. package/src/assurance/.generated/conformance-verdicts.ts +80 -72
  328. package/src/bridge/client/dispatch.ts +1 -1
  329. package/src/cli/cli.test.ts +14 -0
  330. package/src/cli/database-rules.ts +6 -4
  331. package/src/cli/dev-runner.ts +21 -0
  332. package/src/cli/serve.ts +62 -5
  333. package/src/cli/verify.ts +2 -2
  334. package/src/conformance/.generated/can-i-use-browser.ts +1 -1
  335. package/src/conformance/.generated/can-i-use.ts +1 -1
  336. package/src/conformance/.generated/conformance-docs.ts +1 -1
  337. package/src/next/client-aliases.ts +39 -0
  338. package/src/next/dev-rewrites.ts +77 -0
  339. package/src/next/guard.ts +61 -0
  340. package/src/next/index.ts +16 -0
  341. package/src/next/runtime-env.ts +18 -0
  342. package/src/next/server-external-packages.ts +43 -0
  343. package/src/next/target-url.ts +46 -0
  344. package/src/next/turbopack-config.ts +54 -0
  345. package/src/next/types.ts +47 -0
  346. package/src/next/webpack-config.ts +71 -0
  347. package/src/next/with-pyric.ts +58 -0
  348. package/src/register/app-bridge.ts +79 -0
  349. package/src/register/hooks.ts +6 -1
  350. package/src/register/index.ts +1 -1
  351. package/src/register/mapping.ts +50 -4
  352. package/src/rtdb/rules-json.ts +110 -0
  353. package/src/serve/bundler.ts +2 -0
  354. package/src/serve/discovery.ts +65 -44
  355. package/src/serve/entries/app-ai-passthrough.ts +83 -0
  356. package/src/serve/entries/auth-helper-core.ts +44 -8
  357. package/src/serve/entries/auth.ts +9 -4
  358. package/src/serve/entries/bridge-url.ts +9 -2
  359. package/src/serve/entries/database.ts +1 -0
  360. package/src/serve/entries/firestore.ts +1 -0
  361. package/src/serve/entries/init.ts +5 -2
  362. package/src/serve/entries/runtime.ts +25 -0
  363. package/src/serve/entries/storage.ts +12 -1
  364. package/src/serve/html-injection.ts +26 -1
  365. package/src/serve/rules.ts +2 -2
  366. package/src/serve/runtime/chip-config.ts +19 -6
  367. package/src/serve/sandbox-session.ts +31 -2
  368. package/src/serve/vite-ai-config.ts +86 -19
  369. package/src/serve/vite-generation-rules-watch.ts +67 -15
  370. package/src/serve/vite-module-swap.ts +121 -21
  371. package/src/serve/vite-plugin.ts +44 -6
  372. package/src/serve/vite-sandbox-generation.ts +1 -1
  373. package/src/serve/worker/client/resumable.ts +506 -0
  374. package/src/serve/worker/client/rtdb-references.ts +4 -1
  375. package/src/serve/worker/client/storage.ts +77 -7
  376. package/src/serve/worker/host/rules.ts +2 -1
  377. package/src/serve/worker/index.ts +4 -0
  378. package/src/serve/worker/serve-init.ts +30 -0
  379. package/dist/serve/site-ui/_astro/_studio_.BtYpqe1A.css +0 -1
  380. package/dist/serve/site-ui/_astro/app.BnMC0ywl.js +0 -109
  381. package/dist/serve/site-ui/_astro/app.DVXXR-WI.js +0 -1
  382. package/dist/serve/site-ui/_astro/index.B4Kh80he.js +0 -1
  383. package/dist/serve/site-ui/_astro/reads.D1exkX1-.js +0 -1
  384. package/dist/serve/site-ui/_astro/sandbox-controls.BqMePr5V.js +0 -1153
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>API reference: pyric/storage · Pyric Studio</title><meta name="description" content="Published declarations for pyric/storage."><link rel="icon" type="image/svg+xml" href="/__pyric/ui/pyric-logo.svg"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"><link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.CXh9yTP1.css">
2
- <link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.BoKXYrnu.css"></head> <body> <header class="studio__bar" data-astro-cid-mw7aashj> <div class="studio__bar-inner" data-astro-cid-mw7aashj> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio" data-astro-cid-mw7aashj>Pyric</a> <nav class="studio__nav" aria-label="Studio tabs" data-astro-cid-mw7aashj> <a class="studio__nav-tab" href="/__pyric/ui/" data-astro-cid-mw7aashj> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore" data-astro-cid-mw7aashj> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth" data-astro-cid-mw7aashj> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb" data-astro-cid-mw7aashj> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage" data-astro-cid-mw7aashj> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic" data-astro-cid-mw7aashj> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings" data-astro-cid-mw7aashj> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page" data-astro-cid-mw7aashj> Docs </a> </nav> </div> </header> <div class="docs-shell" data-astro-cid-mw7aashj> <details class="docs-nav-drawer" data-astro-cid-mw7aashj> <summary data-astro-cid-mw7aashj>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <details class="docs-nav-group"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/storage-rules-stdlib-research/"> Storage Rules modules: evidence and design </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/" aria-current="page"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <details class="docs-nav-group" id="nav-group-overview"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-secure-debug-examples"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-trust"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/storage-rules-stdlib-research/"> Storage Rules modules: evidence and design </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/" aria-current="page"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main" data-astro-cid-mw7aashj> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>pyric</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">pyric/storage</span> </li> </ol> </nav> <header class="api-reference-header" data-astro-cid-mw7aashj> <p class="api-reference-kicker" data-astro-cid-mw7aashj>API reference</p> <h1 data-astro-cid-mw7aashj><code data-astro-cid-mw7aashj>pyric/storage</code></h1> <p class="api-reference-meta" data-astro-cid-mw7aashj> 64 published symbols from <code data-astro-cid-mw7aashj>pyric</code> </p> <p class="api-reference-source" data-astro-cid-mw7aashj>
2
+ <link rel="stylesheet" href="/__pyric/ui/_astro/_slug_.BoKXYrnu.css"></head> <body> <header class="studio__bar" data-astro-cid-mw7aashj> <div class="studio__bar-inner" data-astro-cid-mw7aashj> <a class="studio__brand" href="/__pyric/ui/" aria-label="Pyric Studio" data-astro-cid-mw7aashj>Pyric</a> <nav class="studio__nav" aria-label="Studio tabs" data-astro-cid-mw7aashj> <a class="studio__nav-tab" href="/__pyric/ui/" data-astro-cid-mw7aashj> Home </a><a class="studio__nav-tab" href="/__pyric/ui/firestore" data-astro-cid-mw7aashj> Firestore </a><a class="studio__nav-tab" href="/__pyric/ui/auth" data-astro-cid-mw7aashj> Auth </a><a class="studio__nav-tab" href="/__pyric/ui/rtdb" data-astro-cid-mw7aashj> RTDB </a><a class="studio__nav-tab" href="/__pyric/ui/storage" data-astro-cid-mw7aashj> Storage </a><a class="studio__nav-tab" href="/__pyric/ui/traffic" data-astro-cid-mw7aashj> Traffic </a><a class="studio__nav-tab" href="/__pyric/ui/settings" data-astro-cid-mw7aashj> Settings </a><a class="studio__nav-tab" href="/__pyric/ui/docs" aria-current="page" data-astro-cid-mw7aashj> Docs </a> </nav> </div> </header> <div class="docs-shell" data-astro-cid-mw7aashj> <details class="docs-nav-drawer" data-astro-cid-mw7aashj> <summary data-astro-cid-mw7aashj>Navigate</summary> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <script type="module">let i=null;function d(t){return i||(i=fetch(t).then(e=>e.json())),i}function l(t,e){return t.title.toLowerCase().includes(e)||t.excerpt.toLowerCase().includes(e)?!0:t.headings.some(r=>r.text.toLowerCase().includes(e))}function u(t,e,r){if(e.innerHTML="",t.length===0){e.hidden=!1;{const n=document.createElement("li");n.className="docs-search-empty",n.textContent="No matches",e.appendChild(n)}return}e.hidden=!1;for(const n of t.slice(0,8)){const s=document.createElement("li"),c=document.createElement("a");c.href=n.path;const o=document.createElement("span");o.className="docs-search-result-title",o.textContent=n.title;const a=document.createElement("span");a.className="docs-search-result-meta",a.textContent=[n.group,n.section].filter(Boolean).join(" / "),c.append(o,a),s.appendChild(c),e.appendChild(s)}}document.querySelectorAll(".docs-search").forEach(t=>{const e=t.dataset.indexUrl,r=t.querySelector(".docs-search-input"),n=t.querySelector(".docs-search-results");r.addEventListener("input",async()=>{const s=r.value.trim().toLowerCase();if(!s){n.hidden=!0,n.innerHTML="";return}const{pages:c}=await d(e);r.value.trim().toLowerCase()===s&&u(c.filter(o=>l(o,s)),n)}),r.addEventListener("focus",()=>{d(e),n.childElementCount>0&&(n.hidden=!1)}),r.addEventListener("keydown",s=>{s.key==="Escape"&&(r.value="",n.hidden=!0,n.innerHTML="",r.blur())}),r.addEventListener("blur",()=>{window.setTimeout(()=>{n.hidden=!0},150)})});document.addEventListener("keydown",t=>{if(!(t.metaKey||t.ctrlKey)||t.key.toLowerCase()!=="k")return;const e=[...document.querySelectorAll(".docs-search-input")].find(r=>r.offsetParent!==null);e&&(t.preventDefault(),e.focus(),e.select())});</script> <details class="docs-nav-group"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/vite/"> Vite </a> </li><li> <a href="/__pyric/ui/docs/get-started/nextjs/"> Next.js </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/storage-rules-stdlib-research/"> Storage Rules modules: evidence and design </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/" aria-current="page"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-next-reference-api/"> @pyric/cli/next </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-app-bridge-reference-api/"> @pyric/cli/register/app-bridge </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> </details> <nav class="docs-nav" aria-label="Documentation"> <div class="docs-search" data-index-url="/__pyric/ui/docs/index.json"> <div class="docs-search-field"> <svg class="docs-search-icon" viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"> <path d="M11.5 11.5 15 15M13 7A6 6 0 1 1 1 7a6 6 0 0 1 12 0Z" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"></path> </svg> <input type="text" class="docs-search-input" placeholder="Search docs" aria-label="Search docs" autocomplete="off" spellcheck="false"> <kbd class="docs-search-kbd">⌘K</kbd> </div> <ul class="docs-search-results" hidden></ul> </div> <details class="docs-nav-group" id="nav-group-overview"> <summary>Overview</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/overview/"> Overview </a> </li><li> <a href="/__pyric/ui/docs/tutorial/"> Tutorial </a> </li><li> <a href="/__pyric/ui/docs/examples/"> Examples </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-get-started"> <summary>Get started</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/get-started/start-building/"> Quickstart </a> </li><li> <a href="/__pyric/ui/docs/get-started/vite/"> Vite </a> </li><li> <a href="/__pyric/ui/docs/get-started/nextjs/"> Next.js </a> </li><li> <a href="/__pyric/ui/docs/get-started/how-the-swap-works/"> How the swap works </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-build"> <summary>Build</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/build/authentication/"> Authentication </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-firestore/"> Cloud Firestore </a> </li><li> <a href="/__pyric/ui/docs/build/realtime-database/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-storage/"> Cloud Storage </a> </li><li> <a href="/__pyric/ui/docs/build/cloud-messaging/"> Cloud Messaging </a> </li><li> <a href="/__pyric/ui/docs/build/ai-logic/"> AI Logic </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-secure-debug"> <summary>Secure &amp; debug</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/secure/secure-it-with-rules/"> Security Rules </a> </li><li> <a href="/__pyric/ui/docs/secure/simulate-and-lint/"> Simulate and lint before you deploy </a> </li><li> <a href="/__pyric/ui/docs/secure/write-a-rules-test-suite/"> Write a rules test suite </a> </li><li> <a href="/__pyric/ui/docs/secure/read-a-denial/"> Read a denial and understand it </a> </li><li> <a href="/__pyric/ui/docs/secure/rules-standard-library/"> The rules standard library </a> </li><li> <a href="/__pyric/ui/docs/secure/rtdb-rules-in-typescript/"> RTDB rules in TypeScript </a> </li><li> <a href="/__pyric/ui/docs/secure/firestore-rules-limits/"> Rules limits </a> </li><li> <a href="/__pyric/ui/docs/secure/audit-your-rules/"> Audit rules and data </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading" id="nav-section-secure-debug-examples"> Examples </h2> <ul> <li> <a href="/__pyric/ui/docs/examples/chess/"> Chess showcase </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-observe-shape"> <summary>Observe &amp; shape</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/observe/see-whats-happening/"> Traffic &amp; rule verdicts </a> </li><li> <a href="/__pyric/ui/docs/observe/resolve-runtime-status/"> Runtime status </a> </li><li> <a href="/__pyric/ui/docs/observe/shape-your-data/"> Seed, snapshot, replay </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-ship-test"> <summary>Ship &amp; test</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/ship/ship-to-production/"> Ship to production </a> </li><li> <a href="/__pyric/ui/docs/ship/test-in-node/"> Test in Node </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-work-with-an-agent"> <summary>Work with an agent</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/agent/set-up-your-agent/"> Connect an agent </a> </li><li> <a href="/__pyric/ui/docs/agent/work-with-an-agent/"> Use the MCP tools </a> </li><li> <a href="/__pyric/ui/docs/agent/watch-and-review/"> Watch in Pyric Studio </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-trust"> <summary>Trust</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/trust/versioning-and-compatibility/"> Versioning and the fb tag </a> </li><li> <a href="/__pyric/ui/docs/trust/storage-rules-stdlib-research/"> Storage Rules modules: evidence and design </a> </li><li> <a href="/__pyric/ui/docs/trust/rules-standard-library/"> Rules standard library reference </a> </li> </ul> </div> </div> </details><details class="docs-nav-group" id="nav-group-conformance"> <summary>Conformance</summary> <div class="docs-nav-group-body"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/conformance-scores/"> Public API coverage </a> </li><li> <a href="/__pyric/ui/docs/trust/how-we-know-it-matches-firebase/"> How we know it matches Firebase </a> </li><li> <a href="/__pyric/ui/docs/app-compat/"> App </a> </li><li> <a href="/__pyric/ui/docs/ai-compat/"> AI Logic </a> </li><li> <a href="/__pyric/ui/docs/auth-compat/"> Auth </a> </li><li> <a href="/__pyric/ui/docs/firestore-compat/"> Firestore </a> </li><li> <a href="/__pyric/ui/docs/database-compat/"> Realtime Database </a> </li><li> <a href="/__pyric/ui/docs/storage-compat/"> Storage </a> </li><li> <a href="/__pyric/ui/docs/messaging-compat/"> Messaging </a> </li><li> <a href="/__pyric/ui/docs/functions-rtdb-compat/"> Functions · RTDB </a> </li><li> <a href="/__pyric/ui/docs/rules-compat/"> Rules </a> </li> </ul> </div> </div> </details> <details class="docs-nav-group" id="nav-group-reference" open> <summary>Reference</summary> <div class="docs-nav-group-body docs-nav-group-body--reference"> <div class="docs-nav-section"> <ul> <li> <a href="/__pyric/ui/docs/api-reference/"> API reference </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-app-reference-api/"> pyric/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-firestore-reference-api/"> pyric/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-auth-reference-api/"> pyric/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-reference-api/"> pyric/ai </a> </li><li> <a href="/__pyric/ui/docs/pyric-ai-scripting-reference-api/"> pyric/ai/scripting </a> </li><li> <a href="/__pyric/ui/docs/pyric-database-reference-api/"> pyric/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-storage-reference-api/" aria-current="page"> pyric/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-reference-api/"> pyric/messaging </a> </li><li> <a href="/__pyric/ui/docs/pyric-messaging-sw-reference-api/"> pyric/messaging/sw </a> </li><li> <a href="/__pyric/ui/docs/pyric-rules-reference-api/"> pyric/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-reference-api/"> pyric/sandbox </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-firestore-reference-api/"> pyric/sandbox/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-sandbox-database-reference-api/"> pyric/sandbox/database </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">pyric-admin</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-admin-app-reference-api/"> pyric-admin/app </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-firestore-reference-api/"> pyric-admin/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-auth-reference-api/"> pyric-admin/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-database-reference-api/"> pyric-admin/database </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-storage-reference-api/"> pyric-admin/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-admin-messaging-reference-api/"> pyric-admin/messaging </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">create-pyric</h2> <ul> <li> <a href="/__pyric/ui/docs/create-pyric-reference-api/"> create-pyric </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/cli</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-cli-credentials-node-reference-api/"> @pyric/cli/credentials/node </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-verify-reference-api/"> @pyric/cli/verify </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-reference-api/"> @pyric/cli/conformance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-browser-reference-api/"> @pyric/cli/conformance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-conformance-docs-reference-api/"> @pyric/cli/conformance/docs </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-reference-api/"> @pyric/cli/assurance </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-assurance-browser-reference-api/"> @pyric/cli/assurance/browser </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-reference-api/"> @pyric/cli/bridge </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-bridge-client-reference-api/"> @pyric/cli/bridge/client </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-discover-reference-api/"> @pyric/cli/discover </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-vite-reference-api/"> @pyric/cli/vite </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-next-reference-api/"> @pyric/cli/next </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-serve-worker-reference-api/"> @pyric/cli/serve/worker </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-remote-reference-api/"> @pyric/cli/remote </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-reference-api/"> @pyric/cli/register </a> </li><li> <a href="/__pyric/ui/docs/pyric-cli-register-app-bridge-reference-api/"> @pyric/cli/register/app-bridge </a> </li> </ul> </div><div class="docs-nav-section"> <h2 class="docs-nav-heading">@pyric/ui</h2> <ul> <li> <a href="/__pyric/ui/docs/pyric-ui-auth-reference-api/"> @pyric/ui/auth </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-auth-hooks-reference-api/"> @pyric/ui/auth/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-primitives-reference-api/"> @pyric/ui/primitives </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-reference-api/"> @pyric/ui/firestore </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-firestore-hooks-reference-api/"> @pyric/ui/firestore/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rtdb-reference-api/"> @pyric/ui/rtdb </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-reference-api/"> @pyric/ui/storage </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-storage-hooks-reference-api/"> @pyric/ui/storage/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-reference-api/"> @pyric/ui/traffic </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-traffic-hooks-reference-api/"> @pyric/ui/traffic/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-reference-api/"> @pyric/ui/events </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-events-hooks-reference-api/"> @pyric/ui/events/hooks </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-agents-reference-api/"> @pyric/ui/agents </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-reference-api/"> @pyric/ui/rules </a> </li><li> <a href="/__pyric/ui/docs/pyric-ui-rules-hooks-reference-api/"> @pyric/ui/rules/hooks </a> </li> </ul> </div> </div> </details> </nav> <main class="doc-main" data-astro-cid-mw7aashj> <nav class="docs-breadcrumbs" aria-label="Breadcrumb"> <ol> <li> <a href="/__pyric/ui/docs/api-reference/">API reference</a> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span>pyric</span> </li><li> <span class="docs-breadcrumbs-sep" aria-hidden="true">/</span> <span aria-current="page">pyric/storage</span> </li> </ol> </nav> <header class="api-reference-header" data-astro-cid-mw7aashj> <p class="api-reference-kicker" data-astro-cid-mw7aashj>API reference</p> <h1 data-astro-cid-mw7aashj><code data-astro-cid-mw7aashj>pyric/storage</code></h1> <p class="api-reference-meta" data-astro-cid-mw7aashj> 69 published symbols from <code data-astro-cid-mw7aashj>pyric</code> </p> <p class="api-reference-source" data-astro-cid-mw7aashj>
3
3
  Generated from the TypeScript declarations shipped at this import path.
4
4
  </p> <a class="api-reference-evidence" href="/__pyric/ui/docs/storage-compat/" data-astro-cid-mw7aashj>
5
5
  Check behavioral conformance
@@ -129,7 +129,7 @@ Drop-in for <code>err.code === 'storage/object-not-found'</code> branching.</p>
129
129
 
130
130
 
131
131
 
132
- <table><thead><tr><th align="left">Property</th><th align="left">Modifier</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="code"></a> <code>code</code></td><td align="left"><code>readonly</code></td><td align="left">| <code>"storage/invalid-argument"</code> | <code>"storage/unknown"</code> | <code>"storage/object-not-found"</code> | <code>"storage/quota-exceeded"</code> | <code>"storage/unauthenticated"</code> | <code>"storage/unauthorized"</code> | <code>"storage/invalid-root-operation"</code> | <code>"storage/invalid-format"</code></td><td align="left">Prefixed code, e.g. <code>storage/object-not-found</code>.</td></tr></tbody></table></div>
132
+ <table><thead><tr><th align="left">Property</th><th align="left">Modifier</th><th align="left">Type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><a id="code"></a> <code>code</code></td><td align="left"><code>readonly</code></td><td align="left">| <code>"storage/invalid-argument"</code> | <code>"storage/unknown"</code> | <code>"storage/object-not-found"</code> | <code>"storage/quota-exceeded"</code> | <code>"storage/unauthenticated"</code> | <code>"storage/unauthorized"</code> | <code>"storage/invalid-root-operation"</code> | <code>"storage/invalid-format"</code> | <code>"storage/canceled"</code></td><td align="left">Prefixed code, e.g. <code>storage/object-not-found</code>.</td></tr></tbody></table></div>
133
133
  <hr>
134
134
  <p><a id="storageprovisioningerror"></a></p>
135
135
  <h3 id="storageprovisioningerror">StorageProvisioningError</h3>
@@ -309,7 +309,7 @@ See <a href="https://cloud.google.com/storage/docs/cross-origin#cors-elements" t
309
309
  <h3 id="firebasestorage">FirebaseStorage</h3>
310
310
  <p>Public opaque handle. Carries a <a href="#target">Target</a> via
311
311
  <a href="#target_symbol-1">TARGET_SYMBOL</a>; never inspected by consumer code, which
312
- interacts with storage only through <a href="#ref-1">ref</a> and the operation
312
+ interacts with storage only through <a href="#ref-2">ref</a> and the operation
313
313
  free functions.</p>
314
314
  <h4 id="properties-5">Properties</h4>
315
315
  <div class="table-scroll">
@@ -524,7 +524,7 @@ by the upload pipeline; client-settable fields round-trip from
524
524
 
525
525
 
526
526
 
527
- <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="buckets"></a> <code>buckets</code></td><td align="left">{ <code>bucketId</code>: <code>string</code>; <code>name</code>: <code>string</code>; }[]</td></tr><tr><td align="left"><a id="defaultlocation"></a> <code>defaultLocation</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="servicestate"></a> <code>serviceState</code></td><td align="left"><code>"disabled"</code> | <code>"enabled"</code> | <code>"unknown"</code></td></tr></tbody></table></div>
527
+ <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="buckets"></a> <code>buckets</code></td><td align="left">{ <code>bucketId</code>: <code>string</code>; <code>name</code>: <code>string</code>; }[]</td></tr><tr><td align="left"><a id="defaultlocation"></a> <code>defaultLocation</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><a id="servicestate"></a> <code>serviceState</code></td><td align="left"><code>"enabled"</code> | <code>"disabled"</code> | <code>"unknown"</code></td></tr></tbody></table></div>
528
528
  <hr>
529
529
  <p><a id="listresult"></a></p>
530
530
  <h3 id="listresult">ListResult</h3>
@@ -1079,6 +1079,135 @@ evaluation error that denies (see RuleError).</p>
1079
1079
 
1080
1080
 
1081
1081
  <table><thead><tr><th align="left">Property</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="metadata-1"></a> <code>metadata</code></td><td align="left"><a href="#fullmetadata"><code>FullMetadata</code></a></td></tr><tr><td align="left"><a id="ref"></a> <code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr></tbody></table></div>
1082
+ <hr>
1083
+ <p><a id="uploadtask"></a></p>
1084
+ <h3 id="uploadtask">UploadTask</h3>
1085
+ <h4 id="extends-3">Extends</h4>
1086
+ <ul>
1087
+ <li><code>Promise</code>&#x3C;<a href="#uploadtasksnapshot-1"><code>UploadTaskSnapshot</code></a>></li>
1088
+ </ul>
1089
+ <h4 id="properties-22">Properties</h4>
1090
+ <div class="table-scroll">
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+ <table><thead><tr><th align="left">Property</th><th align="left">Modifier</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="snapshot"></a> <code>snapshot</code></td><td align="left"><code>readonly</code></td><td align="left"><a href="#uploadtasksnapshot-1"><code>UploadTaskSnapshot</code></a></td></tr></tbody></table></div>
1106
+ <h4 id="methods-4">Methods</h4>
1107
+ <p><a id="cancel"></a></p>
1108
+ <h5 id="cancel">cancel()</h5>
1109
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">cancel</span><span style="color:#ABB2BF">(): </span><span style="color:#E06C75">boolean</span><span style="color:#ABB2BF">;</span></span></code></pre>
1110
+ <h6 id="returns-9">Returns</h6>
1111
+ <p><code>boolean</code></p>
1112
+ <p><a id="on"></a></p>
1113
+ <h5 id="on">on()</h5>
1114
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">on</span><span style="color:#ABB2BF">(</span></span>
1115
+ <span class="line"><span style="color:#E06C75"> event</span><span style="color:#ABB2BF">: </span><span style="color:#E06C75">string</span><span style="color:#ABB2BF">,</span></span>
1116
+ <span class="line"><span style="color:#E06C75"> nextOrObserver</span><span style="color:#C678DD">?:</span></span>
1117
+ <span class="line"><span style="color:#56B6C2"> |</span><span style="color:#ABB2BF"> (</span><span style="color:#E06C75;font-style:italic">snapshot</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UploadTaskSnapshot</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#E06C75"> unknown</span></span>
1118
+ <span class="line"><span style="color:#56B6C2"> |</span><span style="color:#ABB2BF"> {</span></span>
1119
+ <span class="line"><span style="color:#ABB2BF"> complete?: () </span><span style="color:#C678DD">=></span><span style="color:#E06C75"> unknown</span><span style="color:#ABB2BF">;</span></span>
1120
+ <span class="line"><span style="color:#E06C75"> error</span><span style="color:#C678DD">?:</span><span style="color:#ABB2BF"> (</span><span style="color:#E06C75;font-style:italic">error</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Error</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">StorageError</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#E06C75"> unknown</span><span style="color:#ABB2BF">;</span></span>
1121
+ <span class="line"><span style="color:#E06C75"> next</span><span style="color:#C678DD">?:</span><span style="color:#ABB2BF"> (</span><span style="color:#E06C75;font-style:italic">snapshot</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">UploadTaskSnapshot</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#E06C75"> unknown</span><span style="color:#ABB2BF">;</span></span>
1122
+ <span class="line"><span style="color:#ABB2BF">},</span></span>
1123
+ <span class="line"><span style="color:#E06C75"> error</span><span style="color:#C678DD">?:</span><span style="color:#ABB2BF"> (</span><span style="color:#E06C75;font-style:italic">error</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Error</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">StorageError</span><span style="color:#ABB2BF">) </span><span style="color:#C678DD">=></span><span style="color:#E06C75"> unknown</span><span style="color:#ABB2BF">,</span></span>
1124
+ <span class="line"><span style="color:#E06C75"> complete</span><span style="color:#C678DD">?:</span><span style="color:#ABB2BF"> () </span><span style="color:#C678DD">=></span><span style="color:#E06C75"> unknown</span><span style="color:#ABB2BF">): () </span><span style="color:#C678DD">=></span><span style="color:#C678DD"> void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1125
+ <h6 id="parameters-6">Parameters</h6>
1126
+ <div class="table-scroll">
1127
+
1128
+
1129
+
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+
1141
+
1142
+
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>event</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>nextOrObserver?</code></td><td align="left">| (<code>snapshot</code>: <a href="#uploadtasksnapshot-1"><code>UploadTaskSnapshot</code></a>) => <code>unknown</code> | { <code>complete?</code>: () => <code>unknown</code>; <code>error?</code>: (<code>error</code>: <code>Error</code> | <a href="#storageerror"><code>StorageError</code></a>) => <code>unknown</code>; <code>next?</code>: (<code>snapshot</code>: <a href="#uploadtasksnapshot-1"><code>UploadTaskSnapshot</code></a>) => <code>unknown</code>; }</td></tr><tr><td align="left"><code>error?</code></td><td align="left">(<code>error</code>: <code>Error</code> | <a href="#storageerror"><code>StorageError</code></a>) => <code>unknown</code></td></tr><tr><td align="left"><code>complete?</code></td><td align="left">() => <code>unknown</code></td></tr></tbody></table></div>
1152
+ <h6 id="returns-10">Returns</h6>
1153
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#ABB2BF">(): </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1154
+ <h6 id="returns-11">Returns</h6>
1155
+ <p><code>void</code></p>
1156
+ <p><a id="pause"></a></p>
1157
+ <h5 id="pause">pause()</h5>
1158
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">pause</span><span style="color:#ABB2BF">(): </span><span style="color:#E06C75">boolean</span><span style="color:#ABB2BF">;</span></span></code></pre>
1159
+ <h6 id="returns-12">Returns</h6>
1160
+ <p><code>boolean</code></p>
1161
+ <p><a id="resume"></a></p>
1162
+ <h5 id="resume">resume()</h5>
1163
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#61AFEF">resume</span><span style="color:#ABB2BF">(): </span><span style="color:#E06C75">boolean</span><span style="color:#ABB2BF">;</span></span></code></pre>
1164
+ <h6 id="returns-13">Returns</h6>
1165
+ <p><code>boolean</code></p>
1166
+ <hr>
1167
+ <p><a id="uploadtasksnapshot-1"></a></p>
1168
+ <h3 id="uploadtasksnapshot">UploadTaskSnapshot</h3>
1169
+ <h4 id="properties-23">Properties</h4>
1170
+ <div class="table-scroll">
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+ <table><thead><tr><th align="left">Property</th><th align="left">Modifier</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><a id="bytestransferred"></a> <code>bytesTransferred</code></td><td align="left"><code>readonly</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><a id="metadata-2"></a> <code>metadata</code></td><td align="left"><code>readonly</code></td><td align="left"><a href="#fullmetadata"><code>FullMetadata</code></a></td></tr><tr><td align="left"><a id="ref-1"></a> <code>ref</code></td><td align="left"><code>readonly</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><a id="state"></a> <code>state</code></td><td align="left"><code>readonly</code></td><td align="left"><a href="#taskstate"><code>TaskState</code></a></td></tr><tr><td align="left"><a id="task"></a> <code>task</code></td><td align="left"><code>readonly</code></td><td align="left"><a href="#uploadtask"><code>UploadTask</code></a></td></tr><tr><td align="left"><a id="totalbytes"></a> <code>totalBytes</code></td><td align="left"><code>readonly</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1082
1211
  <h2 id="type-aliases">Type Aliases</h2>
1083
1212
  <p><a id="provisionstorageerrorcode"></a></p>
1084
1213
  <h3 id="provisionstorageerrorcode">ProvisionStorageErrorCode</h3>
@@ -1128,7 +1257,8 @@ evaluation error that denies (see RuleError).</p>
1128
1257
  <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"unauthorized"</span></span>
1129
1258
  <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"invalid-root-operation"</span></span>
1130
1259
  <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"invalid-format"</span></span>
1131
- <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"invalid-argument"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1260
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"invalid-argument"</span></span>
1261
+ <span class="line"><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"canceled"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1132
1262
  <p>The unprefixed storage error codes the sandbox can raise. Mirrors
1133
1263
  the subset of <code>StorageErrorCode</code> used by currently implemented operations.</p>
1134
1264
  <hr>
@@ -1170,6 +1300,14 @@ delete → delete</p>
1170
1300
  <p><a id="target"></a></p>
1171
1301
  <h3 id="target">Target</h3>
1172
1302
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> Target</span><span style="color:#56B6C2"> =</span><span style="color:#E5C07B"> SandboxTarget</span><span style="color:#ABB2BF">;</span></span></code></pre>
1303
+ <hr>
1304
+ <p><a id="taskevent"></a></p>
1305
+ <h3 id="taskevent">TaskEvent</h3>
1306
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> TaskEvent</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "state_changed"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1307
+ <hr>
1308
+ <p><a id="taskstate"></a></p>
1309
+ <h3 id="taskstate">TaskState</h3>
1310
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">type</span><span style="color:#E5C07B"> TaskState</span><span style="color:#56B6C2"> =</span><span style="color:#98C379"> "running"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"paused"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"success"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"canceled"</span><span style="color:#ABB2BF"> | </span><span style="color:#98C379">"error"</span><span style="color:#ABB2BF">;</span></span></code></pre>
1173
1311
  <h2 id="variables">Variables</h2>
1174
1312
  <p><a id="target_symbol-1"></a></p>
1175
1313
  <h3 id="target_symbol">TARGET_SYMBOL</h3>
@@ -1189,7 +1327,7 @@ the existing record. The bucket must already exist as a GCS
1189
1327
  resource; for the default Firebase bucket name
1190
1328
  (<code>{projectId}.firebasestorage.app</code>), Firebase auto-creates it on
1191
1329
  first <code>:addFirebase</code> call.</p>
1192
- <h4 id="parameters-6">Parameters</h4>
1330
+ <h4 id="parameters-7">Parameters</h4>
1193
1331
  <div class="table-scroll">
1194
1332
 
1195
1333
 
@@ -1212,7 +1350,7 @@ first <code>:addFirebase</code> call.</p>
1212
1350
 
1213
1351
 
1214
1352
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>bucketId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1215
- <h4 id="returns-9">Returns</h4>
1353
+ <h4 id="returns-14">Returns</h4>
1216
1354
  <p><code>Promise</code>&#x3C;<a href="#firebasestoragebucket"><code>FirebaseStorageBucket</code></a>></p>
1217
1355
  <hr>
1218
1356
  <p><a id="connectstorageemulator"></a></p>
@@ -1225,7 +1363,7 @@ first <code>:addFirebase</code> call.</p>
1225
1363
  <span class="line"><span style="color:#E06C75"> mockUserToken</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">Record</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E5C07B">unknown</span><span style="color:#ABB2BF">>;</span></span>
1226
1364
  <span class="line"><span style="color:#ABB2BF">}): </span><span style="color:#E5C07B">void</span><span style="color:#ABB2BF">;</span></span></code></pre>
1227
1365
  <p>Accepted no-op because the selected Storage backend already is local.</p>
1228
- <h4 id="parameters-7">Parameters</h4>
1366
+ <h4 id="parameters-8">Parameters</h4>
1229
1367
  <div class="table-scroll">
1230
1368
 
1231
1369
 
@@ -1256,7 +1394,7 @@ first <code>:addFirebase</code> call.</p>
1256
1394
 
1257
1395
 
1258
1396
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>_storage</code></td><td align="left"><a href="#firebasestorage"><code>FirebaseStorage</code></a></td></tr><tr><td align="left"><code>_host</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>_port</code></td><td align="left"><code>number</code></td></tr><tr><td align="left"><code>_options?</code></td><td align="left">{ <code>mockUserToken?</code>: <code>string</code> | <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>>; }</td></tr><tr><td align="left"><code>_options.mockUserToken?</code></td><td align="left"><code>string</code> | <code>Record</code>&#x3C;<code>string</code>, <code>unknown</code>></td></tr></tbody></table></div>
1259
- <h4 id="returns-10">Returns</h4>
1397
+ <h4 id="returns-15">Returns</h4>
1260
1398
  <p><code>void</code></p>
1261
1399
  <hr>
1262
1400
  <p><a id="createstorageadmintools"></a></p>
@@ -1267,7 +1405,7 @@ first <code>:addFirebase</code> call.</p>
1267
1405
  <li><code>storage_get_status</code></li>
1268
1406
  <li><code>storage_provision</code></li>
1269
1407
  </ul>
1270
- <h4 id="parameters-8">Parameters</h4>
1408
+ <h4 id="parameters-9">Parameters</h4>
1271
1409
  <div class="table-scroll">
1272
1410
 
1273
1411
 
@@ -1282,7 +1420,7 @@ first <code>:addFirebase</code> call.</p>
1282
1420
 
1283
1421
 
1284
1422
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>deps</code></td><td align="left"><a href="#storageadmintooldeps"><code>StorageAdminToolDeps</code></a></td></tr></tbody></table></div>
1285
- <h4 id="returns-11">Returns</h4>
1423
+ <h4 id="returns-16">Returns</h4>
1286
1424
  <p><code>ToolHandler</code>&#x3C;<code>unknown</code>, <code>unknown</code>>[]</p>
1287
1425
  <hr>
1288
1426
  <p><a id="defaultplaygroundcors"></a></p>
@@ -1294,7 +1432,7 @@ Allows GET/POST/PUT/DELETE/HEAD/OPTIONS from the Hosting origin</p>
1294
1432
  <li>common localhost dev ports, with response headers needed by the
1295
1433
  Firebase Storage Web SDK.</li>
1296
1434
  </ul>
1297
- <h4 id="parameters-9">Parameters</h4>
1435
+ <h4 id="parameters-10">Parameters</h4>
1298
1436
  <div class="table-scroll">
1299
1437
 
1300
1438
 
@@ -1309,7 +1447,7 @@ Firebase Storage Web SDK.</li>
1309
1447
 
1310
1448
 
1311
1449
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>hostingOrigin</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1312
- <h4 id="returns-12">Returns</h4>
1450
+ <h4 id="returns-17">Returns</h4>
1313
1451
  <p><a href="#corsrule"><code>CorsRule</code></a>[]</p>
1314
1452
  <hr>
1315
1453
  <p><a id="deleteobject"></a></p>
@@ -1326,7 +1464,7 @@ reconsider whether to mirror the strict throw.</p>
1326
1464
  threaded EXPLICITLY onto the emitted <code>object_delete</code> event. The delete
1327
1465
  awaits the backend before emitting, so it escapes the sandbox’s
1328
1466
  synchronous ambient-provenance window — see the note on <code>uploadBytes</code>.</p>
1329
- <h4 id="parameters-10">Parameters</h4>
1467
+ <h4 id="parameters-11">Parameters</h4>
1330
1468
  <div class="table-scroll">
1331
1469
 
1332
1470
 
@@ -1345,7 +1483,7 @@ synchronous ambient-provenance window — see the note on <code>uploadBytes</cod
1345
1483
 
1346
1484
 
1347
1485
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>provenance?</code></td><td align="left"><a href="/docs/pyric-sandbox-reference-api/#eventprovenance"><code>EventProvenance</code></a></td></tr></tbody></table></div>
1348
- <h4 id="returns-13">Returns</h4>
1486
+ <h4 id="returns-18">Returns</h4>
1349
1487
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
1350
1488
  <hr>
1351
1489
  <p><a id="deploystoragerules"></a></p>
@@ -1367,7 +1505,7 @@ unchanged.</p>
1367
1505
  <p>Defaults <code>bucketId</code> to <code>{projectId}.firebasestorage.app</code> (the
1368
1506
  Firebase default bucket name). Pass an override when targeting a
1369
1507
  non-default bucket.</p>
1370
- <h4 id="parameters-11">Parameters</h4>
1508
+ <h4 id="parameters-12">Parameters</h4>
1371
1509
  <div class="table-scroll">
1372
1510
 
1373
1511
 
@@ -1394,7 +1532,7 @@ non-default bucket.</p>
1394
1532
 
1395
1533
 
1396
1534
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>source</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>bucketId?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1397
- <h4 id="returns-14">Returns</h4>
1535
+ <h4 id="returns-19">Returns</h4>
1398
1536
  <p><code>Promise</code>&#x3C;{
1399
1537
  <code>rulesetName</code>: <code>string</code>;
1400
1538
  }></p>
@@ -1412,7 +1550,7 @@ the elevated role.</p>
1412
1550
  <p>Long-running operation under the hood; the response carries an
1413
1551
  operation name. We don’t poll — the response 200 is enough signal
1414
1552
  for our purposes, and a brief settle delay handles propagation.</p>
1415
- <h4 id="parameters-12">Parameters</h4>
1553
+ <h4 id="parameters-13">Parameters</h4>
1416
1554
  <div class="table-scroll">
1417
1555
 
1418
1556
 
@@ -1431,7 +1569,7 @@ for our purposes, and a brief settle delay handles propagation.</p>
1431
1569
 
1432
1570
 
1433
1571
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1434
- <h4 id="returns-15">Returns</h4>
1572
+ <h4 id="returns-20">Returns</h4>
1435
1573
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
1436
1574
  <hr>
1437
1575
  <p><a id="evaluatestoragerules"></a></p>
@@ -1441,7 +1579,7 @@ for our purposes, and a brief settle delay handles propagation.</p>
1441
1579
  <span class="line"><span style="color:#E06C75;font-style:italic"> input</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">EvaluationInput</span><span style="color:#ABB2BF">,</span></span>
1442
1580
  <span class="line"><span style="color:#E06C75;font-style:italic"> now</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">Date</span><span style="color:#ABB2BF">,</span></span>
1443
1581
  <span class="line"><span style="color:#E06C75;font-style:italic"> firestoreLookup</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FirestoreLookup</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">EvaluationResult</span><span style="color:#ABB2BF">;</span></span></code></pre>
1444
- <h4 id="parameters-13">Parameters</h4>
1582
+ <h4 id="parameters-14">Parameters</h4>
1445
1583
  <div class="table-scroll">
1446
1584
 
1447
1585
 
@@ -1468,7 +1606,7 @@ for our purposes, and a brief settle delay handles propagation.</p>
1468
1606
 
1469
1607
 
1470
1608
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>rules</code></td><td align="left"><a href="#storagerules"><code>StorageRules</code></a></td></tr><tr><td align="left"><code>input</code></td><td align="left"><a href="#evaluationinput"><code>EvaluationInput</code></a></td></tr><tr><td align="left"><code>now?</code></td><td align="left"><code>Date</code></td></tr><tr><td align="left"><code>firestoreLookup?</code></td><td align="left"><a href="#firestorelookup"><code>FirestoreLookup</code></a></td></tr></tbody></table></div>
1471
- <h4 id="returns-16">Returns</h4>
1609
+ <h4 id="returns-21">Returns</h4>
1472
1610
  <p><a href="#evaluationresult"><code>EvaluationResult</code></a></p>
1473
1611
  <hr>
1474
1612
  <p><a id="finalizedefaultlocation"></a></p>
@@ -1483,7 +1621,7 @@ caller’s job; this function unconditionally calls <code>:finalize</code>.</p>
1483
1621
  <p>Per observed behavior, <code>:finalize</code> 404s on projects that already
1484
1622
  have resources provisioned (RTDB, Hosting) without a default
1485
1623
  location. The error path surfaces that to the caller.</p>
1486
- <h4 id="parameters-14">Parameters</h4>
1624
+ <h4 id="parameters-15">Parameters</h4>
1487
1625
  <div class="table-scroll">
1488
1626
 
1489
1627
 
@@ -1506,7 +1644,7 @@ location. The error path surfaces that to the caller.</p>
1506
1644
 
1507
1645
 
1508
1646
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>locationId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1509
- <h4 id="returns-17">Returns</h4>
1647
+ <h4 id="returns-22">Returns</h4>
1510
1648
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
1511
1649
  <hr>
1512
1650
  <p><a id="getblob"></a></p>
@@ -1518,7 +1656,7 @@ caller wants a <code>Blob</code> directly (e.g. for streaming or
1518
1656
  <code>URL.createObjectURL</code>). Note: this is the browser-side
1519
1657
  counterpart of the JS SDK’s <code>getBlob</code> — the v1 scope doesn’t ship
1520
1658
  a Node-stream variant.</p>
1521
- <h4 id="parameters-15">Parameters</h4>
1659
+ <h4 id="parameters-16">Parameters</h4>
1522
1660
  <div class="table-scroll">
1523
1661
 
1524
1662
 
@@ -1537,14 +1675,14 @@ a Node-stream variant.</p>
1537
1675
 
1538
1676
 
1539
1677
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>maxDownloadSizeBytes?</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1540
- <h4 id="returns-18">Returns</h4>
1678
+ <h4 id="returns-23">Returns</h4>
1541
1679
  <p><code>Promise</code>&#x3C;<code>Blob</code>></p>
1542
1680
  <hr>
1543
1681
  <p><a id="getbucketcors"></a></p>
1544
1682
  <h3 id="getbucketcors">getBucketCors()</h3>
1545
1683
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> getBucketCors</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">accessToken</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">bucketId</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">Promise</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">CorsRule</span><span style="color:#ABB2BF">[]>;</span></span></code></pre>
1546
1684
  <p>Read the current CORS configuration for a bucket.</p>
1547
- <h4 id="parameters-16">Parameters</h4>
1685
+ <h4 id="parameters-17">Parameters</h4>
1548
1686
  <div class="table-scroll">
1549
1687
 
1550
1688
 
@@ -1563,7 +1701,7 @@ a Node-stream variant.</p>
1563
1701
 
1564
1702
 
1565
1703
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>bucketId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1566
- <h4 id="returns-19">Returns</h4>
1704
+ <h4 id="returns-24">Returns</h4>
1567
1705
  <p><code>Promise</code>&#x3C;<a href="#corsrule"><code>CorsRule</code></a>[]></p>
1568
1706
  <hr>
1569
1707
  <p><a id="getbytes"></a></p>
@@ -1572,7 +1710,7 @@ a Node-stream variant.</p>
1572
1710
  <p>Read the blob at <code>ref</code> and return its contents as an
1573
1711
  <code>ArrayBuffer</code>. Honors the optional <code>maxDownloadSizeBytes</code> cap by
1574
1712
  truncating to that length.</p>
1575
- <h4 id="parameters-17">Parameters</h4>
1713
+ <h4 id="parameters-18">Parameters</h4>
1576
1714
  <div class="table-scroll">
1577
1715
 
1578
1716
 
@@ -1591,7 +1729,7 @@ truncating to that length.</p>
1591
1729
 
1592
1730
 
1593
1731
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>maxDownloadSizeBytes?</code></td><td align="left"><code>number</code></td></tr></tbody></table></div>
1594
- <h4 id="returns-20">Returns</h4>
1732
+ <h4 id="returns-25">Returns</h4>
1595
1733
  <p><code>Promise</code>&#x3C;<code>ArrayBuffer</code>></p>
1596
1734
  <hr>
1597
1735
  <p><a id="getdefaultlocation"></a></p>
@@ -1600,7 +1738,7 @@ truncating to that length.</p>
1600
1738
  <p>Read the project’s current default GCP resources location. Returns
1601
1739
  null when the project hasn’t been finalized yet — e.g. brand-new
1602
1740
  Firebase projects with no resources. <code>firebase</code> scope is sufficient.</p>
1603
- <h4 id="parameters-18">Parameters</h4>
1741
+ <h4 id="parameters-19">Parameters</h4>
1604
1742
  <div class="table-scroll">
1605
1743
 
1606
1744
 
@@ -1619,7 +1757,7 @@ Firebase projects with no resources. <code>firebase</code> scope is sufficient.<
1619
1757
 
1620
1758
 
1621
1759
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1622
- <h4 id="returns-21">Returns</h4>
1760
+ <h4 id="returns-26">Returns</h4>
1623
1761
  <p><code>Promise</code>&#x3C;<code>string</code>></p>
1624
1762
  <hr>
1625
1763
  <p><a id="getdownloadurl"></a></p>
@@ -1629,7 +1767,7 @@ Firebase projects with no resources. <code>firebase</code> scope is sufficient.<
1629
1767
  created from the same rules-checked blob as <a href="#getblob">getBlob</a>. It is a
1630
1768
  snapshot, cannot be shared outside the page, and stays
1631
1769
  alive until the caller revokes it or the page unloads.</p>
1632
- <h4 id="parameters-19">Parameters</h4>
1770
+ <h4 id="parameters-20">Parameters</h4>
1633
1771
  <div class="table-scroll">
1634
1772
 
1635
1773
 
@@ -1644,7 +1782,7 @@ alive until the caller revokes it or the page unloads.</p>
1644
1782
 
1645
1783
 
1646
1784
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr></tbody></table></div>
1647
- <h4 id="returns-22">Returns</h4>
1785
+ <h4 id="returns-27">Returns</h4>
1648
1786
  <p><code>Promise</code>&#x3C;<code>string</code>></p>
1649
1787
  <hr>
1650
1788
  <p><a id="getmetadata"></a></p>
@@ -1656,7 +1794,7 @@ exists at the path (<code>storage/object-not-found</code>).</p>
1656
1794
  <code>FullMetadata</code> shape <code>uploadBytes</code> produced — server-set fields
1657
1795
  pinned at upload time, client-settable fields whatever the latest
1658
1796
  write left them as.</p>
1659
- <h4 id="parameters-20">Parameters</h4>
1797
+ <h4 id="parameters-21">Parameters</h4>
1660
1798
  <div class="table-scroll">
1661
1799
 
1662
1800
 
@@ -1671,14 +1809,14 @@ write left them as.</p>
1671
1809
 
1672
1810
 
1673
1811
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr></tbody></table></div>
1674
- <h4 id="returns-23">Returns</h4>
1812
+ <h4 id="returns-28">Returns</h4>
1675
1813
  <p><code>Promise</code>&#x3C;<a href="#fullmetadata"><code>FullMetadata</code></a>></p>
1676
1814
  <hr>
1677
1815
  <p><a id="getstorage"></a></p>
1678
1816
  <h3 id="getstorage">getStorage()</h3>
1679
1817
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> getStorage</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">app</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FirebaseApp</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">bucketUrl</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">AppFirebaseStorage</span><span style="color:#ABB2BF">;</span></span></code></pre>
1680
1818
  <p>Resolve the Firebase-shaped Storage service associated with an app.</p>
1681
- <h4 id="parameters-21">Parameters</h4>
1819
+ <h4 id="parameters-22">Parameters</h4>
1682
1820
  <div class="table-scroll">
1683
1821
 
1684
1822
 
@@ -1697,7 +1835,7 @@ write left them as.</p>
1697
1835
 
1698
1836
 
1699
1837
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>app?</code></td><td align="left"><a href="/docs/pyric-app-reference-api/#firebaseapp"><code>FirebaseApp</code></a></td></tr><tr><td align="left"><code>bucketUrl?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1700
- <h4 id="returns-24">Returns</h4>
1838
+ <h4 id="returns-29">Returns</h4>
1701
1839
  <p><code>AppFirebaseStorage</code></p>
1702
1840
  <hr>
1703
1841
  <p><a id="getstoragesandbox"></a></p>
@@ -1709,7 +1847,7 @@ write left them as.</p>
1709
1847
  handle. Accepts either a bare <code>Sandbox</code> (anonymous identity wired
1710
1848
  up via <code>sandbox.withAuth(null)</code>) or an explicit <code>SandboxContext</code>.
1711
1849
  Idempotent on <code>SandboxContext</code> identity.</p>
1712
- <h4 id="parameters-22">Parameters</h4>
1850
+ <h4 id="parameters-23">Parameters</h4>
1713
1851
  <div class="table-scroll">
1714
1852
 
1715
1853
 
@@ -1728,7 +1866,7 @@ Idempotent on <code>SandboxContext</code> identity.</p>
1728
1866
 
1729
1867
 
1730
1868
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>target</code></td><td align="left">| <a href="/docs/pyric-firestore-reference-api/#sandbox"><code>Sandbox</code></a> | <a href="/docs/pyric-firestore-reference-api/#sandboxcontext"><code>SandboxContext</code></a></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#storageoptions"><code>StorageOptions</code></a></td></tr></tbody></table></div>
1731
- <h4 id="returns-25">Returns</h4>
1869
+ <h4 id="returns-30">Returns</h4>
1732
1870
  <p><a href="#firebasestorage"><code>FirebaseStorage</code></a></p>
1733
1871
  <hr>
1734
1872
  <p><a id="getstorageservicestate"></a></p>
@@ -1740,7 +1878,7 @@ enabled on the project. Cheap, uses Service Usage <code>GET</code>. Requires
1740
1878
  SDK SA has this; user OAuth tokens with <code>firebase</code> scope do not).</p>
1741
1879
  <p>Returns <code>'unknown'</code> on permission failures so callers can downgrade
1742
1880
  to “try the operation; observe SERVICE_DISABLED” rather than block.</p>
1743
- <h4 id="parameters-23">Parameters</h4>
1881
+ <h4 id="parameters-24">Parameters</h4>
1744
1882
  <div class="table-scroll">
1745
1883
 
1746
1884
 
@@ -1759,7 +1897,7 @@ to “try the operation; observe SERVICE_DISABLED” rather than block.</p>
1759
1897
 
1760
1898
 
1761
1899
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1762
- <h4 id="returns-26">Returns</h4>
1900
+ <h4 id="returns-31">Returns</h4>
1763
1901
  <p><code>Promise</code>&#x3C;<a href="#serviceenablestate"><code>ServiceEnableState</code></a>></p>
1764
1902
  <hr>
1765
1903
  <p><a id="listall"></a></p>
@@ -1768,7 +1906,7 @@ to “try the operation; observe SERVICE_DISABLED” rather than block.</p>
1768
1906
  <p>Enumerate every immediate child item + sub-prefix under <code>refIn</code>.
1769
1907
  Works on the root reference too — pass <code>ref(storage)</code> to scan the
1770
1908
  whole bucket.</p>
1771
- <h4 id="parameters-24">Parameters</h4>
1909
+ <h4 id="parameters-25">Parameters</h4>
1772
1910
  <div class="table-scroll">
1773
1911
 
1774
1912
 
@@ -1783,7 +1921,7 @@ whole bucket.</p>
1783
1921
 
1784
1922
 
1785
1923
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>refIn</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr></tbody></table></div>
1786
- <h4 id="returns-27">Returns</h4>
1924
+ <h4 id="returns-32">Returns</h4>
1787
1925
  <p><code>Promise</code>&#x3C;<a href="#listresult"><code>ListResult</code></a>></p>
1788
1926
  <hr>
1789
1927
  <p><a id="listfirebasebuckets"></a></p>
@@ -1793,7 +1931,7 @@ whole bucket.</p>
1793
1931
  empty list when none exist yet. Throws when the underlying service
1794
1932
  is disabled — callers should check <code>getStorageServiceState</code> first
1795
1933
  if they want to distinguish.</p>
1796
- <h4 id="parameters-25">Parameters</h4>
1934
+ <h4 id="parameters-26">Parameters</h4>
1797
1935
  <div class="table-scroll">
1798
1936
 
1799
1937
 
@@ -1812,7 +1950,7 @@ if they want to distinguish.</p>
1812
1950
 
1813
1951
 
1814
1952
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1815
- <h4 id="returns-28">Returns</h4>
1953
+ <h4 id="returns-33">Returns</h4>
1816
1954
  <p><code>Promise</code>&#x3C;<a href="#firebasestoragebucket"><code>FirebaseStorageBucket</code></a>[]></p>
1817
1955
  <hr>
1818
1956
  <p><a id="parsestoragerules"></a></p>
@@ -1821,7 +1959,7 @@ if they want to distinguish.</p>
1821
1959
  <p>Parse a Storage rules source into an opaque handle. Throws
1822
1960
  <code>SyntaxError</code> on malformed input. Used by Slice 8’s
1823
1961
  <code>getStorage(ctx, { rules })</code> to validate upfront.</p>
1824
- <h4 id="parameters-26">Parameters</h4>
1962
+ <h4 id="parameters-27">Parameters</h4>
1825
1963
  <div class="table-scroll">
1826
1964
 
1827
1965
 
@@ -1836,7 +1974,7 @@ if they want to distinguish.</p>
1836
1974
 
1837
1975
 
1838
1976
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>source</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1839
- <h4 id="returns-29">Returns</h4>
1977
+ <h4 id="returns-34">Returns</h4>
1840
1978
  <p><a href="#storagerules"><code>StorageRules</code></a></p>
1841
1979
  <hr>
1842
1980
  <p><a id="provisionstorage"></a></p>
@@ -1858,7 +1996,7 @@ enabled)</li>
1858
1996
  <p>The handler throws <code>StorageProvisioningError</code> with the
1859
1997
  underlying <code>reason</code> (e.g. <code>AUTH_PERMISSION_DENIED</code>,
1860
1998
  <code>SERVICE_DISABLED</code>) so the caller can route to actionable UX.</p>
1861
- <h4 id="parameters-27">Parameters</h4>
1999
+ <h4 id="parameters-28">Parameters</h4>
1862
2000
  <div class="table-scroll">
1863
2001
 
1864
2002
 
@@ -1881,17 +2019,17 @@ underlying <code>reason</code> (e.g. <code>AUTH_PERMISSION_DENIED</code>,
1881
2019
 
1882
2020
 
1883
2021
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>projectId</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>options?</code></td><td align="left"><a href="#provisionstorageoptions"><code>ProvisionStorageOptions</code></a></td></tr></tbody></table></div>
1884
- <h4 id="returns-30">Returns</h4>
2022
+ <h4 id="returns-35">Returns</h4>
1885
2023
  <p><code>Promise</code>&#x3C;<a href="#provisionstorageresult"><code>ProvisionStorageResult</code></a>></p>
1886
2024
  <hr>
1887
- <p><a id="ref-1"></a></p>
2025
+ <p><a id="ref-2"></a></p>
1888
2026
  <h3 id="ref">ref()</h3>
1889
2027
  <h4 id="call-signature">Call Signature</h4>
1890
2028
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ref</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">storage</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">FirebaseStorage</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">path</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">StorageReference</span><span style="color:#ABB2BF">;</span></span></code></pre>
1891
2029
  <p>Construct a reference. Two overloads matching Firebase:</p>
1892
2030
  <p><code>ref(storage, path?)</code> — <code>path</code> is bucket-rooted. Omit for root.
1893
2031
  <code>ref(parent, path)</code> — <code>path</code> is relative to <code>parent.fullPath</code>.</p>
1894
- <h5 id="parameters-28">Parameters</h5>
2032
+ <h5 id="parameters-29">Parameters</h5>
1895
2033
  <div class="table-scroll">
1896
2034
 
1897
2035
 
@@ -1910,14 +2048,14 @@ underlying <code>reason</code> (e.g. <code>AUTH_PERMISSION_DENIED</code>,
1910
2048
 
1911
2049
 
1912
2050
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>storage</code></td><td align="left"><a href="#firebasestorage"><code>FirebaseStorage</code></a></td></tr><tr><td align="left"><code>path?</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1913
- <h5 id="returns-31">Returns</h5>
2051
+ <h5 id="returns-36">Returns</h5>
1914
2052
  <p><a href="#storagereference"><code>StorageReference</code></a></p>
1915
2053
  <h4 id="call-signature-1">Call Signature</h4>
1916
2054
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> ref</span><span style="color:#ABB2BF">(</span><span style="color:#E06C75;font-style:italic">parent</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">StorageReference</span><span style="color:#ABB2BF">, </span><span style="color:#E06C75;font-style:italic">path</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">string</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">StorageReference</span><span style="color:#ABB2BF">;</span></span></code></pre>
1917
2055
  <p>Construct a reference. Two overloads matching Firebase:</p>
1918
2056
  <p><code>ref(storage, path?)</code> — <code>path</code> is bucket-rooted. Omit for root.
1919
2057
  <code>ref(parent, path)</code> — <code>path</code> is relative to <code>parent.fullPath</code>.</p>
1920
- <h5 id="parameters-29">Parameters</h5>
2058
+ <h5 id="parameters-30">Parameters</h5>
1921
2059
  <div class="table-scroll">
1922
2060
 
1923
2061
 
@@ -1936,7 +2074,7 @@ underlying <code>reason</code> (e.g. <code>AUTH_PERMISSION_DENIED</code>,
1936
2074
 
1937
2075
 
1938
2076
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>parent</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>path</code></td><td align="left"><code>string</code></td></tr></tbody></table></div>
1939
- <h5 id="returns-32">Returns</h5>
2077
+ <h5 id="returns-37">Returns</h5>
1940
2078
  <p><a href="#storagereference"><code>StorageReference</code></a></p>
1941
2079
  <hr>
1942
2080
  <p><a id="setbucketcors"></a></p>
@@ -1948,7 +2086,7 @@ underlying <code>reason</code> (e.g. <code>AUTH_PERMISSION_DENIED</code>,
1948
2086
  <p>Replace the bucket’s CORS configuration. Pass an empty array to
1949
2087
  clear all rules. The GCS API replaces (not merges) the cors field
1950
2088
  on PATCH.</p>
1951
- <h4 id="parameters-30">Parameters</h4>
2089
+ <h4 id="parameters-31">Parameters</h4>
1952
2090
  <div class="table-scroll">
1953
2091
 
1954
2092
 
@@ -1971,7 +2109,7 @@ on PATCH.</p>
1971
2109
 
1972
2110
 
1973
2111
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>accessToken</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>bucketId</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>cors</code></td><td align="left"><a href="#corsrule"><code>CorsRule</code></a>[]</td></tr></tbody></table></div>
1974
- <h4 id="returns-33">Returns</h4>
2112
+ <h4 id="returns-38">Returns</h4>
1975
2113
  <p><code>Promise</code>&#x3C;<code>void</code>></p>
1976
2114
  <hr>
1977
2115
  <p><a id="updatemetadata"></a></p>
@@ -1992,7 +2130,7 @@ Documented for Slice 9’s deferred-features section.</p>
1992
2130
  threaded EXPLICITLY onto the emitted <code>metadata_update</code> event. Emit runs
1993
2131
  after the backend awaits, escaping the sandbox’s synchronous
1994
2132
  ambient-provenance window — see the note on <code>uploadBytes</code>.</p>
1995
- <h4 id="parameters-31">Parameters</h4>
2133
+ <h4 id="parameters-32">Parameters</h4>
1996
2134
  <div class="table-scroll">
1997
2135
 
1998
2136
 
@@ -2015,7 +2153,7 @@ ambient-provenance window — see the note on <code>uploadBytes</code>.</p>
2015
2153
 
2016
2154
 
2017
2155
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>patch</code></td><td align="left"><a href="#settablemetadata"><code>SettableMetadata</code></a></td></tr><tr><td align="left"><code>provenance?</code></td><td align="left"><a href="/docs/pyric-sandbox-reference-api/#eventprovenance"><code>EventProvenance</code></a></td></tr></tbody></table></div>
2018
- <h4 id="returns-34">Returns</h4>
2156
+ <h4 id="returns-39">Returns</h4>
2019
2157
  <p><code>Promise</code>&#x3C;<a href="#fullmetadata"><code>FullMetadata</code></a>></p>
2020
2158
  <hr>
2021
2159
  <p><a id="uploadbytes"></a></p>
@@ -2036,7 +2174,7 @@ handle before the first await. The optional <code>provenance</code> argument rem
2036
2174
  as a compatibility override for internal callers. Either way, concurrent
2037
2175
  uploads cannot exchange source or auth-lens identity, and
2038
2176
  <code>service: 'storage'</code> always wins.</p>
2039
- <h4 id="parameters-32">Parameters</h4>
2177
+ <h4 id="parameters-33">Parameters</h4>
2040
2178
  <div class="table-scroll">
2041
2179
 
2042
2180
 
@@ -2063,9 +2201,48 @@ uploads cannot exchange source or auth-lens identity, and
2063
2201
 
2064
2202
 
2065
2203
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>data</code></td><td align="left"><code>ArrayBuffer</code> | <code>Uint8Array</code>&#x3C;<code>ArrayBufferLike</code>> | <code>Blob</code></td></tr><tr><td align="left"><code>metadata?</code></td><td align="left"><a href="#settablemetadata"><code>SettableMetadata</code></a></td></tr><tr><td align="left"><code>provenance?</code></td><td align="left"><a href="/docs/pyric-sandbox-reference-api/#eventprovenance"><code>EventProvenance</code></a></td></tr></tbody></table></div>
2066
- <h4 id="returns-35">Returns</h4>
2204
+ <h4 id="returns-40">Returns</h4>
2067
2205
  <p><code>Promise</code>&#x3C;<a href="#uploadresult"><code>UploadResult</code></a>></p>
2068
2206
  <hr>
2207
+ <p><a id="uploadbytesresumable"></a></p>
2208
+ <h3 id="uploadbytesresumable">uploadBytesResumable()</h3>
2209
+ <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> uploadBytesResumable</span><span style="color:#ABB2BF">(</span></span>
2210
+ <span class="line"><span style="color:#E06C75;font-style:italic"> ref</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">StorageReference</span><span style="color:#ABB2BF">,</span></span>
2211
+ <span class="line"><span style="color:#E06C75;font-style:italic"> data</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">ArrayBuffer</span><span style="color:#ABB2BF"> | </span><span style="color:#E5C07B">Uint8Array</span><span style="color:#ABB2BF">&#x3C;</span><span style="color:#E5C07B">ArrayBufferLike</span><span style="color:#ABB2BF">> | </span><span style="color:#E5C07B">Blob</span><span style="color:#ABB2BF">,</span></span>
2212
+ <span class="line"><span style="color:#E06C75;font-style:italic"> metadata</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">SettableMetadata</span><span style="color:#ABB2BF">,</span></span>
2213
+ <span class="line"><span style="color:#E06C75;font-style:italic"> provenance</span><span style="color:#C678DD">?</span><span style="color:#ABB2BF">: </span><span style="color:#E5C07B">EventProvenance</span><span style="color:#ABB2BF">): </span><span style="color:#E5C07B">UploadTask</span><span style="color:#ABB2BF">;</span></span></code></pre>
2214
+ <p>Start a resumable upload of <code>data</code> to <code>ref</code>. Returns an <code>UploadTask</code> that emits
2215
+ synthetic progress events over microtasks before completing the storage write.</p>
2216
+ <h4 id="parameters-34">Parameters</h4>
2217
+ <div class="table-scroll">
2218
+
2219
+
2220
+
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+ <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>data</code></td><td align="left"><code>ArrayBuffer</code> | <code>Uint8Array</code>&#x3C;<code>ArrayBufferLike</code>> | <code>Blob</code></td></tr><tr><td align="left"><code>metadata?</code></td><td align="left"><a href="#settablemetadata"><code>SettableMetadata</code></a></td></tr><tr><td align="left"><code>provenance?</code></td><td align="left"><a href="/docs/pyric-sandbox-reference-api/#eventprovenance"><code>EventProvenance</code></a></td></tr></tbody></table></div>
2243
+ <h4 id="returns-41">Returns</h4>
2244
+ <p><a href="#uploadtask"><code>UploadTask</code></a></p>
2245
+ <hr>
2069
2246
  <p><a id="uploadstring"></a></p>
2070
2247
  <h3 id="uploadstring">uploadString()</h3>
2071
2248
  <pre class="astro-code one-dark-pro" style="background-color:#282c34;color:#abb2bf; overflow-x: auto;" tabindex="0" data-language="ts"><code><span class="line"><span style="color:#C678DD">function</span><span style="color:#61AFEF"> uploadString</span><span style="color:#ABB2BF">(</span></span>
@@ -2083,7 +2260,7 @@ specify one.</li>
2083
2260
  <li><code>data_url</code>: a <code>data:</code> URL — the MIME prefix is honored as
2084
2261
  <code>contentType</code> unless the caller overrides it explicitly.</li>
2085
2262
  </ul>
2086
- <h4 id="parameters-33">Parameters</h4>
2263
+ <h4 id="parameters-35">Parameters</h4>
2087
2264
  <div class="table-scroll">
2088
2265
 
2089
2266
 
@@ -2114,5 +2291,5 @@ specify one.</li>
2114
2291
 
2115
2292
 
2116
2293
  <table><thead><tr><th align="left">Parameter</th><th align="left">Type</th></tr></thead><tbody><tr><td align="left"><code>ref</code></td><td align="left"><a href="#storagereference"><code>StorageReference</code></a></td></tr><tr><td align="left"><code>value</code></td><td align="left"><code>string</code></td></tr><tr><td align="left"><code>format?</code></td><td align="left"><a href="#stringformat"><code>StringFormat</code></a></td></tr><tr><td align="left"><code>metadata?</code></td><td align="left"><a href="#settablemetadata"><code>SettableMetadata</code></a></td></tr><tr><td align="left"><code>provenance?</code></td><td align="left"><a href="/docs/pyric-sandbox-reference-api/#eventprovenance"><code>EventProvenance</code></a></td></tr></tbody></table></div>
2117
- <h4 id="returns-36">Returns</h4>
2118
- <p><code>Promise</code>&#x3C;<a href="#uploadresult"><code>UploadResult</code></a>></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter data-astro-cid-mw7aashj> <div class="api-symbol-groups" data-api-symbol-groups data-astro-cid-mw7aashj> <section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#classes" data-astro-cid-mw7aashj> Classes </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="inspectstoragehandler" data-astro-cid-mw7aashj> <a href="#inspectstoragehandler" data-astro-cid-mw7aashj>InspectStorageHandler</a> </li><li data-api-symbol="provisionstoragehandler" data-astro-cid-mw7aashj> <a href="#provisionstoragehandler" data-astro-cid-mw7aashj>ProvisionStorageHandler</a> </li><li data-api-symbol="storageerror" data-astro-cid-mw7aashj> <a href="#storageerror" data-astro-cid-mw7aashj>StorageError</a> </li><li data-api-symbol="storageprovisioningerror" data-astro-cid-mw7aashj> <a href="#storageprovisioningerror" data-astro-cid-mw7aashj>StorageProvisioningError</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#interfaces" data-astro-cid-mw7aashj> Interfaces </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="corsrule" data-astro-cid-mw7aashj> <a href="#corsrule" data-astro-cid-mw7aashj>CorsRule</a> </li><li data-api-symbol="evaluationinput" data-astro-cid-mw7aashj> <a href="#evaluationinput" data-astro-cid-mw7aashj>EvaluationInput</a> </li><li data-api-symbol="evaluationresult" data-astro-cid-mw7aashj> <a href="#evaluationresult" data-astro-cid-mw7aashj>EvaluationResult</a> </li><li data-api-symbol="firebasestorage" data-astro-cid-mw7aashj> <a href="#firebasestorage" data-astro-cid-mw7aashj>FirebaseStorage</a> </li><li data-api-symbol="firebasestoragebucket" data-astro-cid-mw7aashj> <a href="#firebasestoragebucket" data-astro-cid-mw7aashj>FirebaseStorageBucket</a> </li><li data-api-symbol="firestorelookup" data-astro-cid-mw7aashj> <a href="#firestorelookup" data-astro-cid-mw7aashj>FirestoreLookup</a> </li><li data-api-symbol="fullmetadata" data-astro-cid-mw7aashj> <a href="#fullmetadata" data-astro-cid-mw7aashj>FullMetadata</a> </li><li data-api-symbol="inspectstorageresult" data-astro-cid-mw7aashj> <a href="#inspectstorageresult" data-astro-cid-mw7aashj>InspectStorageResult</a> </li><li data-api-symbol="listresult" data-astro-cid-mw7aashj> <a href="#listresult" data-astro-cid-mw7aashj>ListResult</a> </li><li data-api-symbol="provisionstorageinput" data-astro-cid-mw7aashj> <a href="#provisionstorageinput" data-astro-cid-mw7aashj>ProvisionStorageInput</a> </li><li data-api-symbol="provisionstorageoptions" data-astro-cid-mw7aashj> <a href="#provisionstorageoptions" data-astro-cid-mw7aashj>ProvisionStorageOptions</a> </li><li data-api-symbol="provisionstorageresult" data-astro-cid-mw7aashj> <a href="#provisionstorageresult" data-astro-cid-mw7aashj>ProvisionStorageResult</a> </li><li data-api-symbol="sandboxtarget" data-astro-cid-mw7aashj> <a href="#sandboxtarget" data-astro-cid-mw7aashj>SandboxTarget</a> </li><li data-api-symbol="settablemetadata" data-astro-cid-mw7aashj> <a href="#settablemetadata" data-astro-cid-mw7aashj>SettableMetadata</a> </li><li data-api-symbol="storageadmintooldeps" data-astro-cid-mw7aashj> <a href="#storageadmintooldeps" data-astro-cid-mw7aashj>StorageAdminToolDeps</a> </li><li data-api-symbol="storageauth" data-astro-cid-mw7aashj> <a href="#storageauth" data-astro-cid-mw7aashj>StorageAuth</a> </li><li data-api-symbol="storageoptions" data-astro-cid-mw7aashj> <a href="#storageoptions" data-astro-cid-mw7aashj>StorageOptions</a> </li><li data-api-symbol="storagereference" data-astro-cid-mw7aashj> <a href="#storagereference" data-astro-cid-mw7aashj>StorageReference</a> </li><li data-api-symbol="storagerequest" data-astro-cid-mw7aashj> <a href="#storagerequest" data-astro-cid-mw7aashj>StorageRequest</a> </li><li data-api-symbol="storageresource" data-astro-cid-mw7aashj> <a href="#storageresource" data-astro-cid-mw7aashj>StorageResource</a> </li><li data-api-symbol="storagerules" data-astro-cid-mw7aashj> <a href="#storagerules" data-astro-cid-mw7aashj>StorageRules</a> </li><li data-api-symbol="uploadresult" data-astro-cid-mw7aashj> <a href="#uploadresult" data-astro-cid-mw7aashj>UploadResult</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#type-aliases" data-astro-cid-mw7aashj> Type Aliases </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="provisionstorageerrorcode" data-astro-cid-mw7aashj> <a href="#provisionstorageerrorcode" data-astro-cid-mw7aashj>ProvisionStorageErrorCode</a> </li><li data-api-symbol="provisionstorageoutcome" data-astro-cid-mw7aashj> <a href="#provisionstorageoutcome" data-astro-cid-mw7aashj>ProvisionStorageOutcome</a> </li><li data-api-symbol="serviceenablestate" data-astro-cid-mw7aashj> <a href="#serviceenablestate" data-astro-cid-mw7aashj>ServiceEnableState</a> </li><li data-api-symbol="storageerrorcode" data-astro-cid-mw7aashj> <a href="#storageerrorcode" data-astro-cid-mw7aashj>StorageErrorCode</a> </li><li data-api-symbol="storagegrantverb" data-astro-cid-mw7aashj> <a href="#storagegrantverb" data-astro-cid-mw7aashj>StorageGrantVerb</a> </li><li data-api-symbol="storagemethod" data-astro-cid-mw7aashj> <a href="#storagemethod" data-astro-cid-mw7aashj>StorageMethod</a> </li><li data-api-symbol="storagerequestmethod" data-astro-cid-mw7aashj> <a href="#storagerequestmethod" data-astro-cid-mw7aashj>StorageRequestMethod</a> </li><li data-api-symbol="storageverb" data-astro-cid-mw7aashj> <a href="#storageverb" data-astro-cid-mw7aashj>StorageVerb</a> </li><li data-api-symbol="stringformat" data-astro-cid-mw7aashj> <a href="#stringformat" data-astro-cid-mw7aashj>StringFormat</a> </li><li data-api-symbol="target" data-astro-cid-mw7aashj> <a href="#target" data-astro-cid-mw7aashj>Target</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#variables" data-astro-cid-mw7aashj> Variables </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="target_symbol" data-astro-cid-mw7aashj> <a href="#target_symbol" data-astro-cid-mw7aashj>TARGET_SYMBOL</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#functions" data-astro-cid-mw7aashj> Functions </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="addfirebasetobucket()" data-astro-cid-mw7aashj> <a href="#addfirebasetobucket" data-astro-cid-mw7aashj>addFirebaseToBucket()</a> </li><li data-api-symbol="connectstorageemulator()" data-astro-cid-mw7aashj> <a href="#connectstorageemulator" data-astro-cid-mw7aashj>connectStorageEmulator()</a> </li><li data-api-symbol="createstorageadmintools()" data-astro-cid-mw7aashj> <a href="#createstorageadmintools" data-astro-cid-mw7aashj>createStorageAdminTools()</a> </li><li data-api-symbol="defaultplaygroundcors()" data-astro-cid-mw7aashj> <a href="#defaultplaygroundcors" data-astro-cid-mw7aashj>defaultPlaygroundCors()</a> </li><li data-api-symbol="deleteobject()" data-astro-cid-mw7aashj> <a href="#deleteobject" data-astro-cid-mw7aashj>deleteObject()</a> </li><li data-api-symbol="deploystoragerules()" data-astro-cid-mw7aashj> <a href="#deploystoragerules" data-astro-cid-mw7aashj>deployStorageRules()</a> </li><li data-api-symbol="enablestorageservice()" data-astro-cid-mw7aashj> <a href="#enablestorageservice" data-astro-cid-mw7aashj>enableStorageService()</a> </li><li data-api-symbol="evaluatestoragerules()" data-astro-cid-mw7aashj> <a href="#evaluatestoragerules" data-astro-cid-mw7aashj>evaluateStorageRules()</a> </li><li data-api-symbol="finalizedefaultlocation()" data-astro-cid-mw7aashj> <a href="#finalizedefaultlocation" data-astro-cid-mw7aashj>finalizeDefaultLocation()</a> </li><li data-api-symbol="getblob()" data-astro-cid-mw7aashj> <a href="#getblob" data-astro-cid-mw7aashj>getBlob()</a> </li><li data-api-symbol="getbucketcors()" data-astro-cid-mw7aashj> <a href="#getbucketcors" data-astro-cid-mw7aashj>getBucketCors()</a> </li><li data-api-symbol="getbytes()" data-astro-cid-mw7aashj> <a href="#getbytes" data-astro-cid-mw7aashj>getBytes()</a> </li><li data-api-symbol="getdefaultlocation()" data-astro-cid-mw7aashj> <a href="#getdefaultlocation" data-astro-cid-mw7aashj>getDefaultLocation()</a> </li><li data-api-symbol="getdownloadurl()" data-astro-cid-mw7aashj> <a href="#getdownloadurl" data-astro-cid-mw7aashj>getDownloadURL()</a> </li><li data-api-symbol="getmetadata()" data-astro-cid-mw7aashj> <a href="#getmetadata" data-astro-cid-mw7aashj>getMetadata()</a> </li><li data-api-symbol="getstorage()" data-astro-cid-mw7aashj> <a href="#getstorage" data-astro-cid-mw7aashj>getStorage()</a> </li><li data-api-symbol="getstoragesandbox()" data-astro-cid-mw7aashj> <a href="#getstoragesandbox" data-astro-cid-mw7aashj>getStorageSandbox()</a> </li><li data-api-symbol="getstorageservicestate()" data-astro-cid-mw7aashj> <a href="#getstorageservicestate" data-astro-cid-mw7aashj>getStorageServiceState()</a> </li><li data-api-symbol="listall()" data-astro-cid-mw7aashj> <a href="#listall" data-astro-cid-mw7aashj>listAll()</a> </li><li data-api-symbol="listfirebasebuckets()" data-astro-cid-mw7aashj> <a href="#listfirebasebuckets" data-astro-cid-mw7aashj>listFirebaseBuckets()</a> </li><li data-api-symbol="parsestoragerules()" data-astro-cid-mw7aashj> <a href="#parsestoragerules" data-astro-cid-mw7aashj>parseStorageRules()</a> </li><li data-api-symbol="provisionstorage()" data-astro-cid-mw7aashj> <a href="#provisionstorage" data-astro-cid-mw7aashj>provisionStorage()</a> </li><li data-api-symbol="ref()" data-astro-cid-mw7aashj> <a href="#ref" data-astro-cid-mw7aashj>ref()</a> </li><li data-api-symbol="setbucketcors()" data-astro-cid-mw7aashj> <a href="#setbucketcors" data-astro-cid-mw7aashj>setBucketCors()</a> </li><li data-api-symbol="updatemetadata()" data-astro-cid-mw7aashj> <a href="#updatemetadata" data-astro-cid-mw7aashj>updateMetadata()</a> </li><li data-api-symbol="uploadbytes()" data-astro-cid-mw7aashj> <a href="#uploadbytes" data-astro-cid-mw7aashj>uploadBytes()</a> </li><li data-api-symbol="uploadstring()" data-astro-cid-mw7aashj> <a href="#uploadstring" data-astro-cid-mw7aashj>uploadString()</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden data-astro-cid-mw7aashj>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>
2294
+ <h4 id="returns-42">Returns</h4>
2295
+ <p><code>Promise</code>&#x3C;<a href="#uploadresult"><code>UploadResult</code></a>></p> </article> </main> <aside class="doc-toc api-symbols" aria-label="API symbols" data-astro-cid-mw7aashj> <h2 class="doc-toc-heading" data-astro-cid-mw7aashj>Symbols</h2> <input class="api-symbol-filter" type="search" placeholder="Filter symbols" aria-label="Filter API symbols" data-api-symbol-filter data-astro-cid-mw7aashj> <div class="api-symbol-groups" data-api-symbol-groups data-astro-cid-mw7aashj> <section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#classes" data-astro-cid-mw7aashj> Classes </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="inspectstoragehandler" data-astro-cid-mw7aashj> <a href="#inspectstoragehandler" data-astro-cid-mw7aashj>InspectStorageHandler</a> </li><li data-api-symbol="provisionstoragehandler" data-astro-cid-mw7aashj> <a href="#provisionstoragehandler" data-astro-cid-mw7aashj>ProvisionStorageHandler</a> </li><li data-api-symbol="storageerror" data-astro-cid-mw7aashj> <a href="#storageerror" data-astro-cid-mw7aashj>StorageError</a> </li><li data-api-symbol="storageprovisioningerror" data-astro-cid-mw7aashj> <a href="#storageprovisioningerror" data-astro-cid-mw7aashj>StorageProvisioningError</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#interfaces" data-astro-cid-mw7aashj> Interfaces </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="corsrule" data-astro-cid-mw7aashj> <a href="#corsrule" data-astro-cid-mw7aashj>CorsRule</a> </li><li data-api-symbol="evaluationinput" data-astro-cid-mw7aashj> <a href="#evaluationinput" data-astro-cid-mw7aashj>EvaluationInput</a> </li><li data-api-symbol="evaluationresult" data-astro-cid-mw7aashj> <a href="#evaluationresult" data-astro-cid-mw7aashj>EvaluationResult</a> </li><li data-api-symbol="firebasestorage" data-astro-cid-mw7aashj> <a href="#firebasestorage" data-astro-cid-mw7aashj>FirebaseStorage</a> </li><li data-api-symbol="firebasestoragebucket" data-astro-cid-mw7aashj> <a href="#firebasestoragebucket" data-astro-cid-mw7aashj>FirebaseStorageBucket</a> </li><li data-api-symbol="firestorelookup" data-astro-cid-mw7aashj> <a href="#firestorelookup" data-astro-cid-mw7aashj>FirestoreLookup</a> </li><li data-api-symbol="fullmetadata" data-astro-cid-mw7aashj> <a href="#fullmetadata" data-astro-cid-mw7aashj>FullMetadata</a> </li><li data-api-symbol="inspectstorageresult" data-astro-cid-mw7aashj> <a href="#inspectstorageresult" data-astro-cid-mw7aashj>InspectStorageResult</a> </li><li data-api-symbol="listresult" data-astro-cid-mw7aashj> <a href="#listresult" data-astro-cid-mw7aashj>ListResult</a> </li><li data-api-symbol="provisionstorageinput" data-astro-cid-mw7aashj> <a href="#provisionstorageinput" data-astro-cid-mw7aashj>ProvisionStorageInput</a> </li><li data-api-symbol="provisionstorageoptions" data-astro-cid-mw7aashj> <a href="#provisionstorageoptions" data-astro-cid-mw7aashj>ProvisionStorageOptions</a> </li><li data-api-symbol="provisionstorageresult" data-astro-cid-mw7aashj> <a href="#provisionstorageresult" data-astro-cid-mw7aashj>ProvisionStorageResult</a> </li><li data-api-symbol="sandboxtarget" data-astro-cid-mw7aashj> <a href="#sandboxtarget" data-astro-cid-mw7aashj>SandboxTarget</a> </li><li data-api-symbol="settablemetadata" data-astro-cid-mw7aashj> <a href="#settablemetadata" data-astro-cid-mw7aashj>SettableMetadata</a> </li><li data-api-symbol="storageadmintooldeps" data-astro-cid-mw7aashj> <a href="#storageadmintooldeps" data-astro-cid-mw7aashj>StorageAdminToolDeps</a> </li><li data-api-symbol="storageauth" data-astro-cid-mw7aashj> <a href="#storageauth" data-astro-cid-mw7aashj>StorageAuth</a> </li><li data-api-symbol="storageoptions" data-astro-cid-mw7aashj> <a href="#storageoptions" data-astro-cid-mw7aashj>StorageOptions</a> </li><li data-api-symbol="storagereference" data-astro-cid-mw7aashj> <a href="#storagereference" data-astro-cid-mw7aashj>StorageReference</a> </li><li data-api-symbol="storagerequest" data-astro-cid-mw7aashj> <a href="#storagerequest" data-astro-cid-mw7aashj>StorageRequest</a> </li><li data-api-symbol="storageresource" data-astro-cid-mw7aashj> <a href="#storageresource" data-astro-cid-mw7aashj>StorageResource</a> </li><li data-api-symbol="storagerules" data-astro-cid-mw7aashj> <a href="#storagerules" data-astro-cid-mw7aashj>StorageRules</a> </li><li data-api-symbol="uploadresult" data-astro-cid-mw7aashj> <a href="#uploadresult" data-astro-cid-mw7aashj>UploadResult</a> </li><li data-api-symbol="uploadtask" data-astro-cid-mw7aashj> <a href="#uploadtask" data-astro-cid-mw7aashj>UploadTask</a> </li><li data-api-symbol="uploadtasksnapshot" data-astro-cid-mw7aashj> <a href="#uploadtasksnapshot" data-astro-cid-mw7aashj>UploadTaskSnapshot</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#type-aliases" data-astro-cid-mw7aashj> Type Aliases </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="provisionstorageerrorcode" data-astro-cid-mw7aashj> <a href="#provisionstorageerrorcode" data-astro-cid-mw7aashj>ProvisionStorageErrorCode</a> </li><li data-api-symbol="provisionstorageoutcome" data-astro-cid-mw7aashj> <a href="#provisionstorageoutcome" data-astro-cid-mw7aashj>ProvisionStorageOutcome</a> </li><li data-api-symbol="serviceenablestate" data-astro-cid-mw7aashj> <a href="#serviceenablestate" data-astro-cid-mw7aashj>ServiceEnableState</a> </li><li data-api-symbol="storageerrorcode" data-astro-cid-mw7aashj> <a href="#storageerrorcode" data-astro-cid-mw7aashj>StorageErrorCode</a> </li><li data-api-symbol="storagegrantverb" data-astro-cid-mw7aashj> <a href="#storagegrantverb" data-astro-cid-mw7aashj>StorageGrantVerb</a> </li><li data-api-symbol="storagemethod" data-astro-cid-mw7aashj> <a href="#storagemethod" data-astro-cid-mw7aashj>StorageMethod</a> </li><li data-api-symbol="storagerequestmethod" data-astro-cid-mw7aashj> <a href="#storagerequestmethod" data-astro-cid-mw7aashj>StorageRequestMethod</a> </li><li data-api-symbol="storageverb" data-astro-cid-mw7aashj> <a href="#storageverb" data-astro-cid-mw7aashj>StorageVerb</a> </li><li data-api-symbol="stringformat" data-astro-cid-mw7aashj> <a href="#stringformat" data-astro-cid-mw7aashj>StringFormat</a> </li><li data-api-symbol="target" data-astro-cid-mw7aashj> <a href="#target" data-astro-cid-mw7aashj>Target</a> </li><li data-api-symbol="taskevent" data-astro-cid-mw7aashj> <a href="#taskevent" data-astro-cid-mw7aashj>TaskEvent</a> </li><li data-api-symbol="taskstate" data-astro-cid-mw7aashj> <a href="#taskstate" data-astro-cid-mw7aashj>TaskState</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#variables" data-astro-cid-mw7aashj> Variables </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="target_symbol" data-astro-cid-mw7aashj> <a href="#target_symbol" data-astro-cid-mw7aashj>TARGET_SYMBOL</a> </li> </ul> </section><section class="api-symbol-group" data-api-symbol-group data-astro-cid-mw7aashj> <a class="api-symbol-kind" href="#functions" data-astro-cid-mw7aashj> Functions </a> <ul data-astro-cid-mw7aashj> <li data-api-symbol="addfirebasetobucket()" data-astro-cid-mw7aashj> <a href="#addfirebasetobucket" data-astro-cid-mw7aashj>addFirebaseToBucket()</a> </li><li data-api-symbol="connectstorageemulator()" data-astro-cid-mw7aashj> <a href="#connectstorageemulator" data-astro-cid-mw7aashj>connectStorageEmulator()</a> </li><li data-api-symbol="createstorageadmintools()" data-astro-cid-mw7aashj> <a href="#createstorageadmintools" data-astro-cid-mw7aashj>createStorageAdminTools()</a> </li><li data-api-symbol="defaultplaygroundcors()" data-astro-cid-mw7aashj> <a href="#defaultplaygroundcors" data-astro-cid-mw7aashj>defaultPlaygroundCors()</a> </li><li data-api-symbol="deleteobject()" data-astro-cid-mw7aashj> <a href="#deleteobject" data-astro-cid-mw7aashj>deleteObject()</a> </li><li data-api-symbol="deploystoragerules()" data-astro-cid-mw7aashj> <a href="#deploystoragerules" data-astro-cid-mw7aashj>deployStorageRules()</a> </li><li data-api-symbol="enablestorageservice()" data-astro-cid-mw7aashj> <a href="#enablestorageservice" data-astro-cid-mw7aashj>enableStorageService()</a> </li><li data-api-symbol="evaluatestoragerules()" data-astro-cid-mw7aashj> <a href="#evaluatestoragerules" data-astro-cid-mw7aashj>evaluateStorageRules()</a> </li><li data-api-symbol="finalizedefaultlocation()" data-astro-cid-mw7aashj> <a href="#finalizedefaultlocation" data-astro-cid-mw7aashj>finalizeDefaultLocation()</a> </li><li data-api-symbol="getblob()" data-astro-cid-mw7aashj> <a href="#getblob" data-astro-cid-mw7aashj>getBlob()</a> </li><li data-api-symbol="getbucketcors()" data-astro-cid-mw7aashj> <a href="#getbucketcors" data-astro-cid-mw7aashj>getBucketCors()</a> </li><li data-api-symbol="getbytes()" data-astro-cid-mw7aashj> <a href="#getbytes" data-astro-cid-mw7aashj>getBytes()</a> </li><li data-api-symbol="getdefaultlocation()" data-astro-cid-mw7aashj> <a href="#getdefaultlocation" data-astro-cid-mw7aashj>getDefaultLocation()</a> </li><li data-api-symbol="getdownloadurl()" data-astro-cid-mw7aashj> <a href="#getdownloadurl" data-astro-cid-mw7aashj>getDownloadURL()</a> </li><li data-api-symbol="getmetadata()" data-astro-cid-mw7aashj> <a href="#getmetadata" data-astro-cid-mw7aashj>getMetadata()</a> </li><li data-api-symbol="getstorage()" data-astro-cid-mw7aashj> <a href="#getstorage" data-astro-cid-mw7aashj>getStorage()</a> </li><li data-api-symbol="getstoragesandbox()" data-astro-cid-mw7aashj> <a href="#getstoragesandbox" data-astro-cid-mw7aashj>getStorageSandbox()</a> </li><li data-api-symbol="getstorageservicestate()" data-astro-cid-mw7aashj> <a href="#getstorageservicestate" data-astro-cid-mw7aashj>getStorageServiceState()</a> </li><li data-api-symbol="listall()" data-astro-cid-mw7aashj> <a href="#listall" data-astro-cid-mw7aashj>listAll()</a> </li><li data-api-symbol="listfirebasebuckets()" data-astro-cid-mw7aashj> <a href="#listfirebasebuckets" data-astro-cid-mw7aashj>listFirebaseBuckets()</a> </li><li data-api-symbol="parsestoragerules()" data-astro-cid-mw7aashj> <a href="#parsestoragerules" data-astro-cid-mw7aashj>parseStorageRules()</a> </li><li data-api-symbol="provisionstorage()" data-astro-cid-mw7aashj> <a href="#provisionstorage" data-astro-cid-mw7aashj>provisionStorage()</a> </li><li data-api-symbol="ref()" data-astro-cid-mw7aashj> <a href="#ref" data-astro-cid-mw7aashj>ref()</a> </li><li data-api-symbol="setbucketcors()" data-astro-cid-mw7aashj> <a href="#setbucketcors" data-astro-cid-mw7aashj>setBucketCors()</a> </li><li data-api-symbol="updatemetadata()" data-astro-cid-mw7aashj> <a href="#updatemetadata" data-astro-cid-mw7aashj>updateMetadata()</a> </li><li data-api-symbol="uploadbytes()" data-astro-cid-mw7aashj> <a href="#uploadbytes" data-astro-cid-mw7aashj>uploadBytes()</a> </li><li data-api-symbol="uploadbytesresumable()" data-astro-cid-mw7aashj> <a href="#uploadbytesresumable" data-astro-cid-mw7aashj>uploadBytesResumable()</a> </li><li data-api-symbol="uploadstring()" data-astro-cid-mw7aashj> <a href="#uploadstring" data-astro-cid-mw7aashj>uploadString()</a> </li> </ul> </section> <p class="api-symbol-empty" data-api-symbol-empty hidden data-astro-cid-mw7aashj>No matching symbols</p> </div> </aside> </div> <script type="module">const a=document.querySelector("[data-api-symbol-filter]"),d=[...document.querySelectorAll("[data-api-symbol-group]")],n=document.querySelector("[data-api-symbol-empty]");a?.addEventListener("input",()=>{const t=a.value.trim().toLowerCase();let o=0;for(const i of d){let e=0;i.querySelectorAll("[data-api-symbol]").forEach(l=>{const r=!t||(l.dataset.apiSymbol??"").includes(t);l.hidden=!r,r&&e++}),i.hidden=e===0,o+=e}n&&(n.hidden=o>0)});</script> <script type="module">const s=new Map;document.querySelectorAll('.doc-toc a[href^="#"]').forEach(t=>s.set(decodeURIComponent(t.hash.slice(1)),t));if(s.size>0){const t=new Set,n=()=>{let o=null;for(const e of s.keys())if(t.has(e)){o=e;break}s.forEach((e,c)=>e.classList.toggle("active",c===o))},r=new IntersectionObserver(o=>{for(const e of o)e.isIntersecting?t.add(e.target.id):t.delete(e.target.id);n()},{rootMargin:"-72px 0px -60% 0px"});s.forEach((o,e)=>{const c=document.getElementById(e);c&&r.observe(c)})}</script> <script type="module">document.querySelector('.studio__nav [aria-current="page"]')?.scrollIntoView({block:"nearest",inline:"center"});</script> </body></html>