@pyric/cli 0.1.0-alpha.9
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/LICENSE +216 -0
- package/README.md +156 -0
- package/README.md.orig +138 -0
- package/dist/assurance/attachment.d.ts +24 -0
- package/dist/assurance/attachment.d.ts.map +1 -0
- package/dist/assurance/attachment.js +138 -0
- package/dist/assurance/attachment.js.map +1 -0
- package/dist/assurance/browser.d.ts +7 -0
- package/dist/assurance/browser.d.ts.map +1 -0
- package/dist/assurance/browser.js +68 -0
- package/dist/assurance/browser.js.map +1 -0
- package/dist/assurance/campaign.d.ts +41 -0
- package/dist/assurance/campaign.d.ts.map +1 -0
- package/dist/assurance/campaign.js +364 -0
- package/dist/assurance/campaign.js.map +1 -0
- package/dist/assurance/capabilities.d.ts +7 -0
- package/dist/assurance/capabilities.d.ts.map +1 -0
- package/dist/assurance/capabilities.js +295 -0
- package/dist/assurance/capabilities.js.map +1 -0
- package/dist/assurance/cases.d.ts +14 -0
- package/dist/assurance/cases.d.ts.map +1 -0
- package/dist/assurance/cases.js +27 -0
- package/dist/assurance/cases.js.map +1 -0
- package/dist/assurance/generated-capabilities.d.ts +52 -0
- package/dist/assurance/generated-capabilities.d.ts.map +1 -0
- package/dist/assurance/generated-capabilities.js +329 -0
- package/dist/assurance/generated-capabilities.js.map +1 -0
- package/dist/assurance/index.d.ts +11 -0
- package/dist/assurance/index.d.ts.map +1 -0
- package/dist/assurance/index.js +9 -0
- package/dist/assurance/index.js.map +1 -0
- package/dist/assurance/runner.d.ts +3 -0
- package/dist/assurance/runner.d.ts.map +1 -0
- package/dist/assurance/runner.js +633 -0
- package/dist/assurance/runner.js.map +1 -0
- package/dist/assurance/tool-names.d.ts +4 -0
- package/dist/assurance/tool-names.d.ts.map +1 -0
- package/dist/assurance/tool-names.js +14 -0
- package/dist/assurance/tool-names.js.map +1 -0
- package/dist/assurance/tools.d.ts +19 -0
- package/dist/assurance/tools.d.ts.map +1 -0
- package/dist/assurance/tools.js +740 -0
- package/dist/assurance/tools.js.map +1 -0
- package/dist/assurance/types.d.ts +348 -0
- package/dist/assurance/types.d.ts.map +1 -0
- package/dist/assurance/types.js +7 -0
- package/dist/assurance/types.js.map +1 -0
- package/dist/assurance/validation.d.ts +8 -0
- package/dist/assurance/validation.d.ts.map +1 -0
- package/dist/assurance/validation.js +269 -0
- package/dist/assurance/validation.js.map +1 -0
- package/dist/bridge/client/bridge.d.ts +133 -0
- package/dist/bridge/client/bridge.d.ts.map +1 -0
- package/dist/bridge/client/bridge.js +429 -0
- package/dist/bridge/client/bridge.js.map +1 -0
- package/dist/bridge/client/dispatch.d.ts +41 -0
- package/dist/bridge/client/dispatch.d.ts.map +1 -0
- package/dist/bridge/client/dispatch.js +111 -0
- package/dist/bridge/client/dispatch.js.map +1 -0
- package/dist/bridge/client.d.ts +24 -0
- package/dist/bridge/client.d.ts.map +1 -0
- package/dist/bridge/client.js +26 -0
- package/dist/bridge/client.js.map +1 -0
- package/dist/bridge/protocol.d.ts +227 -0
- package/dist/bridge/protocol.d.ts.map +1 -0
- package/dist/bridge/protocol.js +131 -0
- package/dist/bridge/protocol.js.map +1 -0
- package/dist/bridge/server/audit.d.ts +19 -0
- package/dist/bridge/server/audit.d.ts.map +1 -0
- package/dist/bridge/server/audit.js +46 -0
- package/dist/bridge/server/audit.js.map +1 -0
- package/dist/bridge/server/bridge.d.ts +126 -0
- package/dist/bridge/server/bridge.d.ts.map +1 -0
- package/dist/bridge/server/bridge.js +383 -0
- package/dist/bridge/server/bridge.js.map +1 -0
- package/dist/bridge/server/headless.d.ts +36 -0
- package/dist/bridge/server/headless.d.ts.map +1 -0
- package/dist/bridge/server/headless.js +142 -0
- package/dist/bridge/server/headless.js.map +1 -0
- package/dist/bridge/server/json-schema-to-zod.d.ts +37 -0
- package/dist/bridge/server/json-schema-to-zod.d.ts.map +1 -0
- package/dist/bridge/server/json-schema-to-zod.js +93 -0
- package/dist/bridge/server/json-schema-to-zod.js.map +1 -0
- package/dist/bridge/server/local-bridge.d.ts +33 -0
- package/dist/bridge/server/local-bridge.d.ts.map +1 -0
- package/dist/bridge/server/local-bridge.js +41 -0
- package/dist/bridge/server/local-bridge.js.map +1 -0
- package/dist/bridge/server/logger.d.ts +28 -0
- package/dist/bridge/server/logger.d.ts.map +1 -0
- package/dist/bridge/server/logger.js +42 -0
- package/dist/bridge/server/logger.js.map +1 -0
- package/dist/bridge/server/mcp-contract.d.ts +21 -0
- package/dist/bridge/server/mcp-contract.d.ts.map +1 -0
- package/dist/bridge/server/mcp-contract.js +62 -0
- package/dist/bridge/server/mcp-contract.js.map +1 -0
- package/dist/bridge/server/mcp.d.ts +26 -0
- package/dist/bridge/server/mcp.d.ts.map +1 -0
- package/dist/bridge/server/mcp.js +102 -0
- package/dist/bridge/server/mcp.js.map +1 -0
- package/dist/bridge/server/peer.d.ts +39 -0
- package/dist/bridge/server/peer.d.ts.map +1 -0
- package/dist/bridge/server/peer.js +189 -0
- package/dist/bridge/server/peer.js.map +1 -0
- package/dist/bridge/server/standalone.d.ts +49 -0
- package/dist/bridge/server/standalone.d.ts.map +1 -0
- package/dist/bridge/server/standalone.js +267 -0
- package/dist/bridge/server/standalone.js.map +1 -0
- package/dist/bridge/server/tool-metadata.d.ts +38 -0
- package/dist/bridge/server/tool-metadata.d.ts.map +1 -0
- package/dist/bridge/server/tool-metadata.js +81 -0
- package/dist/bridge/server/tool-metadata.js.map +1 -0
- package/dist/bridge/server.d.ts +21 -0
- package/dist/bridge/server.d.ts.map +1 -0
- package/dist/bridge/server.js +18 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/cli/database-rules.d.ts +43 -0
- package/dist/cli/database-rules.d.ts.map +1 -0
- package/dist/cli/database-rules.js +261 -0
- package/dist/cli/database-rules.js.map +1 -0
- package/dist/cli/dev-runner.d.ts +112 -0
- package/dist/cli/dev-runner.d.ts.map +1 -0
- package/dist/cli/dev-runner.js +239 -0
- package/dist/cli/dev-runner.js.map +1 -0
- package/dist/cli/firebase-json.d.ts +66 -0
- package/dist/cli/firebase-json.d.ts.map +1 -0
- package/dist/cli/firebase-json.js +60 -0
- package/dist/cli/firebase-json.js.map +1 -0
- package/dist/cli/firestore-indexes.d.ts +21 -0
- package/dist/cli/firestore-indexes.d.ts.map +1 -0
- package/dist/cli/firestore-indexes.js +39 -0
- package/dist/cli/firestore-indexes.js.map +1 -0
- package/dist/cli/index.d.ts +56 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +379 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +50 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +182 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-proxy.d.ts +10 -0
- package/dist/cli/mcp-proxy.d.ts.map +1 -0
- package/dist/cli/mcp-proxy.js +129 -0
- package/dist/cli/mcp-proxy.js.map +1 -0
- package/dist/cli/parse-args.d.ts +20 -0
- package/dist/cli/parse-args.d.ts.map +1 -0
- package/dist/cli/parse-args.js +69 -0
- package/dist/cli/parse-args.js.map +1 -0
- package/dist/cli/rules.d.ts +55 -0
- package/dist/cli/rules.d.ts.map +1 -0
- package/dist/cli/rules.js +199 -0
- package/dist/cli/rules.js.map +1 -0
- package/dist/cli/scope.d.ts +12 -0
- package/dist/cli/scope.d.ts.map +1 -0
- package/dist/cli/scope.js +44 -0
- package/dist/cli/scope.js.map +1 -0
- package/dist/cli/serve.d.ts +122 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +844 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/service-commands.d.ts +8 -0
- package/dist/cli/service-commands.d.ts.map +1 -0
- package/dist/cli/service-commands.js +58 -0
- package/dist/cli/service-commands.js.map +1 -0
- package/dist/cli/snapshot.d.ts +22 -0
- package/dist/cli/snapshot.d.ts.map +1 -0
- package/dist/cli/snapshot.js +139 -0
- package/dist/cli/snapshot.js.map +1 -0
- package/dist/cli/storage-rules.d.ts +21 -0
- package/dist/cli/storage-rules.d.ts.map +1 -0
- package/dist/cli/storage-rules.js +121 -0
- package/dist/cli/storage-rules.js.map +1 -0
- package/dist/cli/verify.d.ts +23 -0
- package/dist/cli/verify.d.ts.map +1 -0
- package/dist/cli/verify.js +349 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/credentials/core/memoize-ttl.d.ts +58 -0
- package/dist/credentials/core/memoize-ttl.d.ts.map +1 -0
- package/dist/credentials/core/memoize-ttl.js +88 -0
- package/dist/credentials/core/memoize-ttl.js.map +1 -0
- package/dist/credentials/core/types.d.ts +11 -0
- package/dist/credentials/core/types.d.ts.map +1 -0
- package/dist/credentials/core/types.js +2 -0
- package/dist/credentials/core/types.js.map +1 -0
- package/dist/credentials/node/from-adc.d.ts +10 -0
- package/dist/credentials/node/from-adc.d.ts.map +1 -0
- package/dist/credentials/node/from-adc.js +76 -0
- package/dist/credentials/node/from-adc.js.map +1 -0
- package/dist/credentials/node/from-service-account.d.ts +24 -0
- package/dist/credentials/node/from-service-account.d.ts.map +1 -0
- package/dist/credentials/node/from-service-account.js +108 -0
- package/dist/credentials/node/from-service-account.js.map +1 -0
- package/dist/credentials/node/index.d.ts +7 -0
- package/dist/credentials/node/index.d.ts.map +1 -0
- package/dist/credentials/node/index.js +7 -0
- package/dist/credentials/node/index.js.map +1 -0
- package/dist/discover/concurrency.d.ts +42 -0
- package/dist/discover/concurrency.d.ts.map +1 -0
- package/dist/discover/concurrency.js +113 -0
- package/dist/discover/concurrency.js.map +1 -0
- package/dist/discover/crawler-adapter.d.ts +48 -0
- package/dist/discover/crawler-adapter.d.ts.map +1 -0
- package/dist/discover/crawler-adapter.js +92 -0
- package/dist/discover/crawler-adapter.js.map +1 -0
- package/dist/discover/crawler.d.ts +294 -0
- package/dist/discover/crawler.d.ts.map +1 -0
- package/dist/discover/crawler.js +764 -0
- package/dist/discover/crawler.js.map +1 -0
- package/dist/discover/credential-free.d.ts +19 -0
- package/dist/discover/credential-free.d.ts.map +1 -0
- package/dist/discover/credential-free.js +18 -0
- package/dist/discover/credential-free.js.map +1 -0
- package/dist/discover/findCollectionGroup.d.ts +44 -0
- package/dist/discover/findCollectionGroup.d.ts.map +1 -0
- package/dist/discover/findCollectionGroup.js +81 -0
- package/dist/discover/findCollectionGroup.js.map +1 -0
- package/dist/discover/firestore-source.d.ts +60 -0
- package/dist/discover/firestore-source.d.ts.map +1 -0
- package/dist/discover/firestore-source.js +11 -0
- package/dist/discover/firestore-source.js.map +1 -0
- package/dist/discover/index.d.ts +3 -0
- package/dist/discover/index.d.ts.map +1 -0
- package/dist/discover/index.js +5 -0
- package/dist/discover/index.js.map +1 -0
- package/dist/discover/merge.d.ts +108 -0
- package/dist/discover/merge.d.ts.map +1 -0
- package/dist/discover/merge.js +394 -0
- package/dist/discover/merge.js.map +1 -0
- package/dist/discover/session.d.ts +116 -0
- package/dist/discover/session.d.ts.map +1 -0
- package/dist/discover/session.js +331 -0
- package/dist/discover/session.js.map +1 -0
- package/dist/discover/tools.d.ts +58 -0
- package/dist/discover/tools.d.ts.map +1 -0
- package/dist/discover/tools.js +115 -0
- package/dist/discover/tools.js.map +1 -0
- package/dist/discover/types.d.ts +190 -0
- package/dist/discover/types.d.ts.map +1 -0
- package/dist/discover/types.js +12 -0
- package/dist/discover/types.js.map +1 -0
- package/dist/discover/wire.d.ts +70 -0
- package/dist/discover/wire.d.ts.map +1 -0
- package/dist/discover/wire.js +309 -0
- package/dist/discover/wire.js.map +1 -0
- package/dist/functions-rtdb/child.d.ts +52 -0
- package/dist/functions-rtdb/child.d.ts.map +1 -0
- package/dist/functions-rtdb/child.js +283 -0
- package/dist/functions-rtdb/child.js.map +1 -0
- package/dist/functions-rtdb/delivery.d.ts +4 -0
- package/dist/functions-rtdb/delivery.d.ts.map +1 -0
- package/dist/functions-rtdb/delivery.js +2 -0
- package/dist/functions-rtdb/delivery.js.map +1 -0
- package/dist/functions-rtdb/discovery.d.ts +41 -0
- package/dist/functions-rtdb/discovery.d.ts.map +1 -0
- package/dist/functions-rtdb/discovery.js +86 -0
- package/dist/functions-rtdb/discovery.js.map +1 -0
- package/dist/functions-rtdb/event.d.ts +20 -0
- package/dist/functions-rtdb/event.d.ts.map +1 -0
- package/dist/functions-rtdb/event.js +45 -0
- package/dist/functions-rtdb/event.js.map +1 -0
- package/dist/functions-rtdb/execution.d.ts +20 -0
- package/dist/functions-rtdb/execution.d.ts.map +1 -0
- package/dist/functions-rtdb/execution.js +70 -0
- package/dist/functions-rtdb/execution.js.map +1 -0
- package/dist/functions-rtdb/in-memory-delivery.d.ts +9 -0
- package/dist/functions-rtdb/in-memory-delivery.d.ts.map +1 -0
- package/dist/functions-rtdb/in-memory-delivery.js +36 -0
- package/dist/functions-rtdb/in-memory-delivery.js.map +1 -0
- package/dist/functions-rtdb/project.d.ts +7 -0
- package/dist/functions-rtdb/project.d.ts.map +1 -0
- package/dist/functions-rtdb/project.js +54 -0
- package/dist/functions-rtdb/project.js.map +1 -0
- package/dist/functions-rtdb/projection.d.ts +14 -0
- package/dist/functions-rtdb/projection.d.ts.map +1 -0
- package/dist/functions-rtdb/projection.js +65 -0
- package/dist/functions-rtdb/projection.js.map +1 -0
- package/dist/functions-rtdb/reference-pattern.d.ts +5 -0
- package/dist/functions-rtdb/reference-pattern.d.ts.map +1 -0
- package/dist/functions-rtdb/reference-pattern.js +14 -0
- package/dist/functions-rtdb/reference-pattern.js.map +1 -0
- package/dist/functions-rtdb/remote-delivery.d.ts +9 -0
- package/dist/functions-rtdb/remote-delivery.d.ts.map +1 -0
- package/dist/functions-rtdb/remote-delivery.js +11 -0
- package/dist/functions-rtdb/remote-delivery.js.map +1 -0
- package/dist/pkg-version.d.ts +2 -0
- package/dist/pkg-version.d.ts.map +1 -0
- package/dist/pkg-version.js +47 -0
- package/dist/pkg-version.js.map +1 -0
- package/dist/register/esm-exports.d.ts +26 -0
- package/dist/register/esm-exports.d.ts.map +1 -0
- package/dist/register/esm-exports.js +61 -0
- package/dist/register/esm-exports.js.map +1 -0
- package/dist/register/hooks.d.ts +13 -0
- package/dist/register/hooks.d.ts.map +1 -0
- package/dist/register/hooks.js +15 -0
- package/dist/register/hooks.js.map +1 -0
- package/dist/register/index.d.ts +5 -0
- package/dist/register/index.d.ts.map +1 -0
- package/dist/register/index.js +124 -0
- package/dist/register/index.js.map +1 -0
- package/dist/register/mapping.d.ts +19 -0
- package/dist/register/mapping.d.ts.map +1 -0
- package/dist/register/mapping.js +35 -0
- package/dist/register/mapping.js.map +1 -0
- package/dist/remote/index.d.ts +232 -0
- package/dist/remote/index.d.ts.map +1 -0
- package/dist/remote/index.js +720 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/rtdb/crawl-snapshot.d.ts +17 -0
- package/dist/rtdb/crawl-snapshot.d.ts.map +1 -0
- package/dist/rtdb/crawl-snapshot.js +72 -0
- package/dist/rtdb/crawl-snapshot.js.map +1 -0
- package/dist/rtdb/inspection.d.ts +8 -0
- package/dist/rtdb/inspection.d.ts.map +1 -0
- package/dist/rtdb/inspection.js +111 -0
- package/dist/rtdb/inspection.js.map +1 -0
- package/dist/rtdb/load-rules-document.d.ts +25 -0
- package/dist/rtdb/load-rules-document.d.ts.map +1 -0
- package/dist/rtdb/load-rules-document.js +38 -0
- package/dist/rtdb/load-rules-document.js.map +1 -0
- package/dist/rtdb/rules-generation-tool.d.ts +4 -0
- package/dist/rtdb/rules-generation-tool.d.ts.map +1 -0
- package/dist/rtdb/rules-generation-tool.js +35 -0
- package/dist/rtdb/rules-generation-tool.js.map +1 -0
- package/dist/rtdb/rules-json.d.ts +8 -0
- package/dist/rtdb/rules-json.d.ts.map +1 -0
- package/dist/rtdb/rules-json.js +17 -0
- package/dist/rtdb/rules-json.js.map +1 -0
- package/dist/serve/bridge-mount.d.ts +36 -0
- package/dist/serve/bridge-mount.d.ts.map +1 -0
- package/dist/serve/bridge-mount.js +162 -0
- package/dist/serve/bridge-mount.js.map +1 -0
- package/dist/serve/bundler.d.ts +110 -0
- package/dist/serve/bundler.d.ts.map +1 -0
- package/dist/serve/bundler.js +432 -0
- package/dist/serve/bundler.js.map +1 -0
- package/dist/serve/capture-store.d.ts +27 -0
- package/dist/serve/capture-store.d.ts.map +1 -0
- package/dist/serve/capture-store.js +47 -0
- package/dist/serve/capture-store.js.map +1 -0
- package/dist/serve/discovery.d.ts +71 -0
- package/dist/serve/discovery.d.ts.map +1 -0
- package/dist/serve/discovery.js +158 -0
- package/dist/serve/discovery.js.map +1 -0
- package/dist/serve/docs-ui/_astro/_slug_.CQYSemvw.css +1 -0
- package/dist/serve/docs-ui/docs/_rhythm/index.html +99 -0
- package/dist/serve/docs-ui/docs/_rhythm.md +101 -0
- package/dist/serve/docs-ui/docs/api-reference/index.html +64 -0
- package/dist/serve/docs-ui/docs/api-reference.md +67 -0
- package/dist/serve/docs-ui/docs/audit-your-rules/index.html +34 -0
- package/dist/serve/docs-ui/docs/audit-your-rules.md +50 -0
- package/dist/serve/docs-ui/docs/create-pyric-reference-api/index.html +498 -0
- package/dist/serve/docs-ui/docs/create-pyric-reference-api.md +345 -0
- package/dist/serve/docs-ui/docs/firestore-rules-limits/index.html +59 -0
- package/dist/serve/docs-ui/docs/firestore-rules-limits.md +54 -0
- package/dist/serve/docs-ui/docs/how-the-swap-works/index.html +47 -0
- package/dist/serve/docs-ui/docs/how-the-swap-works.md +43 -0
- package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase/index.html +131 -0
- package/dist/serve/docs-ui/docs/how-we-know-it-matches-firebase.md +169 -0
- package/dist/serve/docs-ui/docs/index.html +2 -0
- package/dist/serve/docs-ui/docs/index.json +18637 -0
- package/dist/serve/docs-ui/docs/overview/index.html +23 -0
- package/dist/serve/docs-ui/docs/overview.md +40 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app/index.html +19 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api/index.html +185 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app-reference-api.md +206 -0
- package/dist/serve/docs-ui/docs/pyric-admin-app.md +27 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth/index.html +24 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api/index.html +617 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth-reference-api.md +441 -0
- package/dist/serve/docs-ui/docs/pyric-admin-auth.md +29 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database/index.html +26 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api/index.html +583 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database-reference-api.md +597 -0
- package/dist/serve/docs-ui/docs/pyric-admin-database.md +31 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore/index.html +38 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation/index.html +57 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-error-translation.md +95 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-per-call-delegate.md +94 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-explanation-why-mirror-admin-shape.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-run-a-transaction.md +76 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules/index.html +62 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-seed-and-set-rules.md +96 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials/index.html +80 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-translate-denials.md +98 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot/index.html +57 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-use-onsnapshot.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-how-to-write-a-batch.md +73 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +32 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +30 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot/index.html +68 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-onsnapshot.md +81 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types/index.html +76 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-re-exported-types.md +103 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore/index.html +40 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-sandbox-firestore.md +77 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session/index.html +118 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-tutorials-01-first-admin-session.md +166 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore.md +53 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage/index.html +25 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api/index.html +317 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage-reference-api.md +285 -0
- package/dist/serve/docs-ui/docs/pyric-admin-storage.md +30 -0
- package/dist/serve/docs-ui/docs/pyric-ai-compat/index.html +436 -0
- package/dist/serve/docs-ui/docs/pyric-ai-compat.md +471 -0
- package/dist/serve/docs-ui/docs/pyric-ai-reference-api/index.html +5831 -0
- package/dist/serve/docs-ui/docs/pyric-ai-reference-api.md +5440 -0
- package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api/index.html +159 -0
- package/dist/serve/docs-ui/docs/pyric-ai-scripting-reference-api.md +122 -0
- package/dist/serve/docs-ui/docs/pyric-app-compat/index.html +180 -0
- package/dist/serve/docs-ui/docs/pyric-app-compat.md +199 -0
- package/dist/serve/docs-ui/docs/pyric-app-reference-api/index.html +420 -0
- package/dist/serve/docs-ui/docs/pyric-app-reference-api.md +326 -0
- package/dist/serve/docs-ui/docs/pyric-auth/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-auth-compat/index.html +804 -0
- package/dist/serve/docs-ui/docs/pyric-auth-compat.md +847 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +5452 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +5271 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix/index.html +781 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-feature-matrix.md +198 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver/index.html +71 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver.md +108 -0
- package/dist/serve/docs-ui/docs/pyric-auth.md +86 -0
- package/dist/serve/docs-ui/docs/pyric-cli/index.html +40 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +98 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-browser-reference-api.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api/index.html +2355 -0
- package/dist/serve/docs-ui/docs/pyric-cli-assurance-reference-api.md +1554 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge/index.html +69 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api/index.html +546 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-client-reference-api.md +485 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api/index.html +506 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge-reference-api.md +419 -0
- package/dist/serve/docs-ui/docs/pyric-cli-bridge.md +99 -0
- package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api/index.html +67 -0
- package/dist/serve/docs-ui/docs/pyric-cli-credentials-node-reference-api.md +59 -0
- package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api/index.html +2355 -0
- package/dist/serve/docs-ui/docs/pyric-cli-discover-reference-api.md +2036 -0
- package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat/index.html +112 -0
- package/dist/serve/docs-ui/docs/pyric-cli-functions-rtdb-compat.md +124 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary/index.html +91 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-build-a-standalone-binary.md +105 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-promote-sandbox-state-to-a-fixture.md +98 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-run-rtdb-onvaluecreated.md +100 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab/index.html +228 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-serve-persistence-and-multi-tab.md +179 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin/index.html +341 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-use-the-vite-plugin.md +309 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session/index.html +128 -0
- package/dist/serve/docs-ui/docs/pyric-cli-how-to-verify-against-a-captured-session.md +207 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-cli/index.html +404 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-cli.md +249 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution/index.html +93 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-package-and-resolution.md +65 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-verify/index.html +81 -0
- package/dist/serve/docs-ui/docs/pyric-cli-reference-verify.md +110 -0
- package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api/index.html +10 -0
- package/dist/serve/docs-ui/docs/pyric-cli-register-reference-api.md +16 -0
- package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api/index.html +1044 -0
- package/dist/serve/docs-ui/docs/pyric-cli-remote-reference-api.md +952 -0
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api/index.html +5041 -0
- package/dist/serve/docs-ui/docs/pyric-cli-serve-worker-reference-api.md +4739 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption/index.html +219 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-server-adoption.md +251 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code/index.html +136 -0
- package/dist/serve/docs-ui/docs/pyric-cli-tutorials-wire-claude-code.md +217 -0
- package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api/index.html +926 -0
- package/dist/serve/docs-ui/docs/pyric-cli-verify-reference-api.md +586 -0
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api/index.html +102 -0
- package/dist/serve/docs-ui/docs/pyric-cli-vite-reference-api.md +76 -0
- package/dist/serve/docs-ui/docs/pyric-cli.md +42 -0
- package/dist/serve/docs-ui/docs/pyric-conformance-scores/index.html +180 -0
- package/dist/serve/docs-ui/docs/pyric-conformance-scores.md +184 -0
- package/dist/serve/docs-ui/docs/pyric-database/index.html +43 -0
- package/dist/serve/docs-ui/docs/pyric-database-compat/index.html +1224 -0
- package/dist/serve/docs-ui/docs/pyric-database-compat.md +1289 -0
- package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate/index.html +16 -0
- package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate.md +23 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-api/index.html +1851 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-api.md +1842 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-constraints/index.html +381 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-constraints.md +168 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling/index.html +218 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling.md +303 -0
- package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints/index.html +125 -0
- package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints.md +171 -0
- package/dist/serve/docs-ui/docs/pyric-database.md +26 -0
- package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility/index.html +40 -0
- package/dist/serve/docs-ui/docs/pyric-explanation-versioning-and-compatibility.md +68 -0
- package/dist/serve/docs-ui/docs/pyric-firestore/index.html +48 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-compat/index.html +868 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-compat.md +939 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate.md +70 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-target-symbol-opacity.md +91 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface/index.html +43 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface.md +58 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore.md +86 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend.md +83 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction/index.html +42 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-run-a-transaction.md +59 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot.md +96 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops/index.html +61 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +3623 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +3399 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix/index.html +80 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix.md +66 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore/index.html +46 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore.md +73 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints/index.html +80 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints.md +129 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories/index.html +51 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-tool-factories.md +71 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo/index.html +130 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo.md +180 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api/index.html +30 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-values-reference-api.md +30 -0
- package/dist/serve/docs-ui/docs/pyric-firestore.md +72 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-compat/index.html +300 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-compat.md +321 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-reference-api/index.html +508 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-reference-api.md +374 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api/index.html +482 -0
- package/dist/serve/docs-ui/docs/pyric-messaging-sw-reference-api.md +348 -0
- package/dist/serve/docs-ui/docs/pyric-rules/index.html +87 -0
- package/dist/serve/docs-ui/docs/pyric-rules-compat/index.html +328 -0
- package/dist/serve/docs-ui/docs/pyric-rules-compat.md +347 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-agent-failure-modes.md +78 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test/index.html +79 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-lint-vs-validate-vs-simulate-vs-test.md +69 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates/index.html +67 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-runtime-budget-and-shared-gates.md +75 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine/index.html +49 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-sentinel-expression-engine.md +74 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api/index.html +95 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api.md +80 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-the-2-plus-modules-extension.md +79 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design.md +84 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists/index.html +34 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-why-this-package-exists.md +43 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening/index.html +55 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening.md +77 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast/index.html +90 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast.md +129 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source/index.html +55 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source.md +84 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time/index.html +49 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time.md +64 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent/index.html +61 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-register-tools-with-an-agent.md +87 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports/index.html +93 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports.md +105 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally/index.html +89 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-simulate-rules-locally.md +134 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase.md +102 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +2629 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +2213 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-ast/index.html +85 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-ast.md +121 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps/index.html +277 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-conformance-gaps.md +360 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-errors/index.html +76 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-errors.md +123 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules/index.html +148 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-lint-rules.md +159 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-simulator-context.md +104 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules/index.html +241 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules.md +143 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema/index.html +94 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema.md +121 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings/index.html +87 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings.md +117 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers/index.html +102 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers.md +152 -0
- package/dist/serve/docs-ui/docs/pyric-rules.md +93 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox/index.html +67 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api/index.html +120 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-database-reference-api.md +110 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request/index.html +141 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-every-op-is-a-request.md +161 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context/index.html +66 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-identity-is-a-context.md +110 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol/index.html +71 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-internal-adapter-protocol.md +111 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation/index.html +56 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-listener-re-evaluation.md +82 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline/index.html +64 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-local-backend-vs-firestore-offline.md +56 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings.md +90 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists/index.html +69 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-this-package-exists.md +57 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api/index.html +202 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-firestore-reference-api.md +134 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes.md +89 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events/index.html +159 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-observe-events.md +168 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter/index.html +79 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-pick-an-adapter.md +75 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events/index.html +88 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests/index.html +68 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-reset-between-tests.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules/index.html +91 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-seed-data-and-rules.md +122 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-switch-users.md +78 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads/index.html +54 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-use-admin-reads.md +85 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +5019 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +4060 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences/index.html +125 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-divergences.md +151 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes/index.html +110 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-error-codes.md +118 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol/index.html +72 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-internal-protocol.md +109 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context/index.html +90 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-and-context.md +140 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event/index.html +146 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-sandbox-event.md +204 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-snapshot-and-admin.md +89 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session/index.html +115 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-01-your-first-sandbox-session.md +176 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox.md +69 -0
- package/dist/serve/docs-ui/docs/pyric-storage/index.html +65 -0
- package/dist/serve/docs-ui/docs/pyric-storage-compat/index.html +676 -0
- package/dist/serve/docs-ui/docs/pyric-storage-compat.md +699 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope.md +85 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case/index.html +58 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-session-archive-use-case.md +82 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-why-indexeddb.md +82 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules/index.html +120 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules.md +127 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-list-and-delete.md +86 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends/index.html +43 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends.md +65 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions/index.html +70 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-test-rule-expressions.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +2120 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +1687 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps/index.html +137 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-conformance-gaps.md +171 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes/index.html +37 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes.md +57 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset/index.html +96 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset.md +134 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options/index.html +39 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options.md +61 -0
- package/dist/serve/docs-ui/docs/pyric-storage.md +67 -0
- package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api/index.html +638 -0
- package/dist/serve/docs-ui/docs/pyric-ui-agents-reference-api.md +430 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +813 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-hooks-reference-api.md +634 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api/index.html +1708 -0
- package/dist/serve/docs-ui/docs/pyric-ui-auth-reference-api.md +1300 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api/index.html +177 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-hooks-reference-api.md +111 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api/index.html +1542 -0
- package/dist/serve/docs-ui/docs/pyric-ui-events-reference-api.md +903 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1024 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-hooks-reference-api.md +640 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api/index.html +2753 -0
- package/dist/serve/docs-ui/docs/pyric-ui-firestore-reference-api.md +2171 -0
- package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api/index.html +1005 -0
- package/dist/serve/docs-ui/docs/pyric-ui-primitives-reference-api.md +693 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api/index.html +1388 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rtdb-reference-api.md +1340 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +131 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-hooks-reference-api.md +76 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api/index.html +648 -0
- package/dist/serve/docs-ui/docs/pyric-ui-rules-reference-api.md +508 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1457 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-hooks-reference-api.md +1029 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api/index.html +2476 -0
- package/dist/serve/docs-ui/docs/pyric-ui-storage-reference-api.md +1919 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1241 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-hooks-reference-api.md +817 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api/index.html +2289 -0
- package/dist/serve/docs-ui/docs/pyric-ui-traffic-reference-api.md +1489 -0
- package/dist/serve/docs-ui/docs/read-a-denial/index.html +40 -0
- package/dist/serve/docs-ui/docs/read-a-denial.md +62 -0
- package/dist/serve/docs-ui/docs/receive-messages/index.html +28 -0
- package/dist/serve/docs-ui/docs/receive-messages.md +43 -0
- package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript/index.html +67 -0
- package/dist/serve/docs-ui/docs/rtdb-rules-in-typescript.md +101 -0
- package/dist/serve/docs-ui/docs/rules-patterns/index.html +68 -0
- package/dist/serve/docs-ui/docs/rules-patterns.md +104 -0
- package/dist/serve/docs-ui/docs/rules-standard-library/index.html +87 -0
- package/dist/serve/docs-ui/docs/rules-standard-library.md +93 -0
- package/dist/serve/docs-ui/docs/run-ai-logic-locally/index.html +27 -0
- package/dist/serve/docs-ui/docs/run-ai-logic-locally.md +43 -0
- package/dist/serve/docs-ui/docs/secure-it-with-rules/index.html +69 -0
- package/dist/serve/docs-ui/docs/secure-it-with-rules.md +101 -0
- package/dist/serve/docs-ui/docs/see-whats-happening/index.html +73 -0
- package/dist/serve/docs-ui/docs/see-whats-happening.md +77 -0
- package/dist/serve/docs-ui/docs/set-up-the-project/index.html +14 -0
- package/dist/serve/docs-ui/docs/set-up-the-project.md +19 -0
- package/dist/serve/docs-ui/docs/set-up-your-agent/index.html +42 -0
- package/dist/serve/docs-ui/docs/set-up-your-agent.md +86 -0
- package/dist/serve/docs-ui/docs/shape-your-data/index.html +44 -0
- package/dist/serve/docs-ui/docs/shape-your-data.md +88 -0
- package/dist/serve/docs-ui/docs/ship-to-production/index.html +36 -0
- package/dist/serve/docs-ui/docs/ship-to-production.md +80 -0
- package/dist/serve/docs-ui/docs/sign-in-and-manage-users/index.html +31 -0
- package/dist/serve/docs-ui/docs/sign-in-and-manage-users.md +50 -0
- package/dist/serve/docs-ui/docs/simulate-and-lint/index.html +95 -0
- package/dist/serve/docs-ui/docs/simulate-and-lint.md +99 -0
- package/dist/serve/docs-ui/docs/skills/index.html +20 -0
- package/dist/serve/docs-ui/docs/skills.md +34 -0
- package/dist/serve/docs-ui/docs/start-building/index.html +32 -0
- package/dist/serve/docs-ui/docs/start-building.md +64 -0
- package/dist/serve/docs-ui/docs/store-and-query-data/index.html +16 -0
- package/dist/serve/docs-ui/docs/store-and-query-data.md +33 -0
- package/dist/serve/docs-ui/docs/store-files/index.html +13 -0
- package/dist/serve/docs-ui/docs/store-files.md +25 -0
- package/dist/serve/docs-ui/docs/sync-realtime-data/index.html +15 -0
- package/dist/serve/docs-ui/docs/sync-realtime-data.md +27 -0
- package/dist/serve/docs-ui/docs/test-in-node/index.html +74 -0
- package/dist/serve/docs-ui/docs/test-in-node.md +100 -0
- package/dist/serve/docs-ui/docs/ui/index.html +76 -0
- package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper/index.html +194 -0
- package/dist/serve/docs-ui/docs/ui-auth-authsigninhelper.md +114 -0
- package/dist/serve/docs-ui/docs/ui-auth-authusers/index.html +263 -0
- package/dist/serve/docs-ui/docs/ui-auth-authusers.md +183 -0
- package/dist/serve/docs-ui/docs/ui-firestore-collectionlist/index.html +92 -0
- package/dist/serve/docs-ui/docs/ui-firestore-collectionlist.md +79 -0
- package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm/index.html +128 -0
- package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm.md +104 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documenteditor/index.html +154 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documenteditor.md +117 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentlist/index.html +132 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentlist.md +92 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentpreview/index.html +159 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentpreview.md +84 -0
- package/dist/serve/docs-ui/docs/ui-firestore-querybuilder/index.html +104 -0
- package/dist/serve/docs-ui/docs/ui-firestore-querybuilder.md +103 -0
- package/dist/serve/docs-ui/docs/ui-firestore-referencepicker/index.html +113 -0
- package/dist/serve/docs-ui/docs/ui-firestore-referencepicker.md +93 -0
- package/dist/serve/docs-ui/docs/ui-primitives-badge/index.html +56 -0
- package/dist/serve/docs-ui/docs/ui-primitives-badge.md +40 -0
- package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog/index.html +140 -0
- package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog.md +108 -0
- package/dist/serve/docs-ui/docs/ui-primitives-copybutton/index.html +58 -0
- package/dist/serve/docs-ui/docs/ui-primitives-copybutton.md +37 -0
- package/dist/serve/docs-ui/docs/ui-primitives-jsonview/index.html +58 -0
- package/dist/serve/docs-ui/docs/ui-primitives-jsonview.md +47 -0
- package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol/index.html +70 -0
- package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol.md +50 -0
- package/dist/serve/docs-ui/docs/ui-primitives-toast/index.html +87 -0
- package/dist/serve/docs-ui/docs/ui-primitives-toast.md +82 -0
- package/dist/serve/docs-ui/docs/ui-primitives-virtuallist/index.html +85 -0
- package/dist/serve/docs-ui/docs/ui-primitives-virtuallist.md +54 -0
- package/dist/serve/docs-ui/docs/ui-storage/index.html +150 -0
- package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm/index.html +126 -0
- package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm.md +88 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectbrowser/index.html +137 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectbrowser.md +90 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectinspector/index.html +139 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectinspector.md +93 -0
- package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb/index.html +72 -0
- package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb.md +57 -0
- package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances/index.html +60 -0
- package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances.md +52 -0
- package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone/index.html +93 -0
- package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone.md +78 -0
- package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate/index.html +144 -0
- package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate.md +101 -0
- package/dist/serve/docs-ui/docs/ui-storage.md +165 -0
- package/dist/serve/docs-ui/docs/ui-traffic/index.html +88 -0
- package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap/index.html +79 -0
- package/dist/serve/docs-ui/docs/ui-traffic-ruleheatmap.md +60 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail/index.html +78 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail.md +59 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficlog/index.html +118 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficlog.md +69 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficstats/index.html +51 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficstats.md +46 -0
- package/dist/serve/docs-ui/docs/ui-traffic.md +102 -0
- package/dist/serve/docs-ui/docs/ui.md +90 -0
- package/dist/serve/docs-ui/docs/watch-and-review/index.html +25 -0
- package/dist/serve/docs-ui/docs/watch-and-review.md +40 -0
- package/dist/serve/docs-ui/docs/what-your-agent-can-do/index.html +81 -0
- package/dist/serve/docs-ui/docs/what-your-agent-can-do.md +78 -0
- package/dist/serve/docs-ui/docs/whats-experimental/index.html +22 -0
- package/dist/serve/docs-ui/docs/whats-experimental.md +33 -0
- package/dist/serve/docs-ui/docs/whats-possible/index.html +63 -0
- package/dist/serve/docs-ui/docs/whats-possible.md +53 -0
- package/dist/serve/docs-ui/docs/which-data-service/index.html +8 -0
- package/dist/serve/docs-ui/docs/which-data-service.md +11 -0
- package/dist/serve/docs-ui/docs/write-a-rules-test-suite/index.html +85 -0
- package/dist/serve/docs-ui/docs/write-a-rules-test-suite.md +119 -0
- package/dist/serve/docs-ui/index.html +1 -0
- package/dist/serve/docs-ui/llms.txt +308 -0
- package/dist/serve/entries/ai.d.ts +4 -0
- package/dist/serve/entries/ai.d.ts.map +1 -0
- package/dist/serve/entries/ai.js +184 -0
- package/dist/serve/entries/ai.js.map +1 -0
- package/dist/serve/entries/app-backend.d.ts +2 -0
- package/dist/serve/entries/app-backend.d.ts.map +1 -0
- package/dist/serve/entries/app-backend.js +4 -0
- package/dist/serve/entries/app-backend.js.map +1 -0
- package/dist/serve/entries/app-client.d.ts +5 -0
- package/dist/serve/entries/app-client.d.ts.map +1 -0
- package/dist/serve/entries/app-client.js +23 -0
- package/dist/serve/entries/app-client.js.map +1 -0
- package/dist/serve/entries/app-session-store.d.ts +14 -0
- package/dist/serve/entries/app-session-store.d.ts.map +1 -0
- package/dist/serve/entries/app-session-store.js +37 -0
- package/dist/serve/entries/app-session-store.js.map +1 -0
- package/dist/serve/entries/app.d.ts +2 -0
- package/dist/serve/entries/app.d.ts.map +1 -0
- package/dist/serve/entries/app.js +10 -0
- package/dist/serve/entries/app.js.map +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts +52 -0
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
- package/dist/serve/entries/auth-helper-core.js +118 -0
- package/dist/serve/entries/auth-helper-core.js.map +1 -0
- package/dist/serve/entries/auth-helper-dom.d.ts +14 -0
- package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -0
- package/dist/serve/entries/auth-helper-dom.js +116 -0
- package/dist/serve/entries/auth-helper-dom.js.map +1 -0
- package/dist/serve/entries/auth-helper-runtime.d.ts +5 -0
- package/dist/serve/entries/auth-helper-runtime.d.ts.map +1 -0
- package/dist/serve/entries/auth-helper-runtime.js +11 -0
- package/dist/serve/entries/auth-helper-runtime.js.map +1 -0
- package/dist/serve/entries/auth.d.ts +77 -0
- package/dist/serve/entries/auth.d.ts.map +1 -0
- package/dist/serve/entries/auth.js +201 -0
- package/dist/serve/entries/auth.js.map +1 -0
- package/dist/serve/entries/bridge-url.d.ts +25 -0
- package/dist/serve/entries/bridge-url.d.ts.map +1 -0
- package/dist/serve/entries/bridge-url.js +30 -0
- package/dist/serve/entries/bridge-url.js.map +1 -0
- package/dist/serve/entries/database.d.ts +46 -0
- package/dist/serve/entries/database.d.ts.map +1 -0
- package/dist/serve/entries/database.js +80 -0
- package/dist/serve/entries/database.js.map +1 -0
- package/dist/serve/entries/firestore.d.ts +104 -0
- package/dist/serve/entries/firestore.d.ts.map +1 -0
- package/dist/serve/entries/firestore.js +202 -0
- package/dist/serve/entries/firestore.js.map +1 -0
- package/dist/serve/entries/init.d.ts +2 -0
- package/dist/serve/entries/init.d.ts.map +1 -0
- package/dist/serve/entries/init.js +40 -0
- package/dist/serve/entries/init.js.map +1 -0
- package/dist/serve/entries/keepalive.d.ts +20 -0
- package/dist/serve/entries/keepalive.d.ts.map +1 -0
- package/dist/serve/entries/keepalive.js +38 -0
- package/dist/serve/entries/keepalive.js.map +1 -0
- package/dist/serve/entries/messaging-sw.d.ts +10 -0
- package/dist/serve/entries/messaging-sw.d.ts.map +1 -0
- package/dist/serve/entries/messaging-sw.js +36 -0
- package/dist/serve/entries/messaging-sw.js.map +1 -0
- package/dist/serve/entries/messaging.d.ts +11 -0
- package/dist/serve/entries/messaging.d.ts.map +1 -0
- package/dist/serve/entries/messaging.js +53 -0
- package/dist/serve/entries/messaging.js.map +1 -0
- package/dist/serve/entries/runtime.d.ts +46 -0
- package/dist/serve/entries/runtime.d.ts.map +1 -0
- package/dist/serve/entries/runtime.js +435 -0
- package/dist/serve/entries/runtime.js.map +1 -0
- package/dist/serve/entries/session-store.d.ts +48 -0
- package/dist/serve/entries/session-store.d.ts.map +1 -0
- package/dist/serve/entries/session-store.js +82 -0
- package/dist/serve/entries/session-store.js.map +1 -0
- package/dist/serve/entries/storage.d.ts +25 -0
- package/dist/serve/entries/storage.d.ts.map +1 -0
- package/dist/serve/entries/storage.js +61 -0
- package/dist/serve/entries/storage.js.map +1 -0
- package/dist/serve/entries/tab-sync-wiring.d.ts +88 -0
- package/dist/serve/entries/tab-sync-wiring.d.ts.map +1 -0
- package/dist/serve/entries/tab-sync-wiring.js +217 -0
- package/dist/serve/entries/tab-sync-wiring.js.map +1 -0
- package/dist/serve/entries/worker-runtime.d.ts +10 -0
- package/dist/serve/entries/worker-runtime.d.ts.map +1 -0
- package/dist/serve/entries/worker-runtime.js +59 -0
- package/dist/serve/entries/worker-runtime.js.map +1 -0
- package/dist/serve/init-payload.d.ts +21 -0
- package/dist/serve/init-payload.d.ts.map +1 -0
- package/dist/serve/init-payload.js +2 -0
- package/dist/serve/init-payload.js.map +1 -0
- package/dist/serve/namespace.d.ts +73 -0
- package/dist/serve/namespace.d.ts.map +1 -0
- package/dist/serve/namespace.js +470 -0
- package/dist/serve/namespace.js.map +1 -0
- package/dist/serve/open-browser.d.ts +23 -0
- package/dist/serve/open-browser.d.ts.map +1 -0
- package/dist/serve/open-browser.js +58 -0
- package/dist/serve/open-browser.js.map +1 -0
- package/dist/serve/rules.d.ts +77 -0
- package/dist/serve/rules.d.ts.map +1 -0
- package/dist/serve/rules.js +202 -0
- package/dist/serve/rules.js.map +1 -0
- package/dist/serve/sandbox-marker.d.ts +9 -0
- package/dist/serve/sandbox-marker.d.ts.map +1 -0
- package/dist/serve/sandbox-marker.js +31 -0
- package/dist/serve/sandbox-marker.js.map +1 -0
- package/dist/serve/server.d.ts +135 -0
- package/dist/serve/server.d.ts.map +1 -0
- package/dist/serve/server.js +328 -0
- package/dist/serve/server.js.map +1 -0
- package/dist/serve/standalone-assets.d.ts +67 -0
- package/dist/serve/standalone-assets.d.ts.map +1 -0
- package/dist/serve/standalone-assets.js +134 -0
- package/dist/serve/standalone-assets.js.map +1 -0
- package/dist/serve/state-store.d.ts +45 -0
- package/dist/serve/state-store.d.ts.map +1 -0
- package/dist/serve/state-store.js +120 -0
- package/dist/serve/state-store.js.map +1 -0
- package/dist/serve/studio/disk-project-store.d.ts +9 -0
- package/dist/serve/studio/disk-project-store.d.ts.map +1 -0
- package/dist/serve/studio/disk-project-store.js +173 -0
- package/dist/serve/studio/disk-project-store.js.map +1 -0
- package/dist/serve/studio/disk-workspace.d.ts +14 -0
- package/dist/serve/studio/disk-workspace.d.ts.map +1 -0
- package/dist/serve/studio/disk-workspace.js +152 -0
- package/dist/serve/studio/disk-workspace.js.map +1 -0
- package/dist/serve/studio/index.d.ts +10 -0
- package/dist/serve/studio/index.d.ts.map +1 -0
- package/dist/serve/studio/index.js +9 -0
- package/dist/serve/studio/index.js.map +1 -0
- package/dist/serve/studio/routes.d.ts +40 -0
- package/dist/serve/studio/routes.d.ts.map +1 -0
- package/dist/serve/studio/routes.js +182 -0
- package/dist/serve/studio/routes.js.map +1 -0
- package/dist/serve/studio/store-types.d.ts +45 -0
- package/dist/serve/studio/store-types.d.ts.map +1 -0
- package/dist/serve/studio/store-types.js +11 -0
- package/dist/serve/studio/store-types.js.map +1 -0
- package/dist/serve/studio-ui/assets/RulesCodeEditor-BZpD57II.js +23 -0
- package/dist/serve/studio-ui/assets/index-Bsa-TQNK.css +1 -0
- package/dist/serve/studio-ui/assets/index-DGaVuOhE.js +1211 -0
- package/dist/serve/studio-ui/assets/seed-CTmn6YuO.js +2 -0
- package/dist/serve/studio-ui/index.html +32 -0
- package/dist/serve/studio-ui/pyric-logo.svg +76 -0
- package/dist/serve/vite-plugin.d.ts +57 -0
- package/dist/serve/vite-plugin.d.ts.map +1 -0
- package/dist/serve/vite-plugin.js +658 -0
- package/dist/serve/vite-plugin.js.map +1 -0
- package/dist/serve/worker/client/admin-firestore.d.ts +18 -0
- package/dist/serve/worker/client/admin-firestore.d.ts.map +1 -0
- package/dist/serve/worker/client/admin-firestore.js +26 -0
- package/dist/serve/worker/client/admin-firestore.js.map +1 -0
- package/dist/serve/worker/client/ai.d.ts +31 -0
- package/dist/serve/worker/client/ai.d.ts.map +1 -0
- package/dist/serve/worker/client/ai.js +89 -0
- package/dist/serve/worker/client/ai.js.map +1 -0
- package/dist/serve/worker/client/auth.d.ts +168 -0
- package/dist/serve/worker/client/auth.d.ts.map +1 -0
- package/dist/serve/worker/client/auth.js +322 -0
- package/dist/serve/worker/client/auth.js.map +1 -0
- package/dist/serve/worker/client/connection.d.ts +80 -0
- package/dist/serve/worker/client/connection.d.ts.map +1 -0
- package/dist/serve/worker/client/connection.js +148 -0
- package/dist/serve/worker/client/connection.js.map +1 -0
- package/dist/serve/worker/client/core.d.ts +109 -0
- package/dist/serve/worker/client/core.d.ts.map +1 -0
- package/dist/serve/worker/client/core.js +248 -0
- package/dist/serve/worker/client/core.js.map +1 -0
- package/dist/serve/worker/client/disconnect.d.ts +7 -0
- package/dist/serve/worker/client/disconnect.d.ts.map +1 -0
- package/dist/serve/worker/client/disconnect.js +26 -0
- package/dist/serve/worker/client/disconnect.js.map +1 -0
- package/dist/serve/worker/client/firestore-reads.d.ts +49 -0
- package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -0
- package/dist/serve/worker/client/firestore-reads.js +139 -0
- package/dist/serve/worker/client/firestore-reads.js.map +1 -0
- package/dist/serve/worker/client/firestore-refs.d.ts +54 -0
- package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -0
- package/dist/serve/worker/client/firestore-refs.js +167 -0
- package/dist/serve/worker/client/firestore-refs.js.map +1 -0
- package/dist/serve/worker/client/firestore-writes.d.ts +70 -0
- package/dist/serve/worker/client/firestore-writes.d.ts.map +1 -0
- package/dist/serve/worker/client/firestore-writes.js +169 -0
- package/dist/serve/worker/client/firestore-writes.js.map +1 -0
- package/dist/serve/worker/client/handles.d.ts +73 -0
- package/dist/serve/worker/client/handles.d.ts.map +1 -0
- package/dist/serve/worker/client/handles.js +4 -0
- package/dist/serve/worker/client/handles.js.map +1 -0
- package/dist/serve/worker/client/messaging.d.ts +16 -0
- package/dist/serve/worker/client/messaging.d.ts.map +1 -0
- package/dist/serve/worker/client/messaging.js +60 -0
- package/dist/serve/worker/client/messaging.js.map +1 -0
- package/dist/serve/worker/client/presence.d.ts +43 -0
- package/dist/serve/worker/client/presence.d.ts.map +1 -0
- package/dist/serve/worker/client/presence.js +132 -0
- package/dist/serve/worker/client/presence.js.map +1 -0
- package/dist/serve/worker/client/rtdb.d.ts +36 -0
- package/dist/serve/worker/client/rtdb.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb.js +241 -0
- package/dist/serve/worker/client/rtdb.js.map +1 -0
- package/dist/serve/worker/client/rules.d.ts +24 -0
- package/dist/serve/worker/client/rules.d.ts.map +1 -0
- package/dist/serve/worker/client/rules.js +44 -0
- package/dist/serve/worker/client/rules.js.map +1 -0
- package/dist/serve/worker/client/service-worker-connection.d.ts +3 -0
- package/dist/serve/worker/client/service-worker-connection.d.ts.map +1 -0
- package/dist/serve/worker/client/service-worker-connection.js +53 -0
- package/dist/serve/worker/client/service-worker-connection.js.map +1 -0
- package/dist/serve/worker/client/snapshots.d.ts +32 -0
- package/dist/serve/worker/client/snapshots.d.ts.map +1 -0
- package/dist/serve/worker/client/snapshots.js +46 -0
- package/dist/serve/worker/client/snapshots.js.map +1 -0
- package/dist/serve/worker/client/storage.d.ts +64 -0
- package/dist/serve/worker/client/storage.d.ts.map +1 -0
- package/dist/serve/worker/client/storage.js +125 -0
- package/dist/serve/worker/client/storage.js.map +1 -0
- package/dist/serve/worker/client/studio.d.ts +32 -0
- package/dist/serve/worker/client/studio.d.ts.map +1 -0
- package/dist/serve/worker/client/studio.js +61 -0
- package/dist/serve/worker/client/studio.js.map +1 -0
- package/dist/serve/worker/client.d.ts +43 -0
- package/dist/serve/worker/client.d.ts.map +1 -0
- package/dist/serve/worker/client.js +44 -0
- package/dist/serve/worker/client.js.map +1 -0
- package/dist/serve/worker/entry.d.ts +40 -0
- package/dist/serve/worker/entry.d.ts.map +1 -0
- package/dist/serve/worker/entry.js +144 -0
- package/dist/serve/worker/entry.js.map +1 -0
- package/dist/serve/worker/host/admin-firestore.d.ts +17 -0
- package/dist/serve/worker/host/admin-firestore.d.ts.map +1 -0
- package/dist/serve/worker/host/admin-firestore.js +92 -0
- package/dist/serve/worker/host/admin-firestore.js.map +1 -0
- package/dist/serve/worker/host/connection.d.ts +40 -0
- package/dist/serve/worker/host/connection.d.ts.map +1 -0
- package/dist/serve/worker/host/connection.js +153 -0
- package/dist/serve/worker/host/connection.js.map +1 -0
- package/dist/serve/worker/host/core.d.ts +159 -0
- package/dist/serve/worker/host/core.d.ts.map +1 -0
- package/dist/serve/worker/host/core.js +296 -0
- package/dist/serve/worker/host/core.js.map +1 -0
- package/dist/serve/worker/host/dispatch.d.ts +34 -0
- package/dist/serve/worker/host/dispatch.d.ts.map +1 -0
- package/dist/serve/worker/host/dispatch.js +267 -0
- package/dist/serve/worker/host/dispatch.js.map +1 -0
- package/dist/serve/worker/host/firestore-reads.d.ts +17 -0
- package/dist/serve/worker/host/firestore-reads.d.ts.map +1 -0
- package/dist/serve/worker/host/firestore-reads.js +108 -0
- package/dist/serve/worker/host/firestore-reads.js.map +1 -0
- package/dist/serve/worker/host/firestore-writes.d.ts +37 -0
- package/dist/serve/worker/host/firestore-writes.d.ts.map +1 -0
- package/dist/serve/worker/host/firestore-writes.js +409 -0
- package/dist/serve/worker/host/firestore-writes.js.map +1 -0
- package/dist/serve/worker/host/presence.d.ts +38 -0
- package/dist/serve/worker/host/presence.d.ts.map +1 -0
- package/dist/serve/worker/host/presence.js +280 -0
- package/dist/serve/worker/host/presence.js.map +1 -0
- package/dist/serve/worker/host/rtdb.d.ts +18 -0
- package/dist/serve/worker/host/rtdb.d.ts.map +1 -0
- package/dist/serve/worker/host/rtdb.js +128 -0
- package/dist/serve/worker/host/rtdb.js.map +1 -0
- package/dist/serve/worker/host/rules.d.ts +17 -0
- package/dist/serve/worker/host/rules.d.ts.map +1 -0
- package/dist/serve/worker/host/rules.js +118 -0
- package/dist/serve/worker/host/rules.js.map +1 -0
- package/dist/serve/worker/host/storage.d.ts +19 -0
- package/dist/serve/worker/host/storage.d.ts.map +1 -0
- package/dist/serve/worker/host/storage.js +260 -0
- package/dist/serve/worker/host/storage.js.map +1 -0
- package/dist/serve/worker/host/studio.d.ts +13 -0
- package/dist/serve/worker/host/studio.d.ts.map +1 -0
- package/dist/serve/worker/host/studio.js +30 -0
- package/dist/serve/worker/host/studio.js.map +1 -0
- package/dist/serve/worker/host/subscriptions.d.ts +21 -0
- package/dist/serve/worker/host/subscriptions.d.ts.map +1 -0
- package/dist/serve/worker/host/subscriptions.js +162 -0
- package/dist/serve/worker/host/subscriptions.js.map +1 -0
- package/dist/serve/worker/host-ai.d.ts +59 -0
- package/dist/serve/worker/host-ai.d.ts.map +1 -0
- package/dist/serve/worker/host-ai.js +158 -0
- package/dist/serve/worker/host-ai.js.map +1 -0
- package/dist/serve/worker/host-auth.d.ts +47 -0
- package/dist/serve/worker/host-auth.d.ts.map +1 -0
- package/dist/serve/worker/host-auth.js +464 -0
- package/dist/serve/worker/host-auth.js.map +1 -0
- package/dist/serve/worker/host-context.d.ts +220 -0
- package/dist/serve/worker/host-context.d.ts.map +1 -0
- package/dist/serve/worker/host-context.js +45 -0
- package/dist/serve/worker/host-context.js.map +1 -0
- package/dist/serve/worker/host-events.d.ts +21 -0
- package/dist/serve/worker/host-events.d.ts.map +1 -0
- package/dist/serve/worker/host-events.js +87 -0
- package/dist/serve/worker/host-events.js.map +1 -0
- package/dist/serve/worker/host-messaging.d.ts +60 -0
- package/dist/serve/worker/host-messaging.d.ts.map +1 -0
- package/dist/serve/worker/host-messaging.js +226 -0
- package/dist/serve/worker/host-messaging.js.map +1 -0
- package/dist/serve/worker/host.d.ts +36 -0
- package/dist/serve/worker/host.d.ts.map +1 -0
- package/dist/serve/worker/host.js +39 -0
- package/dist/serve/worker/host.js.map +1 -0
- package/dist/serve/worker/index.d.ts +22 -0
- package/dist/serve/worker/index.d.ts.map +1 -0
- package/dist/serve/worker/index.js +61 -0
- package/dist/serve/worker/index.js.map +1 -0
- package/dist/serve/worker/presence-timing.d.ts +14 -0
- package/dist/serve/worker/presence-timing.d.ts.map +1 -0
- package/dist/serve/worker/presence-timing.js +14 -0
- package/dist/serve/worker/presence-timing.js.map +1 -0
- package/dist/serve/worker/protocol.d.ts +1150 -0
- package/dist/serve/worker/protocol.d.ts.map +1 -0
- package/dist/serve/worker/protocol.js +228 -0
- package/dist/serve/worker/protocol.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts +201 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -0
- package/dist/serve/worker/serve-init.js +579 -0
- package/dist/serve/worker/serve-init.js.map +1 -0
- package/dist/serve/worker/service-worker-channel.d.ts +23 -0
- package/dist/serve/worker/service-worker-channel.d.ts.map +1 -0
- package/dist/serve/worker/service-worker-channel.js +9 -0
- package/dist/serve/worker/service-worker-channel.js.map +1 -0
- package/dist/serve/worker/service-worker-relay.d.ts +22 -0
- package/dist/serve/worker/service-worker-relay.d.ts.map +1 -0
- package/dist/serve/worker/service-worker-relay.js +63 -0
- package/dist/serve/worker/service-worker-relay.js.map +1 -0
- package/dist/serve/writer-lock.d.ts +32 -0
- package/dist/serve/writer-lock.d.ts.map +1 -0
- package/dist/serve/writer-lock.js +43 -0
- package/dist/serve/writer-lock.js.map +1 -0
- package/dist/verify/cases.d.ts +37 -0
- package/dist/verify/cases.d.ts.map +1 -0
- package/dist/verify/cases.js +173 -0
- package/dist/verify/cases.js.map +1 -0
- package/dist/verify/fixture.d.ts +100 -0
- package/dist/verify/fixture.d.ts.map +1 -0
- package/dist/verify/fixture.js +156 -0
- package/dist/verify/fixture.js.map +1 -0
- package/dist/verify/index.d.ts +102 -0
- package/dist/verify/index.d.ts.map +1 -0
- package/dist/verify/index.js +318 -0
- package/dist/verify/index.js.map +1 -0
- package/dist/verify/tools.d.ts +7 -0
- package/dist/verify/tools.d.ts.map +1 -0
- package/dist/verify/tools.js +83 -0
- package/dist/verify/tools.js.map +1 -0
- package/dist/version/compat-target.d.ts +18 -0
- package/dist/version/compat-target.d.ts.map +1 -0
- package/dist/version/compat-target.js +18 -0
- package/dist/version/compat-target.js.map +1 -0
- package/dist/vite.d.ts +12 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +16 -0
- package/dist/vite.js.map +1 -0
- package/package.json +133 -0
|
@@ -0,0 +1,1150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SharedWorker protocol — message types + wire serialization.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS FILE EXISTS
|
|
5
|
+
* --------------------
|
|
6
|
+
* All traffic between an in-page client and the SharedWorker host travels
|
|
7
|
+
* over a `MessagePort`. Structured clone handles the envelope (plain objects,
|
|
8
|
+
* numbers, strings). Firestore's special scalar types (Timestamp, Bytes,
|
|
9
|
+
* GeoPoint/LatLng) are NOT structured-cloneable as class instances — they
|
|
10
|
+
* must be serialized to plain marker objects for the port crossing and
|
|
11
|
+
* re-hydrated on the other side.
|
|
12
|
+
*
|
|
13
|
+
* We use the persistence serializer's codec for doc DATA:
|
|
14
|
+
* serialize: JSON.stringify(data) — toJSON() on each wrapper emits a
|
|
15
|
+
* marker shape ({ __type: 'timestamp', seconds, nanos } etc.)
|
|
16
|
+
* deserialize: JSON.parse → rehydrateDocValue (from pyric/sandbox) — walks
|
|
17
|
+
* the tree and reconstructs REAL class instances (Timestamp,
|
|
18
|
+
* Bytes, LatLng) so instanceof checks and method calls work.
|
|
19
|
+
*
|
|
20
|
+
* This is the SAME codec the sandbox uses for IndexedDB persistence, so the
|
|
21
|
+
* wire format == the persistence format and values round-trip to real instances
|
|
22
|
+
* on BOTH sides of the port.
|
|
23
|
+
*
|
|
24
|
+
* Sentinels (serverTimestamp, increment, arrayUnion, arrayRemove, deleteField)
|
|
25
|
+
* are FieldValue objects that DO cross the port as plain marker objects that
|
|
26
|
+
* the worker's sandbox resolves natively — the sandbox sentinel-capture code
|
|
27
|
+
* recognizes them by shape.
|
|
28
|
+
*
|
|
29
|
+
* SURFACE SPLIT
|
|
30
|
+
* -------------
|
|
31
|
+
* Client-side only (never cross the port):
|
|
32
|
+
* doc, collection, collectionGroup, query, where, and, or, orderBy, limit,
|
|
33
|
+
* limitToLast, startAt, startAfter, endAt, endBefore
|
|
34
|
+
* → return plain RefDescriptor / QueryDescriptor objects.
|
|
35
|
+
* getFirestore → returns a ClientDb holding the MessagePort.
|
|
36
|
+
*
|
|
37
|
+
* Sentinels (client-side markers, resolved by the worker's sandbox):
|
|
38
|
+
* serverTimestamp, increment, arrayUnion, arrayRemove, deleteField
|
|
39
|
+
* → return SentinelMarker objects that embed in write data.
|
|
40
|
+
*
|
|
41
|
+
* Execution (RPC):
|
|
42
|
+
* getDoc, getDocs, setDoc, updateDoc, deleteDoc, addDoc,
|
|
43
|
+
* onSnapshot, getCountFromServer, runTransaction, writeBatch().commit()
|
|
44
|
+
*/
|
|
45
|
+
import type { AuthLens, SandboxEvent, DenialContext } from 'pyric/sandbox';
|
|
46
|
+
import type { BrokerMessage, ClientVisibilityState, FcmErrorEnvelope } from 'pyric/messaging/internal';
|
|
47
|
+
/**
|
|
48
|
+
* A serializable reference to a Firestore document path. Produced by
|
|
49
|
+
* `doc()` on the client; embedded in op/sub messages for the worker to
|
|
50
|
+
* resolve against the real sandbox.
|
|
51
|
+
*/
|
|
52
|
+
export interface DocRef {
|
|
53
|
+
readonly __ref: 'doc';
|
|
54
|
+
readonly path: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A serializable reference to a collection path. Produced by `collection()`.
|
|
58
|
+
*/
|
|
59
|
+
export interface CollRef {
|
|
60
|
+
readonly __ref: 'collection';
|
|
61
|
+
readonly path: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A serializable collectionGroup descriptor. Produced by `collectionGroup()`.
|
|
65
|
+
*/
|
|
66
|
+
export interface GroupRef {
|
|
67
|
+
readonly __ref: 'group';
|
|
68
|
+
readonly collectionId: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A serializable query descriptor. Wraps a source ref with a constraint list.
|
|
72
|
+
* Constraints encode `where`/`orderBy`/`limit`/`limitToLast`/`startAt`/
|
|
73
|
+
* `startAfter`/`endAt`/`endBefore` as plain data so they can be rebuilt on
|
|
74
|
+
* the worker side by calling the pyric/firestore constraint factories.
|
|
75
|
+
*/
|
|
76
|
+
export interface QueryDescriptor {
|
|
77
|
+
readonly __ref: 'query';
|
|
78
|
+
readonly source: DocRef | CollRef | GroupRef;
|
|
79
|
+
readonly constraints: readonly QueryConstraintDescriptor[];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Plain data representation of a FILTER constraint — the subset of
|
|
83
|
+
* constraints valid at a query's top level AND inside composite `and`/`or`
|
|
84
|
+
* filters (orderBy/limit/cursors are not filters). Mirrors the modular SDK's
|
|
85
|
+
* `where()` / `and(...)` / `or(...)` composition: composites nest arbitrarily,
|
|
86
|
+
* and the worker rebuilds them with the pyric/firestore `and`/`or` factories.
|
|
87
|
+
*/
|
|
88
|
+
export type FilterConstraintDescriptor = {
|
|
89
|
+
kind: 'where';
|
|
90
|
+
field: string;
|
|
91
|
+
op: string;
|
|
92
|
+
value: unknown;
|
|
93
|
+
} | {
|
|
94
|
+
kind: 'and';
|
|
95
|
+
filters: readonly FilterConstraintDescriptor[];
|
|
96
|
+
} | {
|
|
97
|
+
kind: 'or';
|
|
98
|
+
filters: readonly FilterConstraintDescriptor[];
|
|
99
|
+
};
|
|
100
|
+
/** Plain data representation of a query constraint. */
|
|
101
|
+
export type QueryConstraintDescriptor = FilterConstraintDescriptor | {
|
|
102
|
+
kind: 'orderBy';
|
|
103
|
+
field: string;
|
|
104
|
+
direction?: 'asc' | 'desc';
|
|
105
|
+
} | {
|
|
106
|
+
kind: 'limit';
|
|
107
|
+
n: number;
|
|
108
|
+
} | {
|
|
109
|
+
kind: 'limitToLast';
|
|
110
|
+
n: number;
|
|
111
|
+
} | {
|
|
112
|
+
kind: 'startAt';
|
|
113
|
+
values: unknown[];
|
|
114
|
+
isSnapshot?: false;
|
|
115
|
+
} | {
|
|
116
|
+
kind: 'startAfter';
|
|
117
|
+
values: unknown[];
|
|
118
|
+
isSnapshot?: false;
|
|
119
|
+
} | {
|
|
120
|
+
kind: 'endAt';
|
|
121
|
+
values: unknown[];
|
|
122
|
+
isSnapshot?: false;
|
|
123
|
+
} | {
|
|
124
|
+
kind: 'endBefore';
|
|
125
|
+
values: unknown[];
|
|
126
|
+
isSnapshot?: false;
|
|
127
|
+
};
|
|
128
|
+
export type TargetDescriptor = DocRef | CollRef | GroupRef | QueryDescriptor;
|
|
129
|
+
/**
|
|
130
|
+
* Wire representation of a FieldValue sentinel. The worker's sandbox
|
|
131
|
+
* resolves these via FieldValue factories before writing — the sentinel
|
|
132
|
+
* objects themselves are structurally identical to what `pyric/sandbox/
|
|
133
|
+
* admin-compat`'s FieldValue class produces, so they round-trip naturally.
|
|
134
|
+
*
|
|
135
|
+
* We use a `__sentinel` discriminator instead of relying on class identity
|
|
136
|
+
* (class instances aren't reliably transferred across message ports as class
|
|
137
|
+
* instances — the structured clone algorithm produces plain objects).
|
|
138
|
+
*/
|
|
139
|
+
export type SentinelMarker = {
|
|
140
|
+
readonly __sentinel: 'serverTimestamp';
|
|
141
|
+
} | {
|
|
142
|
+
readonly __sentinel: 'increment';
|
|
143
|
+
readonly n: number;
|
|
144
|
+
} | {
|
|
145
|
+
readonly __sentinel: 'arrayUnion';
|
|
146
|
+
readonly values: unknown[];
|
|
147
|
+
} | {
|
|
148
|
+
readonly __sentinel: 'arrayRemove';
|
|
149
|
+
readonly values: unknown[];
|
|
150
|
+
} | {
|
|
151
|
+
readonly __sentinel: 'deleteField';
|
|
152
|
+
};
|
|
153
|
+
export declare function isSentinelMarker(v: unknown): v is SentinelMarker;
|
|
154
|
+
/**
|
|
155
|
+
* Aggregate-field descriptor for the `aggregate` op. Structurally identical
|
|
156
|
+
* to `pyric/firestore`'s `AggregateField` (and to admin-compat's — the
|
|
157
|
+
* `pyric-admin` remote arm's `Query.aggregate({ count/sum/average })`
|
|
158
|
+
* surface), so specs cross the wire verbatim: plain JSON, no translation.
|
|
159
|
+
* The host rebuilds the query and runs `getAggregateFromServer`; the reply
|
|
160
|
+
* is `{ data: Record<alias, number | null> }` (empty-input `average` is
|
|
161
|
+
* `null`, matching the SDKs).
|
|
162
|
+
*/
|
|
163
|
+
export type AggregateFieldDescriptor = {
|
|
164
|
+
kind: 'count';
|
|
165
|
+
} | {
|
|
166
|
+
kind: 'sum';
|
|
167
|
+
field: string;
|
|
168
|
+
} | {
|
|
169
|
+
kind: 'average';
|
|
170
|
+
field: string;
|
|
171
|
+
};
|
|
172
|
+
/** Spec passed on the `aggregate` op — aliases become the result's keys. */
|
|
173
|
+
export type AggregateSpecDescriptor = Record<string, AggregateFieldDescriptor>;
|
|
174
|
+
/**
|
|
175
|
+
* JSON-safe engine config for the worker host's AiBroker — the wire form of
|
|
176
|
+
* `pyric/ai`'s `EngineConfig` (cdd-deltas #98.4: engine choice + model mapping
|
|
177
|
+
* are per-sandbox config on the ai mirror). Differences from the mirror type:
|
|
178
|
+
*
|
|
179
|
+
* - `openai.baseUrl` is OPTIONAL here: absent means the serve default —
|
|
180
|
+
* the same-origin `/__pyric/ai-proxy` route (#98.2), so the browser
|
|
181
|
+
* openai engine reaches a localhost upstream with zero CORS setup.
|
|
182
|
+
* - `openai.fetch` (test injection) never crosses the port.
|
|
183
|
+
* - `scripted.script` entries are the PLAIN authoring shapes (string/regex
|
|
184
|
+
* matchers + JSON responds). Predicate matchers are functions and cannot
|
|
185
|
+
* cross the port — structured clone rejects them LOUDLY (DataCloneError),
|
|
186
|
+
* never silently. Author predicates host-side (ctx.aiEngine) instead.
|
|
187
|
+
*
|
|
188
|
+
* The config is honored on the FIRST ai op only (the broker is per-sandbox
|
|
189
|
+
* and created once — mirroring `getAI`'s first-call-wins idempotence).
|
|
190
|
+
*/
|
|
191
|
+
export type AiEngineConfigWire = {
|
|
192
|
+
kind: 'scripted';
|
|
193
|
+
script?: Array<Record<string, unknown>>;
|
|
194
|
+
} | {
|
|
195
|
+
kind: 'openai';
|
|
196
|
+
/** OpenAI-compatible base URL. Absent ⇒ serve's `/__pyric/ai-proxy`. */
|
|
197
|
+
baseUrl?: string;
|
|
198
|
+
/** Catch-all upstream model when `modelMap` has no entry. */
|
|
199
|
+
model?: string;
|
|
200
|
+
/** Explicit Gemini-model-id → upstream-model mapping. */
|
|
201
|
+
modelMap?: Record<string, string>;
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Wire form of the Gemini error envelope an `AiBrokerError` carries
|
|
205
|
+
* (`{ error: { code, message, status, details? } }` — every ai-error-*
|
|
206
|
+
* capture). Rides on {@link SerializedError} so the client mirror can mint
|
|
207
|
+
* the SAME `AIError('fetch-error', …)` the in-process plane would.
|
|
208
|
+
*/
|
|
209
|
+
export interface AiErrorEnvelopeWire {
|
|
210
|
+
error: {
|
|
211
|
+
code: number;
|
|
212
|
+
message: string;
|
|
213
|
+
status: string;
|
|
214
|
+
details?: Array<Record<string, unknown>>;
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
export type WriteDescriptor = {
|
|
218
|
+
method: 'set';
|
|
219
|
+
path: string;
|
|
220
|
+
data: unknown;
|
|
221
|
+
options?: {
|
|
222
|
+
merge?: boolean;
|
|
223
|
+
mergeFields?: string[];
|
|
224
|
+
};
|
|
225
|
+
} | {
|
|
226
|
+
method: 'update';
|
|
227
|
+
path: string;
|
|
228
|
+
data: unknown;
|
|
229
|
+
} | {
|
|
230
|
+
method: 'delete';
|
|
231
|
+
path: string;
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* One entry in the read-set sent by the client on `txnCommit`.
|
|
235
|
+
*
|
|
236
|
+
* The client records every doc it read during `updateFn` (via `txn.get`)
|
|
237
|
+
* along with the serialized data it saw at read time (`data` is the
|
|
238
|
+
* `SerializedDocData` the worker returned, or `null` if the doc didn't
|
|
239
|
+
* exist). The worker re-reads each path inside a real sandbox transaction
|
|
240
|
+
* and deep-compares by re-serializing the current state to the same JSON
|
|
241
|
+
* form — any mismatch means another tab wrote the doc between our read and
|
|
242
|
+
* commit, so we abort and let the client retry `updateFn`.
|
|
243
|
+
*/
|
|
244
|
+
export interface TxnReadEntry {
|
|
245
|
+
/** Firestore path of the document that was read. */
|
|
246
|
+
path: string;
|
|
247
|
+
/**
|
|
248
|
+
* The serialized doc data seen by the client at read time.
|
|
249
|
+
* `null` means the document did not exist when the client read it.
|
|
250
|
+
*/
|
|
251
|
+
data: SerializedDocData | null;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Wire representation of a signed-in `User`. The real `pyric/auth` `User`
|
|
255
|
+
* carries methods (`getIdToken`, `getIdTokenResult`) that don't survive
|
|
256
|
+
* structured clone, so the worker flattens the fields the client mirror
|
|
257
|
+
* needs into a plain object. Token accessors on the client re-RPC to the
|
|
258
|
+
* worker (the worker holds the one real user).
|
|
259
|
+
*
|
|
260
|
+
* `null` means "signed out" — there is no current user.
|
|
261
|
+
*/
|
|
262
|
+
export interface SerializedUser {
|
|
263
|
+
readonly uid: string;
|
|
264
|
+
readonly email: string | null;
|
|
265
|
+
readonly emailVerified: boolean;
|
|
266
|
+
readonly displayName: string | null;
|
|
267
|
+
readonly photoURL: string | null;
|
|
268
|
+
readonly phoneNumber: string | null;
|
|
269
|
+
readonly isAnonymous: boolean;
|
|
270
|
+
readonly providerId: string | null;
|
|
271
|
+
readonly providerData: ReadonlyArray<{
|
|
272
|
+
readonly displayName: string | null;
|
|
273
|
+
readonly email: string | null;
|
|
274
|
+
readonly phoneNumber: string | null;
|
|
275
|
+
readonly photoURL: string | null;
|
|
276
|
+
readonly providerId: string;
|
|
277
|
+
readonly uid: string;
|
|
278
|
+
}>;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* A provider identity resolved IN-PAGE (by the `ServeAuthHelper`'s
|
|
282
|
+
* popup/redirect picker) and handed to the worker for sign-in. Provider flows
|
|
283
|
+
* (`signInWithPopup`/`signInWithRedirect`) can't cross the worker port — the
|
|
284
|
+
* `AuthFlowResolver` lives in-page — so the page resolves the picked identity
|
|
285
|
+
* and bridges it here; the worker seeds it + `restoreSession`s it (no password
|
|
286
|
+
* — provider users never sign in with one). See `auth.acceptIdentity`.
|
|
287
|
+
*/
|
|
288
|
+
export interface ResolvedIdentity {
|
|
289
|
+
readonly uid: string;
|
|
290
|
+
readonly email: string | null;
|
|
291
|
+
readonly displayName: string | null;
|
|
292
|
+
readonly customClaims: Record<string, unknown>;
|
|
293
|
+
readonly providerId: string;
|
|
294
|
+
}
|
|
295
|
+
/** Wire form of a `UserCredential` returned by the sign-in/create ops. */
|
|
296
|
+
export interface SerializedUserCredential {
|
|
297
|
+
readonly user: SerializedUser;
|
|
298
|
+
readonly providerId: string | null;
|
|
299
|
+
readonly operationType: 'signIn' | 'reauthenticate' | 'link';
|
|
300
|
+
}
|
|
301
|
+
/** Wire form of `getIdTokenResult()`. */
|
|
302
|
+
export interface SerializedIdTokenResult {
|
|
303
|
+
readonly token: string;
|
|
304
|
+
readonly claims: Record<string, unknown>;
|
|
305
|
+
readonly expirationTime: string;
|
|
306
|
+
readonly issuedAtTime: string;
|
|
307
|
+
readonly authTime: string;
|
|
308
|
+
readonly signInProvider: string | null;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Flatten a live `pyric/auth` `User` (or `null`) into its wire form.
|
|
312
|
+
* Methods are dropped; only the structured fields cross the port.
|
|
313
|
+
*/
|
|
314
|
+
export declare function serializeUser(user: {
|
|
315
|
+
uid: string;
|
|
316
|
+
email: string | null;
|
|
317
|
+
emailVerified?: boolean;
|
|
318
|
+
displayName: string | null;
|
|
319
|
+
photoURL?: string | null;
|
|
320
|
+
phoneNumber?: string | null;
|
|
321
|
+
isAnonymous: boolean;
|
|
322
|
+
providerId?: string;
|
|
323
|
+
providerData?: ReadonlyArray<{
|
|
324
|
+
displayName: string | null;
|
|
325
|
+
email: string | null;
|
|
326
|
+
phoneNumber: string | null;
|
|
327
|
+
photoURL: string | null;
|
|
328
|
+
providerId: string;
|
|
329
|
+
uid: string;
|
|
330
|
+
}>;
|
|
331
|
+
} | null): SerializedUser | null;
|
|
332
|
+
/**
|
|
333
|
+
* Persistence mode for the worker's shared auth session.
|
|
334
|
+
* Mirrors `pyric/auth`'s `Persistence.type`. `'NONE'` (inMemoryPersistence)
|
|
335
|
+
* disables the IndexedDB session record so a full close does NOT keep the
|
|
336
|
+
* user signed in; `'LOCAL'` and `'SESSION'` both persist the session in
|
|
337
|
+
* this single-backend model (see SESSION/LOCAL collapse note in host.ts).
|
|
338
|
+
*/
|
|
339
|
+
export type AuthPersistenceMode = 'LOCAL' | 'SESSION' | 'NONE';
|
|
340
|
+
/**
|
|
341
|
+
* All one-shot operation messages share the `t:'op'` discriminator and a
|
|
342
|
+
* correlation `id` that the worker echoes back in the `res` reply.
|
|
343
|
+
*/
|
|
344
|
+
export type OpMessage = ({
|
|
345
|
+
t: 'op';
|
|
346
|
+
id: string;
|
|
347
|
+
method: 'getDoc';
|
|
348
|
+
path: string;
|
|
349
|
+
} | {
|
|
350
|
+
t: 'op';
|
|
351
|
+
id: string;
|
|
352
|
+
method: 'getDocs';
|
|
353
|
+
source: TargetDescriptor;
|
|
354
|
+
} | {
|
|
355
|
+
t: 'op';
|
|
356
|
+
id: string;
|
|
357
|
+
method: 'setDoc';
|
|
358
|
+
path: string;
|
|
359
|
+
data: unknown;
|
|
360
|
+
options?: {
|
|
361
|
+
merge?: boolean;
|
|
362
|
+
mergeFields?: string[];
|
|
363
|
+
};
|
|
364
|
+
} | {
|
|
365
|
+
t: 'op';
|
|
366
|
+
id: string;
|
|
367
|
+
method: 'updateDoc';
|
|
368
|
+
path: string;
|
|
369
|
+
data: unknown;
|
|
370
|
+
} | {
|
|
371
|
+
t: 'op';
|
|
372
|
+
id: string;
|
|
373
|
+
method: 'deleteDoc';
|
|
374
|
+
path: string;
|
|
375
|
+
} | {
|
|
376
|
+
t: 'op';
|
|
377
|
+
id: string;
|
|
378
|
+
method: 'addDoc';
|
|
379
|
+
collectionPath: string;
|
|
380
|
+
data: unknown;
|
|
381
|
+
} | {
|
|
382
|
+
t: 'op';
|
|
383
|
+
id: string;
|
|
384
|
+
method: 'count';
|
|
385
|
+
source: TargetDescriptor;
|
|
386
|
+
} | {
|
|
387
|
+
t: 'op';
|
|
388
|
+
id: string;
|
|
389
|
+
method: 'aggregate';
|
|
390
|
+
source: TargetDescriptor;
|
|
391
|
+
spec: AggregateSpecDescriptor;
|
|
392
|
+
} | {
|
|
393
|
+
t: 'op';
|
|
394
|
+
id: string;
|
|
395
|
+
method: 'batchCommit';
|
|
396
|
+
writes: WriteDescriptor[];
|
|
397
|
+
} | {
|
|
398
|
+
t: 'op';
|
|
399
|
+
id: string;
|
|
400
|
+
method: 'txnCommit';
|
|
401
|
+
reads: TxnReadEntry[];
|
|
402
|
+
writes: WriteDescriptor[];
|
|
403
|
+
} | {
|
|
404
|
+
t: 'op';
|
|
405
|
+
id: string;
|
|
406
|
+
method: 'setRules';
|
|
407
|
+
source: string;
|
|
408
|
+
} | {
|
|
409
|
+
t: 'op';
|
|
410
|
+
id: string;
|
|
411
|
+
method: 'setFirestoreRules';
|
|
412
|
+
source: string;
|
|
413
|
+
} | {
|
|
414
|
+
t: 'op';
|
|
415
|
+
id: string;
|
|
416
|
+
method: 'setDatabaseRules';
|
|
417
|
+
source: unknown;
|
|
418
|
+
} | {
|
|
419
|
+
t: 'op';
|
|
420
|
+
id: string;
|
|
421
|
+
method: 'getActiveRules';
|
|
422
|
+
service?: 'firestore' | 'database';
|
|
423
|
+
} | {
|
|
424
|
+
t: 'op';
|
|
425
|
+
id: string;
|
|
426
|
+
method: 'getRulesStatus';
|
|
427
|
+
service?: 'firestore' | 'database';
|
|
428
|
+
} | {
|
|
429
|
+
t: 'op';
|
|
430
|
+
id: string;
|
|
431
|
+
method: 'admin.getDocument';
|
|
432
|
+
path: string;
|
|
433
|
+
} | {
|
|
434
|
+
t: 'op';
|
|
435
|
+
id: string;
|
|
436
|
+
method: 'admin.listDocuments';
|
|
437
|
+
path: string;
|
|
438
|
+
} | {
|
|
439
|
+
t: 'op';
|
|
440
|
+
id: string;
|
|
441
|
+
method: 'admin.setDocument';
|
|
442
|
+
path: string;
|
|
443
|
+
data: unknown;
|
|
444
|
+
} | {
|
|
445
|
+
t: 'op';
|
|
446
|
+
id: string;
|
|
447
|
+
method: 'admin.deleteDocument';
|
|
448
|
+
path: string;
|
|
449
|
+
} | {
|
|
450
|
+
t: 'op';
|
|
451
|
+
id: string;
|
|
452
|
+
method: 'admin.readState';
|
|
453
|
+
path?: string;
|
|
454
|
+
maxDepth?: number;
|
|
455
|
+
} | {
|
|
456
|
+
t: 'op';
|
|
457
|
+
id: string;
|
|
458
|
+
method: 'rtdb.get';
|
|
459
|
+
path: string;
|
|
460
|
+
} | {
|
|
461
|
+
t: 'op';
|
|
462
|
+
id: string;
|
|
463
|
+
method: 'rtdb.set';
|
|
464
|
+
path: string;
|
|
465
|
+
value: unknown;
|
|
466
|
+
} | {
|
|
467
|
+
t: 'op';
|
|
468
|
+
id: string;
|
|
469
|
+
method: 'rtdb.update';
|
|
470
|
+
path: string;
|
|
471
|
+
values: Record<string, unknown>;
|
|
472
|
+
} | {
|
|
473
|
+
t: 'op';
|
|
474
|
+
id: string;
|
|
475
|
+
method: 'rtdb.remove';
|
|
476
|
+
path: string;
|
|
477
|
+
} | {
|
|
478
|
+
t: 'op';
|
|
479
|
+
id: string;
|
|
480
|
+
method: 'rtdb.push';
|
|
481
|
+
path: string;
|
|
482
|
+
key: string;
|
|
483
|
+
value?: unknown;
|
|
484
|
+
} | {
|
|
485
|
+
t: 'op';
|
|
486
|
+
id: string;
|
|
487
|
+
method: 'rtdb.adminSnapshot';
|
|
488
|
+
} | {
|
|
489
|
+
t: 'op';
|
|
490
|
+
id: string;
|
|
491
|
+
method: 'listRootCollections';
|
|
492
|
+
} | {
|
|
493
|
+
t: 'op';
|
|
494
|
+
id: string;
|
|
495
|
+
method: 'listSubcollections';
|
|
496
|
+
docPath: string;
|
|
497
|
+
} | {
|
|
498
|
+
t: 'op';
|
|
499
|
+
id: string;
|
|
500
|
+
method: 'auth.createUser';
|
|
501
|
+
email: string;
|
|
502
|
+
password: string;
|
|
503
|
+
} | {
|
|
504
|
+
t: 'op';
|
|
505
|
+
id: string;
|
|
506
|
+
method: 'auth.signInEmail';
|
|
507
|
+
email: string;
|
|
508
|
+
password: string;
|
|
509
|
+
} | {
|
|
510
|
+
t: 'op';
|
|
511
|
+
id: string;
|
|
512
|
+
method: 'auth.signInAnonymously';
|
|
513
|
+
} | {
|
|
514
|
+
t: 'op';
|
|
515
|
+
id: string;
|
|
516
|
+
method: 'auth.signOut';
|
|
517
|
+
} | {
|
|
518
|
+
t: 'op';
|
|
519
|
+
id: string;
|
|
520
|
+
method: 'auth.getIdToken';
|
|
521
|
+
forceRefresh?: boolean;
|
|
522
|
+
} | {
|
|
523
|
+
t: 'op';
|
|
524
|
+
id: string;
|
|
525
|
+
method: 'auth.getIdTokenResult';
|
|
526
|
+
forceRefresh?: boolean;
|
|
527
|
+
} | {
|
|
528
|
+
t: 'op';
|
|
529
|
+
id: string;
|
|
530
|
+
method: 'auth.setPersistence';
|
|
531
|
+
mode: AuthPersistenceMode;
|
|
532
|
+
} | {
|
|
533
|
+
t: 'op';
|
|
534
|
+
id: string;
|
|
535
|
+
method: 'auth.getCurrentUser';
|
|
536
|
+
} | {
|
|
537
|
+
t: 'op';
|
|
538
|
+
id: string;
|
|
539
|
+
method: 'auth.updateProfile';
|
|
540
|
+
displayName?: string | null;
|
|
541
|
+
photoURL?: string | null;
|
|
542
|
+
} | {
|
|
543
|
+
t: 'op';
|
|
544
|
+
id: string;
|
|
545
|
+
method: 'auth.restorePortSession';
|
|
546
|
+
uid: string;
|
|
547
|
+
} | {
|
|
548
|
+
t: 'op';
|
|
549
|
+
id: string;
|
|
550
|
+
method: 'auth.acceptIdentity';
|
|
551
|
+
identity: ResolvedIdentity;
|
|
552
|
+
} | {
|
|
553
|
+
t: 'op';
|
|
554
|
+
id: string;
|
|
555
|
+
method: 'auth.listUsers';
|
|
556
|
+
} | {
|
|
557
|
+
t: 'op';
|
|
558
|
+
id: string;
|
|
559
|
+
method: 'auth.adminCreateUser';
|
|
560
|
+
request: Record<string, unknown>;
|
|
561
|
+
} | {
|
|
562
|
+
t: 'op';
|
|
563
|
+
id: string;
|
|
564
|
+
method: 'auth.adminUpdateUser';
|
|
565
|
+
uid: string;
|
|
566
|
+
request: Record<string, unknown>;
|
|
567
|
+
} | {
|
|
568
|
+
t: 'op';
|
|
569
|
+
id: string;
|
|
570
|
+
method: 'auth.adminDeleteUser';
|
|
571
|
+
uid: string;
|
|
572
|
+
} | {
|
|
573
|
+
t: 'op';
|
|
574
|
+
id: string;
|
|
575
|
+
method: 'auth.adminClearUsers';
|
|
576
|
+
} | {
|
|
577
|
+
t: 'op';
|
|
578
|
+
id: string;
|
|
579
|
+
method: 'auth.getProviderConfig';
|
|
580
|
+
} | {
|
|
581
|
+
t: 'op';
|
|
582
|
+
id: string;
|
|
583
|
+
method: 'auth.setProviderConfig';
|
|
584
|
+
providerId: string;
|
|
585
|
+
enabled: boolean;
|
|
586
|
+
} | {
|
|
587
|
+
t: 'op';
|
|
588
|
+
id: string;
|
|
589
|
+
method: 'storage.listAll';
|
|
590
|
+
path: string;
|
|
591
|
+
} | {
|
|
592
|
+
t: 'op';
|
|
593
|
+
id: string;
|
|
594
|
+
method: 'storage.getMetadata';
|
|
595
|
+
path: string;
|
|
596
|
+
} | {
|
|
597
|
+
t: 'op';
|
|
598
|
+
id: string;
|
|
599
|
+
method: 'storage.getBlob';
|
|
600
|
+
path: string;
|
|
601
|
+
} | {
|
|
602
|
+
t: 'op';
|
|
603
|
+
id: string;
|
|
604
|
+
method: 'storage.putBytes';
|
|
605
|
+
path: string;
|
|
606
|
+
dataB64: string;
|
|
607
|
+
contentType?: string;
|
|
608
|
+
metadata?: Record<string, unknown>;
|
|
609
|
+
} | {
|
|
610
|
+
t: 'op';
|
|
611
|
+
id: string;
|
|
612
|
+
method: 'storage.getBytes';
|
|
613
|
+
path: string;
|
|
614
|
+
} | {
|
|
615
|
+
t: 'op';
|
|
616
|
+
id: string;
|
|
617
|
+
method: 'storage.deleteObject';
|
|
618
|
+
path: string;
|
|
619
|
+
} | {
|
|
620
|
+
t: 'op';
|
|
621
|
+
id: string;
|
|
622
|
+
method: 'ai.generateContent';
|
|
623
|
+
model: string;
|
|
624
|
+
request: Record<string, unknown>;
|
|
625
|
+
engine?: AiEngineConfigWire;
|
|
626
|
+
} | {
|
|
627
|
+
t: 'op';
|
|
628
|
+
id: string;
|
|
629
|
+
method: 'ai.countTokens';
|
|
630
|
+
model: string;
|
|
631
|
+
request: Record<string, unknown>;
|
|
632
|
+
engine?: AiEngineConfigWire;
|
|
633
|
+
} | {
|
|
634
|
+
t: 'op';
|
|
635
|
+
id: string;
|
|
636
|
+
method: 'getVersion';
|
|
637
|
+
} | {
|
|
638
|
+
t: 'op';
|
|
639
|
+
id: string;
|
|
640
|
+
method: 'exportState';
|
|
641
|
+
} | {
|
|
642
|
+
t: 'op';
|
|
643
|
+
id: string;
|
|
644
|
+
method: 'importState';
|
|
645
|
+
bundle: string;
|
|
646
|
+
} | {
|
|
647
|
+
t: 'op';
|
|
648
|
+
id: string;
|
|
649
|
+
method: 'saveBranch';
|
|
650
|
+
name: string;
|
|
651
|
+
} | {
|
|
652
|
+
t: 'op';
|
|
653
|
+
id: string;
|
|
654
|
+
method: 'listBranches';
|
|
655
|
+
} | {
|
|
656
|
+
t: 'op';
|
|
657
|
+
id: string;
|
|
658
|
+
method: 'switchBranch';
|
|
659
|
+
name: string;
|
|
660
|
+
} | {
|
|
661
|
+
t: 'op';
|
|
662
|
+
id: string;
|
|
663
|
+
method: 'deleteBranch';
|
|
664
|
+
name: string;
|
|
665
|
+
} | {
|
|
666
|
+
t: 'op';
|
|
667
|
+
id: string;
|
|
668
|
+
method: 'getSnapshot';
|
|
669
|
+
} | {
|
|
670
|
+
t: 'op';
|
|
671
|
+
id: string;
|
|
672
|
+
method: 'messaging.getToken';
|
|
673
|
+
registrationId?: string;
|
|
674
|
+
} | {
|
|
675
|
+
t: 'op';
|
|
676
|
+
id: string;
|
|
677
|
+
method: 'messaging.deleteToken';
|
|
678
|
+
registrationId?: string;
|
|
679
|
+
} | {
|
|
680
|
+
t: 'op';
|
|
681
|
+
id: string;
|
|
682
|
+
method: 'messaging.send';
|
|
683
|
+
message: BrokerMessage;
|
|
684
|
+
validateOnly?: boolean;
|
|
685
|
+
} | {
|
|
686
|
+
t: 'op';
|
|
687
|
+
id: string;
|
|
688
|
+
method: 'messaging.subscribeToTopic';
|
|
689
|
+
tokens: string[];
|
|
690
|
+
topic: string;
|
|
691
|
+
} | {
|
|
692
|
+
t: 'op';
|
|
693
|
+
id: string;
|
|
694
|
+
method: 'messaging.unsubscribeFromTopic';
|
|
695
|
+
tokens: string[];
|
|
696
|
+
topic: string;
|
|
697
|
+
} | {
|
|
698
|
+
t: 'op';
|
|
699
|
+
id: string;
|
|
700
|
+
method: 'messaging.deliver';
|
|
701
|
+
spec: MessagingDeliverSpec;
|
|
702
|
+
} | {
|
|
703
|
+
t: 'op';
|
|
704
|
+
id: string;
|
|
705
|
+
method: 'messaging.setVisibility';
|
|
706
|
+
state: ClientVisibilityState;
|
|
707
|
+
} | {
|
|
708
|
+
t: 'op';
|
|
709
|
+
id: string;
|
|
710
|
+
method: 'presence.register';
|
|
711
|
+
clientId: string;
|
|
712
|
+
kind: PresenceClientKind;
|
|
713
|
+
route: string;
|
|
714
|
+
visibility: PresenceVisibility;
|
|
715
|
+
} | {
|
|
716
|
+
t: 'op';
|
|
717
|
+
id: string;
|
|
718
|
+
method: 'presence.heartbeat';
|
|
719
|
+
clientId: string;
|
|
720
|
+
} | {
|
|
721
|
+
t: 'op';
|
|
722
|
+
id: string;
|
|
723
|
+
method: 'presence.update';
|
|
724
|
+
clientId: string;
|
|
725
|
+
route?: string;
|
|
726
|
+
visibility?: PresenceVisibility;
|
|
727
|
+
} | {
|
|
728
|
+
t: 'op';
|
|
729
|
+
id: string;
|
|
730
|
+
method: 'presence.disconnect';
|
|
731
|
+
clientId: string;
|
|
732
|
+
}) & {
|
|
733
|
+
/**
|
|
734
|
+
* Per-op auth lens (Pyric Studio): `admin` bypasses rules, `{ as: uid }`
|
|
735
|
+
* evaluates rules as that user (impersonation), `anon` runs genuinely
|
|
736
|
+
* UNAUTHENTICATED (`withAuth(null)` — the remote arm's "no auth", which an
|
|
737
|
+
* absent lens does NOT mean: absent ⇒ the app's session, i.e. whoever the
|
|
738
|
+
* browser tab is signed in as). The host resolves the data handle from
|
|
739
|
+
* this — see `lensDb` in `host.ts`. Additive: existing senders omit it.
|
|
740
|
+
* Plain tagged union → structured-clones.
|
|
741
|
+
*/
|
|
742
|
+
actAs?: AuthLens;
|
|
743
|
+
/**
|
|
744
|
+
* MECHANICAL op provenance (Pyric Studio traffic attribution): the
|
|
745
|
+
* client that CONSTRUCTS this op declares who issued it. The host maps
|
|
746
|
+
* it onto the unified event stream's `actor` field (`{ kind: 'studio' }`)
|
|
747
|
+
* via the sandbox's ambient-provenance window, so Traffic can filter
|
|
748
|
+
* Studio's own viewer/editor noise out of the app's stream.
|
|
749
|
+
*
|
|
750
|
+
* Declared at the issuing call site, never inferred: Studio's worker
|
|
751
|
+
* client stamps it on every op it builds (see `setOpIssuer` in
|
|
752
|
+
* `client.ts`); the bridge relay (`relayWorkerOp`) forwards remote
|
|
753
|
+
* frames VERBATIM without stamping, so a user's own admin-SDK traffic
|
|
754
|
+
* through the remote bridge — which also rides this port when Studio
|
|
755
|
+
* holds the peer slot — is never mislabeled as Studio's. Additive:
|
|
756
|
+
* existing senders omit it (events default to `actor: { kind: 'app' }`).
|
|
757
|
+
*/
|
|
758
|
+
issuer?: 'studio';
|
|
759
|
+
};
|
|
760
|
+
/**
|
|
761
|
+
* Wire form of the broker's `deliver` spec (`messaging.deliver`) — the
|
|
762
|
+
* headless stand-in for "a push arrives". Mirrors
|
|
763
|
+
* `MessagingBroker.deliver`'s parameter exactly; plain JSON throughout.
|
|
764
|
+
*/
|
|
765
|
+
export interface MessagingDeliverSpec {
|
|
766
|
+
data?: Record<string, string>;
|
|
767
|
+
notification?: {
|
|
768
|
+
title?: string;
|
|
769
|
+
body?: string;
|
|
770
|
+
image?: string;
|
|
771
|
+
};
|
|
772
|
+
from?: string;
|
|
773
|
+
messageId?: string;
|
|
774
|
+
}
|
|
775
|
+
/** Register a Firestore snapshot listener for a doc or query. The worker
|
|
776
|
+
* fires `{ t:'snap', subId, value }` immediately (initial) and on each
|
|
777
|
+
* update. */
|
|
778
|
+
export interface FirestoreSubMessage {
|
|
779
|
+
t: 'sub';
|
|
780
|
+
subId: string;
|
|
781
|
+
target: TargetDescriptor;
|
|
782
|
+
/**
|
|
783
|
+
* Per-subscription auth lens (Pyric Studio F4 — "watch as user"). Mirrors
|
|
784
|
+
* the per-op `actAs` on {@link OpMessage}: `{ mode: 'as', uid }` registers the
|
|
785
|
+
* listener through the impersonation data handle so the snapshot's initial
|
|
786
|
+
* fire AND every re-eval evaluate security rules AS that uid; `{ mode: 'admin' }`
|
|
787
|
+
* watches through the rule-bypass handle; `{ mode: 'anon' }` watches genuinely
|
|
788
|
+
* unauthenticated (`withAuth(null)`); absent / `{ mode: 'app-session' }`
|
|
789
|
+
* watches as the app's own session (the unchanged default).
|
|
790
|
+
*
|
|
791
|
+
* The host resolves the listener's data handle from this via the SAME
|
|
792
|
+
* `lensDb` path ops use (`host.ts`), so "re-run a denied watch as the user who
|
|
793
|
+
* hit it" reuses the impersonation seam. Additive: existing senders omit it,
|
|
794
|
+
* so the wire message is byte-identical and existing subs don't regress.
|
|
795
|
+
*/
|
|
796
|
+
actAs?: AuthLens;
|
|
797
|
+
/** Mechanical op provenance — see the field's doc on {@link OpMessage}.
|
|
798
|
+
* Tags the listener's REGISTRATION events (the initial rules eval); the
|
|
799
|
+
* listener's deferred re-evals stay attributed to the app (they fire on
|
|
800
|
+
* the microtask drain, outside any provenance window). */
|
|
801
|
+
issuer?: 'studio';
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Register an AUTH listener (cross-tab auth — the headline of Phase 2).
|
|
805
|
+
*
|
|
806
|
+
* `target: 'authState'` mirrors `onAuthStateChanged`; `target: 'idToken'`
|
|
807
|
+
* mirrors `onIdTokenChanged`. The worker registers ONE real sandbox auth
|
|
808
|
+
* listener and fans out the new current user to EVERY subscribed port —
|
|
809
|
+
* so a sign-in on any tab updates every tab live. The `snap.value` is a
|
|
810
|
+
* `SerializedUser | null` (signed-out → null).
|
|
811
|
+
*/
|
|
812
|
+
export interface AuthSubMessage {
|
|
813
|
+
t: 'sub';
|
|
814
|
+
subId: string;
|
|
815
|
+
target: 'authState' | 'idToken';
|
|
816
|
+
}
|
|
817
|
+
/**
|
|
818
|
+
* Subscribe to the sandbox's unified cross-service EVENT STREAM (Pyric Studio
|
|
819
|
+
* keystone — Action Center / traffic / rules-debug denial feed).
|
|
820
|
+
*
|
|
821
|
+
* `target: 'events'` mirrors `sandbox.onEvent(cb)`. On subscribe the host
|
|
822
|
+
* immediately delivers `sandbox.history()` (every event so far) as ONE
|
|
823
|
+
* `{ t:'event', subId, events: [...] }` batch, then streams each subsequent
|
|
824
|
+
* `SandboxEvent` as a single-element batch. Multiple Studio/app ports may
|
|
825
|
+
* subscribe; the host owns the ONE sandbox + ONE `onEvent` subscription and
|
|
826
|
+
* fans out to every subscribed port (same pattern as auth fan-out).
|
|
827
|
+
*
|
|
828
|
+
* Every `SandboxEvent` is plain JSON (provenance-stamped, marker-shaped doc
|
|
829
|
+
* data — no class instances), so it structured-clones across the port verbatim;
|
|
830
|
+
* no codec round-trip is needed (unlike Firestore doc data).
|
|
831
|
+
*/
|
|
832
|
+
export interface EventSubMessage {
|
|
833
|
+
t: 'sub';
|
|
834
|
+
subId: string;
|
|
835
|
+
target: 'events';
|
|
836
|
+
}
|
|
837
|
+
export interface RtdbValueSubMessage {
|
|
838
|
+
t: 'sub';
|
|
839
|
+
subId: string;
|
|
840
|
+
target: {
|
|
841
|
+
service: 'rtdb';
|
|
842
|
+
path: string;
|
|
843
|
+
};
|
|
844
|
+
/** Mirrors Firestore subscriptions: absent/app-session uses this port's session. */
|
|
845
|
+
actAs?: AuthLens;
|
|
846
|
+
/** Mechanical op provenance — see the field's doc on {@link OpMessage}. */
|
|
847
|
+
issuer?: 'studio';
|
|
848
|
+
}
|
|
849
|
+
/**
|
|
850
|
+
* Stream a `generateContent` call as a SUBSCRIPTION (cdd-deltas #98.3:
|
|
851
|
+
* "chunks over the existing subscription/event mechanism"). Unlike the
|
|
852
|
+
* persistent listeners above, this sub is FINITE — it AUTO-UNSUBSCRIBES on a
|
|
853
|
+
* terminal `done` snap:
|
|
854
|
+
*
|
|
855
|
+
* { t:'snap', subId, value: { chunk } } — one per streamed WireChunk,
|
|
856
|
+
* delivered in order
|
|
857
|
+
* { t:'snap', subId, value: { done: true } } — terminal; the host has
|
|
858
|
+
* already dropped the sub
|
|
859
|
+
* { t:'snap', subId, value: { __error } } — terminal failure (the shared
|
|
860
|
+
* snap-error convention)
|
|
861
|
+
*
|
|
862
|
+
* A client MAY still send `unsub` (early consumer abandonment); the host
|
|
863
|
+
* treats an unknown subId as a no-op, so the done/unsub race is benign.
|
|
864
|
+
*/
|
|
865
|
+
export interface AiStreamSubMessage {
|
|
866
|
+
t: 'sub';
|
|
867
|
+
subId: string;
|
|
868
|
+
target: {
|
|
869
|
+
service: 'ai';
|
|
870
|
+
op: 'streamGenerateContent';
|
|
871
|
+
};
|
|
872
|
+
/** Model resource, as on the `ai.generateContent` op. */
|
|
873
|
+
model: string;
|
|
874
|
+
/** Plain Gemini-wire GenerateContentRequest JSON. */
|
|
875
|
+
request: Record<string, unknown>;
|
|
876
|
+
/** First-op engine config — see {@link AiEngineConfigWire}. */
|
|
877
|
+
engine?: AiEngineConfigWire;
|
|
878
|
+
}
|
|
879
|
+
/**
|
|
880
|
+
* Register a MESSAGING delivery listener (the receive plane crossing the
|
|
881
|
+
* transport — host-capability gated like the `messaging.*` ops).
|
|
882
|
+
*
|
|
883
|
+
* `target: 'messaging.foreground'` mirrors the client mirror's `onMessage`;
|
|
884
|
+
* `target: 'messaging.background'` mirrors the sw mirror's
|
|
885
|
+
* `onBackgroundMessage`. The host registers ONE real broker handler per sub
|
|
886
|
+
* and forwards each `DeliveredPayload` (plain JSON — no codec needed) as a
|
|
887
|
+
* `{ t:'snap', subId, value }` to the subscribing port. Which of the two
|
|
888
|
+
* targets fires for a given delivery is the broker's captured visibility
|
|
889
|
+
* rule — see the `messaging.setVisibility` op.
|
|
890
|
+
*/
|
|
891
|
+
export interface MessagingSubMessage {
|
|
892
|
+
t: 'sub';
|
|
893
|
+
subId: string;
|
|
894
|
+
target: 'messaging.foreground' | 'messaging.background';
|
|
895
|
+
}
|
|
896
|
+
/**
|
|
897
|
+
* Subscribe to connected-page presence (#227). On subscribe the host delivers
|
|
898
|
+
* the current {@link PresenceSnapshot} as `{ t:'snap', subId, value }`, then
|
|
899
|
+
* re-snaps on every registry change (register / heartbeat / update /
|
|
900
|
+
* disconnect / lease expiry). Studio renders the worker's snapshot — it does
|
|
901
|
+
* not implement a second client-side expiry policy.
|
|
902
|
+
*/
|
|
903
|
+
export interface PresenceSubMessage {
|
|
904
|
+
t: 'sub';
|
|
905
|
+
subId: string;
|
|
906
|
+
target: 'presence';
|
|
907
|
+
}
|
|
908
|
+
/** Logical page kind for presence (#227). */
|
|
909
|
+
export type PresenceClientKind = 'app' | 'studio';
|
|
910
|
+
/** Page Visibility API state carried on presence records. */
|
|
911
|
+
export type PresenceVisibility = 'visible' | 'hidden';
|
|
912
|
+
/** One logical connected page in a presence snapshot. */
|
|
913
|
+
export interface PresenceClientRecord {
|
|
914
|
+
clientId: string;
|
|
915
|
+
kind: PresenceClientKind;
|
|
916
|
+
route: string;
|
|
917
|
+
visibility: PresenceVisibility;
|
|
918
|
+
/** Epoch ms when this clientId first registered in this worker lifetime. */
|
|
919
|
+
connectedAt: number;
|
|
920
|
+
/** Epoch ms of the most recent register / heartbeat / update. */
|
|
921
|
+
lastSeen: number;
|
|
922
|
+
}
|
|
923
|
+
/** Authoritative presence snapshot owned by the SharedWorker host. */
|
|
924
|
+
export interface PresenceSnapshot {
|
|
925
|
+
clients: PresenceClientRecord[];
|
|
926
|
+
}
|
|
927
|
+
export type SubMessage = FirestoreSubMessage | AuthSubMessage | EventSubMessage | RtdbValueSubMessage | AiStreamSubMessage | MessagingSubMessage | PresenceSubMessage;
|
|
928
|
+
/** Type guard: is this an auth subscription (vs a Firestore / event one)? */
|
|
929
|
+
export declare function isAuthSub(msg: SubMessage): msg is AuthSubMessage;
|
|
930
|
+
/** Type guard: is this an event-stream subscription? */
|
|
931
|
+
export declare function isEventSub(msg: SubMessage): msg is EventSubMessage;
|
|
932
|
+
/** Type guard: is this a messaging delivery subscription? */
|
|
933
|
+
export declare function isMessagingSub(msg: SubMessage): msg is MessagingSubMessage;
|
|
934
|
+
/** Type guard: is this a connected-page presence subscription? */
|
|
935
|
+
export declare function isPresenceSub(msg: SubMessage): msg is PresenceSubMessage;
|
|
936
|
+
export declare function isRtdbSub(msg: SubMessage): msg is RtdbValueSubMessage;
|
|
937
|
+
/** Type guard: is this an AI stream subscription (finite, auto-unsubs on done)? */
|
|
938
|
+
export declare function isAiSub(msg: SubMessage): msg is AiStreamSubMessage;
|
|
939
|
+
/** Tear down a previously registered snapshot listener. */
|
|
940
|
+
export interface UnsubMessage {
|
|
941
|
+
t: 'unsub';
|
|
942
|
+
subId: string;
|
|
943
|
+
}
|
|
944
|
+
/** Explicit app-port teardown; MessagePort close events are unreliable in Chrome. */
|
|
945
|
+
export interface DisconnectMessage {
|
|
946
|
+
t: 'disconnect';
|
|
947
|
+
id: string;
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Bind an app-owned port to the worker's one Firebase configuration.
|
|
951
|
+
*
|
|
952
|
+
* This control frame is deliberately response-free: it is posted immediately
|
|
953
|
+
* after opening the port, and MessagePort FIFO ordering guarantees the worker
|
|
954
|
+
* evaluates it before any service op/sub posted through that port. A conflict
|
|
955
|
+
* tombstones the port; subsequent operations receive
|
|
956
|
+
* `app/multiple-configs-not-supported` instead of touching the shared backend.
|
|
957
|
+
*/
|
|
958
|
+
export interface AppConfigMessage {
|
|
959
|
+
t: 'appConfig';
|
|
960
|
+
options: Record<string, unknown>;
|
|
961
|
+
}
|
|
962
|
+
/**
|
|
963
|
+
* Agent tool-call, forwarded by the bridge peer to the worker so the agent
|
|
964
|
+
* executes against the SAME sandbox the app + Studio use (no separate in-page
|
|
965
|
+
* backend). The worker host runs the canonical sandbox tool dispatcher and
|
|
966
|
+
* replies with a `ResMessage` whose `value` is the `{ ok, summary, data }`
|
|
967
|
+
* dispatch result. Keeps app, Studio, and agent on one authoritative instance.
|
|
968
|
+
*/
|
|
969
|
+
export interface ToolMessage {
|
|
970
|
+
t: 'tool';
|
|
971
|
+
id: string;
|
|
972
|
+
name: string;
|
|
973
|
+
args: Record<string, unknown>;
|
|
974
|
+
}
|
|
975
|
+
export type InboundMessage = OpMessage | SubMessage | UnsubMessage | DisconnectMessage | AppConfigMessage | ToolMessage;
|
|
976
|
+
/**
|
|
977
|
+
* Reply to a one-shot op. `value` is present on success; `error` on failure.
|
|
978
|
+
*
|
|
979
|
+
* `value` shapes by method:
|
|
980
|
+
* getDoc → { id, path, exists, data?: SerializedDocData }
|
|
981
|
+
* getDocs → { docs: Array<{ id, path, data: SerializedDocData }> }
|
|
982
|
+
* setDoc / updateDoc / deleteDoc / setRules → null (ack)
|
|
983
|
+
* addDoc → { id, path } (the minted document id + full path)
|
|
984
|
+
* count → { count: number }
|
|
985
|
+
* batchCommit / txnCommit → null (ack)
|
|
986
|
+
*/
|
|
987
|
+
export type ResMessage = {
|
|
988
|
+
t: 'res';
|
|
989
|
+
id: string;
|
|
990
|
+
ok: true;
|
|
991
|
+
value: unknown;
|
|
992
|
+
} | {
|
|
993
|
+
t: 'res';
|
|
994
|
+
id: string;
|
|
995
|
+
ok: false;
|
|
996
|
+
error: SerializedError;
|
|
997
|
+
};
|
|
998
|
+
/**
|
|
999
|
+
* Streamed snapshot delivery. `value` is the same shape as `getDoc`/`getDocs`
|
|
1000
|
+
* result above but always present (not null) — listeners always fire with data.
|
|
1001
|
+
*
|
|
1002
|
+
* For a doc listener: `{ id, path, exists, data?: SerializedDocData }`
|
|
1003
|
+
* For a query listener: `{ docs: Array<{ id, path, data: SerializedDocData }> }`
|
|
1004
|
+
*/
|
|
1005
|
+
export interface SnapMessage {
|
|
1006
|
+
t: 'snap';
|
|
1007
|
+
subId: string;
|
|
1008
|
+
value: unknown;
|
|
1009
|
+
}
|
|
1010
|
+
/**
|
|
1011
|
+
* Streamed delivery for an event-stream subscription ({@link EventSubMessage}).
|
|
1012
|
+
*
|
|
1013
|
+
* Carries a BATCH of `SandboxEvent`s for the given `subId`:
|
|
1014
|
+
* - the FIRST message after subscribe is the initial `sandbox.history()`
|
|
1015
|
+
* snapshot (possibly empty);
|
|
1016
|
+
* - each subsequent message is a single live event (`events.length === 1`).
|
|
1017
|
+
*
|
|
1018
|
+
* A batch keeps the initial history one structured-clone instead of N, and lets
|
|
1019
|
+
* the client fold history then stream uniformly. Events are plain JSON — no
|
|
1020
|
+
* rehydration needed (see {@link EventSubMessage}).
|
|
1021
|
+
*/
|
|
1022
|
+
export interface EventStreamMessage {
|
|
1023
|
+
t: 'event';
|
|
1024
|
+
subId: string;
|
|
1025
|
+
events: readonly SandboxEvent[];
|
|
1026
|
+
}
|
|
1027
|
+
export type OutboundMessage = ResMessage | SnapMessage | EventStreamMessage;
|
|
1028
|
+
/**
|
|
1029
|
+
* Document data as it crosses the port: Timestamp/Bytes/LatLng/etc. are
|
|
1030
|
+
* serialized to their JSON marker shapes so they survive structured clone,
|
|
1031
|
+
* then rehydrated back to REAL class instances on the receiving side.
|
|
1032
|
+
*
|
|
1033
|
+
* Wire format == persistence format: we use the same codec the sandbox uses
|
|
1034
|
+
* for IndexedDB persistence (`serializeSnapshot` / `deserializeSnapshot` in
|
|
1035
|
+
* `pyric/sandbox`). Concretely:
|
|
1036
|
+
*
|
|
1037
|
+
* serialize: JSON.stringify(data) — each wrapper's toJSON() emits a
|
|
1038
|
+
* marker shape ({ __type: 'timestamp', seconds, nanos } etc.)
|
|
1039
|
+
* deserialize: JSON.parse → rehydrateDocValue — re-wraps every marker
|
|
1040
|
+
* shape into a real class instance (Timestamp, Bytes, LatLng).
|
|
1041
|
+
*
|
|
1042
|
+
* WHY REAL INSTANCES MATTER:
|
|
1043
|
+
* Consumer code does `snap.data().createdAt.toDate()`, `instanceof Timestamp`,
|
|
1044
|
+
* `bytes.data`, etc. Plain marker objects don't have those methods/prototype.
|
|
1045
|
+
* The persistence serializer's `rehydrateDocValue` is the canonical codec that
|
|
1046
|
+
* the sandbox already relies on — reusing it here ensures the wire format and
|
|
1047
|
+
* the persistence format are identical and don't drift.
|
|
1048
|
+
*
|
|
1049
|
+
* WHY JSON AND NOT STRUCTURED CLONE FOR DATA:
|
|
1050
|
+
* Structured clone can transfer Uint8Arrays, but class instances of pyric's
|
|
1051
|
+
* Timestamp/Bytes/LatLng are NOT in the structured clone spec — they'd arrive
|
|
1052
|
+
* as plain objects and lose their prototype chain, breaking instanceof checks.
|
|
1053
|
+
*/
|
|
1054
|
+
export interface SerializedDocData {
|
|
1055
|
+
/** JSON string of the document data (Timestamp/Bytes/LatLng serialized via toJSON). */
|
|
1056
|
+
json: string;
|
|
1057
|
+
}
|
|
1058
|
+
/**
|
|
1059
|
+
* Serialize document data to cross-port form.
|
|
1060
|
+
*
|
|
1061
|
+
* Uses `JSON.stringify` which calls `toJSON()` on each Timestamp, Bytes,
|
|
1062
|
+
* LatLng, etc., producing the canonical marker shapes. This is identical to
|
|
1063
|
+
* what `serializeSnapshot` does for the Firestore state before IDB writes.
|
|
1064
|
+
*/
|
|
1065
|
+
export declare function serializeDocData(data: Record<string, unknown>): SerializedDocData;
|
|
1066
|
+
/**
|
|
1067
|
+
* Deserialize document data from cross-port form.
|
|
1068
|
+
*
|
|
1069
|
+
* Parses the JSON string and walks the result with `rehydrateDocValue`
|
|
1070
|
+
* (from `pyric/sandbox`) to restore REAL class instances — the same codec
|
|
1071
|
+
* `deserializeSnapshot` uses when restoring from IDB. After this call,
|
|
1072
|
+
* Timestamp values are real `Timestamp` instances with `.seconds`/`.nanos`,
|
|
1073
|
+
* Bytes values have `.data` (Uint8Array), LatLng values have `.lat`/`.lng`.
|
|
1074
|
+
*
|
|
1075
|
+
* Disambiguation: a plain user object `{ seconds: 1, nanoseconds: 0 }` is
|
|
1076
|
+
* NOT mistaken for a Timestamp because the marker-based codec requires the
|
|
1077
|
+
* `__type: 'timestamp'` discriminator emitted by `Timestamp.toJSON()`. Raw
|
|
1078
|
+
* plain objects that happen to have numeric fields are passed through as-is.
|
|
1079
|
+
*/
|
|
1080
|
+
export declare function deserializeDocData(serialized: SerializedDocData): unknown;
|
|
1081
|
+
/**
|
|
1082
|
+
* Maximum RAW byte size a single storage op may carry (`storage.putBytes`
|
|
1083
|
+
* payloads and `storage.getBytes` results). 8 MiB raw ≈ 11 MiB base64 —
|
|
1084
|
+
* comfortably under `ws`'s 100 MiB default `maxPayload` while keeping the
|
|
1085
|
+
* four-hop whole-object buffering (Node → bridge → page → worker and back)
|
|
1086
|
+
* sane. Enforced on BOTH ends: the Node conveniences / pyric-admin remote
|
|
1087
|
+
* arm reject before sending, and the worker host rejects oversized inputs
|
|
1088
|
+
* and results so a big browser-side object can't blow up the relay. Bigger
|
|
1089
|
+
* objects need the (unshipped) streaming story — do not raise the cap.
|
|
1090
|
+
*/
|
|
1091
|
+
export declare const MAX_STORAGE_OP_BYTES: number;
|
|
1092
|
+
/** Base64 length ceiling for a payload within {@link MAX_STORAGE_OP_BYTES} —
|
|
1093
|
+
* a cheap pre-decode gate so an oversized `dataB64` is rejected without
|
|
1094
|
+
* materializing its bytes first. */
|
|
1095
|
+
export declare const MAX_STORAGE_OP_B64_LENGTH: number;
|
|
1096
|
+
/** Build the canonical over-cap error (`code: 'payload-too-large'`). */
|
|
1097
|
+
export declare function storagePayloadTooLarge(sizeBytes: number, what: string): Error & {
|
|
1098
|
+
code: string;
|
|
1099
|
+
};
|
|
1100
|
+
/**
|
|
1101
|
+
* Encode bytes to standard base64. Chunked `String.fromCharCode` so a
|
|
1102
|
+
* multi-MiB payload doesn't overflow the argument-spread limit. `btoa` is
|
|
1103
|
+
* available in browsers, workers, Node ≥ 16, and Bun.
|
|
1104
|
+
*/
|
|
1105
|
+
export declare function bytesToBase64(bytes: Uint8Array): string;
|
|
1106
|
+
/** Decode standard base64 to bytes (inverse of {@link bytesToBase64}). */
|
|
1107
|
+
export declare function base64ToBytes(b64: string): Uint8Array;
|
|
1108
|
+
/**
|
|
1109
|
+
* Wire form of a thrown error. `denialContext` (spike gap 6) is the
|
|
1110
|
+
* structured "why did this deny" frame `SandboxError` carries on
|
|
1111
|
+
* `permission-denied` — plain JSON end to end (rule line/expression, auth
|
|
1112
|
+
* state, simulator reasons, eval-time request shape), so it survives both
|
|
1113
|
+
* structured clone AND the JSON WS relay legs verbatim. Receivers re-attach
|
|
1114
|
+
* it to the reconstructed error so remote `SandboxError`s match local ones.
|
|
1115
|
+
*/
|
|
1116
|
+
export interface SerializedError {
|
|
1117
|
+
code: string;
|
|
1118
|
+
message: string;
|
|
1119
|
+
denialContext?: DenialContext;
|
|
1120
|
+
/**
|
|
1121
|
+
* The Gemini wire error envelope when the thrown value was an
|
|
1122
|
+
* `AiBrokerError` (pyric/ai) — plain JSON end to end, so the client
|
|
1123
|
+
* mirror can mint the SAME `AIError('fetch-error', …)` decoration the
|
|
1124
|
+
* in-process plane applies. `code` is `ai/<STATUS>` in that case.
|
|
1125
|
+
*/
|
|
1126
|
+
aiEnvelope?: AiErrorEnvelopeWire;
|
|
1127
|
+
/**
|
|
1128
|
+
* Messaging send-plane rejection: the broker's captured google.rpc
|
|
1129
|
+
* envelope, carried VERBATIM (the seam doc: rejections cross the wire as
|
|
1130
|
+
* the `BrokerSendError.envelope` value — plain JSON, structured-clone-
|
|
1131
|
+
* safe). Present only on `messaging.*` op failures whose cause is a
|
|
1132
|
+
* `BrokerSendError`; a client mirror rebuilds the typed error from it.
|
|
1133
|
+
*/
|
|
1134
|
+
envelope?: FcmErrorEnvelope;
|
|
1135
|
+
}
|
|
1136
|
+
/**
|
|
1137
|
+
* Serialize any thrown value to a `{ code, message, denialContext? }` shape
|
|
1138
|
+
* suitable for structured-clone across the MessagePort (and the JSON relay).
|
|
1139
|
+
*
|
|
1140
|
+
* SandboxError (from pyric/sandbox) carries `.code` (e.g. 'permission-denied')
|
|
1141
|
+
* and `.message`, plus `.denialContext` on rule denials — carried through
|
|
1142
|
+
* whenever present. All other errors get `code: 'unknown'`. Plain strings get
|
|
1143
|
+
* `code: 'unknown'` and `message: String(err)`.
|
|
1144
|
+
*
|
|
1145
|
+
* Class instances don't survive structured clone as their original class —
|
|
1146
|
+
* the receiver sees a plain object. We normalize so the client can
|
|
1147
|
+
* reconstruct a typed error with `.code` (and `.denialContext`) attached.
|
|
1148
|
+
*/
|
|
1149
|
+
export declare function serializeError(err: unknown): SerializedError;
|
|
1150
|
+
//# sourceMappingURL=protocol.d.ts.map
|