@pyric/cli 0.1.0-alpha.20 → 0.1.0-alpha.21
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/README.md +64 -89
- package/dist/assurance/.generated/conformance-verdicts.d.ts +68 -1
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +68 -1
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/bridge/client/dispatch.d.ts +25 -19
- package/dist/bridge/client/dispatch.d.ts.map +1 -1
- package/dist/bridge/client/dispatch.js +41 -48
- package/dist/bridge/client/dispatch.js.map +1 -1
- package/dist/bridge/client/tool-family-factories.d.ts +26 -0
- package/dist/bridge/client/tool-family-factories.d.ts.map +1 -0
- package/dist/bridge/client/tool-family-factories.js +10 -0
- package/dist/bridge/client/tool-family-factories.js.map +1 -0
- package/dist/bridge/server/mcp-contract.d.ts +7 -6
- package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
- package/dist/bridge/server/mcp-contract.js +9 -48
- package/dist/bridge/server/mcp-contract.js.map +1 -1
- package/dist/bridge/server/peer.d.ts +11 -1
- package/dist/bridge/server/peer.d.ts.map +1 -1
- package/dist/bridge/server/peer.js +22 -1
- package/dist/bridge/server/peer.js.map +1 -1
- package/dist/bridge/server/tool-family-factories.d.ts +30 -0
- package/dist/bridge/server/tool-family-factories.d.ts.map +1 -0
- package/dist/bridge/server/tool-family-factories.js +22 -0
- package/dist/bridge/server/tool-family-factories.js.map +1 -0
- package/dist/bridge/server/tool-metadata.d.ts +17 -18
- package/dist/bridge/server/tool-metadata.d.ts.map +1 -1
- package/dist/bridge/server/tool-metadata.js +24 -59
- package/dist/bridge/server/tool-metadata.js.map +1 -1
- package/dist/bridge/tool-families.d.ts +48 -0
- package/dist/bridge/tool-families.d.ts.map +1 -0
- package/dist/bridge/tool-families.generated.d.ts +32 -0
- package/dist/bridge/tool-families.generated.d.ts.map +1 -0
- package/dist/bridge/tool-families.generated.js +15 -0
- package/dist/bridge/tool-families.generated.js.map +1 -0
- package/dist/bridge/tool-families.js +51 -0
- package/dist/bridge/tool-families.js.map +1 -0
- package/dist/bridge/tool-family-records/conformance.d.ts +7 -0
- package/dist/bridge/tool-family-records/conformance.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/conformance.js +6 -0
- package/dist/bridge/tool-family-records/conformance.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-data.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-data.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-data.js +15 -0
- package/dist/bridge/tool-family-records/firestore-data.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-inspect.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-inspect.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-inspect.js +6 -0
- package/dist/bridge/tool-family-records/firestore-inspect.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-rules.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-rules.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-rules.js +15 -0
- package/dist/bridge/tool-family-records/firestore-rules.js.map +1 -0
- package/dist/bridge/tool-family-records/firestore-simulator.d.ts +7 -0
- package/dist/bridge/tool-family-records/firestore-simulator.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/firestore-simulator.js +16 -0
- package/dist/bridge/tool-family-records/firestore-simulator.js.map +1 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.d.ts +7 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.d.ts.map +1 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.js +6 -0
- package/dist/bridge/tool-family-records/rtdb-inspection.js.map +1 -0
- package/dist/bundler/externals.d.ts +37 -0
- package/dist/bundler/externals.d.ts.map +1 -0
- package/dist/bundler/externals.js +52 -0
- package/dist/bundler/externals.js.map +1 -0
- package/dist/bundler/index.d.ts +17 -0
- package/dist/bundler/index.d.ts.map +1 -0
- package/dist/bundler/index.js +17 -0
- package/dist/bundler/index.js.map +1 -0
- package/dist/cli/inlined-sdk-scanner.d.ts +6 -0
- package/dist/cli/inlined-sdk-scanner.d.ts.map +1 -0
- package/dist/cli/inlined-sdk-scanner.js +82 -0
- package/dist/cli/inlined-sdk-scanner.js.map +1 -0
- package/dist/cli/sandbox-interlock.d.ts +97 -0
- package/dist/cli/sandbox-interlock.d.ts.map +1 -0
- package/dist/cli/sandbox-interlock.js +112 -0
- package/dist/cli/sandbox-interlock.js.map +1 -0
- package/dist/cli/sandbox-runner.d.ts +20 -12
- package/dist/cli/sandbox-runner.d.ts.map +1 -1
- package/dist/cli/sandbox-runner.js +24 -21
- package/dist/cli/sandbox-runner.js.map +1 -1
- package/dist/cli/serve.d.ts +6 -10
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +57 -77
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/unsupported-runtime.d.ts +27 -0
- package/dist/cli/unsupported-runtime.d.ts.map +1 -0
- package/dist/cli/unsupported-runtime.js +63 -0
- package/dist/cli/unsupported-runtime.js.map +1 -0
- package/dist/conformance/.generated/can-i-use-browser.d.ts +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 +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/child.d.ts +37 -0
- package/dist/functions-rtdb/child.d.ts.map +1 -1
- package/dist/functions-rtdb/child.js +90 -21
- package/dist/functions-rtdb/child.js.map +1 -1
- package/dist/functions-rtdb/development-runtime.d.ts +3 -0
- package/dist/functions-rtdb/development-runtime.d.ts.map +1 -1
- package/dist/functions-rtdb/development-runtime.js +1 -0
- package/dist/functions-rtdb/development-runtime.js.map +1 -1
- package/dist/google-endpoints.d.ts +67 -0
- package/dist/google-endpoints.d.ts.map +1 -0
- package/dist/google-endpoints.js +119 -0
- package/dist/google-endpoints.js.map +1 -0
- package/dist/next/runtime-env.d.ts.map +1 -1
- package/dist/next/runtime-env.js +5 -0
- package/dist/next/runtime-env.js.map +1 -1
- package/dist/next/with-pyric.d.ts +1 -1
- package/dist/next/with-pyric.js +1 -1
- package/dist/register/beacon.d.ts +69 -0
- package/dist/register/beacon.d.ts.map +1 -0
- package/dist/register/beacon.js +199 -0
- package/dist/register/beacon.js.map +1 -0
- package/dist/register/index.d.ts.map +1 -1
- package/dist/register/index.js +65 -6
- package/dist/register/index.js.map +1 -1
- package/dist/register/net-guard.d.ts +110 -0
- package/dist/register/net-guard.d.ts.map +1 -0
- package/dist/register/net-guard.js +462 -0
- package/dist/register/net-guard.js.map +1 -0
- package/dist/serve/ai-diagnostics-relay.d.ts +63 -0
- package/dist/serve/ai-diagnostics-relay.d.ts.map +1 -0
- package/dist/serve/ai-diagnostics-relay.js +125 -0
- package/dist/serve/ai-diagnostics-relay.js.map +1 -0
- package/dist/serve/ai-proxy.d.ts +92 -0
- package/dist/serve/ai-proxy.d.ts.map +1 -0
- package/dist/serve/ai-proxy.js +269 -0
- package/dist/serve/ai-proxy.js.map +1 -0
- package/dist/serve/ai-status.d.ts +44 -0
- package/dist/serve/ai-status.d.ts.map +1 -0
- package/dist/serve/ai-status.js +77 -0
- package/dist/serve/ai-status.js.map +1 -0
- package/dist/serve/ai-terminal-blocks.d.ts +97 -0
- package/dist/serve/ai-terminal-blocks.d.ts.map +1 -0
- package/dist/serve/ai-terminal-blocks.js +128 -0
- package/dist/serve/ai-terminal-blocks.js.map +1 -0
- package/dist/serve/ai-terminal-text.d.ts +36 -0
- package/dist/serve/ai-terminal-text.d.ts.map +1 -0
- package/dist/serve/ai-terminal-text.js +48 -0
- package/dist/serve/ai-terminal-text.js.map +1 -0
- package/dist/serve/beacon-route.d.ts +53 -0
- package/dist/serve/beacon-route.d.ts.map +1 -0
- package/dist/serve/beacon-route.js +101 -0
- package/dist/serve/beacon-route.js.map +1 -0
- package/dist/serve/entries/active-auth-registry.d.ts +16 -0
- package/dist/serve/entries/active-auth-registry.d.ts.map +1 -0
- package/dist/serve/entries/active-auth-registry.js +48 -0
- package/dist/serve/entries/active-auth-registry.js.map +1 -0
- package/dist/serve/entries/active-auth.d.ts +18 -0
- package/dist/serve/entries/active-auth.d.ts.map +1 -0
- package/dist/serve/entries/active-auth.js +84 -0
- package/dist/serve/entries/active-auth.js.map +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-core.js +4 -0
- package/dist/serve/entries/auth-helper-core.js.map +1 -1
- package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -1
- package/dist/serve/entries/auth-helper-dom.js +28 -2
- package/dist/serve/entries/auth-helper-dom.js.map +1 -1
- package/dist/serve/entries/auth.d.ts.map +1 -1
- package/dist/serve/entries/auth.js +8 -0
- package/dist/serve/entries/auth.js.map +1 -1
- package/dist/serve/entries/bridge-url.d.ts +1 -1
- package/dist/serve/entries/bridge-url.js +1 -1
- package/dist/serve/entries/init.d.ts.map +1 -1
- package/dist/serve/entries/init.js +70 -4
- package/dist/serve/entries/init.js.map +1 -1
- package/dist/serve/entries/runtime.d.ts.map +1 -1
- package/dist/serve/entries/runtime.js +9 -0
- package/dist/serve/entries/runtime.js.map +1 -1
- package/dist/serve/namespace.d.ts +14 -5
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +57 -124
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/runtime/chip-config.d.ts.map +1 -1
- package/dist/serve/runtime/chip-config.js +16 -2
- package/dist/serve/runtime/chip-config.js.map +1 -1
- package/dist/serve/runtime/chip-dialog.d.ts +18 -0
- package/dist/serve/runtime/chip-dialog.d.ts.map +1 -0
- package/dist/serve/runtime/chip-dialog.js +315 -0
- package/dist/serve/runtime/chip-dialog.js.map +1 -0
- package/dist/serve/runtime/chip-install.d.ts +2 -0
- package/dist/serve/runtime/chip-install.d.ts.map +1 -1
- package/dist/serve/runtime/chip-install.js +9 -4
- package/dist/serve/runtime/chip-install.js.map +1 -1
- package/dist/serve/runtime/chip-user-search.d.ts +16 -0
- package/dist/serve/runtime/chip-user-search.d.ts.map +1 -0
- package/dist/serve/runtime/chip-user-search.js +354 -0
- package/dist/serve/runtime/chip-user-search.js.map +1 -0
- package/dist/serve/runtime/chip.d.ts +10 -0
- package/dist/serve/runtime/chip.d.ts.map +1 -1
- package/dist/serve/runtime/chip.js +118 -15
- package/dist/serve/runtime/chip.js.map +1 -1
- package/dist/serve/runtime/identity.d.ts +17 -0
- package/dist/serve/runtime/identity.d.ts.map +1 -0
- package/dist/serve/runtime/identity.js +10 -0
- package/dist/serve/runtime/identity.js.map +1 -0
- package/dist/serve/sandbox-session.d.ts +7 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +2 -0
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/site-ui/_astro/{RulesCodeEditor.XtDmHOlN.js → RulesCodeEditor.DsTAsKIa.js} +1 -1
- package/dist/serve/site-ui/_astro/app.BOr2kwae.js +115 -0
- package/dist/serve/site-ui/_astro/app.DhAcImFD.js +1 -0
- package/dist/serve/site-ui/_astro/{chess-showcase.B72XYeoh.js → chess-showcase.Bn_pP6UJ.js} +2 -2
- package/dist/serve/site-ui/_astro/{example-runtime.C25_lx6Z.js → example-runtime.CXopTGv7.js} +1 -1
- package/dist/serve/site-ui/_astro/sandbox-controls.rOuZTOUG.js +510 -0
- package/dist/serve/site-ui/_astro/{seed.Co0yUJY5.js → seed.03a08f9t.js} +2 -2
- package/dist/serve/site-ui/_astro/writes.BsPBG3dp.js +653 -0
- package/dist/serve/site-ui/auth/index.html +1 -1
- package/dist/serve/site-ui/docs/_rhythm/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +1 -1
- package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +1 -1
- package/dist/serve/site-ui/docs/ai-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/api-reference/index.html +8 -1
- package/dist/serve/site-ui/docs/api-reference.md +7 -0
- package/dist/serve/site-ui/docs/app-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/auth-compat/index.html +3 -3
- package/dist/serve/site-ui/docs/auth-compat.md +2 -2
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +6 -1
- package/dist/serve/site-ui/docs/build/ai-logic.md +6 -0
- package/dist/serve/site-ui/docs/build/authentication/index.html +1 -1
- package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +1 -1
- package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +1 -1
- package/dist/serve/site-ui/docs/build/cloud-storage/index.html +1 -1
- package/dist/serve/site-ui/docs/build/realtime-database/index.html +1 -1
- package/dist/serve/site-ui/docs/conformance-scores/index.html +6 -2
- package/dist/serve/site-ui/docs/conformance-scores.md +5 -1
- package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/database-compat/index.html +44 -44
- package/dist/serve/site-ui/docs/database-compat.md +43 -43
- package/dist/serve/site-ui/docs/examples/chess/index.html +1 -1
- package/dist/serve/site-ui/docs/examples/index.html +1 -1
- package/dist/serve/site-ui/docs/firestore-compat/index.html +4 -4
- package/dist/serve/site-ui/docs/firestore-compat.md +3 -3
- package/dist/serve/site-ui/docs/firestore-flutter-compat/index.html +319 -0
- package/dist/serve/site-ui/docs/firestore-flutter-compat.md +344 -0
- package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/backend-bundlers/index.html +105 -0
- package/dist/serve/site-ui/docs/get-started/backend-bundlers.md +165 -0
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/nextjs/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/start-building/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/vite/index.html +1 -1
- package/dist/serve/site-ui/docs/index.json +2967 -1482
- package/dist/serve/site-ui/docs/messaging-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +1 -1
- package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +1 -1
- package/dist/serve/site-ui/docs/overview/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-analytics-reference-api/index.html +124 -0
- package/dist/serve/site-ui/docs/pyric-analytics-reference-api.md +287 -0
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api/index.html +87 -0
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api.md +199 -0
- package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +6 -2
- package/dist/serve/site-ui/docs/pyric-auth-reference-api.md +2 -1
- package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api/index.html +56 -0
- package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api.md +72 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +2 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api.md +1 -0
- package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +2 -1
- package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api.md +1 -0
- package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +34 -9
- package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +16 -8
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +133 -93
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +61 -1
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api.md +2 -2
- package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-database-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api/index.html +559 -0
- package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api.md +1240 -0
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +40 -11
- package/dist/serve/site-ui/docs/pyric-firestore-reference-api.md +18 -8
- package/dist/serve/site-ui/docs/pyric-functions-reference-api/index.html +67 -0
- package/dist/serve/site-ui/docs/pyric-functions-reference-api.md +149 -0
- package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-performance-reference-api/index.html +35 -0
- package/dist/serve/site-ui/docs/pyric-performance-reference-api.md +69 -0
- package/dist/serve/site-ui/docs/pyric-remote-config-reference-api/index.html +132 -0
- package/dist/serve/site-ui/docs/pyric-remote-config-reference-api.md +307 -0
- package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +52 -17
- package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api.md +48 -9
- package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +239 -49
- package/dist/serve/site-ui/docs/pyric-sandbox-reference-api.md +148 -31
- package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +22 -4
- package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +24 -2
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +26 -96
- package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api.md +20 -51
- package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +2 -2
- package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +124 -26
- package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api.md +58 -5
- package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +4 -5
- package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api.md +3 -4
- package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/reference/cli/index.html +6 -3
- package/dist/serve/site-ui/docs/reference/cli.md +8 -2
- package/dist/serve/site-ui/docs/rules-compat/index.html +10 -2
- package/dist/serve/site-ui/docs/rules-compat.md +9 -1
- package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +1 -1
- package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +1 -1
- package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +1 -1
- package/dist/serve/site-ui/docs/ship/test-in-node/index.html +1 -1
- package/dist/serve/site-ui/docs/storage-compat/index.html +13 -13
- package/dist/serve/site-ui/docs/storage-compat.md +12 -12
- package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +1 -1
- package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +1 -1
- package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +1 -1
- package/dist/serve/site-ui/docs/tutorial/index.html +1 -1
- package/dist/serve/site-ui/examples/chess/index.html +1 -1
- package/dist/serve/site-ui/firestore/index.html +1 -1
- package/dist/serve/site-ui/llms.txt +9 -0
- package/dist/serve/site-ui/rtdb/index.html +1 -1
- package/dist/serve/site-ui/settings/index.html +1 -1
- package/dist/serve/site-ui/storage/index.html +1 -1
- package/dist/serve/site-ui/studio/index.html +1 -1
- package/dist/serve/site-ui/traffic/index.html +1 -1
- package/dist/serve/studio/disk-workspace.d.ts.map +1 -1
- package/dist/serve/studio/disk-workspace.js +64 -2
- package/dist/serve/studio/disk-workspace.js.map +1 -1
- package/dist/serve/vite-plugin.d.ts +7 -7
- package/dist/serve/vite-plugin.js +1 -1
- package/dist/serve/vite-plugin.js.map +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +12 -0
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/client/auth.js +1 -2
- package/dist/serve/worker/client/auth.js.map +1 -1
- package/dist/serve/worker/client/core.d.ts +21 -1
- package/dist/serve/worker/client/core.d.ts.map +1 -1
- package/dist/serve/worker/client/core.js +79 -3
- package/dist/serve/worker/client/core.js.map +1 -1
- package/dist/serve/worker/client.d.ts +1 -1
- package/dist/serve/worker/client.d.ts.map +1 -1
- package/dist/serve/worker/client.js +1 -1
- package/dist/serve/worker/client.js.map +1 -1
- package/dist/serve/worker/context-resolver.d.ts +30 -0
- package/dist/serve/worker/context-resolver.d.ts.map +1 -0
- package/dist/serve/worker/context-resolver.js +44 -0
- package/dist/serve/worker/context-resolver.js.map +1 -0
- package/dist/serve/worker/entry.js +23 -19
- package/dist/serve/worker/entry.js.map +1 -1
- package/dist/serve/worker/host/core.d.ts +1 -0
- package/dist/serve/worker/host/core.d.ts.map +1 -1
- package/dist/serve/worker/host/core.js +12 -6
- package/dist/serve/worker/host/core.js.map +1 -1
- package/dist/serve/worker/host/storage.js +2 -2
- package/dist/serve/worker/host-auth.js +1 -2
- package/dist/serve/worker/host-auth.js.map +1 -1
- package/dist/serve/worker/index.d.ts +1 -1
- package/dist/serve/worker/index.d.ts.map +1 -1
- package/dist/serve/worker/index.js +2 -2
- package/dist/serve/worker/index.js.map +1 -1
- package/dist/serve/worker/port-lifecycle.d.ts +18 -0
- package/dist/serve/worker/port-lifecycle.d.ts.map +1 -0
- package/dist/serve/worker/port-lifecycle.js +28 -0
- package/dist/serve/worker/port-lifecycle.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +8 -2
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/dist/verify/fixture.d.ts +1 -1
- package/package.json +16 -5
- package/src/assurance/.generated/conformance-verdicts.ts +68 -1
- package/src/bridge/client/dispatch.ts +52 -56
- package/src/bridge/client/tool-family-factories.ts +34 -0
- package/src/bridge/server/mcp-contract.ts +15 -59
- package/src/bridge/server/peer.ts +24 -1
- package/src/bridge/server/tool-family-factories.ts +40 -0
- package/src/bridge/server/tool-metadata.ts +29 -61
- package/src/bridge/tool-families.generated.ts +17 -0
- package/src/bridge/tool-families.ts +87 -0
- package/src/bridge/tool-family-records/conformance.ts +6 -0
- package/src/bridge/tool-family-records/firestore-data.ts +15 -0
- package/src/bridge/tool-family-records/firestore-inspect.ts +6 -0
- package/src/bridge/tool-family-records/firestore-rules.ts +15 -0
- package/src/bridge/tool-family-records/firestore-simulator.ts +16 -0
- package/src/bridge/tool-family-records/rtdb-inspection.ts +6 -0
- package/src/bundler/externals.ts +55 -0
- package/src/bundler/index.ts +21 -0
- package/src/cli/cli.test.ts +0 -44
- package/src/cli/inlined-sdk-scanner.ts +77 -0
- package/src/cli/sandbox-interlock.ts +167 -0
- package/src/cli/sandbox-runner.ts +37 -26
- package/src/cli/serve.ts +68 -69
- package/src/cli/unsupported-runtime.ts +68 -0
- package/src/conformance/.generated/can-i-use-browser.ts +2 -2
- package/src/conformance/.generated/can-i-use.ts +2 -2
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/functions-rtdb/child.ts +115 -21
- package/src/functions-rtdb/development-runtime.ts +4 -0
- package/src/google-endpoints.ts +155 -0
- package/src/next/runtime-env.ts +5 -0
- package/src/next/with-pyric.ts +1 -1
- package/src/register/beacon.ts +232 -0
- package/src/register/index.ts +68 -6
- package/src/register/net-guard.ts +567 -0
- package/src/serve/ai-diagnostics-relay.ts +243 -0
- package/src/serve/ai-proxy.ts +327 -0
- package/src/serve/ai-status.ts +109 -0
- package/src/serve/ai-terminal-blocks.ts +210 -0
- package/src/serve/ai-terminal-text.ts +52 -0
- package/src/serve/beacon-route.ts +141 -0
- package/src/serve/entries/active-auth-registry.ts +56 -0
- package/src/serve/entries/active-auth.ts +100 -0
- package/src/serve/entries/auth-helper-core.ts +5 -0
- package/src/serve/entries/auth-helper-dom.ts +26 -2
- package/src/serve/entries/auth.ts +8 -0
- package/src/serve/entries/bridge-url.ts +1 -1
- package/src/serve/entries/init.ts +78 -3
- package/src/serve/entries/runtime.ts +10 -0
- package/src/serve/namespace.ts +73 -140
- package/src/serve/runtime/chip-config.ts +16 -2
- package/src/serve/runtime/chip-dialog.ts +366 -0
- package/src/serve/runtime/chip-install.ts +10 -4
- package/src/serve/runtime/chip-user-search.ts +391 -0
- package/src/serve/runtime/chip.ts +140 -15
- package/src/serve/runtime/identity.ts +26 -0
- package/src/serve/sandbox-session.ts +9 -0
- package/src/serve/studio/disk-workspace.ts +76 -2
- package/src/serve/vite-plugin.ts +8 -8
- package/src/serve/vite-sandbox-generation.ts +15 -0
- package/src/serve/worker/client/auth.ts +1 -1
- package/src/serve/worker/client/core.ts +80 -3
- package/src/serve/worker/client.ts +1 -1
- package/src/serve/worker/context-resolver.ts +60 -0
- package/src/serve/worker/entry.ts +22 -18
- package/src/serve/worker/host/core.ts +9 -7
- package/src/serve/worker/host/storage.ts +2 -2
- package/src/serve/worker/host-auth.ts +1 -1
- package/src/serve/worker/index.ts +4 -1
- package/src/serve/worker/port-lifecycle.ts +45 -0
- package/src/serve/worker/serve-init.ts +9 -2
- package/src/verify/fixture.ts +1 -1
- package/dist/serve/site-ui/_astro/app.B52xr-DK.js +0 -1
- package/dist/serve/site-ui/_astro/app.DWBraPUw.js +0 -12
- package/dist/serve/site-ui/_astro/sandbox-controls.DEpnKg-O.js +0 -1169
- package/dist/serve/site-ui/_astro/writes.rpjrFzmu.js +0 -102
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import type { AuthLens } from 'pyric/sandbox';
|
|
2
|
+
import type { AuthUserRecord } from 'pyric/auth';
|
|
3
|
+
import type { RuntimeIdentityBindings } from './identity.js';
|
|
4
|
+
import {
|
|
5
|
+
createUserSearchController,
|
|
6
|
+
userDisplayLabel,
|
|
7
|
+
type UserSearchController,
|
|
8
|
+
} from './chip-user-search.js';
|
|
9
|
+
|
|
10
|
+
export interface ChipDialogOptions {
|
|
11
|
+
shadowRoot: ShadowRoot;
|
|
12
|
+
identity: RuntimeIdentityBindings;
|
|
13
|
+
onToggleAdminBypass: (enable: boolean) => void;
|
|
14
|
+
getLens: () => AuthLens | undefined;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ChipDialogController {
|
|
18
|
+
element: HTMLDialogElement;
|
|
19
|
+
open(triggerElement?: HTMLElement): Promise<void>;
|
|
20
|
+
close(): void;
|
|
21
|
+
updateState(): void;
|
|
22
|
+
dispose(): void;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const DIALOG_STYLES = `
|
|
26
|
+
.impersonate-dialog:not([open]) {
|
|
27
|
+
display: none !important;
|
|
28
|
+
}
|
|
29
|
+
.impersonate-dialog {
|
|
30
|
+
all: initial; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);
|
|
31
|
+
margin: 0; padding: 0; border: 1px solid var(--pyric-border, #33333f); border-radius: 12px;
|
|
32
|
+
background: var(--pyric-content, #16161a); color: var(--pyric-text, #fbfbfe);
|
|
33
|
+
font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
34
|
+
font-size: 13px; line-height: 1.45; box-shadow: 0 16px 40px rgba(0, 0, 0, 0.6);
|
|
35
|
+
width: min(440px, 92vw); height: 480px; overflow: hidden; z-index: 2147483647;
|
|
36
|
+
}
|
|
37
|
+
.impersonate-dialog::backdrop { background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(2px); }
|
|
38
|
+
.impersonate-dialog-panel {
|
|
39
|
+
display: flex; flex-direction: column; height: 100%; padding: 20px; box-sizing: border-box; overflow: hidden;
|
|
40
|
+
}
|
|
41
|
+
.impersonate-dialog header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
|
|
42
|
+
.impersonate-dialog h2 { margin: 0; font-size: 14px; font-weight: 600; letter-spacing: -0.01em; }
|
|
43
|
+
.dialog-close {
|
|
44
|
+
align-items: center;
|
|
45
|
+
background: transparent;
|
|
46
|
+
border: 1px solid var(--pyric-border-soft, #2a2a35);
|
|
47
|
+
border-radius: 50%;
|
|
48
|
+
color: var(--pyric-muted, #89899f);
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
display: inline-flex;
|
|
51
|
+
height: 26px;
|
|
52
|
+
width: 26px;
|
|
53
|
+
justify-content: center;
|
|
54
|
+
padding: 0;
|
|
55
|
+
font-size: 11px;
|
|
56
|
+
font-family: "JetBrains Mono", ui-monospace, monospace;
|
|
57
|
+
line-height: 1;
|
|
58
|
+
transition: border-color 0.15s, color 0.15s, background 0.15s;
|
|
59
|
+
}
|
|
60
|
+
.dialog-close:hover {
|
|
61
|
+
border-color: #4a4a58;
|
|
62
|
+
color: var(--pyric-text, #fbfbfe);
|
|
63
|
+
background: rgba(255, 255, 255, 0.05);
|
|
64
|
+
}
|
|
65
|
+
.current-identity-banner {
|
|
66
|
+
display: flex; align-items: center; justify-content: space-between; padding: 10px 12px;
|
|
67
|
+
border-radius: 8px; background: rgba(255, 255, 255, 0.04); border: 1px solid var(--pyric-border-soft, #2a2a35);
|
|
68
|
+
margin-bottom: 12px; gap: 8px; height: 50px; min-height: 50px; max-height: 50px; box-sizing: border-box;
|
|
69
|
+
}
|
|
70
|
+
.current-identity-info { display: flex; align-items: center; gap: 8px; overflow: hidden; }
|
|
71
|
+
.current-identity-text { display: flex; flex-direction: column; overflow: hidden; }
|
|
72
|
+
.current-identity-name { font-weight: 500; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
73
|
+
.current-identity-uid { font-size: 10px; color: var(--pyric-muted, #89899f); font-family: "JetBrains Mono", ui-monospace, monospace; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
74
|
+
.section-heading { font-size: 10px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--pyric-muted, #89899f); margin-bottom: 8px; font-family: "JetBrains Mono", ui-monospace, monospace; font-weight: 600; }
|
|
75
|
+
.user-search-container { display: flex; flex-direction: column; gap: 8px; flex: 1; min-height: 0; margin-bottom: 12px; }
|
|
76
|
+
.user-search-box {
|
|
77
|
+
display: flex; align-items: center; gap: 8px; background: rgba(0, 0, 0, 0.25);
|
|
78
|
+
border: 1px solid var(--pyric-border-soft, #2a2a35); border-radius: 6px; padding: 6px 10px; box-sizing: border-box;
|
|
79
|
+
}
|
|
80
|
+
.user-search-box:focus-within { border-color: #4a4a58; }
|
|
81
|
+
.user-search-icon { font-size: 13px; color: var(--pyric-muted, #89899f); }
|
|
82
|
+
.user-search-input { all: initial; flex: 1; color: var(--pyric-text, #fbfbfe); font-family: "JetBrains Mono", ui-monospace, monospace; font-size: 11px; }
|
|
83
|
+
.user-search-clear-btn { all: initial; color: var(--pyric-muted, #89899f); font-size: 11px; cursor: pointer; padding: 2px 4px; font-family: "JetBrains Mono", ui-monospace, monospace; }
|
|
84
|
+
.user-search-clear-btn:hover { color: var(--pyric-text, #fbfbfe); }
|
|
85
|
+
.filter-chips {
|
|
86
|
+
display: flex; flex-wrap: nowrap; gap: 5px; height: 24px; min-height: 24px; max-height: 24px;
|
|
87
|
+
align-items: center; overflow-x: auto; overflow-y: hidden;
|
|
88
|
+
}
|
|
89
|
+
.filter-chips::-webkit-scrollbar { height: 3px; }
|
|
90
|
+
.filter-chips::-webkit-scrollbar-thumb { background: #33333f; border-radius: 3px; }
|
|
91
|
+
.filter-chip {
|
|
92
|
+
all: initial; font-family: "JetBrains Mono", ui-monospace, monospace; font-size: 10px; font-weight: 500; padding: 3px 8px; border-radius: 12px;
|
|
93
|
+
background: rgba(255, 255, 255, 0.04); border: 1px solid var(--pyric-border-soft, #2a2a35);
|
|
94
|
+
color: var(--pyric-muted, #89899f); cursor: pointer; transition: all 0.15s ease;
|
|
95
|
+
}
|
|
96
|
+
.filter-chip:hover { border-color: var(--pyric-muted, #89899f); color: var(--pyric-text, #fbfbfe); }
|
|
97
|
+
.filter-chip.selected { background: rgba(255, 255, 255, 0.1); border-color: #555566; color: var(--pyric-text, #fbfbfe); }
|
|
98
|
+
.user-search-listbox {
|
|
99
|
+
list-style: none; flex: 1; min-height: 180px; max-height: 180px; overflow-y: auto;
|
|
100
|
+
border: 1px solid var(--pyric-border-soft, #2a2a35); border-radius: 6px; background: #121215;
|
|
101
|
+
padding: 4px; display: flex; flex-direction: column; gap: 3px; box-sizing: border-box; margin: 0;
|
|
102
|
+
}
|
|
103
|
+
.user-search-listbox::-webkit-scrollbar { width: 6px; }
|
|
104
|
+
.user-search-listbox::-webkit-scrollbar-thumb { background: #33333f; border-radius: 3px; }
|
|
105
|
+
.user-search-item {
|
|
106
|
+
display: flex; align-items: center; justify-content: space-between; padding: 6px 8px;
|
|
107
|
+
border-radius: 4px; color: var(--pyric-text, #fbfbfe); font-family: inherit; font-size: 12px;
|
|
108
|
+
cursor: pointer; box-sizing: border-box; transition: background 0.1s ease;
|
|
109
|
+
}
|
|
110
|
+
.user-search-item:hover, .user-search-item.highlighted { background: rgba(255, 255, 255, 0.08); }
|
|
111
|
+
.user-item-main { display: flex; flex-direction: column; overflow: hidden; }
|
|
112
|
+
.user-item-name { font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 12px; }
|
|
113
|
+
.user-item-email, .user-item-uid { font-size: 10px; color: var(--pyric-muted, #89899f); font-family: "JetBrains Mono", ui-monospace, monospace; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
114
|
+
.user-item-badges { display: flex; gap: 4px; flex-shrink: 0; }
|
|
115
|
+
.badge { font-size: 9px; font-weight: 500; padding: 1px 5px; border-radius: 4px; text-transform: uppercase; font-family: "JetBrains Mono", ui-monospace, monospace; }
|
|
116
|
+
.badge-provider { background: rgba(255, 255, 255, 0.06); border: 1px solid var(--pyric-border-soft, #2a2a35); color: #b0b0cc; }
|
|
117
|
+
.badge-tenant { background: rgba(100, 160, 255, 0.1); border: 1px solid rgba(100, 160, 255, 0.3); color: #82b1ff; }
|
|
118
|
+
.badge-claims { background: rgba(143, 127, 232, 0.12); border: 1px solid rgba(143, 127, 232, 0.35); color: #8f7fe8; max-width: 80px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
119
|
+
.user-search-empty {
|
|
120
|
+
display: flex; align-items: center; justify-content: center; height: 100%; width: 100%;
|
|
121
|
+
text-align: center; color: var(--pyric-muted, #89899f); font-family: "JetBrains Mono", ui-monospace, monospace;
|
|
122
|
+
font-size: 11px; letter-spacing: 0.02em; padding: 14px; box-sizing: border-box;
|
|
123
|
+
}
|
|
124
|
+
.dialog-footer-actions {
|
|
125
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
126
|
+
border-top: 1px solid var(--pyric-border-soft, #2a2a35); padding-top: 14px; margin-top: auto;
|
|
127
|
+
height: 50px; min-height: 50px; max-height: 50px; box-sizing: border-box;
|
|
128
|
+
}
|
|
129
|
+
.dialog-footer-actions .button,
|
|
130
|
+
.current-identity-banner .button {
|
|
131
|
+
align-items: center; appearance: none; background: #24242c; border: 1px solid #2a2a35;
|
|
132
|
+
border-radius: 6px; color: #fbfbfe; cursor: pointer; display: inline-flex;
|
|
133
|
+
font-family: "JetBrains Mono", ui-monospace, monospace; font-size: 11px; justify-content: center;
|
|
134
|
+
letter-spacing: .04em; min-height: 32px; padding: 6px 14px; text-decoration: none;
|
|
135
|
+
text-transform: uppercase; transition: border-color 0.12s, color 0.12s, background 0.12s;
|
|
136
|
+
min-width: 120px; box-sizing: border-box; text-align: center;
|
|
137
|
+
}
|
|
138
|
+
.dialog-footer-actions .button:hover:not(:disabled),
|
|
139
|
+
.current-identity-banner .button:hover:not(:disabled) {
|
|
140
|
+
border-color: #3a3a48; background: #2a2a34; color: #ffffff;
|
|
141
|
+
}
|
|
142
|
+
.dialog-footer-actions .button.active,
|
|
143
|
+
.dialog-footer-actions .button[aria-pressed="true"] {
|
|
144
|
+
background: #1e1b2e; border-color: rgba(143, 127, 232, 0.5); color: #8f7fe8; font-weight: 600;
|
|
145
|
+
}
|
|
146
|
+
.dialog-footer-actions .button.active:hover,
|
|
147
|
+
.dialog-footer-actions .button[aria-pressed="true"]:hover {
|
|
148
|
+
background: rgba(143, 127, 232, 0.18); border-color: #8f7fe8; color: #9f91ff;
|
|
149
|
+
}
|
|
150
|
+
`;
|
|
151
|
+
|
|
152
|
+
export function createChipDialogController(options: ChipDialogOptions): ChipDialogController {
|
|
153
|
+
const {
|
|
154
|
+
shadowRoot,
|
|
155
|
+
identity,
|
|
156
|
+
onToggleAdminBypass,
|
|
157
|
+
getLens,
|
|
158
|
+
} = options;
|
|
159
|
+
|
|
160
|
+
const dialog = shadowRoot.ownerDocument.createElement('dialog');
|
|
161
|
+
dialog.className = 'impersonate-dialog';
|
|
162
|
+
dialog.setAttribute('data-impersonate-dialog', '');
|
|
163
|
+
dialog.setAttribute('aria-modal', 'true');
|
|
164
|
+
dialog.setAttribute('role', 'dialog');
|
|
165
|
+
dialog.setAttribute('aria-labelledby', 'dialog-identity-title');
|
|
166
|
+
|
|
167
|
+
dialog.innerHTML = `
|
|
168
|
+
<div class="impersonate-dialog-panel">
|
|
169
|
+
<header>
|
|
170
|
+
<h2 id="dialog-identity-title">Identity & Permissions</h2>
|
|
171
|
+
<button type="button" class="dialog-close" data-close-impersonate aria-label="Close dialog">✕</button>
|
|
172
|
+
</header>
|
|
173
|
+
|
|
174
|
+
<div class="current-identity-banner" data-current-identity-banner>
|
|
175
|
+
<div class="current-identity-info">
|
|
176
|
+
<div class="current-identity-text">
|
|
177
|
+
<span class="current-identity-name" data-identity-name>Unauthenticated Guest</span>
|
|
178
|
+
<span class="current-identity-uid" data-identity-uid>No active session</span>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
<button type="button" class="button" data-action-signout style="display: none;">Sign Out</button>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div class="section-heading">Switch Sandbox Identity</div>
|
|
185
|
+
<div class="user-search-container" data-user-search-container></div>
|
|
186
|
+
|
|
187
|
+
<footer class="dialog-footer-actions">
|
|
188
|
+
<button type="button" class="button" data-action-create-user>New User</button>
|
|
189
|
+
<button type="button" class="button" data-action-toggle-admin>Bypass Rules</button>
|
|
190
|
+
</footer>
|
|
191
|
+
</div>
|
|
192
|
+
`;
|
|
193
|
+
|
|
194
|
+
shadowRoot.appendChild(dialog);
|
|
195
|
+
|
|
196
|
+
const searchContainer = dialog.querySelector<HTMLElement>('[data-user-search-container]')!;
|
|
197
|
+
const closeButton = dialog.querySelector<HTMLButtonElement>('[data-close-impersonate]')!;
|
|
198
|
+
const identityName = dialog.querySelector<HTMLElement>('[data-identity-name]')!;
|
|
199
|
+
const identityUid = dialog.querySelector<HTMLElement>('[data-identity-uid]')!;
|
|
200
|
+
const signOutBtn = dialog.querySelector<HTMLButtonElement>('[data-action-signout]')!;
|
|
201
|
+
const createUserBtn = dialog.querySelector<HTMLButtonElement>('[data-action-create-user]')!;
|
|
202
|
+
const toggleAdminBtn = dialog.querySelector<HTMLButtonElement>('[data-action-toggle-admin]')!;
|
|
203
|
+
|
|
204
|
+
let recordedTriggerSelector: string | null = null;
|
|
205
|
+
let recordedTriggerNode: HTMLElement | null = null;
|
|
206
|
+
|
|
207
|
+
const searchController: UserSearchController = createUserSearchController({
|
|
208
|
+
container: searchContainer,
|
|
209
|
+
onSelect: async (user) => {
|
|
210
|
+
await identity.switchUser(user.uid);
|
|
211
|
+
close();
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
const updateState = (): void => {
|
|
216
|
+
const user = identity.getCurrentUser();
|
|
217
|
+
const lens = getLens();
|
|
218
|
+
const isAdmin = lens?.mode === 'admin';
|
|
219
|
+
|
|
220
|
+
if (user) {
|
|
221
|
+
identityName.textContent = userDisplayLabel(user as AuthUserRecord);
|
|
222
|
+
} else {
|
|
223
|
+
identityName.textContent = 'Unauthenticated Guest';
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (user) {
|
|
227
|
+
identityUid.textContent = isAdmin ? `${user.uid} · rules bypassed` : user.uid;
|
|
228
|
+
signOutBtn.style.display = 'inline-flex';
|
|
229
|
+
} else {
|
|
230
|
+
identityUid.textContent = isAdmin ? 'No active session · rules bypassed' : 'No active session';
|
|
231
|
+
signOutBtn.style.display = 'none';
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if (isAdmin) {
|
|
235
|
+
toggleAdminBtn.classList.add('active');
|
|
236
|
+
toggleAdminBtn.setAttribute('aria-pressed', 'true');
|
|
237
|
+
toggleAdminBtn.textContent = 'Bypass Active';
|
|
238
|
+
} else {
|
|
239
|
+
toggleAdminBtn.classList.remove('active');
|
|
240
|
+
toggleAdminBtn.setAttribute('aria-pressed', 'false');
|
|
241
|
+
toggleAdminBtn.textContent = 'Bypass Rules';
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
const close = (): void => {
|
|
246
|
+
if (dialog.open) {
|
|
247
|
+
if (typeof dialog.close === 'function') {
|
|
248
|
+
dialog.close();
|
|
249
|
+
} else {
|
|
250
|
+
dialog.removeAttribute('open');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
searchController.reset();
|
|
254
|
+
|
|
255
|
+
// Focus restoration: re-query the trigger element freshly in shadowRoot
|
|
256
|
+
// to avoid focusing a detached node if the chip re-rendered.
|
|
257
|
+
let liveTrigger = recordedTriggerNode;
|
|
258
|
+
if (recordedTriggerSelector) {
|
|
259
|
+
liveTrigger = shadowRoot.querySelector<HTMLElement>(recordedTriggerSelector);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (liveTrigger && typeof liveTrigger.focus === 'function' && liveTrigger.isConnected) {
|
|
263
|
+
liveTrigger.focus();
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const open = async (triggerElement?: HTMLElement): Promise<void> => {
|
|
268
|
+
if (triggerElement) {
|
|
269
|
+
recordedTriggerNode = triggerElement;
|
|
270
|
+
if (triggerElement.dataset.openImpersonate !== undefined) {
|
|
271
|
+
recordedTriggerSelector = '[data-open-impersonate]';
|
|
272
|
+
} else if (triggerElement.id) {
|
|
273
|
+
recordedTriggerSelector = `#${triggerElement.id}`;
|
|
274
|
+
} else {
|
|
275
|
+
recordedTriggerSelector = null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
updateState();
|
|
280
|
+
searchController.reset();
|
|
281
|
+
|
|
282
|
+
if (typeof dialog.showModal === 'function') {
|
|
283
|
+
dialog.showModal();
|
|
284
|
+
} else {
|
|
285
|
+
dialog.setAttribute('open', '');
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
try {
|
|
289
|
+
const users = await identity.listUsers();
|
|
290
|
+
searchController.setUsers(users);
|
|
291
|
+
} catch {
|
|
292
|
+
searchController.setUsers([]);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
searchController.focus();
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
closeButton.addEventListener('click', () => close());
|
|
299
|
+
|
|
300
|
+
dialog.addEventListener('click', (e: MouseEvent) => {
|
|
301
|
+
if (e.target === dialog) {
|
|
302
|
+
close();
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
dialog.addEventListener('cancel', (e: Event) => {
|
|
307
|
+
e.preventDefault();
|
|
308
|
+
close();
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
dialog.addEventListener('keydown', (e: KeyboardEvent) => {
|
|
312
|
+
if (e.key === 'Escape') {
|
|
313
|
+
e.stopPropagation();
|
|
314
|
+
close();
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
if (e.key === 'Tab') {
|
|
319
|
+
const focusables = Array.from(
|
|
320
|
+
dialog.querySelectorAll<HTMLElement>(
|
|
321
|
+
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
|
|
322
|
+
),
|
|
323
|
+
).filter((el) => !el.hasAttribute('disabled') && el.offsetParent !== null);
|
|
324
|
+
|
|
325
|
+
if (focusables.length === 0) return;
|
|
326
|
+
const first = focusables[0];
|
|
327
|
+
const last = focusables[focusables.length - 1];
|
|
328
|
+
|
|
329
|
+
if (e.shiftKey && shadowRoot.activeElement === first) {
|
|
330
|
+
e.preventDefault();
|
|
331
|
+
last.focus();
|
|
332
|
+
} else if (!e.shiftKey && shadowRoot.activeElement === last) {
|
|
333
|
+
e.preventDefault();
|
|
334
|
+
first.focus();
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
signOutBtn.addEventListener('click', async () => {
|
|
340
|
+
await identity.signOut();
|
|
341
|
+
updateState();
|
|
342
|
+
close();
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
toggleAdminBtn.addEventListener('click', () => {
|
|
346
|
+
const lens = getLens();
|
|
347
|
+
const isAdmin = lens?.mode === 'admin';
|
|
348
|
+
onToggleAdminBypass(!isAdmin);
|
|
349
|
+
updateState();
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
createUserBtn.addEventListener('click', () => {
|
|
353
|
+
close();
|
|
354
|
+
identity.openCreateUser();
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
return {
|
|
358
|
+
element: dialog,
|
|
359
|
+
open,
|
|
360
|
+
close,
|
|
361
|
+
updateState,
|
|
362
|
+
dispose() {
|
|
363
|
+
dialog.remove();
|
|
364
|
+
},
|
|
365
|
+
};
|
|
366
|
+
}
|
|
@@ -5,10 +5,12 @@ import {
|
|
|
5
5
|
} from './chip.js';
|
|
6
6
|
import { readPyricRuntimeChipConfig } from './chip-config.js';
|
|
7
7
|
import type { PyricRuntimeStatus } from './status.js';
|
|
8
|
+
import type { RuntimeIdentityBindings } from './identity.js';
|
|
8
9
|
|
|
9
10
|
export interface InstallPyricRuntimeChipOptions {
|
|
10
11
|
runtime: PyricRuntimeStatus;
|
|
11
12
|
document: Document;
|
|
13
|
+
identity?: Partial<RuntimeIdentityBindings>;
|
|
12
14
|
mount?: (options: PyricRuntimeChipOptions) => PyricRuntimeChip;
|
|
13
15
|
}
|
|
14
16
|
|
|
@@ -17,11 +19,15 @@ export function installPyricRuntimeChip(
|
|
|
17
19
|
options: InstallPyricRuntimeChipOptions,
|
|
18
20
|
): PyricRuntimeChip | null {
|
|
19
21
|
const config = readPyricRuntimeChipConfig(options.document);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
const existing = options.document.querySelector('[data-pyric-runtime-chip-host], pyric-runtime-chip');
|
|
23
|
+
if (!config || existing) return null;
|
|
24
|
+
const chipOptions: PyricRuntimeChipOptions = {
|
|
22
25
|
runtime: options.runtime,
|
|
23
26
|
document: options.document,
|
|
24
27
|
initiallyOpen: config.initiallyOpen,
|
|
25
|
-
|
|
26
|
-
}
|
|
28
|
+
identity: options.identity,
|
|
29
|
+
};
|
|
30
|
+
if (!config.studioEnabled) chipOptions.studioUrl = null;
|
|
31
|
+
const mount = options.mount ?? mountPyricRuntimeChip;
|
|
32
|
+
return mount(chipOptions);
|
|
27
33
|
}
|