@pyric/cli 0.1.0-alpha.14 → 0.1.0-alpha.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assurance/.generated/conformance-verdicts.d.ts +120 -75
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +120 -75
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +207 -284
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/service-command-records/database-rules-generate.d.ts +4 -0
- package/dist/cli/service-command-records/database-rules-generate.d.ts.map +1 -0
- package/dist/cli/service-command-records/database-rules-generate.js +3 -0
- package/dist/cli/service-command-records/database-rules-generate.js.map +1 -0
- package/dist/cli/service-command-records/database-rules-lint.d.ts +4 -0
- package/dist/cli/service-command-records/database-rules-lint.d.ts.map +1 -0
- package/dist/cli/service-command-records/database-rules-lint.js +3 -0
- package/dist/cli/service-command-records/database-rules-lint.js.map +1 -0
- package/dist/cli/service-command-records/database-rules-simulate.d.ts +4 -0
- package/dist/cli/service-command-records/database-rules-simulate.d.ts.map +1 -0
- package/dist/cli/service-command-records/database-rules-simulate.js +3 -0
- package/dist/cli/service-command-records/database-rules-simulate.js.map +1 -0
- package/dist/cli/service-command-records/database-rules-validate.d.ts +4 -0
- package/dist/cli/service-command-records/database-rules-validate.d.ts.map +1 -0
- package/dist/cli/service-command-records/database-rules-validate.js +3 -0
- package/dist/cli/service-command-records/database-rules-validate.js.map +1 -0
- package/dist/cli/service-command-records/firestore-indexes-generate.d.ts +4 -0
- package/dist/cli/service-command-records/firestore-indexes-generate.d.ts.map +1 -0
- package/dist/cli/service-command-records/firestore-indexes-generate.js +3 -0
- package/dist/cli/service-command-records/firestore-indexes-generate.js.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-lint.d.ts +4 -0
- package/dist/cli/service-command-records/firestore-rules-lint.d.ts.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-lint.js +3 -0
- package/dist/cli/service-command-records/firestore-rules-lint.js.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-resolve.d.ts +4 -0
- package/dist/cli/service-command-records/firestore-rules-resolve.d.ts.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-resolve.js +3 -0
- package/dist/cli/service-command-records/firestore-rules-resolve.js.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-simulate.d.ts +4 -0
- package/dist/cli/service-command-records/firestore-rules-simulate.d.ts.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-simulate.js +3 -0
- package/dist/cli/service-command-records/firestore-rules-simulate.js.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-validate.d.ts +4 -0
- package/dist/cli/service-command-records/firestore-rules-validate.d.ts.map +1 -0
- package/dist/cli/service-command-records/firestore-rules-validate.js +3 -0
- package/dist/cli/service-command-records/firestore-rules-validate.js.map +1 -0
- package/dist/cli/service-command-records/storage-rules-lint.d.ts +4 -0
- package/dist/cli/service-command-records/storage-rules-lint.d.ts.map +1 -0
- package/dist/cli/service-command-records/storage-rules-lint.js +3 -0
- package/dist/cli/service-command-records/storage-rules-lint.js.map +1 -0
- package/dist/cli/service-command-records/storage-rules-simulate.d.ts +4 -0
- package/dist/cli/service-command-records/storage-rules-simulate.d.ts.map +1 -0
- package/dist/cli/service-command-records/storage-rules-simulate.js +3 -0
- package/dist/cli/service-command-records/storage-rules-simulate.js.map +1 -0
- package/dist/cli/service-commands.d.ts +7 -0
- package/dist/cli/service-commands.d.ts.map +1 -1
- package/dist/cli/service-commands.generated.d.ts +35 -0
- package/dist/cli/service-commands.generated.d.ts.map +1 -0
- package/dist/cli/service-commands.generated.js +25 -0
- package/dist/cli/service-commands.generated.js.map +1 -0
- package/dist/cli/service-commands.js +23 -40
- package/dist/cli/service-commands.js.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
- package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use.js +1 -1
- package/dist/conformance/.generated/can-i-use.js.map +1 -1
- package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
- package/dist/conformance/.generated/conformance-docs.js +1 -1
- package/dist/conformance/.generated/conformance-docs.js.map +1 -1
- package/dist/functions-rtdb/development-runtime.d.ts +63 -0
- package/dist/functions-rtdb/development-runtime.d.ts.map +1 -0
- package/dist/functions-rtdb/development-runtime.js +244 -0
- package/dist/functions-rtdb/development-runtime.js.map +1 -0
- package/dist/serve/bridge-mount.d.ts +32 -2
- package/dist/serve/bridge-mount.d.ts.map +1 -1
- package/dist/serve/bridge-mount.js +232 -18
- package/dist/serve/bridge-mount.js.map +1 -1
- package/dist/serve/bundler.d.ts +2 -18
- package/dist/serve/bundler.d.ts.map +1 -1
- package/dist/serve/bundler.js +7 -35
- package/dist/serve/bundler.js.map +1 -1
- package/dist/serve/entries/app-client.d.ts.map +1 -1
- package/dist/serve/entries/app-client.js +5 -5
- package/dist/serve/entries/app-client.js.map +1 -1
- package/dist/serve/entries/auth-helper-core.d.ts +23 -6
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-core.js +55 -24
- package/dist/serve/entries/auth-helper-core.js.map +1 -1
- package/dist/serve/entries/database.d.ts +28 -0
- package/dist/serve/entries/database.d.ts.map +1 -1
- package/dist/serve/entries/database.js +95 -26
- package/dist/serve/entries/database.js.map +1 -1
- package/dist/serve/entries/init.d.ts.map +1 -1
- package/dist/serve/entries/init.js +21 -12
- package/dist/serve/entries/init.js.map +1 -1
- package/dist/serve/html-injection.d.ts +5 -0
- package/dist/serve/html-injection.d.ts.map +1 -0
- package/dist/serve/html-injection.js +59 -0
- package/dist/serve/html-injection.js.map +1 -0
- package/dist/serve/namespace.d.ts +6 -22
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +23 -145
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/runtime/worker-replacement.d.ts +1 -2
- package/dist/serve/runtime/worker-replacement.d.ts.map +1 -1
- package/dist/serve/sandbox-session.d.ts +78 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -0
- package/dist/serve/sandbox-session.js +171 -0
- package/dist/serve/sandbox-session.js.map +1 -0
- package/dist/serve/server.d.ts +5 -2
- package/dist/serve/server.d.ts.map +1 -1
- package/dist/serve/server.js +21 -5
- package/dist/serve/server.js.map +1 -1
- package/dist/serve/site-tree.d.ts +8 -0
- package/dist/serve/site-tree.d.ts.map +1 -0
- package/dist/serve/site-tree.js +113 -0
- package/dist/serve/site-tree.js.map +1 -0
- package/dist/serve/site-ui/_astro/RulesCodeEditor.CzwHdCi9.js +23 -0
- package/dist/serve/site-ui/_astro/_example_.jevZ7OdV.css +1 -0
- package/dist/serve/site-ui/_astro/_slug_.BoKXYrnu.css +1 -0
- package/dist/serve/site-ui/_astro/_studio_.BtYpqe1A.css +1 -0
- package/dist/serve/site-ui/_astro/app.BnMC0ywl.js +109 -0
- package/dist/serve/site-ui/_astro/app.BsFsMjn0.css +1 -0
- package/dist/serve/site-ui/_astro/app.DVXXR-WI.js +1 -0
- package/dist/serve/site-ui/_astro/chess-showcase.DzPO6kz0.js +1 -0
- package/dist/serve/site-ui/_astro/chess-source-explorer.C5k9c5yK.js +1 -0
- package/dist/serve/site-ui/_astro/chess-v2.CFHmd3UL.js +354 -0
- package/dist/serve/site-ui/_astro/client.D2ORs4B-.js +25 -0
- package/dist/serve/site-ui/_astro/example-runtime.CM0H02rx.js +291 -0
- package/dist/serve/site-ui/_astro/index.B4Kh80he.js +1 -0
- package/dist/serve/site-ui/_astro/index.DBy5LfQW.js +9 -0
- package/dist/serve/site-ui/_astro/index.DNyk7q8W.js +9 -0
- package/dist/serve/site-ui/_astro/jsx-runtime.D_zvdyIk.js +9 -0
- package/dist/serve/site-ui/_astro/reads.D1exkX1-.js +1 -0
- package/dist/serve/site-ui/_astro/sandbox-controls.BqMePr5V.js +1153 -0
- package/dist/serve/site-ui/_astro/seed.BCn5DhHS.js +20 -0
- package/dist/serve/site-ui/auth/index.html +11 -0
- package/dist/serve/site-ui/docs/_rhythm/index.html +100 -0
- package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +43 -0
- package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +26 -0
- package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +70 -0
- package/dist/serve/{docs-ui → site-ui}/docs/ai-compat/index.html +3 -3
- package/dist/serve/site-ui/docs/api-reference/index.html +68 -0
- package/dist/serve/{docs-ui → site-ui}/docs/app-compat/index.html +3 -3
- package/dist/serve/{docs-ui → site-ui}/docs/auth-compat/index.html +3 -3
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +64 -0
- package/dist/serve/site-ui/docs/build/authentication/index.html +66 -0
- package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +84 -0
- package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +71 -0
- package/dist/serve/site-ui/docs/build/cloud-storage/index.html +66 -0
- package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-storage.md +2 -2
- package/dist/serve/site-ui/docs/build/realtime-database/index.html +67 -0
- package/dist/serve/site-ui/docs/conformance-scores/index.html +50 -0
- package/dist/serve/{docs-ui → site-ui}/docs/conformance-scores.md +3 -3
- package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +531 -0
- package/dist/serve/{docs-ui → site-ui}/docs/database-compat/index.html +211 -168
- package/dist/serve/{docs-ui → site-ui}/docs/database-compat.md +208 -170
- package/dist/serve/site-ui/docs/examples/chess/index.html +384 -0
- package/dist/serve/site-ui/docs/examples/chess.md +57 -0
- package/dist/serve/site-ui/docs/examples/index.html +3 -0
- package/dist/serve/site-ui/docs/examples.md +4 -0
- package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat/index.html +55 -91
- package/dist/serve/{docs-ui → site-ui}/docs/firestore-compat.md +52 -88
- package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +73 -0
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +29 -0
- package/dist/serve/site-ui/docs/get-started/start-building/index.html +33 -0
- package/dist/serve/{docs-ui → site-ui}/docs/index.json +595 -26
- package/dist/serve/site-ui/docs/messaging-compat/index.html +324 -0
- package/dist/serve/{docs-ui → site-ui}/docs/messaging-compat.md +71 -1
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +28 -0
- package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +74 -0
- package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +45 -0
- package/dist/serve/site-ui/docs/overview/index.html +17 -0
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +186 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api/index.html +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api/index.html +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api/index.html +318 -202
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-firestore-reference-api.md +154 -27
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api/index.html +5 -5
- package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +318 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api/index.html +5 -5
- package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +160 -0
- package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +425 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api/index.html +5 -5
- package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +60 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api/index.html +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api/index.html +4 -4
- package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +507 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +258 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +51 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +308 -0
- package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +68 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api/index.html +4 -4
- package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +11 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api/index.html +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api/index.html +1186 -1384
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-serve-worker-reference-api.md +817 -1291
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api/index.html +4 -4
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +126 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-vite-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2641 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-database-reference-api.md +1055 -158
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api/index.html +311 -249
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-firestore-reference-api.md +72 -54
- package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +509 -0
- package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +182 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api/index.html +7 -26
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-rules-reference-api.md +13 -23
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +121 -0
- package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +203 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api/index.html +26 -5
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-reference-api.md +22 -22
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api/index.html +5 -15
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-storage-reference-api.md +0 -13
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +639 -0
- package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +100 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api/index.html +4 -4
- package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +24 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api/index.html +4 -4
- package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +136 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api/index.html +7 -7
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-reference-api.md +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api/index.html +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api/index.html +4 -4
- package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +16 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api/index.html +4 -4
- package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +176 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api/index.html +10 -11
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-reference-api.md +7 -8
- package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +188 -0
- package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api/index.html +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/rules-compat/index.html +87 -57
- package/dist/serve/{docs-ui → site-ui}/docs/rules-compat.md +84 -54
- package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +51 -0
- package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +106 -0
- package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +41 -0
- package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +67 -0
- package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +159 -0
- package/dist/serve/{docs-ui → site-ui}/docs/secure/rules-standard-library.md +2 -2
- package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +47 -0
- package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +95 -0
- package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +82 -0
- package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +37 -0
- package/dist/serve/site-ui/docs/ship/test-in-node/index.html +75 -0
- package/dist/serve/{docs-ui → site-ui}/docs/storage-compat/index.html +8 -8
- package/dist/serve/{docs-ui → site-ui}/docs/storage-compat.md +5 -5
- package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +132 -0
- package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +861 -0
- package/dist/serve/site-ui/docs/trust/rules-standard-library.md +344 -0
- package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research/index.html +582 -0
- package/dist/serve/site-ui/docs/trust/storage-rules-stdlib-research.md +448 -0
- package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +14 -0
- package/dist/serve/{docs-ui → site-ui}/docs/tutorial/index.html +4 -4
- package/dist/serve/{docs-ui → site-ui}/docs/tutorial.md +1 -1
- package/dist/serve/site-ui/examples/chess/index.html +2 -0
- package/dist/serve/site-ui/examples/firestore-first-write/index.html +2 -0
- package/dist/serve/site-ui/firestore/index.html +11 -0
- package/dist/serve/site-ui/index.html +11 -0
- package/dist/serve/{docs-ui → site-ui}/llms.txt +6 -2
- package/dist/serve/site-ui/rtdb/index.html +11 -0
- package/dist/serve/site-ui/settings/index.html +11 -0
- package/dist/serve/site-ui/storage/index.html +11 -0
- package/dist/serve/site-ui/studio-routes.json +1 -0
- package/dist/serve/site-ui/traffic/index.html +11 -0
- package/dist/serve/standalone-assets.d.ts +4 -10
- package/dist/serve/standalone-assets.d.ts.map +1 -1
- package/dist/serve/standalone-assets.js +8 -21
- package/dist/serve/standalone-assets.js.map +1 -1
- package/dist/serve/vite-functions-development.d.ts +29 -0
- package/dist/serve/vite-functions-development.d.ts.map +1 -0
- package/dist/serve/vite-functions-development.js +150 -0
- package/dist/serve/vite-functions-development.js.map +1 -0
- package/dist/serve/vite-generation-bridge.d.ts +17 -0
- package/dist/serve/vite-generation-bridge.d.ts.map +1 -0
- package/dist/serve/vite-generation-bridge.js +47 -0
- package/dist/serve/vite-generation-bridge.js.map +1 -0
- package/dist/serve/vite-generation-functions.d.ts +35 -0
- package/dist/serve/vite-generation-functions.d.ts.map +1 -0
- package/dist/serve/vite-generation-functions.js +46 -0
- package/dist/serve/vite-generation-functions.js.map +1 -0
- package/dist/serve/vite-generation-middleware.d.ts +10 -0
- package/dist/serve/vite-generation-middleware.d.ts.map +1 -0
- package/dist/serve/vite-generation-middleware.js +40 -0
- package/dist/serve/vite-generation-middleware.js.map +1 -0
- package/dist/serve/vite-generation-rules-watch.d.ts +8 -0
- package/dist/serve/vite-generation-rules-watch.d.ts.map +1 -0
- package/dist/serve/vite-generation-rules-watch.js +33 -0
- package/dist/serve/vite-generation-rules-watch.js.map +1 -0
- package/dist/serve/vite-module-swap.d.ts +16 -0
- package/dist/serve/vite-module-swap.d.ts.map +1 -0
- package/dist/serve/vite-module-swap.js +96 -0
- package/dist/serve/vite-module-swap.js.map +1 -0
- package/dist/serve/vite-page-runtime.d.ts +29 -0
- package/dist/serve/vite-page-runtime.d.ts.map +1 -0
- package/dist/serve/vite-page-runtime.js +71 -0
- package/dist/serve/vite-page-runtime.js.map +1 -0
- package/dist/serve/vite-plugin.d.ts +44 -4
- package/dist/serve/vite-plugin.d.ts.map +1 -1
- package/dist/serve/vite-plugin.js +62 -864
- package/dist/serve/vite-plugin.js.map +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts +57 -0
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -0
- package/dist/serve/vite-sandbox-generation.js +178 -0
- package/dist/serve/vite-sandbox-generation.js.map +1 -0
- package/dist/serve/worker/client/disconnect.d.ts.map +1 -1
- package/dist/serve/worker/client/disconnect.js +2 -0
- package/dist/serve/worker/client/disconnect.js.map +1 -1
- package/dist/serve/worker/client/handles.d.ts +5 -0
- package/dist/serve/worker/client/handles.d.ts.map +1 -1
- package/dist/serve/worker/client/handles.js.map +1 -1
- package/dist/serve/worker/client/pagehide.d.ts +13 -0
- package/dist/serve/worker/client/pagehide.d.ts.map +1 -0
- package/dist/serve/worker/client/pagehide.js +19 -0
- package/dist/serve/worker/client/pagehide.js.map +1 -0
- package/dist/serve/worker/client/rtdb-admin.d.ts +8 -0
- package/dist/serve/worker/client/rtdb-admin.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-admin.js +39 -0
- package/dist/serve/worker/client/rtdb-admin.js.map +1 -0
- package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts +15 -0
- package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-connection-lifecycle.js +45 -0
- package/dist/serve/worker/client/rtdb-connection-lifecycle.js.map +1 -0
- package/dist/serve/worker/client/rtdb-controls.d.ts +6 -0
- package/dist/serve/worker/client/rtdb-controls.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-controls.js +8 -0
- package/dist/serve/worker/client/rtdb-controls.js.map +1 -0
- package/dist/serve/worker/client/rtdb-listeners.d.ts +24 -0
- package/dist/serve/worker/client/rtdb-listeners.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-listeners.js +262 -0
- package/dist/serve/worker/client/rtdb-listeners.js.map +1 -0
- package/dist/serve/worker/client/rtdb-reads.d.ts +4 -0
- package/dist/serve/worker/client/rtdb-reads.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-reads.js +11 -0
- package/dist/serve/worker/client/rtdb-reads.js.map +1 -0
- package/dist/serve/worker/client/rtdb-references.d.ts +19 -0
- package/dist/serve/worker/client/rtdb-references.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-references.js +63 -0
- package/dist/serve/worker/client/rtdb-references.js.map +1 -0
- package/dist/serve/worker/client/rtdb-snapshots.d.ts +20 -0
- package/dist/serve/worker/client/rtdb-snapshots.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-snapshots.js +64 -0
- package/dist/serve/worker/client/rtdb-snapshots.js.map +1 -0
- package/dist/serve/worker/client/rtdb-transactions.d.ts +14 -0
- package/dist/serve/worker/client/rtdb-transactions.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-transactions.js +34 -0
- package/dist/serve/worker/client/rtdb-transactions.js.map +1 -0
- package/dist/serve/worker/client/rtdb-writes.d.ts +8 -0
- package/dist/serve/worker/client/rtdb-writes.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-writes.js +65 -0
- package/dist/serve/worker/client/rtdb-writes.js.map +1 -0
- package/dist/serve/worker/client.d.ts +0 -2
- package/dist/serve/worker/client.d.ts.map +1 -1
- package/dist/serve/worker/client.js +0 -2
- package/dist/serve/worker/client.js.map +1 -1
- package/dist/serve/worker/entry.js +2 -2
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host/dispatch.d.ts +2 -0
- package/dist/serve/worker/host/dispatch.d.ts.map +1 -1
- package/dist/serve/worker/host/dispatch.js +24 -2
- package/dist/serve/worker/host/dispatch.js.map +1 -1
- package/dist/serve/worker/host/rtdb.d.ts +6 -2
- package/dist/serve/worker/host/rtdb.d.ts.map +1 -1
- package/dist/serve/worker/host/rtdb.js +224 -2
- package/dist/serve/worker/host/rtdb.js.map +1 -1
- package/dist/serve/worker/host/studio.d.ts.map +1 -1
- package/dist/serve/worker/host/studio.js +2 -0
- package/dist/serve/worker/host/studio.js.map +1 -1
- package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
- package/dist/serve/worker/host/subscriptions.js +3 -3
- package/dist/serve/worker/host/subscriptions.js.map +1 -1
- package/dist/serve/worker/host.d.ts +1 -1
- package/dist/serve/worker/host.d.ts.map +1 -1
- package/dist/serve/worker/host.js +1 -1
- package/dist/serve/worker/host.js.map +1 -1
- package/dist/serve/worker/index.d.ts +16 -1
- package/dist/serve/worker/index.d.ts.map +1 -1
- package/dist/serve/worker/index.js +17 -4
- package/dist/serve/worker/index.js.map +1 -1
- package/dist/serve/worker/protocol.d.ts +57 -0
- package/dist/serve/worker/protocol.d.ts.map +1 -1
- package/dist/serve/worker/protocol.js.map +1 -1
- package/dist/serve/worker/rtdb-value-equality.d.ts +3 -0
- package/dist/serve/worker/rtdb-value-equality.d.ts.map +1 -0
- package/dist/serve/worker/rtdb-value-equality.js +18 -0
- package/dist/serve/worker/rtdb-value-equality.js.map +1 -0
- package/dist/serve/worker/serve-init.js +2 -2
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/dist/serve/worker/service-worker-relay.js +2 -2
- package/dist/serve/worker/service-worker-relay.js.map +1 -1
- package/package.json +7 -5
- package/src/assurance/.generated/conformance-verdicts.ts +120 -75
- package/src/cli/serve.ts +215 -307
- package/src/cli/service-command-records/database-rules-generate.ts +3 -0
- package/src/cli/service-command-records/database-rules-lint.ts +3 -0
- package/src/cli/service-command-records/database-rules-simulate.ts +3 -0
- package/src/cli/service-command-records/database-rules-validate.ts +3 -0
- package/src/cli/service-command-records/firestore-indexes-generate.ts +3 -0
- package/src/cli/service-command-records/firestore-rules-lint.ts +3 -0
- package/src/cli/service-command-records/firestore-rules-resolve.ts +3 -0
- package/src/cli/service-command-records/firestore-rules-simulate.ts +3 -0
- package/src/cli/service-command-records/firestore-rules-validate.ts +3 -0
- package/src/cli/service-command-records/storage-rules-lint.ts +3 -0
- package/src/cli/service-command-records/storage-rules-simulate.ts +3 -0
- package/src/cli/service-commands.generated.ts +27 -0
- package/src/cli/service-commands.test.ts +43 -0
- package/src/cli/service-commands.ts +36 -51
- package/src/conformance/.generated/can-i-use-browser.ts +1 -1
- package/src/conformance/.generated/can-i-use.ts +1 -1
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/functions-rtdb/development-runtime.ts +299 -0
- package/src/serve/bridge-mount.ts +253 -19
- package/src/serve/bundler.ts +8 -34
- package/src/serve/entries/app-client.ts +5 -4
- package/src/serve/entries/auth-helper-core.ts +83 -30
- package/src/serve/entries/database.ts +180 -57
- package/src/serve/entries/init.ts +30 -20
- package/src/serve/html-injection.ts +65 -0
- package/src/serve/namespace.ts +26 -169
- package/src/serve/runtime/worker-replacement.ts +1 -1
- package/src/serve/sandbox-session.ts +233 -0
- package/src/serve/server.ts +20 -5
- package/src/serve/site-tree.ts +146 -0
- package/src/serve/standalone-assets.ts +9 -26
- package/src/serve/vite-functions-development.ts +201 -0
- package/src/serve/vite-generation-bridge.ts +66 -0
- package/src/serve/vite-generation-functions.ts +78 -0
- package/src/serve/vite-generation-middleware.ts +56 -0
- package/src/serve/vite-generation-rules-watch.ts +37 -0
- package/src/serve/vite-module-swap.ts +119 -0
- package/src/serve/vite-page-runtime.ts +100 -0
- package/src/serve/vite-plugin.ts +78 -883
- package/src/serve/vite-sandbox-generation.ts +255 -0
- package/src/serve/worker/client/disconnect.ts +3 -1
- package/src/serve/worker/client/handles.ts +5 -0
- package/src/serve/worker/client/pagehide.ts +31 -0
- package/src/serve/worker/client/rtdb-admin.ts +74 -0
- package/src/serve/worker/client/rtdb-connection-lifecycle.ts +52 -0
- package/src/serve/worker/client/rtdb-controls.ts +8 -0
- package/src/serve/worker/client/rtdb-listeners.ts +337 -0
- package/src/serve/worker/client/rtdb-reads.ts +12 -0
- package/src/serve/worker/client/rtdb-references.ts +85 -0
- package/src/serve/worker/client/rtdb-snapshots.ts +118 -0
- package/src/serve/worker/client/rtdb-transactions.ts +51 -0
- package/src/serve/worker/client/rtdb-writes.ts +74 -0
- package/src/serve/worker/client.ts +0 -2
- package/src/serve/worker/entry.ts +2 -2
- package/src/serve/worker/host/dispatch.ts +22 -2
- package/src/serve/worker/host/rtdb.ts +243 -2
- package/src/serve/worker/host/studio.ts +2 -0
- package/src/serve/worker/host/subscriptions.ts +8 -4
- package/src/serve/worker/host.ts +1 -1
- package/src/serve/worker/index.ts +58 -10
- package/src/serve/worker/protocol.ts +23 -2
- package/src/serve/worker/rtdb-value-equality.ts +17 -0
- package/src/serve/worker/serve-init.ts +2 -2
- package/src/serve/worker/service-worker-relay.ts +2 -2
- package/dist/serve/docs-ui/_astro/_slug_.DUci-duz.css +0 -1
- package/dist/serve/docs-ui/docs/_rhythm/index.html +0 -100
- package/dist/serve/docs-ui/docs/agent/set-up-your-agent/index.html +0 -43
- package/dist/serve/docs-ui/docs/agent/watch-and-review/index.html +0 -26
- package/dist/serve/docs-ui/docs/agent/work-with-an-agent/index.html +0 -70
- package/dist/serve/docs-ui/docs/api-reference/index.html +0 -68
- package/dist/serve/docs-ui/docs/build/ai-logic/index.html +0 -64
- package/dist/serve/docs-ui/docs/build/authentication/index.html +0 -66
- package/dist/serve/docs-ui/docs/build/cloud-firestore/index.html +0 -70
- package/dist/serve/docs-ui/docs/build/cloud-messaging/index.html +0 -71
- package/dist/serve/docs-ui/docs/build/cloud-storage/index.html +0 -66
- package/dist/serve/docs-ui/docs/build/realtime-database/index.html +0 -67
- package/dist/serve/docs-ui/docs/conformance-scores/index.html +0 -50
- package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +0 -531
- package/dist/serve/docs-ui/docs/functions-rtdb-compat/index.html +0 -73
- package/dist/serve/docs-ui/docs/get-started/how-the-swap-works/index.html +0 -29
- package/dist/serve/docs-ui/docs/get-started/start-building/index.html +0 -33
- package/dist/serve/docs-ui/docs/messaging-compat/index.html +0 -265
- package/dist/serve/docs-ui/docs/observe/resolve-runtime-status/index.html +0 -28
- package/dist/serve/docs-ui/docs/observe/see-whats-happening/index.html +0 -74
- package/dist/serve/docs-ui/docs/observe/shape-your-data/index.html +0 -45
- package/dist/serve/docs-ui/docs/overview/index.html +0 -17
- package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +0 -186
- package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +0 -318
- package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +0 -160
- package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +0 -425
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +0 -60
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +0 -507
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +0 -258
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +0 -51
- package/dist/serve/docs-ui/docs/pyric-cli-conformance-reference-api/index.html +0 -308
- package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +0 -68
- package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +0 -11
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +0 -126
- package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +0 -1852
- package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +0 -509
- package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +0 -182
- package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +0 -121
- package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +0 -203
- package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +0 -639
- package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +0 -100
- package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +0 -24
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +0 -136
- package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +0 -16
- package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +0 -176
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +0 -188
- package/dist/serve/docs-ui/docs/secure/audit-your-rules/index.html +0 -51
- package/dist/serve/docs-ui/docs/secure/firestore-rules-limits/index.html +0 -106
- package/dist/serve/docs-ui/docs/secure/read-a-denial/index.html +0 -41
- package/dist/serve/docs-ui/docs/secure/rtdb-rules-in-typescript/index.html +0 -67
- package/dist/serve/docs-ui/docs/secure/rules-standard-library/index.html +0 -159
- package/dist/serve/docs-ui/docs/secure/secure-it-with-rules/index.html +0 -47
- package/dist/serve/docs-ui/docs/secure/simulate-and-lint/index.html +0 -95
- package/dist/serve/docs-ui/docs/secure/write-a-rules-test-suite/index.html +0 -82
- package/dist/serve/docs-ui/docs/ship/ship-to-production/index.html +0 -37
- package/dist/serve/docs-ui/docs/ship/test-in-node/index.html +0 -75
- package/dist/serve/docs-ui/docs/trust/how-we-know-it-matches-firebase/index.html +0 -132
- package/dist/serve/docs-ui/docs/trust/versioning-and-compatibility/index.html +0 -14
- package/dist/serve/docs-ui/index.html +0 -1
- package/dist/serve/studio-ui/assets/RulesCodeEditor-BDlH-5lp.js +0 -23
- package/dist/serve/studio-ui/assets/index-Bf9SSE8L.js +0 -1218
- package/dist/serve/studio-ui/assets/index-BlSGru_r.css +0 -1
- package/dist/serve/studio-ui/assets/seed-D_UjxfOU.js +0 -20
- package/dist/serve/studio-ui/index.html +0 -32
- package/dist/serve/worker/client/rtdb.d.ts +0 -36
- package/dist/serve/worker/client/rtdb.d.ts.map +0 -1
- package/dist/serve/worker/client/rtdb.js +0 -241
- package/dist/serve/worker/client/rtdb.js.map +0 -1
- package/src/serve/worker/client/rtdb.ts +0 -311
- /package/dist/serve/{docs-ui → site-ui}/404.html +0 -0
- /package/dist/serve/{docs-ui → site-ui}/_astro/_slug_.CXh9yTP1.css +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/_rhythm.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/agent/set-up-your-agent.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/agent/watch-and-review.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/agent/work-with-an-agent.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/ai-compat.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/api-reference.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/app-compat.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/auth-compat.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/build/ai-logic.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/build/authentication.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-firestore.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/build/cloud-messaging.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/build/realtime-database.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/create-pyric-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/functions-rtdb-compat.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/get-started/how-the-swap-works.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/get-started/start-building.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/index.html +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/observe/resolve-runtime-status.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/observe/see-whats-happening.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/observe/shape-your-data.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/overview.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-app-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-auth-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-database-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-messaging-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-admin-storage-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ai-scripting-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-app-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-auth-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-browser-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-assurance-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-client-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-bridge-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-browser-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-docs-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-conformance-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-credentials-node-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-discover-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-register-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-remote-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-cli-verify-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-messaging-sw-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-database-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-sandbox-firestore-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-agents-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-hooks-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-auth-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-hooks-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-events-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-firestore-hooks-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-primitives-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rtdb-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-hooks-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-rules-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-storage-hooks-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-hooks-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/pyric-ui-traffic-reference-api.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/secure/audit-your-rules.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/secure/firestore-rules-limits.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/secure/read-a-denial.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/secure/rtdb-rules-in-typescript.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/secure/secure-it-with-rules.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/secure/simulate-and-lint.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/secure/write-a-rules-test-suite.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/ship/ship-to-production.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/ship/test-in-node.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/trust/how-we-know-it-matches-firebase.md +0 -0
- /package/dist/serve/{docs-ui → site-ui}/docs/trust/versioning-and-compatibility.md +0 -0
- /package/dist/serve/{studio-ui → site-ui}/pyric-logo.svg +0 -0
package/src/serve/bundler.ts
CHANGED
|
@@ -67,41 +67,15 @@ export function defaultSdkEntries(): Record<string, string> {
|
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/**
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
export function resolveStudioUiDir(): string | null {
|
|
78
|
-
const candidates = [
|
|
79
|
-
new URL('./studio-ui/', import.meta.url),
|
|
80
|
-
new URL('../../../studio/dist/app/', import.meta.url),
|
|
81
|
-
];
|
|
82
|
-
for (const candidate of candidates) {
|
|
83
|
-
const dir = fileURLToPath(candidate);
|
|
84
|
-
if (existsSync(dir)) return dir;
|
|
85
|
-
}
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Resolve the built docs site dir (site-docs). `pyric dev --ui` embeds it so
|
|
91
|
-
* the Studio Docs tab has local docs without the hosted site. Built with base
|
|
92
|
-
* `/__pyric/ui/` (see scripts/build.sh) so every page/asset/twin URL resolves
|
|
93
|
-
* under the CLI mount: pages at `/__pyric/ui/docs/<slug>/`, assets at
|
|
94
|
-
* `/__pyric/ui/_astro/*`, the search index at `/__pyric/ui/docs/index.json`,
|
|
95
|
-
* and the shell chrome's tab links back at `/__pyric/ui/<tab>`. The dir holds
|
|
96
|
-
* the site-docs `dist/` verbatim: `docs/`, `_astro/`, `index.html`, `llms.txt`.
|
|
97
|
-
*/
|
|
98
|
-
export function resolveDocsUiDir(): string | null {
|
|
99
|
-
const candidates = [
|
|
100
|
-
new URL('./docs-ui/', import.meta.url),
|
|
101
|
-
];
|
|
70
|
+
/** Resolve the unified Astro documentation + Studio tree embedded by the build. */
|
|
71
|
+
export function resolveSiteUiDir(
|
|
72
|
+
candidates: readonly string[] = [
|
|
73
|
+
fileURLToPath(new URL('./site-ui/', import.meta.url)),
|
|
74
|
+
fileURLToPath(new URL('../../../site-docs/dist/', import.meta.url)),
|
|
75
|
+
],
|
|
76
|
+
): string | null {
|
|
102
77
|
for (const candidate of candidates) {
|
|
103
|
-
|
|
104
|
-
if (existsSync(dir)) return dir;
|
|
78
|
+
if (existsSync(candidate)) return candidate;
|
|
105
79
|
}
|
|
106
80
|
return null;
|
|
107
81
|
}
|
|
@@ -3,7 +3,7 @@ import type { FirebaseApp } from 'pyric/app';
|
|
|
3
3
|
import { registerAppCleanup } from 'pyric/app/internal';
|
|
4
4
|
import type { ClientDb } from '../worker/client.js';
|
|
5
5
|
import type { InboundMessage } from '../worker/protocol.js';
|
|
6
|
-
import {
|
|
6
|
+
import { ownClientUntilPagehide } from '../worker/client/pagehide.js';
|
|
7
7
|
import { openWorkerDb } from './worker-runtime.js';
|
|
8
8
|
|
|
9
9
|
const clients = new WeakMap<FirebaseApp, ClientDb>();
|
|
@@ -11,12 +11,13 @@ const clients = new WeakMap<FirebaseApp, ClientDb>();
|
|
|
11
11
|
export function workerClientForApp(app: FirebaseApp): ClientDb {
|
|
12
12
|
const existing = clients.get(app);
|
|
13
13
|
if (existing) return existing;
|
|
14
|
-
|
|
14
|
+
const client = openWorkerDb(app.name);
|
|
15
|
+
const lifecycle = ownClientUntilPagehide(client);
|
|
15
16
|
registerAppCleanup(app, async () => {
|
|
16
17
|
clients.delete(app);
|
|
17
|
-
|
|
18
|
+
lifecycle.dispose();
|
|
19
|
+
await lifecycle.disconnect();
|
|
18
20
|
});
|
|
19
|
-
client = openWorkerDb(app.name);
|
|
20
21
|
client.port.postMessage({
|
|
21
22
|
t: 'appConfig',
|
|
22
23
|
options: app.options as Record<string, unknown>,
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* directory and returns a Firebase-shaped credential; it never constructs an
|
|
6
6
|
* Auth handle or mutates a Sandbox. In SharedWorker mode the directory reads
|
|
7
7
|
* the worker's user pool and the picked credential is committed by
|
|
8
|
-
* `auth.acceptIdentity`. The in-page fallback supplies a
|
|
9
|
-
*
|
|
8
|
+
* `auth.acceptIdentity`. The in-page fallback supplies a mint that calls
|
|
9
|
+
* `sandbox.createSignInCredential` so the resolved User carries real
|
|
10
|
+
* provider metadata.
|
|
10
11
|
*/
|
|
11
12
|
import type {
|
|
12
13
|
AuthFlowRequest,
|
|
@@ -31,10 +32,22 @@ export interface HelperIdentity {
|
|
|
31
32
|
|
|
32
33
|
export interface HelperIdentityDirectory {
|
|
33
34
|
list(): HelperIdentity[] | Promise<HelperIdentity[]>;
|
|
34
|
-
/** Optional on the worker path: `auth.acceptIdentity` performs the write.
|
|
35
|
+
/** Optional on the worker path: `auth.acceptIdentity` performs the write.
|
|
36
|
+
* Unused when a custom {@link HelperCredentialMint} owns creation. */
|
|
35
37
|
add?(identity: HelperIdentity): void | Promise<void>;
|
|
36
38
|
}
|
|
37
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Mint a Firebase-shaped credential for a picker pick/add. The default mint
|
|
42
|
+
* builds a bare helper User (worker path → discarded by `acceptIdentity`).
|
|
43
|
+
* The in-page fallback injects `sandbox.createSignInCredential`.
|
|
44
|
+
*/
|
|
45
|
+
export type HelperCredentialMint = (
|
|
46
|
+
request:
|
|
47
|
+
| { kind: 'pick'; identity: HelperIdentity; providerId: string }
|
|
48
|
+
| { kind: 'add'; spec: NewIdentitySpec; providerId: string },
|
|
49
|
+
) => UserCredential | Promise<UserCredential>;
|
|
50
|
+
|
|
38
51
|
export interface HelperSnapshot {
|
|
39
52
|
/** The in-flight request, or null when no popup/redirect is pending. */
|
|
40
53
|
request: AuthFlowRequest | null;
|
|
@@ -52,8 +65,13 @@ export class ServeAuthHelper {
|
|
|
52
65
|
private readonly listeners = new Set<() => void>();
|
|
53
66
|
private cached: HelperSnapshot | null = null;
|
|
54
67
|
private identities: HelperIdentity[] = [];
|
|
68
|
+
private readonly mint: HelperCredentialMint;
|
|
55
69
|
|
|
56
|
-
constructor(
|
|
70
|
+
constructor(
|
|
71
|
+
private readonly directory: HelperIdentityDirectory,
|
|
72
|
+
mint?: HelperCredentialMint,
|
|
73
|
+
) {
|
|
74
|
+
this.mint = mint ?? ((request) => this.defaultMint(request));
|
|
57
75
|
this.refreshIdentities();
|
|
58
76
|
}
|
|
59
77
|
|
|
@@ -118,22 +136,17 @@ export class ServeAuthHelper {
|
|
|
118
136
|
pending.reject(authError('auth/internal-error', `unknown identity ${uid}`));
|
|
119
137
|
return;
|
|
120
138
|
}
|
|
121
|
-
|
|
139
|
+
void Promise.resolve(
|
|
140
|
+
this.mint({ kind: 'pick', identity, providerId: pending.req.providerId }),
|
|
141
|
+
).then(pending.resolve, pending.reject);
|
|
122
142
|
}
|
|
123
143
|
|
|
124
144
|
add(spec: NewIdentitySpec): void {
|
|
125
145
|
const pending = this.take();
|
|
126
146
|
if (!pending) return;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
displayName: spec.displayName ?? null,
|
|
131
|
-
customClaims: spec.customClaims ?? {},
|
|
132
|
-
};
|
|
133
|
-
void Promise.resolve(this.directory.add?.(identity)).then(
|
|
134
|
-
() => pending.resolve(this.credential(identity, pending.req.providerId)),
|
|
135
|
-
pending.reject,
|
|
136
|
-
);
|
|
147
|
+
void Promise.resolve(
|
|
148
|
+
this.mint({ kind: 'add', spec, providerId: pending.req.providerId }),
|
|
149
|
+
).then(pending.resolve, pending.reject);
|
|
137
150
|
}
|
|
138
151
|
|
|
139
152
|
cancel(): void {
|
|
@@ -154,25 +167,65 @@ export class ServeAuthHelper {
|
|
|
154
167
|
return pending;
|
|
155
168
|
}
|
|
156
169
|
|
|
157
|
-
private
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}),
|
|
170
|
+
private async defaultMint(
|
|
171
|
+
request:
|
|
172
|
+
| { kind: 'pick'; identity: HelperIdentity; providerId: string }
|
|
173
|
+
| { kind: 'add'; spec: NewIdentitySpec; providerId: string },
|
|
174
|
+
): Promise<UserCredential> {
|
|
175
|
+
if (request.kind === 'pick') {
|
|
176
|
+
return bareCredential(request.identity, request.providerId);
|
|
177
|
+
}
|
|
178
|
+
const identity: HelperIdentity = {
|
|
179
|
+
uid: `${request.providerId}:${request.spec.email}`,
|
|
180
|
+
email: request.spec.email,
|
|
181
|
+
displayName: request.spec.displayName ?? null,
|
|
182
|
+
customClaims: request.spec.customClaims ?? {},
|
|
171
183
|
};
|
|
172
|
-
|
|
184
|
+
await Promise.resolve(this.directory.add?.(identity));
|
|
185
|
+
return bareCredential(identity, request.providerId);
|
|
173
186
|
}
|
|
174
187
|
}
|
|
175
188
|
|
|
189
|
+
/** Bare helper User — worker path discards this in favor of `acceptIdentity`. */
|
|
190
|
+
function bareCredential(identity: HelperIdentity, providerId: string): UserCredential {
|
|
191
|
+
const issuedAtTime = new Date().toISOString();
|
|
192
|
+
const expirationTime = new Date(Date.now() + 3600_000).toISOString();
|
|
193
|
+
const user: User = {
|
|
194
|
+
uid: identity.uid,
|
|
195
|
+
email: identity.email,
|
|
196
|
+
displayName: identity.displayName,
|
|
197
|
+
isAnonymous: false,
|
|
198
|
+
emailVerified: false,
|
|
199
|
+
photoURL: null,
|
|
200
|
+
phoneNumber: null,
|
|
201
|
+
providerId: 'firebase',
|
|
202
|
+
providerData: [
|
|
203
|
+
{
|
|
204
|
+
uid: identity.uid,
|
|
205
|
+
displayName: identity.displayName,
|
|
206
|
+
email: identity.email,
|
|
207
|
+
phoneNumber: null,
|
|
208
|
+
photoURL: null,
|
|
209
|
+
providerId,
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
getIdToken: async () => `pyric-serve-${identity.uid}`,
|
|
213
|
+
getIdTokenResult: async () => ({
|
|
214
|
+
token: `pyric-serve-${identity.uid}`,
|
|
215
|
+
claims: {
|
|
216
|
+
sub: identity.uid,
|
|
217
|
+
...identity.customClaims,
|
|
218
|
+
firebase: { sign_in_provider: providerId },
|
|
219
|
+
},
|
|
220
|
+
signInProvider: providerId,
|
|
221
|
+
expirationTime,
|
|
222
|
+
issuedAtTime,
|
|
223
|
+
authTime: issuedAtTime,
|
|
224
|
+
}),
|
|
225
|
+
};
|
|
226
|
+
return { user, providerId, operationType: 'signIn' };
|
|
227
|
+
}
|
|
228
|
+
|
|
176
229
|
function authError(code: string, message: string): Error & { code: string } {
|
|
177
230
|
const error = new Error(message) as Error & { code: string };
|
|
178
231
|
error.name = 'FirebaseError';
|
|
@@ -7,46 +7,137 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import * as ip from 'pyric/database';
|
|
9
9
|
import { getDatabase as pyricGetDatabase } from 'pyric/database';
|
|
10
|
+
import { queryIdentifier } from 'pyric/database/internal';
|
|
11
|
+
import { rtdbChild, rtdbGetDatabase, rtdbRef } from '../worker/client/rtdb-references.js';
|
|
12
|
+
import { rtdbGet } from '../worker/client/rtdb-reads.js';
|
|
10
13
|
import {
|
|
11
|
-
rtdbChild,
|
|
12
|
-
rtdbConnectDatabaseEmulator,
|
|
13
|
-
rtdbGet,
|
|
14
|
-
rtdbGetDatabase,
|
|
15
|
-
rtdbOff,
|
|
16
|
-
rtdbOnValue,
|
|
17
14
|
rtdbPush,
|
|
18
|
-
rtdbRef,
|
|
19
15
|
rtdbRemove,
|
|
20
|
-
rtdbServerTimestamp,
|
|
21
16
|
rtdbSet,
|
|
17
|
+
rtdbSetPriority,
|
|
18
|
+
rtdbSetWithPriority,
|
|
22
19
|
rtdbUpdate,
|
|
23
|
-
} from '../worker/client.js';
|
|
20
|
+
} from '../worker/client/rtdb-writes.js';
|
|
21
|
+
import {
|
|
22
|
+
rtdbOff,
|
|
23
|
+
rtdbOnChildAdded,
|
|
24
|
+
rtdbOnChildChanged,
|
|
25
|
+
rtdbOnChildMoved,
|
|
26
|
+
rtdbOnChildRemoved,
|
|
27
|
+
rtdbOnValue,
|
|
28
|
+
} from '../worker/client/rtdb-listeners.js';
|
|
29
|
+
import { rtdbRunTransaction } from '../worker/client/rtdb-transactions.js';
|
|
30
|
+
import {
|
|
31
|
+
RtdbOnDisconnect,
|
|
32
|
+
rtdbGoOffline,
|
|
33
|
+
rtdbGoOnline,
|
|
34
|
+
rtdbOnDisconnect,
|
|
35
|
+
} from '../worker/client/rtdb-connection-lifecycle.js';
|
|
36
|
+
import {
|
|
37
|
+
rtdbConnectDatabaseEmulator,
|
|
38
|
+
rtdbServerTimestamp,
|
|
39
|
+
} from '../worker/client/rtdb-controls.js';
|
|
24
40
|
import { useWorker } from './worker-runtime.js';
|
|
25
41
|
import { getApp, type FirebaseApp } from 'pyric/app';
|
|
26
42
|
import { workerClientForApp } from './app-client.js';
|
|
27
43
|
|
|
28
44
|
const workerDatabaseByApp = new WeakMap<FirebaseApp, ReturnType<typeof pyricGetDatabase>>();
|
|
29
45
|
|
|
46
|
+
type WorkerSnapshot = Awaited<ReturnType<typeof rtdbGet>>;
|
|
47
|
+
|
|
48
|
+
function wrapWorkerSnapshot(snapshot: WorkerSnapshot): ip.DataSnapshot {
|
|
49
|
+
return new ip.DataSnapshot({
|
|
50
|
+
key: snapshot.key,
|
|
51
|
+
size: snapshot.size,
|
|
52
|
+
priority: snapshot.priority,
|
|
53
|
+
ref: snapshot.ref as unknown as ip.DatabaseReference,
|
|
54
|
+
exists: () => snapshot.exists(),
|
|
55
|
+
val: () => snapshot.val() as ip.JsonValue,
|
|
56
|
+
child: (path) => wrapWorkerSnapshot(snapshot.child(path)),
|
|
57
|
+
hasChild: (path) => snapshot.hasChild(path),
|
|
58
|
+
hasChildren: () => snapshot.hasChildren(),
|
|
59
|
+
exportVal: () => snapshot.exportVal() as ip.JsonValue,
|
|
60
|
+
toJSON: () => snapshot.toJSON() as ip.JsonValue,
|
|
61
|
+
forEach: (callback) => snapshot.forEach((childSnapshot) =>
|
|
62
|
+
callback(wrapWorkerSnapshot(childSnapshot))),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
30
66
|
export const getDatabase = ((app?: FirebaseApp) => {
|
|
31
67
|
const resolved = app ?? getApp();
|
|
32
68
|
if (!useWorker) return pyricGetDatabase(resolved);
|
|
33
69
|
const existing = workerDatabaseByApp.get(resolved);
|
|
34
70
|
if (existing) return existing;
|
|
35
71
|
const client = workerClientForApp(resolved);
|
|
36
|
-
const handle = Object.assign(
|
|
72
|
+
const handle = Object.assign(
|
|
73
|
+
new ip.Database(undefined, resolved),
|
|
74
|
+
rtdbGetDatabase(client),
|
|
75
|
+
{ app: resolved },
|
|
76
|
+
) as ReturnType<typeof pyricGetDatabase>;
|
|
37
77
|
workerDatabaseByApp.set(resolved, handle);
|
|
38
78
|
return handle;
|
|
39
79
|
}) as typeof pyricGetDatabase;
|
|
40
80
|
|
|
41
81
|
export const ref = (useWorker ? rtdbRef : ip.ref) as typeof ip.ref;
|
|
42
82
|
export const child = (useWorker ? rtdbChild : ip.child) as typeof ip.child;
|
|
43
|
-
export const get = (
|
|
83
|
+
export const get = (
|
|
84
|
+
useWorker
|
|
85
|
+
? (async (target: Parameters<typeof ip.get>[0]) =>
|
|
86
|
+
wrapWorkerSnapshot(await rtdbGet(target as never)))
|
|
87
|
+
: ip.get
|
|
88
|
+
) as typeof ip.get;
|
|
44
89
|
export const set = (useWorker ? rtdbSet : ip.set) as typeof ip.set;
|
|
45
90
|
export const update = (useWorker ? rtdbUpdate : ip.update) as typeof ip.update;
|
|
46
91
|
export const remove = (useWorker ? rtdbRemove : ip.remove) as typeof ip.remove;
|
|
47
92
|
export const push = (useWorker ? rtdbPush : ip.push) as typeof ip.push;
|
|
48
|
-
export const onValue = (
|
|
93
|
+
export const onValue = (
|
|
94
|
+
useWorker
|
|
95
|
+
? ((
|
|
96
|
+
target: Parameters<typeof ip.onValue>[0],
|
|
97
|
+
callback: Parameters<typeof ip.onValue>[1],
|
|
98
|
+
cancelOrOptions?: Parameters<typeof ip.onValue>[2],
|
|
99
|
+
options?: Parameters<typeof ip.onValue>[3],
|
|
100
|
+
) => rtdbOnValue(
|
|
101
|
+
target as never,
|
|
102
|
+
(snapshot) => callback(wrapWorkerSnapshot(snapshot)),
|
|
103
|
+
cancelOrOptions as never,
|
|
104
|
+
options,
|
|
105
|
+
callback,
|
|
106
|
+
))
|
|
107
|
+
: ip.onValue
|
|
108
|
+
) as typeof ip.onValue;
|
|
109
|
+
export const onChildAdded = (
|
|
110
|
+
useWorker
|
|
111
|
+
? ((target: Parameters<typeof ip.onChildAdded>[0], callback: Parameters<typeof ip.onChildAdded>[1], cancelOrOptions?: Parameters<typeof ip.onChildAdded>[2], options?: Parameters<typeof ip.onChildAdded>[3]) =>
|
|
112
|
+
rtdbOnChildAdded(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
|
|
113
|
+
: ip.onChildAdded
|
|
114
|
+
) as typeof ip.onChildAdded;
|
|
115
|
+
export const onChildChanged = (
|
|
116
|
+
useWorker
|
|
117
|
+
? ((target: Parameters<typeof ip.onChildChanged>[0], callback: Parameters<typeof ip.onChildChanged>[1], cancelOrOptions?: Parameters<typeof ip.onChildChanged>[2], options?: Parameters<typeof ip.onChildChanged>[3]) =>
|
|
118
|
+
rtdbOnChildChanged(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
|
|
119
|
+
: ip.onChildChanged
|
|
120
|
+
) as typeof ip.onChildChanged;
|
|
121
|
+
export const onChildRemoved = (
|
|
122
|
+
useWorker
|
|
123
|
+
? ((target: Parameters<typeof ip.onChildRemoved>[0], callback: Parameters<typeof ip.onChildRemoved>[1], cancelOrOptions?: Parameters<typeof ip.onChildRemoved>[2], options?: Parameters<typeof ip.onChildRemoved>[3]) =>
|
|
124
|
+
rtdbOnChildRemoved(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
|
|
125
|
+
: ip.onChildRemoved
|
|
126
|
+
) as typeof ip.onChildRemoved;
|
|
127
|
+
export const onChildMoved = (
|
|
128
|
+
useWorker
|
|
129
|
+
? ((target: Parameters<typeof ip.onChildMoved>[0], callback: Parameters<typeof ip.onChildMoved>[1], cancelOrOptions?: Parameters<typeof ip.onChildMoved>[2], options?: Parameters<typeof ip.onChildMoved>[3]) =>
|
|
130
|
+
rtdbOnChildMoved(target as never, (snapshot, previous) => callback(wrapWorkerSnapshot(snapshot), previous), cancelOrOptions as never, options, callback))
|
|
131
|
+
: ip.onChildMoved
|
|
132
|
+
) as typeof ip.onChildMoved;
|
|
133
|
+
export const onDisconnect = (
|
|
134
|
+
useWorker ? rtdbOnDisconnect : ip.onDisconnect
|
|
135
|
+
) as typeof ip.onDisconnect;
|
|
136
|
+
export const OnDisconnect = (
|
|
137
|
+
useWorker ? RtdbOnDisconnect : ip.OnDisconnect
|
|
138
|
+
) as typeof ip.OnDisconnect;
|
|
49
139
|
export const off = (useWorker ? rtdbOff : ip.off) as typeof ip.off;
|
|
140
|
+
export const increment = ip.increment;
|
|
50
141
|
export const serverTimestamp = (
|
|
51
142
|
useWorker ? rtdbServerTimestamp : ip.serverTimestamp
|
|
52
143
|
) as typeof ip.serverTimestamp;
|
|
@@ -55,12 +146,12 @@ export const connectDatabaseEmulator = (
|
|
|
55
146
|
) as typeof ip.connectDatabaseEmulator;
|
|
56
147
|
|
|
57
148
|
// ── Low-hanging-fruit exports (issue #149) ────────────────────────────────
|
|
58
|
-
// Served mode is always sandbox-backed (never a prod handle)
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
export const goOffline = (
|
|
63
|
-
export const goOnline = (
|
|
149
|
+
// Served mode is always sandbox-backed (never a prod handle). The connection
|
|
150
|
+
// controls still cross the worker boundary because goOffline drains that
|
|
151
|
+
// port's one-shot onDisconnect queue; transport-selection controls remain
|
|
152
|
+
// honest no-ops in either runtime.
|
|
153
|
+
export const goOffline = (useWorker ? rtdbGoOffline : ip.goOffline) as typeof ip.goOffline;
|
|
154
|
+
export const goOnline = (useWorker ? rtdbGoOnline : ip.goOnline) as typeof ip.goOnline;
|
|
64
155
|
export const forceLongPolling = (() => {}) as typeof ip.forceLongPolling;
|
|
65
156
|
export const forceWebSockets = (() => {}) as typeof ip.forceWebSockets;
|
|
66
157
|
export const enableLogging = ((_logger?: unknown, _persistent?: unknown) => {}) as typeof ip.enableLogging;
|
|
@@ -83,47 +174,79 @@ export const refFromURL = ((db: unknown, url: string) => {
|
|
|
83
174
|
return (ref as (db: unknown, path?: string) => unknown)(db, path);
|
|
84
175
|
}) as typeof ip.refFromURL;
|
|
85
176
|
|
|
86
|
-
function unsupportedWorkerApi(name: string): never {
|
|
87
|
-
throw new Error(
|
|
88
|
-
`firebase/database ${name}() is not supported over the pyric SharedWorker yet. ` +
|
|
89
|
-
'Use the in-page fallback for this operation.',
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
177
|
export const runTransaction = (
|
|
94
|
-
useWorker
|
|
178
|
+
useWorker
|
|
179
|
+
? (async (
|
|
180
|
+
target: Parameters<typeof ip.runTransaction>[0],
|
|
181
|
+
update: Parameters<typeof ip.runTransaction>[1],
|
|
182
|
+
options?: Parameters<typeof ip.runTransaction>[2],
|
|
183
|
+
) => {
|
|
184
|
+
const result = await rtdbRunTransaction(
|
|
185
|
+
target as never,
|
|
186
|
+
update as (current: unknown) => unknown,
|
|
187
|
+
options,
|
|
188
|
+
);
|
|
189
|
+
return new ip.TransactionResult(result.committed, wrapWorkerSnapshot(result.snapshot));
|
|
190
|
+
})
|
|
191
|
+
: ip.runTransaction
|
|
95
192
|
) as typeof ip.runTransaction;
|
|
96
193
|
|
|
97
194
|
export const query = (
|
|
98
|
-
useWorker
|
|
195
|
+
useWorker
|
|
196
|
+
? ((target: Parameters<typeof ip.query>[0], ...constraints: Parameters<typeof ip.query>[1][]) => {
|
|
197
|
+
const built = ip.query(target, ...constraints);
|
|
198
|
+
return {
|
|
199
|
+
...built,
|
|
200
|
+
isEqual(other: ip.Query | null) {
|
|
201
|
+
return other !== null
|
|
202
|
+
&& 'port' in built.ref
|
|
203
|
+
&& 'port' in other.ref
|
|
204
|
+
&& built.ref.port === other.ref.port
|
|
205
|
+
&& built.ref._path === other.ref._path
|
|
206
|
+
&& queryIdentifier(built._spec) === queryIdentifier(other._spec);
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
})
|
|
210
|
+
: ip.query
|
|
99
211
|
) as typeof ip.query;
|
|
100
|
-
export const orderByChild =
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
export const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
export const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
export const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
export const
|
|
113
|
-
useWorker ?
|
|
114
|
-
) as typeof ip.
|
|
115
|
-
export const
|
|
116
|
-
useWorker ?
|
|
117
|
-
) as typeof ip.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
export const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
export
|
|
128
|
-
|
|
129
|
-
|
|
212
|
+
export const orderByChild = ip.orderByChild;
|
|
213
|
+
export const orderByKey = ip.orderByKey;
|
|
214
|
+
export const orderByPriority = ip.orderByPriority;
|
|
215
|
+
export const orderByValue = ip.orderByValue;
|
|
216
|
+
export const startAt = ip.startAt;
|
|
217
|
+
export const startAfter = ip.startAfter;
|
|
218
|
+
export const endAt = ip.endAt;
|
|
219
|
+
export const endBefore = ip.endBefore;
|
|
220
|
+
export const equalTo = ip.equalTo;
|
|
221
|
+
export const limitToFirst = ip.limitToFirst;
|
|
222
|
+
export const limitToLast = ip.limitToLast;
|
|
223
|
+
|
|
224
|
+
export const setPriority = (
|
|
225
|
+
useWorker ? rtdbSetPriority : ip.setPriority
|
|
226
|
+
) as typeof ip.setPriority;
|
|
227
|
+
export const setWithPriority = (
|
|
228
|
+
useWorker ? rtdbSetWithPriority : ip.setWithPriority
|
|
229
|
+
) as typeof ip.setWithPriority;
|
|
230
|
+
|
|
231
|
+
// Runtime constructors and type-only declarations expected by common
|
|
232
|
+
// `firebase/database` imports. Served worker results are wrapped above so the
|
|
233
|
+
// public handles, snapshots, constraints, and transaction results keep these
|
|
234
|
+
// observable constructor identities.
|
|
235
|
+
export const Database = ip.Database;
|
|
236
|
+
export const DataSnapshot = ip.DataSnapshot;
|
|
237
|
+
export const QueryConstraint = ip.QueryConstraint;
|
|
238
|
+
export const TransactionResult = ip.TransactionResult;
|
|
239
|
+
export type Database = ip.Database;
|
|
240
|
+
export type DataSnapshot = ip.DataSnapshot;
|
|
241
|
+
export type QueryConstraint = ip.QueryConstraint;
|
|
242
|
+
export type TransactionResult = ip.TransactionResult;
|
|
243
|
+
export type OnDisconnect = ip.OnDisconnect;
|
|
244
|
+
export type DatabaseReference = ip.DatabaseReference;
|
|
245
|
+
export type EmulatorMockTokenOptions = ip.EmulatorMockTokenOptions;
|
|
246
|
+
export type EventType = ip.EventType;
|
|
247
|
+
export type ListenOptions = ip.ListenOptions;
|
|
248
|
+
export type Query = ip.Query;
|
|
249
|
+
export type QueryConstraintType = ip.QueryConstraintType;
|
|
250
|
+
export type ThenableReference = ip.ThenableReference;
|
|
251
|
+
export type TransactionOptions = ip.TransactionOptions;
|
|
252
|
+
export type Unsubscribe = ip.Unsubscribe;
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* `/__pyric/sdk/init.js` — the script tag `pyric dev` injects into every
|
|
3
3
|
* served HTML page. Pulls the shared runtime and mounts the sign-in helper.
|
|
4
4
|
* In worker mode the helper reads the worker user directory and owns UI state
|
|
5
|
-
* only; in fallback mode it
|
|
5
|
+
* only; in fallback mode it mints credentials via `createSignInCredential`
|
|
6
|
+
* so OAuth users carry real provider metadata.
|
|
6
7
|
*/
|
|
7
8
|
import { getAuth, sandbox as authSandbox } from 'pyric/auth';
|
|
8
9
|
import {
|
|
@@ -19,27 +20,36 @@ import { getPyricRuntimeStatus } from '../runtime/status.js';
|
|
|
19
20
|
|
|
20
21
|
const localAuth = useWorker ? null : getAuth(sandbox);
|
|
21
22
|
const workerAuth = useWorker && workerDb ? getWorkerAuth(workerDb) : null;
|
|
22
|
-
const helper =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
const helper = workerAuth
|
|
24
|
+
? new ServeAuthHelper({
|
|
25
|
+
list: async () => (await listUsers(workerAuth)).map((user) => ({
|
|
26
|
+
uid: user.uid,
|
|
27
|
+
email: user.email,
|
|
28
|
+
displayName: user.displayName,
|
|
29
|
+
customClaims: user.customClaims,
|
|
30
|
+
})),
|
|
31
|
+
})
|
|
32
|
+
: new ServeAuthHelper(
|
|
33
|
+
{
|
|
33
34
|
list: () => authSandbox.listIdentities(localAuth!),
|
|
34
|
-
add: (identity) => authSandbox.seedUsers(localAuth!, [{
|
|
35
|
-
uid: identity.uid,
|
|
36
|
-
email: identity.email ?? '',
|
|
37
|
-
password: '__pyric_popup_no_password__',
|
|
38
|
-
displayName: identity.displayName ?? undefined,
|
|
39
|
-
customClaims: identity.customClaims,
|
|
40
|
-
}]),
|
|
41
35
|
},
|
|
42
|
-
)
|
|
36
|
+
(request) => {
|
|
37
|
+
if (request.kind === 'pick') {
|
|
38
|
+
return authSandbox.createSignInCredential(localAuth!, {
|
|
39
|
+
providerId: request.providerId,
|
|
40
|
+
uid: request.identity.uid,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return authSandbox.createSignInCredential(localAuth!, {
|
|
44
|
+
providerId: request.providerId,
|
|
45
|
+
spec: {
|
|
46
|
+
email: request.spec.email,
|
|
47
|
+
displayName: request.spec.displayName,
|
|
48
|
+
customClaims: request.spec.customClaims,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
);
|
|
43
53
|
const resolver = helper.resolver();
|
|
44
54
|
installServeAuthResolver(resolver);
|
|
45
55
|
if (localAuth) authSandbox.setAuthFlowResolver(localAuth, resolver);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { SANDBOX_BUILD_MARKER } from './sandbox-marker.js';
|
|
2
|
+
|
|
3
|
+
/** The import-map targets. Spec → served URL. */
|
|
4
|
+
export function sdkImportMap(): Record<string, string> {
|
|
5
|
+
return {
|
|
6
|
+
'firebase/ai': '/__pyric/sdk/ai.js',
|
|
7
|
+
'firebase/app': '/__pyric/sdk/app.js',
|
|
8
|
+
'firebase/auth': '/__pyric/sdk/auth.js',
|
|
9
|
+
'firebase/database': '/__pyric/sdk/database.js',
|
|
10
|
+
'firebase/firestore': '/__pyric/sdk/firestore.js',
|
|
11
|
+
'firebase/messaging': '/__pyric/sdk/messaging.js',
|
|
12
|
+
'firebase/messaging/sw': '/__pyric/sdk/messaging-sw.js',
|
|
13
|
+
'firebase/storage': '/__pyric/sdk/storage.js',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Inject the sandbox import map and boot tags before application modules. */
|
|
18
|
+
export function injectServeTags(
|
|
19
|
+
html: string,
|
|
20
|
+
importMap: Record<string, string> = sdkImportMap(),
|
|
21
|
+
workerVersion?: string,
|
|
22
|
+
forceInPage = false,
|
|
23
|
+
): string {
|
|
24
|
+
const marker = 'data-pyric-serve';
|
|
25
|
+
if (html.includes(marker)) return html;
|
|
26
|
+
// A sandbox build already bundles its runtime. Adding the import map and
|
|
27
|
+
// init module would boot a second backend; only the staleness stamp belongs.
|
|
28
|
+
if (html.includes(SANDBOX_BUILD_MARKER)) {
|
|
29
|
+
if (!workerVersion || html.includes('pyric-worker-v')) return html;
|
|
30
|
+
const meta = `<meta name="pyric-worker-v" content="${workerVersion}" ${marker}>`;
|
|
31
|
+
const headTag = html.match(/<head[^>]*>/i);
|
|
32
|
+
if (headTag && headTag.index !== undefined) {
|
|
33
|
+
const at = headTag.index + headTag[0].length;
|
|
34
|
+
return html.slice(0, at) + meta + html.slice(at);
|
|
35
|
+
}
|
|
36
|
+
return meta + html;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// SharedWorkers survive page reloads, so the page compares this served hash
|
|
40
|
+
// with the worker's baked hash and can offer an explicit worker update.
|
|
41
|
+
const versionMeta = workerVersion
|
|
42
|
+
? `<meta name="pyric-worker-v" content="${workerVersion}" ${marker}>`
|
|
43
|
+
: '';
|
|
44
|
+
// Bridge mode must select the in-page backend before any application module
|
|
45
|
+
// runs, otherwise the agent and application would use different sandboxes.
|
|
46
|
+
const forceTag = forceInPage
|
|
47
|
+
? `<script ${marker}>globalThis.__PYRIC_FORCE_INPAGE__=true;</script>`
|
|
48
|
+
: '';
|
|
49
|
+
const tags =
|
|
50
|
+
versionMeta +
|
|
51
|
+
forceTag +
|
|
52
|
+
`<script type="importmap" ${marker}>${JSON.stringify({ imports: importMap })}</script>` +
|
|
53
|
+
`<script type="module" src="/__pyric/sdk/init.js" ${marker}></script>`;
|
|
54
|
+
const head = html.match(/<head[^>]*>/i);
|
|
55
|
+
if (head && head.index !== undefined) {
|
|
56
|
+
const at = head.index + head[0].length;
|
|
57
|
+
return html.slice(0, at) + tags + html.slice(at);
|
|
58
|
+
}
|
|
59
|
+
const htmlTag = html.match(/<html[^>]*>/i);
|
|
60
|
+
if (htmlTag && htmlTag.index !== undefined) {
|
|
61
|
+
const at = htmlTag.index + htmlTag[0].length;
|
|
62
|
+
return html.slice(0, at) + tags + html.slice(at);
|
|
63
|
+
}
|
|
64
|
+
return tags + html;
|
|
65
|
+
}
|