pyric-tools 0.1.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -0
- package/dist/auth/domains/handler.d.ts +6 -0
- package/dist/auth/domains/handler.d.ts.map +1 -0
- package/dist/auth/domains/handler.js +75 -0
- package/dist/auth/domains/handler.js.map +1 -0
- package/dist/auth/domains/spec.d.ts +25 -0
- package/dist/auth/domains/spec.d.ts.map +1 -0
- package/dist/auth/domains/spec.js +6 -0
- package/dist/auth/domains/spec.js.map +1 -0
- package/dist/auth/index.d.ts +34 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +30 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/mapper.d.ts +5 -0
- package/dist/auth/mapper.d.ts.map +1 -0
- package/dist/auth/mapper.js +49 -0
- package/dist/auth/mapper.js.map +1 -0
- package/dist/auth/provider/handler.d.ts +9 -0
- package/dist/auth/provider/handler.d.ts.map +1 -0
- package/dist/auth/provider/handler.js +128 -0
- package/dist/auth/provider/handler.js.map +1 -0
- package/dist/auth/provider/spec.d.ts +29 -0
- package/dist/auth/provider/spec.d.ts.map +1 -0
- package/dist/auth/provider/spec.js +12 -0
- package/dist/auth/provider/spec.js.map +1 -0
- package/dist/auth/resolver.d.ts +16 -0
- package/dist/auth/resolver.d.ts.map +1 -0
- package/dist/auth/resolver.js +32 -0
- package/dist/auth/resolver.js.map +1 -0
- package/dist/auth/tools.d.ts +23 -0
- package/dist/auth/tools.d.ts.map +1 -0
- package/dist/auth/tools.js +71 -0
- package/dist/auth/tools.js.map +1 -0
- package/dist/auth/types.d.ts +37 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +17 -0
- package/dist/auth/types.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 +430 -0
- package/dist/bridge/client/bridge.js.map +1 -0
- package/dist/bridge/client/dispatch.d.ts +49 -0
- package/dist/bridge/client/dispatch.d.ts.map +1 -0
- package/dist/bridge/client/dispatch.js +103 -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 +228 -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 +165 -0
- package/dist/bridge/server/bridge.d.ts.map +1 -0
- package/dist/bridge/server/bridge.js +410 -0
- package/dist/bridge/server/bridge.js.map +1 -0
- package/dist/bridge/server/confirm-policy.d.ts +56 -0
- package/dist/bridge/server/confirm-policy.d.ts.map +1 -0
- package/dist/bridge/server/confirm-policy.js +107 -0
- package/dist/bridge/server/confirm-policy.js.map +1 -0
- package/dist/bridge/server/confirm-prompt.d.ts +73 -0
- package/dist/bridge/server/confirm-prompt.d.ts.map +1 -0
- package/dist/bridge/server/confirm-prompt.js +199 -0
- package/dist/bridge/server/confirm-prompt.js.map +1 -0
- package/dist/bridge/server/confirm.d.ts +92 -0
- package/dist/bridge/server/confirm.d.ts.map +1 -0
- package/dist/bridge/server/confirm.js +210 -0
- package/dist/bridge/server/confirm.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 +132 -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 +42 -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.d.ts +33 -0
- package/dist/bridge/server/mcp.d.ts.map +1 -0
- package/dist/bridge/server/mcp.js +159 -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 +102 -0
- package/dist/bridge/server/standalone.d.ts.map +1 -0
- package/dist/bridge/server/standalone.js +352 -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 +79 -0
- package/dist/bridge/server/tool-metadata.js.map +1 -0
- package/dist/bridge/server.d.ts +25 -0
- package/dist/bridge/server.d.ts.map +1 -0
- package/dist/bridge/server.js +23 -0
- package/dist/bridge/server.js.map +1 -0
- package/dist/cli/auth.d.ts +37 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +119 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/database-rules.d.ts +25 -0
- package/dist/cli/database-rules.d.ts.map +1 -0
- package/dist/cli/database-rules.js +215 -0
- package/dist/cli/database-rules.js.map +1 -0
- package/dist/cli/deploy-progress.d.ts +35 -0
- package/dist/cli/deploy-progress.d.ts.map +1 -0
- package/dist/cli/deploy-progress.js +69 -0
- package/dist/cli/deploy-progress.js.map +1 -0
- package/dist/cli/deploy.d.ts +81 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +413 -0
- package/dist/cli/deploy.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 +227 -0
- package/dist/cli/dev-runner.js.map +1 -0
- package/dist/cli/discover.d.ts +47 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +77 -0
- package/dist/cli/discover.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/index.d.ts +55 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +500 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-templates.d.ts +37 -0
- package/dist/cli/init-templates.d.ts.map +1 -0
- package/dist/cli/init-templates.js +638 -0
- package/dist/cli/init-templates.js.map +1 -0
- package/dist/cli/init.d.ts +124 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +423 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/login.d.ts +18 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +59 -0
- package/dist/cli/login.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 +126 -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 +40 -0
- package/dist/cli/rules.d.ts.map +1 -0
- package/dist/cli/rules.js +162 -0
- package/dist/cli/rules.js.map +1 -0
- package/dist/cli/scope.d.ts +38 -0
- package/dist/cli/scope.d.ts.map +1 -0
- package/dist/cli/scope.js +63 -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 +685 -0
- package/dist/cli/serve.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/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/authorize.d.ts +22 -0
- package/dist/credentials/core/authorize.d.ts.map +1 -0
- package/dist/credentials/core/authorize.js +39 -0
- package/dist/credentials/core/authorize.js.map +1 -0
- package/dist/credentials/core/client.d.ts +14 -0
- package/dist/credentials/core/client.d.ts.map +1 -0
- package/dist/credentials/core/client.js +13 -0
- package/dist/credentials/core/client.js.map +1 -0
- package/dist/credentials/core/exchange.d.ts +24 -0
- package/dist/credentials/core/exchange.d.ts.map +1 -0
- package/dist/credentials/core/exchange.js +46 -0
- package/dist/credentials/core/exchange.js.map +1 -0
- package/dist/credentials/core/flow.d.ts +15 -0
- package/dist/credentials/core/flow.d.ts.map +1 -0
- package/dist/credentials/core/flow.js +40 -0
- package/dist/credentials/core/flow.js.map +1 -0
- package/dist/credentials/core/from-user-credential.d.ts +3 -0
- package/dist/credentials/core/from-user-credential.d.ts.map +1 -0
- package/dist/credentials/core/from-user-credential.js +19 -0
- package/dist/credentials/core/from-user-credential.js.map +1 -0
- package/dist/credentials/core/scopes.d.ts +26 -0
- package/dist/credentials/core/scopes.d.ts.map +1 -0
- package/dist/credentials/core/scopes.js +32 -0
- package/dist/credentials/core/scopes.js.map +1 -0
- package/dist/credentials/core/types.d.ts +72 -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/index.d.ts +14 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +13 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/node/ensure-scope.d.ts +29 -0
- package/dist/credentials/node/ensure-scope.d.ts.map +1 -0
- package/dist/credentials/node/ensure-scope.js +42 -0
- package/dist/credentials/node/ensure-scope.js.map +1 -0
- package/dist/credentials/node/file-store.d.ts +4 -0
- package/dist/credentials/node/file-store.d.ts.map +1 -0
- package/dist/credentials/node/file-store.js +52 -0
- package/dist/credentials/node/file-store.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 +60 -0
- package/dist/credentials/node/from-adc.js.map +1 -0
- package/dist/credentials/node/index.d.ts +10 -0
- package/dist/credentials/node/index.d.ts.map +1 -0
- package/dist/credentials/node/index.js +10 -0
- package/dist/credentials/node/index.js.map +1 -0
- package/dist/credentials/node/loopback-authorizer.d.ts +12 -0
- package/dist/credentials/node/loopback-authorizer.d.ts.map +1 -0
- package/dist/credentials/node/loopback-authorizer.js +61 -0
- package/dist/credentials/node/loopback-authorizer.js.map +1 -0
- package/dist/credentials/node/resolve-local-token.d.ts +20 -0
- package/dist/credentials/node/resolve-local-token.d.ts.map +1 -0
- package/dist/credentials/node/resolve-local-token.js +97 -0
- package/dist/credentials/node/resolve-local-token.js.map +1 -0
- package/dist/credentials/server/bff.d.ts +44 -0
- package/dist/credentials/server/bff.d.ts.map +1 -0
- package/dist/credentials/server/bff.js +43 -0
- package/dist/credentials/server/bff.js.map +1 -0
- package/dist/deploy/api-enablement.d.ts +45 -0
- package/dist/deploy/api-enablement.d.ts.map +1 -0
- package/dist/deploy/api-enablement.js +125 -0
- package/dist/deploy/api-enablement.js.map +1 -0
- package/dist/deploy/firestore/databases.d.ts +41 -0
- package/dist/deploy/firestore/databases.d.ts.map +1 -0
- package/dist/deploy/firestore/databases.js +63 -0
- package/dist/deploy/firestore/databases.js.map +1 -0
- package/dist/deploy/firestore/indexes.d.ts +120 -0
- package/dist/deploy/firestore/indexes.d.ts.map +1 -0
- package/dist/deploy/firestore/indexes.js +243 -0
- package/dist/deploy/firestore/indexes.js.map +1 -0
- package/dist/deploy/firestore/recipes.d.ts +21 -0
- package/dist/deploy/firestore/recipes.d.ts.map +1 -0
- package/dist/deploy/firestore/recipes.js +34 -0
- package/dist/deploy/firestore/recipes.js.map +1 -0
- package/dist/deploy/firestore/rules.d.ts +76 -0
- package/dist/deploy/firestore/rules.d.ts.map +1 -0
- package/dist/deploy/firestore/rules.js +180 -0
- package/dist/deploy/firestore/rules.js.map +1 -0
- package/dist/deploy/from-admin-app.d.ts +20 -0
- package/dist/deploy/from-admin-app.d.ts.map +1 -0
- package/dist/deploy/from-admin-app.js +18 -0
- package/dist/deploy/from-admin-app.js.map +1 -0
- package/dist/deploy/from-service-account.d.ts +29 -0
- package/dist/deploy/from-service-account.d.ts.map +1 -0
- package/dist/deploy/from-service-account.js +115 -0
- package/dist/deploy/from-service-account.js.map +1 -0
- package/dist/deploy/functions/bundle.d.ts +37 -0
- package/dist/deploy/functions/bundle.d.ts.map +1 -0
- package/dist/deploy/functions/bundle.js +181 -0
- package/dist/deploy/functions/bundle.js.map +1 -0
- package/dist/deploy/functions/core.d.ts +18 -0
- package/dist/deploy/functions/core.d.ts.map +1 -0
- package/dist/deploy/functions/core.js +211 -0
- package/dist/deploy/functions/core.js.map +1 -0
- package/dist/deploy/functions/iam.d.ts +17 -0
- package/dist/deploy/functions/iam.d.ts.map +1 -0
- package/dist/deploy/functions/iam.js +40 -0
- package/dist/deploy/functions/iam.js.map +1 -0
- package/dist/deploy/functions/operation.d.ts +39 -0
- package/dist/deploy/functions/operation.d.ts.map +1 -0
- package/dist/deploy/functions/operation.js +37 -0
- package/dist/deploy/functions/operation.js.map +1 -0
- package/dist/deploy/functions/spec.d.ts +69 -0
- package/dist/deploy/functions/spec.d.ts.map +1 -0
- package/dist/deploy/functions/spec.js +7 -0
- package/dist/deploy/functions/spec.js.map +1 -0
- package/dist/deploy/functions/types.d.ts +50 -0
- package/dist/deploy/functions/types.d.ts.map +1 -0
- package/dist/deploy/functions/types.js +3 -0
- package/dist/deploy/functions/types.js.map +1 -0
- package/dist/deploy/hosting/channels.d.ts +93 -0
- package/dist/deploy/hosting/channels.d.ts.map +1 -0
- package/dist/deploy/hosting/channels.js +134 -0
- package/dist/deploy/hosting/channels.js.map +1 -0
- package/dist/deploy/hosting/config.d.ts +28 -0
- package/dist/deploy/hosting/config.d.ts.map +1 -0
- package/dist/deploy/hosting/config.js +261 -0
- package/dist/deploy/hosting/config.js.map +1 -0
- package/dist/deploy/hosting/core.d.ts +38 -0
- package/dist/deploy/hosting/core.d.ts.map +1 -0
- package/dist/deploy/hosting/core.js +311 -0
- package/dist/deploy/hosting/core.js.map +1 -0
- package/dist/deploy/hosting/gzip.d.ts +11 -0
- package/dist/deploy/hosting/gzip.d.ts.map +1 -0
- package/dist/deploy/hosting/gzip.js +20 -0
- package/dist/deploy/hosting/gzip.js.map +1 -0
- package/dist/deploy/hosting/hash.d.ts +6 -0
- package/dist/deploy/hosting/hash.d.ts.map +1 -0
- package/dist/deploy/hosting/hash.js +17 -0
- package/dist/deploy/hosting/hash.js.map +1 -0
- package/dist/deploy/hosting/sites.d.ts +77 -0
- package/dist/deploy/hosting/sites.d.ts.map +1 -0
- package/dist/deploy/hosting/sites.js +73 -0
- package/dist/deploy/hosting/sites.js.map +1 -0
- package/dist/deploy/hosting/spec.d.ts +140 -0
- package/dist/deploy/hosting/spec.d.ts.map +1 -0
- package/dist/deploy/hosting/spec.js +8 -0
- package/dist/deploy/hosting/spec.js.map +1 -0
- package/dist/deploy/hosting/types.d.ts +71 -0
- package/dist/deploy/hosting/types.d.ts.map +1 -0
- package/dist/deploy/hosting/types.js +3 -0
- package/dist/deploy/hosting/types.js.map +1 -0
- package/dist/deploy/hosting/walk.d.ts +31 -0
- package/dist/deploy/hosting/walk.d.ts.map +1 -0
- package/dist/deploy/hosting/walk.js +167 -0
- package/dist/deploy/hosting/walk.js.map +1 -0
- package/dist/deploy/index.d.ts +51 -0
- package/dist/deploy/index.d.ts.map +1 -0
- package/dist/deploy/index.js +50 -0
- package/dist/deploy/index.js.map +1 -0
- package/dist/deploy/memoize-ttl.d.ts +58 -0
- package/dist/deploy/memoize-ttl.d.ts.map +1 -0
- package/dist/deploy/memoize-ttl.js +88 -0
- package/dist/deploy/memoize-ttl.js.map +1 -0
- package/dist/deploy/namespaces.d.ts +119 -0
- package/dist/deploy/namespaces.d.ts.map +1 -0
- package/dist/deploy/namespaces.js +192 -0
- package/dist/deploy/namespaces.js.map +1 -0
- package/dist/deploy/preflight.d.ts +119 -0
- package/dist/deploy/preflight.d.ts.map +1 -0
- package/dist/deploy/preflight.js +440 -0
- package/dist/deploy/preflight.js.map +1 -0
- package/dist/deploy/provider.d.ts +130 -0
- package/dist/deploy/provider.d.ts.map +1 -0
- package/dist/deploy/provider.js +21 -0
- package/dist/deploy/provider.js.map +1 -0
- package/dist/deploy/providers/database.d.ts +8 -0
- package/dist/deploy/providers/database.d.ts.map +1 -0
- package/dist/deploy/providers/database.js +37 -0
- package/dist/deploy/providers/database.js.map +1 -0
- package/dist/deploy/providers/firestore.d.ts +11 -0
- package/dist/deploy/providers/firestore.d.ts.map +1 -0
- package/dist/deploy/providers/firestore.js +43 -0
- package/dist/deploy/providers/firestore.js.map +1 -0
- package/dist/deploy/providers/functions.d.ts +9 -0
- package/dist/deploy/providers/functions.d.ts.map +1 -0
- package/dist/deploy/providers/functions.js +49 -0
- package/dist/deploy/providers/functions.js.map +1 -0
- package/dist/deploy/providers/hosting.d.ts +13 -0
- package/dist/deploy/providers/hosting.d.ts.map +1 -0
- package/dist/deploy/providers/hosting.js +149 -0
- package/dist/deploy/providers/hosting.js.map +1 -0
- package/dist/deploy/providers/storage.d.ts +9 -0
- package/dist/deploy/providers/storage.d.ts.map +1 -0
- package/dist/deploy/providers/storage.js +46 -0
- package/dist/deploy/providers/storage.js.map +1 -0
- package/dist/deploy/registry.d.ts +17 -0
- package/dist/deploy/registry.d.ts.map +1 -0
- package/dist/deploy/registry.js +15 -0
- package/dist/deploy/registry.js.map +1 -0
- package/dist/deploy/rtdb/rules.d.ts +21 -0
- package/dist/deploy/rtdb/rules.d.ts.map +1 -0
- package/dist/deploy/rtdb/rules.js +104 -0
- package/dist/deploy/rtdb/rules.js.map +1 -0
- package/dist/deploy/scope.d.ts +81 -0
- package/dist/deploy/scope.d.ts.map +1 -0
- package/dist/deploy/scope.js +44 -0
- package/dist/deploy/scope.js.map +1 -0
- package/dist/deploy/tools.d.ts +55 -0
- package/dist/deploy/tools.d.ts.map +1 -0
- package/dist/deploy/tools.js +329 -0
- package/dist/deploy/tools.js.map +1 -0
- package/dist/deploy/with-resolved-scope.d.ts +31 -0
- package/dist/deploy/with-resolved-scope.d.ts.map +1 -0
- package/dist/deploy/with-resolved-scope.js +73 -0
- package/dist/deploy/with-resolved-scope.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 +49 -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 +333 -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/findCollectionGroup.d.ts +80 -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/index.d.ts +15 -0
- package/dist/discover/index.d.ts.map +1 -0
- package/dist/discover/index.js +24 -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/rest-crawler-firestore.d.ts +51 -0
- package/dist/discover/rest-crawler-firestore.d.ts.map +1 -0
- package/dist/discover/rest-crawler-firestore.js +154 -0
- package/dist/discover/rest-crawler-firestore.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 +59 -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 +191 -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 +81 -0
- package/dist/discover/wire.d.ts.map +1 -0
- package/dist/discover/wire.js +308 -0
- package/dist/discover/wire.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/exempt.d.ts +11 -0
- package/dist/register/exempt.d.ts.map +1 -0
- package/dist/register/exempt.js +74 -0
- package/dist/register/exempt.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 +126 -0
- package/dist/register/index.js.map +1 -0
- package/dist/register/mapping.d.ts +17 -0
- package/dist/register/mapping.d.ts.map +1 -0
- package/dist/register/mapping.js +31 -0
- package/dist/register/mapping.js.map +1 -0
- package/dist/registry/admin-deps.d.ts +17 -0
- package/dist/registry/admin-deps.d.ts.map +1 -0
- package/dist/registry/admin-deps.js +68 -0
- package/dist/registry/admin-deps.js.map +1 -0
- package/dist/registry/compose.d.ts +68 -0
- package/dist/registry/compose.d.ts.map +1 -0
- package/dist/registry/compose.js +113 -0
- package/dist/registry/compose.js.map +1 -0
- package/dist/registry/index.d.ts +11 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +11 -0
- package/dist/registry/index.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 +719 -0
- package/dist/remote/index.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 +38 -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 +134 -0
- package/dist/serve/bundler.d.ts.map +1 -0
- package/dist/serve/bundler.js +452 -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_.BsN3bPok.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/index.html +1 -0
- package/dist/serve/docs-ui/docs/index.json +9914 -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 +87 -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 +86 -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 +82 -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 +70 -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 +86 -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 +92 -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 +78 -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 +67 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore-reference-api.md +73 -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 +75 -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 +95 -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 +73 -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 +146 -0
- package/dist/serve/docs-ui/docs/pyric-admin-firestore.md +49 -0
- package/dist/serve/docs-ui/docs/pyric-auth/index.html +64 -0
- package/dist/serve/docs-ui/docs/pyric-auth-compat/index.html +874 -0
- package/dist/serve/docs-ui/docs/pyric-auth-compat.md +265 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api/index.html +112 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-api.md +129 -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 +80 -0
- package/dist/serve/docs-ui/docs/pyric-auth-reference-sandbox-test-driver.md +107 -0
- package/dist/serve/docs-ui/docs/pyric-auth.md +84 -0
- package/dist/serve/docs-ui/docs/pyric-database/index.html +36 -0
- package/dist/serve/docs-ui/docs/pyric-database-compat/index.html +2428 -0
- package/dist/serve/docs-ui/docs/pyric-database-compat.md +850 -0
- package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate/index.html +23 -0
- package/dist/serve/docs-ui/docs/pyric-database-explanation-rules-authoring-and-deploy-are-separate.md +29 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling/index.html +263 -0
- package/dist/serve/docs-ui/docs/pyric-database-reference-rules-tooling.md +288 -0
- package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints/index.html +116 -0
- package/dist/serve/docs-ui/docs/pyric-database-tutorials-01-author-rtdb-rules-with-constraints.md +142 -0
- package/dist/serve/docs-ui/docs/pyric-database.md +18 -0
- package/dist/serve/docs-ui/docs/pyric-firestore/index.html +54 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-compat/index.html +1345 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-compat.md +366 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate/index.html +79 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-rules-tooling-is-separate.md +62 -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 +85 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface/index.html +61 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-explanation-two-backends-one-surface.md +87 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-build-queries/index.html +105 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-build-queries.md +138 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore/index.html +65 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-migrate-from-firebase-firestore.md +93 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend/index.html +112 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-pick-a-backend.md +100 -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 +55 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot/index.html +61 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-onsnapshot.md +83 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-how-to-use-sandbox-ops.md +73 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api/index.html +132 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-api.md +160 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix/index.html +793 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-feature-matrix.md +239 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore/index.html +55 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-getfirestore.md +76 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints/index.html +78 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-query-constraints.md +115 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops/index.html +53 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-reference-sandbox-ops.md +76 -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 +65 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo/index.html +127 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-01-write-a-sandbox-demo.md +157 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend/index.html +85 -0
- package/dist/serve/docs-ui/docs/pyric-firestore-tutorials-02-swap-to-prod-backend.md +122 -0
- package/dist/serve/docs-ui/docs/pyric-firestore.md +69 -0
- package/dist/serve/docs-ui/docs/pyric-rules/index.html +93 -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 +74 -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 +71 -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 +70 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api/index.html +96 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-simulator-vs-rules-test-api.md +76 -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 +75 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design/index.html +62 -0
- package/dist/serve/docs-ui/docs/pyric-rules-explanation-value-wrappers-design.md +80 -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 +54 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-compare-rulesets-for-weakening.md +69 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast/index.html +89 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-inspect-rules-via-the-ast.md +113 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source/index.html +50 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-lint-rules-source.md +73 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time/index.html +47 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-pin-request-time.md +58 -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 +78 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-resolve-module-imports.md +93 -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 +117 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase/index.html +70 -0
- package/dist/serve/docs-ui/docs/pyric-rules-how-to-test-rules-against-firebase.md +93 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api/index.html +129 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-api.md +176 -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 +105 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-errors/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-errors.md +89 -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 +98 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules/index.html +239 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-stdlib-modules.md +135 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema/index.html +93 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-test-case-schema.md +109 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings/index.html +86 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-validator-findings.md +113 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers/index.html +101 -0
- package/dist/serve/docs-ui/docs/pyric-rules-reference-value-wrappers.md +134 -0
- package/dist/serve/docs-ui/docs/pyric-rules-tutorials-01-lint-your-first-rules-file/index.html +107 -0
- package/dist/serve/docs-ui/docs/pyric-rules-tutorials-01-lint-your-first-rules-file.md +142 -0
- package/dist/serve/docs-ui/docs/pyric-rules-tutorials-02-write-a-test-suite-for-your-rules/index.html +151 -0
- package/dist/serve/docs-ui/docs/pyric-rules-tutorials-02-write-a-test-suite-for-your-rules.md +194 -0
- package/dist/serve/docs-ui/docs/pyric-rules.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox/index.html +67 -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 +157 -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 +98 -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 +105 -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 +80 -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 +88 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-explanation-why-adapters-are-siblings.md +87 -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-how-to-multiple-isolated-sandboxes/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-multiple-isolated-sandboxes.md +83 -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 +154 -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 +69 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events/index.html +89 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-how-to-replay-events.md +87 -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 +86 -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 +112 -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 +70 -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 +73 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api/index.html +77 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-reference-api.md +117 -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 +137 -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 +114 -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 +99 -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 +128 -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 +188 -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 +77 -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 +154 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-02-use-the-sandbox-in-a-test-harness/index.html +191 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-02-use-the-sandbox-in-a-test-harness.md +222 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-03-build-a-traffic-monitor/index.html +163 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox-tutorials-03-build-a-traffic-monitor.md +192 -0
- package/dist/serve/docs-ui/docs/pyric-sandbox.md +63 -0
- package/dist/serve/docs-ui/docs/pyric-storage/index.html +65 -0
- package/dist/serve/docs-ui/docs/pyric-storage-compat/index.html +1076 -0
- package/dist/serve/docs-ui/docs/pyric-storage-compat.md +337 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-storage-explanation-implementation-scope.md +104 -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 +80 -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 +104 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-enforce-rules.md +111 -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 +76 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-round-trip-metadata/index.html +77 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-round-trip-metadata.md +100 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends/index.html +65 -0
- package/dist/serve/docs-ui/docs/pyric-storage-how-to-switch-backends.md +82 -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 +82 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-api.md +152 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes/index.html +46 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-error-codes.md +66 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset/index.html +73 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-rules-subset.md +90 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options/index.html +45 -0
- package/dist/serve/docs-ui/docs/pyric-storage-reference-storage-options.md +65 -0
- package/dist/serve/docs-ui/docs/pyric-storage-tutorials-01-upload-and-download/index.html +114 -0
- package/dist/serve/docs-ui/docs/pyric-storage-tutorials-01-upload-and-download.md +141 -0
- package/dist/serve/docs-ui/docs/pyric-storage.md +63 -0
- package/dist/serve/docs-ui/docs/pyric-tools/index.html +45 -0
- package/dist/serve/docs-ui/docs/pyric-tools-bridge/index.html +71 -0
- package/dist/serve/docs-ui/docs/pyric-tools-bridge.md +90 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy/index.html +59 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-primitives-vs-orchestrators/index.html +63 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-primitives-vs-orchestrators.md +83 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-token-caching/index.html +47 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-token-caching.md +70 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-no-firebase-cli/index.html +36 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-no-firebase-cli.md +50 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-this-package-exists/index.html +47 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-explanation-why-this-package-exists.md +60 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-firebase-auth/index.html +55 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-firebase-auth.md +68 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-service-account/index.html +35 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-build-projectscope-from-service-account.md +52 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-bundle-and-deploy-a-function/index.html +81 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-bundle-and-deploy-a-function.md +98 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-indexes/index.html +71 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-indexes.md +91 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-rules/index.html +100 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-firestore-rules.md +105 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-hosting-rewrites/index.html +86 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-hosting-rewrites.md +92 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-realtime-database-rules/index.html +132 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-realtime-database-rules.md +165 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-to-a-preview-channel/index.html +46 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-deploy-to-a-preview-channel.md +62 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-handle-errors-and-outcomes/index.html +75 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-handle-errors-and-outcomes.md +94 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-provision-a-firestore-database/index.html +48 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-provision-a-firestore-database.md +65 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-register-tools-with-an-agent/index.html +65 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-how-to-register-tools-with-an-agent.md +82 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-api/index.html +155 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-api.md +190 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-cli-agent-io/index.html +84 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-cli-agent-io.md +66 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-error-codes/index.html +71 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-error-codes.md +102 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-firestore-namespace/index.html +138 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-firestore-namespace.md +175 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-functions-namespace/index.html +105 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-functions-namespace.md +133 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-config/index.html +194 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-config.md +95 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-namespace/index.html +99 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-hosting-namespace.md +126 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-rtdb-namespace/index.html +110 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-rtdb-namespace.md +133 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-scope-and-outcome/index.html +68 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-scope-and-outcome.md +88 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-tool-factories/index.html +160 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-reference-tool-factories.md +104 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-tutorials-01-deploy-a-cloud-function/index.html +88 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy-tutorials-01-deploy-a-cloud-function.md +119 -0
- package/dist/serve/docs-ui/docs/pyric-tools-deploy.md +52 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-build-a-standalone-binary/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-build-a-standalone-binary.md +95 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-configure-auth-providers-and-domains/index.html +101 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-configure-auth-providers-and-domains.md +126 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-discover-a-schema-from-firestore/index.html +95 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-discover-a-schema-from-firestore.md +119 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-promote-sandbox-state-to-a-fixture/index.html +52 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-promote-sandbox-state-to-a-fixture.md +83 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-serve-persistence-and-multi-tab/index.html +232 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-serve-persistence-and-multi-tab.md +178 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-use-the-vite-plugin/index.html +340 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-use-the-vite-plugin.md +288 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-verify-against-a-captured-session/index.html +128 -0
- package/dist/serve/docs-ui/docs/pyric-tools-how-to-verify-against-a-captured-session.md +173 -0
- package/dist/serve/docs-ui/docs/pyric-tools-reference-cli/index.html +433 -0
- package/dist/serve/docs-ui/docs/pyric-tools-reference-cli.md +252 -0
- package/dist/serve/docs-ui/docs/pyric-tools-reference-verify/index.html +81 -0
- package/dist/serve/docs-ui/docs/pyric-tools-reference-verify.md +98 -0
- package/dist/serve/docs-ui/docs/pyric-tools-tutorials-getting-started/index.html +92 -0
- package/dist/serve/docs-ui/docs/pyric-tools-tutorials-getting-started.md +117 -0
- package/dist/serve/docs-ui/docs/pyric-tools-tutorials-server-adoption/index.html +221 -0
- package/dist/serve/docs-ui/docs/pyric-tools-tutorials-server-adoption.md +239 -0
- package/dist/serve/docs-ui/docs/pyric-tools-tutorials-wire-claude-code/index.html +205 -0
- package/dist/serve/docs-ui/docs/pyric-tools-tutorials-wire-claude-code.md +250 -0
- package/dist/serve/docs-ui/docs/pyric-tools.md +47 -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 +108 -0
- package/dist/serve/docs-ui/docs/ui-auth-authusers/index.html +258 -0
- package/dist/serve/docs-ui/docs/ui-auth-authusers.md +174 -0
- package/dist/serve/docs-ui/docs/ui-firestore-collectionlist/index.html +92 -0
- package/dist/serve/docs-ui/docs/ui-firestore-collectionlist.md +71 -0
- package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm/index.html +128 -0
- package/dist/serve/docs-ui/docs/ui-firestore-deletewithconfirm.md +94 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documenteditor/index.html +154 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documenteditor.md +107 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentlist/index.html +132 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentlist.md +86 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentpreview/index.html +159 -0
- package/dist/serve/docs-ui/docs/ui-firestore-documentpreview.md +78 -0
- package/dist/serve/docs-ui/docs/ui-firestore-querybuilder/index.html +104 -0
- package/dist/serve/docs-ui/docs/ui-firestore-querybuilder.md +95 -0
- package/dist/serve/docs-ui/docs/ui-firestore-referencepicker/index.html +113 -0
- package/dist/serve/docs-ui/docs/ui-firestore-referencepicker.md +85 -0
- package/dist/serve/docs-ui/docs/ui-primitives-badge/index.html +56 -0
- package/dist/serve/docs-ui/docs/ui-primitives-badge.md +34 -0
- package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog/index.html +140 -0
- package/dist/serve/docs-ui/docs/ui-primitives-confirmdialog.md +98 -0
- package/dist/serve/docs-ui/docs/ui-primitives-copybutton/index.html +58 -0
- package/dist/serve/docs-ui/docs/ui-primitives-copybutton.md +31 -0
- package/dist/serve/docs-ui/docs/ui-primitives-jsonview/index.html +58 -0
- package/dist/serve/docs-ui/docs/ui-primitives-jsonview.md +41 -0
- package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol/index.html +70 -0
- package/dist/serve/docs-ui/docs/ui-primitives-segmentedcontrol.md +44 -0
- package/dist/serve/docs-ui/docs/ui-primitives-toast/index.html +87 -0
- package/dist/serve/docs-ui/docs/ui-primitives-toast.md +74 -0
- package/dist/serve/docs-ui/docs/ui-primitives-virtuallist/index.html +85 -0
- package/dist/serve/docs-ui/docs/ui-primitives-virtuallist.md +48 -0
- package/dist/serve/docs-ui/docs/ui-storage/index.html +154 -0
- package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm/index.html +127 -0
- package/dist/serve/docs-ui/docs/ui-storage-deleteselectionwithconfirm.md +83 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectbrowser/index.html +137 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectbrowser.md +84 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectinspector/index.html +139 -0
- package/dist/serve/docs-ui/docs/ui-storage-objectinspector.md +87 -0
- package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb/index.html +72 -0
- package/dist/serve/docs-ui/docs/ui-storage-pathbreadcrumb.md +51 -0
- package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances/index.html +65 -0
- package/dist/serve/docs-ui/docs/ui-storage-rules-aware-affordances.md +53 -0
- package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone/index.html +93 -0
- package/dist/serve/docs-ui/docs/ui-storage-uploaddropzone.md +72 -0
- package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate/index.html +153 -0
- package/dist/serve/docs-ui/docs/ui-storage-usestoragerulesgate.md +105 -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 +54 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail/index.html +78 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficdetail.md +53 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficlog/index.html +118 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficlog.md +63 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficstats/index.html +51 -0
- package/dist/serve/docs-ui/docs/ui-traffic-trafficstats.md +40 -0
- package/dist/serve/docs-ui/docs/ui-traffic.md +96 -0
- package/dist/serve/docs-ui/docs/ui.md +88 -0
- package/dist/serve/docs-ui/index.html +1 -0
- package/dist/serve/docs-ui/llms.txt +221 -0
- package/dist/serve/entries/app.d.ts +26 -0
- package/dist/serve/entries/app.d.ts.map +1 -0
- package/dist/serve/entries/app.js +51 -0
- package/dist/serve/entries/app.js.map +1 -0
- package/dist/serve/entries/auth-helper-core.d.ts +47 -0
- package/dist/serve/entries/auth-helper-core.d.ts.map +1 -0
- package/dist/serve/entries/auth-helper-core.js +121 -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.d.ts +62 -0
- package/dist/serve/entries/auth.d.ts.map +1 -0
- package/dist/serve/entries/auth.js +128 -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 +34 -0
- package/dist/serve/entries/database.d.ts.map +1 -0
- package/dist/serve/entries/database.js +42 -0
- package/dist/serve/entries/database.js.map +1 -0
- package/dist/serve/entries/firestore.d.ts +68 -0
- package/dist/serve/entries/firestore.d.ts.map +1 -0
- package/dist/serve/entries/firestore.js +115 -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 +14 -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/runtime.d.ts +60 -0
- package/dist/serve/entries/runtime.d.ts.map +1 -0
- package/dist/serve/entries/runtime.js +555 -0
- package/dist/serve/entries/runtime.js.map +1 -0
- package/dist/serve/entries/session-store.d.ts +45 -0
- package/dist/serve/entries/session-store.d.ts.map +1 -0
- package/dist/serve/entries/session-store.js +71 -0
- package/dist/serve/entries/session-store.js.map +1 -0
- package/dist/serve/entries/storage.d.ts +23 -0
- package/dist/serve/entries/storage.d.ts.map +1 -0
- package/dist/serve/entries/storage.js +49 -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/namespace.d.ts +93 -0
- package/dist/serve/namespace.d.ts.map +1 -0
- package/dist/serve/namespace.js +367 -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/playground-ui/_astro/HomePage.BFOjZGZp.js +2 -0
- package/dist/serve/playground-ui/_astro/PlaygroundPage.3jki8il0.js +3300 -0
- package/dist/serve/playground-ui/_astro/PlaygroundPage.MhP_vFvK.css +32 -0
- package/dist/serve/playground-ui/_astro/TopBar.ChifCjLD.js +5025 -0
- package/dist/serve/playground-ui/_astro/client.D61DpmEZ.js +274 -0
- package/dist/serve/playground-ui/_astro/client.GCK88uRs.js +1 -0
- package/dist/serve/playground-ui/_astro/esbuild.BHljloGq.wasm +0 -0
- package/dist/serve/playground-ui/_astro/index.B9aLOeXL.js +29 -0
- package/dist/serve/playground-ui/_astro/index.BTKE7uRF.js +1227 -0
- package/dist/serve/playground-ui/_astro/index.BfCthstx.css +1 -0
- package/dist/serve/playground-ui/_astro/index.Mr0Dtjih.js +342 -0
- package/dist/serve/playground-ui/_astro/ort-wasm-simd-threaded.asyncify.DMmc6YqF.wasm +0 -0
- package/dist/serve/playground-ui/favicon.svg +4 -0
- package/dist/serve/playground-ui/index.html +2 -0
- package/dist/serve/playground-ui/playground/index.html +2 -0
- package/dist/serve/rules.d.ts +45 -0
- package/dist/serve/rules.d.ts.map +1 -0
- package/dist/serve/rules.js +139 -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 +32 -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 +66 -0
- package/dist/serve/standalone-assets.d.ts.map +1 -0
- package/dist/serve/standalone-assets.js +144 -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-Bncteb8z.js +23 -0
- package/dist/serve/studio-ui/assets/index-CmkJxFcG.js +4577 -0
- package/dist/serve/studio-ui/assets/index-DNK39P6C.css +1 -0
- package/dist/serve/studio-ui/assets/seed-Bab4ArXQ.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 +687 -0
- package/dist/serve/vite-plugin.js.map +1 -0
- package/dist/serve/worker/client.d.ts +668 -0
- package/dist/serve/worker/client.d.ts.map +1 -0
- package/dist/serve/worker/client.js +1635 -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 +122 -0
- package/dist/serve/worker/entry.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 +434 -0
- package/dist/serve/worker/host-auth.js.map +1 -0
- package/dist/serve/worker/host-context.d.ts +180 -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.d.ts +81 -0
- package/dist/serve/worker/host.d.ts.map +1 -0
- package/dist/serve/worker/host.js +1605 -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/protocol.d.ts +955 -0
- package/dist/serve/worker/protocol.d.ts.map +1 -0
- package/dist/serve/worker/protocol.js +197 -0
- package/dist/serve/worker/protocol.js.map +1 -0
- package/dist/serve/worker/serve-init.d.ts +192 -0
- package/dist/serve/worker/serve-init.d.ts.map +1 -0
- package/dist/serve/worker/serve-init.js +555 -0
- package/dist/serve/worker/serve-init.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 +79 -0
- package/dist/verify/fixture.d.ts.map +1 -0
- package/dist/verify/fixture.js +114 -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/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 +127 -0
|
@@ -0,0 +1,719 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `connectRemoteSandbox()` — Node-side client for the browser-hosted
|
|
3
|
+
* SharedWorker sandbox (remote sandbox, slice 1 / checkpoint 1).
|
|
4
|
+
*
|
|
5
|
+
* Server-side Node code (ultimately `pyric-admin`'s remote dispatch arm)
|
|
6
|
+
* reaches the ONE sandbox the app + Studio + agent share:
|
|
7
|
+
*
|
|
8
|
+
* Node process ──ws──> `pyric dev --bridge` ──ws──> browser tab
|
|
9
|
+
* (attach/consumer leg) (peer leg)
|
|
10
|
+
* ──MessagePort──> SharedWorker
|
|
11
|
+
*
|
|
12
|
+
* DISCOVERY mirrors `pyric mcp-proxy` (`serve/discovery.ts`): the
|
|
13
|
+
* `.pyric/serve.json` pointer in cwd, health-probed across both loopback
|
|
14
|
+
* families with the pointer's `instanceId` pinned so a cross-family
|
|
15
|
+
* port-squatter can't split-brain the connection.
|
|
16
|
+
*
|
|
17
|
+
* FAIL-FAST, NEVER FALL BACK: when no browser tab is connected the connect
|
|
18
|
+
* (and every later op that races a closing tab) fails with a clear
|
|
19
|
+
* "open <serve url>" error. There is deliberately NO silent headless
|
|
20
|
+
* fallback — a silently split backend is exactly the failure this client
|
|
21
|
+
* exists to avoid.
|
|
22
|
+
*
|
|
23
|
+
* SUBSCRIPTION OWNERSHIP: the bridge process owns the durable sub registry
|
|
24
|
+
* and re-issues it to every newly registered peer (tab refresh/replacement),
|
|
25
|
+
* so a subscription made here survives peer churn — RTDB value semantics
|
|
26
|
+
* make the replay safe (each resubscribe re-delivers a fresh snapshot;
|
|
27
|
+
* consumers are last-value-wins).
|
|
28
|
+
*
|
|
29
|
+
* NODE-ONLY: uses `ws` and `node:fs` — exported via a `node`-conditional
|
|
30
|
+
* subpath (`pyric-tools/remote`), never bundled for the browser.
|
|
31
|
+
*/
|
|
32
|
+
import { WebSocket } from 'ws';
|
|
33
|
+
import { REMOTE_SANDBOX, SandboxContextImpl, } from 'pyric/sandbox';
|
|
34
|
+
import { isBridgeMessage, NO_SANDBOX_ERROR_MESSAGE } from '../bridge/protocol.js';
|
|
35
|
+
import { pyricToolsVersion } from '../pkg-version.js';
|
|
36
|
+
import { MAX_STORAGE_OP_BYTES, storagePayloadTooLarge } from '../serve/worker/protocol.js';
|
|
37
|
+
import { discoverServe } from '../serve/discovery.js';
|
|
38
|
+
/** Sits just above the bridge's own 30s `callTimeoutMs` so a legitimately
|
|
39
|
+
* slow worker op still completes (same layering as `mcp-proxy`'s 35s). */
|
|
40
|
+
const DEFAULT_OP_TIMEOUT_MS = 35_000;
|
|
41
|
+
/** How long the attach handshake may take before connect() fails. */
|
|
42
|
+
const ATTACH_TIMEOUT_MS = 5_000;
|
|
43
|
+
function remoteError(code, message, denialContext) {
|
|
44
|
+
const err = new Error(message);
|
|
45
|
+
err.code = code;
|
|
46
|
+
// Structured denial context (spike gap 6): a relayed permission-denied
|
|
47
|
+
// carries the same "why did this deny" frame a local SandboxError has —
|
|
48
|
+
// plain JSON off the wire, re-attached here.
|
|
49
|
+
if (denialContext !== undefined)
|
|
50
|
+
err.denialContext = denialContext;
|
|
51
|
+
return err;
|
|
52
|
+
}
|
|
53
|
+
function noTabError(serveUrl) {
|
|
54
|
+
return remoteError('unavailable', `no browser tab is connected to the sandbox — open ${serveUrl} in a browser and retry.`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Transport-agnostic client core: correlation ids/subIds are minted HERE
|
|
58
|
+
* (this leg's id space; the bridge re-mints for the peer leg), pending ops
|
|
59
|
+
* carry a Node-side timeout above the bridge's 30s, and `{ __error }` snap
|
|
60
|
+
* values are routed to the subscription's error handler.
|
|
61
|
+
*/
|
|
62
|
+
export function createRemoteSandboxCore(transport, opts) {
|
|
63
|
+
const serveUrl = opts.serveUrl;
|
|
64
|
+
const opTimeoutMs = opts.opTimeoutMs ?? DEFAULT_OP_TIMEOUT_MS;
|
|
65
|
+
let opCounter = 0;
|
|
66
|
+
let subCounter = 0;
|
|
67
|
+
let disposed = null;
|
|
68
|
+
const pending = new Map();
|
|
69
|
+
const subs = new Map();
|
|
70
|
+
let readyResolve;
|
|
71
|
+
let readyReject;
|
|
72
|
+
const ready = new Promise((resolve, reject) => {
|
|
73
|
+
readyResolve = resolve;
|
|
74
|
+
readyReject = reject;
|
|
75
|
+
});
|
|
76
|
+
// `ready` may legitimately go unobserved after dispose — never unhandled.
|
|
77
|
+
ready.catch(() => { });
|
|
78
|
+
/**
|
|
79
|
+
* Version-skew guidance (integration-smoke fix). Set once when the
|
|
80
|
+
* `attach-ack`'s `serveVersion` stamp is present AND differs from this
|
|
81
|
+
* client's own pyric-tools version: an old worker can accept a newer op
|
|
82
|
+
* frame and die mid-handling, which surfaces as a bare timeout — so the
|
|
83
|
+
* mismatch warns ONCE on stderr at attach, and op-timeout errors append
|
|
84
|
+
* the same guidance. Old servers omit the stamp → stays null → silent.
|
|
85
|
+
*/
|
|
86
|
+
let versionSkewGuidance = null;
|
|
87
|
+
function send(msg) {
|
|
88
|
+
transport.send(msg);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Event-loop hold accounting (exit-hang fix): ref the transport while ANY
|
|
92
|
+
* op or subscription is outstanding, unref when the last one settles.
|
|
93
|
+
* Transition-edged so the hooks fire once per busy/idle flip.
|
|
94
|
+
*/
|
|
95
|
+
let holdingLoop = false;
|
|
96
|
+
function updateLoopHold() {
|
|
97
|
+
const busy = pending.size + subs.size > 0;
|
|
98
|
+
if (busy && !holdingLoop) {
|
|
99
|
+
holdingLoop = true;
|
|
100
|
+
transport.ref?.();
|
|
101
|
+
}
|
|
102
|
+
else if (!busy && holdingLoop) {
|
|
103
|
+
holdingLoop = false;
|
|
104
|
+
transport.unref?.();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function op(payload) {
|
|
108
|
+
if (disposed) {
|
|
109
|
+
return Promise.reject(remoteError('unavailable', disposed));
|
|
110
|
+
}
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
const id = `rop-${++opCounter}`;
|
|
113
|
+
const timer = setTimeout(() => {
|
|
114
|
+
if (pending.has(id)) {
|
|
115
|
+
pending.delete(id);
|
|
116
|
+
updateLoopHold();
|
|
117
|
+
reject(remoteError('deadline-exceeded', `remote sandbox op timed out after ${opTimeoutMs}ms (op: ${payload.method}) — is pyric dev still running?` +
|
|
118
|
+
// A version-skewed old worker accepts frames it cannot
|
|
119
|
+
// handle and never responds — a timeout is its signature.
|
|
120
|
+
(versionSkewGuidance ? ` ${versionSkewGuidance}` : '')));
|
|
121
|
+
}
|
|
122
|
+
}, opTimeoutMs);
|
|
123
|
+
pending.set(id, { resolve, reject, timer });
|
|
124
|
+
updateLoopHold();
|
|
125
|
+
try {
|
|
126
|
+
send({ type: 'worker-op', id, op: payload });
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
clearTimeout(timer);
|
|
130
|
+
pending.delete(id);
|
|
131
|
+
updateLoopHold();
|
|
132
|
+
reject(remoteError('unavailable', `failed to send op to serve: ${err instanceof Error ? err.message : String(err)}`));
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function subscribe(sub, onSnap, onError) {
|
|
137
|
+
if (disposed)
|
|
138
|
+
throw remoteError('unavailable', disposed);
|
|
139
|
+
const subId = `rsub-${++subCounter}`;
|
|
140
|
+
subs.set(subId, { onSnap, onError });
|
|
141
|
+
updateLoopHold();
|
|
142
|
+
send({ type: 'worker-sub', subId, sub });
|
|
143
|
+
return () => {
|
|
144
|
+
if (!subs.delete(subId))
|
|
145
|
+
return;
|
|
146
|
+
updateLoopHold();
|
|
147
|
+
if (!disposed) {
|
|
148
|
+
try {
|
|
149
|
+
send({ type: 'worker-unsub', subId });
|
|
150
|
+
}
|
|
151
|
+
catch { }
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function handleMessage(msg) {
|
|
156
|
+
if (!isBridgeMessage(msg))
|
|
157
|
+
return;
|
|
158
|
+
switch (msg.type) {
|
|
159
|
+
case 'attach-ack': {
|
|
160
|
+
// Version-skew stamp: warn ONCE when the serve process runs a
|
|
161
|
+
// different pyric-tools version (absent stamp = old server = silent).
|
|
162
|
+
if (versionSkewGuidance === null &&
|
|
163
|
+
typeof msg.serveVersion === 'string' &&
|
|
164
|
+
msg.serveVersion !== pyricToolsVersion()) {
|
|
165
|
+
versionSkewGuidance =
|
|
166
|
+
`pyric dev is running version ${msg.serveVersion}, this client is ` +
|
|
167
|
+
`${pyricToolsVersion()} — restart pyric dev and reload the browser tab.`;
|
|
168
|
+
process.stderr.write(`pyric: ${versionSkewGuidance}\n`);
|
|
169
|
+
}
|
|
170
|
+
if (msg.peerConnected)
|
|
171
|
+
readyResolve();
|
|
172
|
+
else
|
|
173
|
+
readyReject(noTabError(serveUrl));
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
case 'worker-res': {
|
|
177
|
+
const call = pending.get(msg.id);
|
|
178
|
+
if (!call)
|
|
179
|
+
return; // late (already timed out) — drop
|
|
180
|
+
clearTimeout(call.timer);
|
|
181
|
+
pending.delete(msg.id);
|
|
182
|
+
updateLoopHold();
|
|
183
|
+
if (msg.ok) {
|
|
184
|
+
call.resolve(msg.value);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
const code = msg.error?.code ?? 'unknown';
|
|
188
|
+
let message = msg.error?.message ?? 'unknown sandbox error';
|
|
189
|
+
// Enrich the bridge's generic no-peer error with actionable guidance.
|
|
190
|
+
if (message === NO_SANDBOX_ERROR_MESSAGE) {
|
|
191
|
+
message = noTabError(serveUrl).message;
|
|
192
|
+
}
|
|
193
|
+
else if (/^Unknown method:/.test(message)) {
|
|
194
|
+
// Version skew: a live tab whose SharedWorker predates this op.
|
|
195
|
+
message +=
|
|
196
|
+
' — the running sandbox may predate this feature; restart pyric dev ' +
|
|
197
|
+
'and reload the browser tab.';
|
|
198
|
+
}
|
|
199
|
+
call.reject(remoteError(code, message, msg.error?.denialContext));
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
case 'worker-snap': {
|
|
204
|
+
const sub = subs.get(msg.subId);
|
|
205
|
+
if (!sub)
|
|
206
|
+
return; // unsubscribed — drop
|
|
207
|
+
const value = (msg.value ?? {});
|
|
208
|
+
if (value.__error) {
|
|
209
|
+
// A listener error is TERMINAL (Firestore's onSnapshot contract:
|
|
210
|
+
// after onError, no further snapshots and the listener is dead).
|
|
211
|
+
// Auto-unsubscribe BEFORE delivering: drop the local record (so a
|
|
212
|
+
// consumer's own unsubscribe becomes an idempotent no-op and the
|
|
213
|
+
// event-loop hold releases — an errored sub must not pin the
|
|
214
|
+
// process forever) and tell the worker to tear down whatever
|
|
215
|
+
// listener it may have registered (harmless no-op for a
|
|
216
|
+
// registration failure that never registered one).
|
|
217
|
+
subs.delete(msg.subId);
|
|
218
|
+
updateLoopHold();
|
|
219
|
+
if (!disposed) {
|
|
220
|
+
try {
|
|
221
|
+
send({ type: 'worker-unsub', subId: msg.subId });
|
|
222
|
+
}
|
|
223
|
+
catch { }
|
|
224
|
+
}
|
|
225
|
+
const payload = value.__error;
|
|
226
|
+
const err = remoteError(payload.code, payload.message, payload.denialContext);
|
|
227
|
+
if (sub.onError)
|
|
228
|
+
sub.onError(err);
|
|
229
|
+
else
|
|
230
|
+
console.error('pyric remote sandbox: uncaught error in subscription:', err);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
sub.onSnap(msg.value);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// Consumer callback failures must not break the relay loop.
|
|
238
|
+
}
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
case 'ping': {
|
|
242
|
+
send({ type: 'pong', id: msg.id });
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
default:
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function dispose(reason) {
|
|
250
|
+
if (disposed)
|
|
251
|
+
return;
|
|
252
|
+
disposed = reason ?? 'remote sandbox connection closed';
|
|
253
|
+
const err = remoteError('unavailable', disposed);
|
|
254
|
+
for (const call of pending.values()) {
|
|
255
|
+
clearTimeout(call.timer);
|
|
256
|
+
call.reject(err);
|
|
257
|
+
}
|
|
258
|
+
pending.clear();
|
|
259
|
+
subs.clear();
|
|
260
|
+
updateLoopHold();
|
|
261
|
+
readyReject(err); // no-op if already settled
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
handleMessage,
|
|
265
|
+
start: () => send({ type: 'attach', protocol: 1 }),
|
|
266
|
+
ready,
|
|
267
|
+
channel: { op, subscribe },
|
|
268
|
+
dispose,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
// ─── Typed conveniences over the raw channel ───────────────────────────────
|
|
272
|
+
/** firebase-admin's rules-bypass lens, pinned on every RTDB convenience op. */
|
|
273
|
+
const ADMIN_LENS = { mode: 'admin' };
|
|
274
|
+
export function buildRemoteRtdb(channel) {
|
|
275
|
+
return {
|
|
276
|
+
async get(path) {
|
|
277
|
+
const snap = (await channel.op({
|
|
278
|
+
method: 'rtdb.get',
|
|
279
|
+
path,
|
|
280
|
+
actAs: ADMIN_LENS,
|
|
281
|
+
}));
|
|
282
|
+
return snap.value ?? null;
|
|
283
|
+
},
|
|
284
|
+
async set(path, value) {
|
|
285
|
+
await channel.op({ method: 'rtdb.set', path, value, actAs: ADMIN_LENS });
|
|
286
|
+
},
|
|
287
|
+
async update(path, values) {
|
|
288
|
+
await channel.op({ method: 'rtdb.update', path, values, actAs: ADMIN_LENS });
|
|
289
|
+
},
|
|
290
|
+
async remove(path) {
|
|
291
|
+
await channel.op({ method: 'rtdb.remove', path, actAs: ADMIN_LENS });
|
|
292
|
+
},
|
|
293
|
+
async push(path, value) {
|
|
294
|
+
const key = generatePushId();
|
|
295
|
+
const res = (await channel.op({
|
|
296
|
+
method: 'rtdb.push',
|
|
297
|
+
path,
|
|
298
|
+
key,
|
|
299
|
+
...(value !== undefined ? { value } : {}),
|
|
300
|
+
actAs: ADMIN_LENS,
|
|
301
|
+
}));
|
|
302
|
+
return res;
|
|
303
|
+
},
|
|
304
|
+
onValue(path, callback, onError) {
|
|
305
|
+
return channel.subscribe({ target: { service: 'rtdb', path }, actAs: ADMIN_LENS }, (value) => callback(value), onError);
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
export function buildRemoteStorage(channel) {
|
|
310
|
+
return {
|
|
311
|
+
async putBytes(path, data, options) {
|
|
312
|
+
// Client-side cap: reject BEFORE encoding/sending so an oversized
|
|
313
|
+
// payload never hits the wire (the host enforces the same cap on
|
|
314
|
+
// decode — belt and braces across the relay).
|
|
315
|
+
if (data.byteLength > MAX_STORAGE_OP_BYTES) {
|
|
316
|
+
throw storagePayloadTooLarge(data.byteLength, `storage payload for '${path}'`);
|
|
317
|
+
}
|
|
318
|
+
return (await channel.op({
|
|
319
|
+
method: 'storage.putBytes',
|
|
320
|
+
path,
|
|
321
|
+
dataB64: Buffer.from(data.buffer, data.byteOffset, data.byteLength).toString('base64'),
|
|
322
|
+
...(options?.contentType !== undefined ? { contentType: options.contentType } : {}),
|
|
323
|
+
...(options?.metadata !== undefined ? { metadata: options.metadata } : {}),
|
|
324
|
+
actAs: ADMIN_LENS,
|
|
325
|
+
}));
|
|
326
|
+
},
|
|
327
|
+
async getBytes(path) {
|
|
328
|
+
const res = (await channel.op({
|
|
329
|
+
method: 'storage.getBytes',
|
|
330
|
+
path,
|
|
331
|
+
actAs: ADMIN_LENS,
|
|
332
|
+
}));
|
|
333
|
+
return Buffer.from(res.dataB64, 'base64');
|
|
334
|
+
},
|
|
335
|
+
async deleteObject(path) {
|
|
336
|
+
await channel.op({ method: 'storage.deleteObject', path, actAs: ADMIN_LENS });
|
|
337
|
+
},
|
|
338
|
+
async getMetadata(path) {
|
|
339
|
+
return (await channel.op({
|
|
340
|
+
method: 'storage.getMetadata',
|
|
341
|
+
path,
|
|
342
|
+
actAs: ADMIN_LENS,
|
|
343
|
+
}));
|
|
344
|
+
},
|
|
345
|
+
async exists(path) {
|
|
346
|
+
try {
|
|
347
|
+
await this.getMetadata(path);
|
|
348
|
+
return true;
|
|
349
|
+
}
|
|
350
|
+
catch (err) {
|
|
351
|
+
if (err.code === 'storage/object-not-found')
|
|
352
|
+
return false;
|
|
353
|
+
throw err;
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
async listAll(path) {
|
|
357
|
+
return (await channel.op({
|
|
358
|
+
method: 'storage.listAll',
|
|
359
|
+
path,
|
|
360
|
+
actAs: ADMIN_LENS,
|
|
361
|
+
}));
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
export function buildRemoteAuthAdmin(channel) {
|
|
366
|
+
return {
|
|
367
|
+
async listUsers() {
|
|
368
|
+
return (await channel.op({ method: 'auth.listUsers' }));
|
|
369
|
+
},
|
|
370
|
+
async createUser(request) {
|
|
371
|
+
return (await channel.op({
|
|
372
|
+
method: 'auth.adminCreateUser',
|
|
373
|
+
request: request,
|
|
374
|
+
}));
|
|
375
|
+
},
|
|
376
|
+
async updateUser(uid, request) {
|
|
377
|
+
return (await channel.op({
|
|
378
|
+
method: 'auth.adminUpdateUser',
|
|
379
|
+
uid,
|
|
380
|
+
request: request,
|
|
381
|
+
}));
|
|
382
|
+
},
|
|
383
|
+
async deleteUser(uid) {
|
|
384
|
+
await channel.op({ method: 'auth.adminDeleteUser', uid });
|
|
385
|
+
},
|
|
386
|
+
async clearUsers() {
|
|
387
|
+
await channel.op({ method: 'auth.adminClearUsers' });
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
// ─── Handle construction ────────────────────────────────────────────────────
|
|
392
|
+
/** A member of `Sandbox` that slice 1 cannot express over the wire throws
|
|
393
|
+
* this branded, remediating error instead of silently misbehaving. */
|
|
394
|
+
function notAvailableRemotely(member, remedy) {
|
|
395
|
+
return remoteError('unimplemented', `${member} is not available on a remote sandbox — ${remedy}`);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Build the branded remote sandbox handle over an established channel.
|
|
399
|
+
*
|
|
400
|
+
* Split out of {@link connectRemoteSandbox} so the in-process test harness
|
|
401
|
+
* (fake ports + `createConsumerSession`, no WS) constructs the EXACT handle
|
|
402
|
+
* production hands to `pyric-admin`.
|
|
403
|
+
*
|
|
404
|
+
* The handle satisfies `Sandbox` structurally:
|
|
405
|
+
* - `withAuth` / `dispose` are real (pure local construction / teardown).
|
|
406
|
+
* - Everything whose contract is sync-only or worker-owned (`admin`,
|
|
407
|
+
* `snapshot`, `loadSnapshot`, `history`, `onEvent`, `reset`,
|
|
408
|
+
* `currentUser`, `onCurrentUserChanged`, tab sync, persistence) throws
|
|
409
|
+
* a remediating `unimplemented` error. Notably `onEvent`: the unified
|
|
410
|
+
* event stream (`target: 'events'`) is not relayable until slice 2's
|
|
411
|
+
* bounded backpressure lands, and no remote dispatch arm may depend on
|
|
412
|
+
* it — a throw (not a silent no-op) keeps a subscriber from believing
|
|
413
|
+
* it is observing events that will never arrive.
|
|
414
|
+
*/
|
|
415
|
+
export function createRemoteSandboxHandle(opts) {
|
|
416
|
+
const { channel, serveUrl, close } = opts;
|
|
417
|
+
const throwMember = (member, remedy) => {
|
|
418
|
+
throw notAvailableRemotely(member, remedy);
|
|
419
|
+
};
|
|
420
|
+
const handle = {
|
|
421
|
+
[REMOTE_SANDBOX]: true,
|
|
422
|
+
serveUrl,
|
|
423
|
+
channel,
|
|
424
|
+
rtdb: buildRemoteRtdb(channel),
|
|
425
|
+
storage: buildRemoteStorage(channel),
|
|
426
|
+
auth: buildRemoteAuthAdmin(channel),
|
|
427
|
+
close,
|
|
428
|
+
// ── Implemented Sandbox members ─────────────────────────────────────
|
|
429
|
+
withAuth(auth) {
|
|
430
|
+
// Pure local pair construction — contexts carry identity, the data
|
|
431
|
+
// stays behind the channel.
|
|
432
|
+
return new SandboxContextImpl(handle, auth);
|
|
433
|
+
},
|
|
434
|
+
dispose() {
|
|
435
|
+
close();
|
|
436
|
+
},
|
|
437
|
+
// ── Sync-only / worker-owned members: remediating throws ───────────
|
|
438
|
+
onEvent: () => throwMember('onEvent', 'the unified event stream is not relayed over the bridge yet (slice 2); ' +
|
|
439
|
+
`observe activity in the browser tab at ${serveUrl} or in Pyric Studio instead`),
|
|
440
|
+
history: () => throwMember('history()', 'the event log lives in the browser worker; inspect it in Pyric Studio ' +
|
|
441
|
+
'or subscribe from the page that hosts the sandbox'),
|
|
442
|
+
get admin() {
|
|
443
|
+
return throwMember('admin', 'the sync Firestore admin plane cannot span the wire; dispatch async worker ops ' +
|
|
444
|
+
"through the handle's channel instead (e.g. channel.op({ method: 'admin.getDocument', path }))");
|
|
445
|
+
},
|
|
446
|
+
reset: () => throwMember('reset()', `reset the sandbox from the browser tab at ${serveUrl} or from Pyric Studio`),
|
|
447
|
+
snapshot: () => throwMember('snapshot()', "use the async worker op instead: channel.op({ method: 'getSnapshot' })"),
|
|
448
|
+
loadSnapshot: () => throwMember('loadSnapshot()', "use the async worker ops instead: channel.op({ method: 'importState', bundle })"),
|
|
449
|
+
get currentUser() {
|
|
450
|
+
return throwMember('currentUser', 'the browser tab owns the auth session; ' +
|
|
451
|
+
"read it asynchronously via channel.op({ method: 'auth.getCurrentUser' })");
|
|
452
|
+
},
|
|
453
|
+
onCurrentUserChanged: () => throwMember('onCurrentUserChanged', 'the browser tab owns the auth session; subscribe there instead'),
|
|
454
|
+
enableTabSync: () => throwMember('enableTabSync', 'tab sync is a browser concern; enable it in the page'),
|
|
455
|
+
enablePersistence: () => throwMember('enablePersistence', 'the browser worker owns persistence; it is already enabled by `pyric dev`'),
|
|
456
|
+
flush: () => throwMember('flush()', 'the browser worker owns persistence and flushes itself'),
|
|
457
|
+
clearPersistence: () => throwMember('clearPersistence()', 'clear the persisted state from the browser tab or Pyric Studio'),
|
|
458
|
+
registerPersistableService: () => throwMember('registerPersistableService', 'the browser worker owns persistence; services register there'),
|
|
459
|
+
};
|
|
460
|
+
return handle;
|
|
461
|
+
}
|
|
462
|
+
// ─── connect ───────────────────────────────────────────────────────────────
|
|
463
|
+
/**
|
|
464
|
+
* Discover the running `pyric dev --bridge`, attach to its bridge WS as a
|
|
465
|
+
* worker-relay CONSUMER (never a peer — attaching cannot kick the browser
|
|
466
|
+
* tab out of last-connection-wins), and return the typed remote handle.
|
|
467
|
+
*
|
|
468
|
+
* Fails fast when no serve is discoverable or no browser tab is connected —
|
|
469
|
+
* there is deliberately no headless fallback (see module doc).
|
|
470
|
+
*/
|
|
471
|
+
export async function connectRemoteSandbox(options = {}) {
|
|
472
|
+
const cwd = options.cwd ?? process.cwd();
|
|
473
|
+
// Two URLs on purpose: `serveUrl` is the CANONICAL display URL that lands in
|
|
474
|
+
// "open <url>" guidance — it MUST match the origin serve's banner/auto-open
|
|
475
|
+
// use (`http://localhost:<port>` for the default host), or a user following
|
|
476
|
+
// the guidance opens a DIFFERENT browser origin (127.0.0.1 vs localhost →
|
|
477
|
+
// separate SharedWorkers → split sandboxes). `wsBase` is connectivity: the
|
|
478
|
+
// literal loopback family the health probe actually reached.
|
|
479
|
+
let serveUrl;
|
|
480
|
+
let wsBase;
|
|
481
|
+
if (options.url) {
|
|
482
|
+
serveUrl = options.url.replace(/\/$/, '');
|
|
483
|
+
wsBase = serveUrl;
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
const found = await discoverServe(cwd);
|
|
487
|
+
if (!found) {
|
|
488
|
+
throw remoteError('not-found', 'no running `pyric dev --bridge` found (looked for .pyric/serve.json in ' +
|
|
489
|
+
`${cwd} and the default ports) — start your dev server with the bridge enabled and retry.`);
|
|
490
|
+
}
|
|
491
|
+
serveUrl = found.url;
|
|
492
|
+
wsBase = found.base;
|
|
493
|
+
}
|
|
494
|
+
const wsUrl = `${wsBase.replace(/^http/, 'ws')}/__pyric/sandbox`;
|
|
495
|
+
const ws = new WebSocket(wsUrl);
|
|
496
|
+
// Event-loop hold (exit-hang fix): `ws` exposes no ref/unref of its own —
|
|
497
|
+
// reach the underlying net.Socket (present once connected). Unref'ing only
|
|
498
|
+
// changes loop-exit accounting, never delivery: while ANY pending op or
|
|
499
|
+
// live subscription holds a ref (the core's updateLoopHold), frames flow
|
|
500
|
+
// normally; when idle, a finished script exits instead of hanging.
|
|
501
|
+
const wsSocket = () => ws._socket;
|
|
502
|
+
const core = createRemoteSandboxCore({
|
|
503
|
+
send: (msg) => ws.send(JSON.stringify(msg)),
|
|
504
|
+
ref: () => wsSocket()?.ref(),
|
|
505
|
+
unref: () => wsSocket()?.unref(),
|
|
506
|
+
}, { serveUrl, opTimeoutMs: options.opTimeoutMs });
|
|
507
|
+
ws.on('message', (raw) => {
|
|
508
|
+
let msg;
|
|
509
|
+
try {
|
|
510
|
+
msg = JSON.parse(raw.toString());
|
|
511
|
+
}
|
|
512
|
+
catch {
|
|
513
|
+
return;
|
|
514
|
+
}
|
|
515
|
+
if (isBridgeMessage(msg))
|
|
516
|
+
core.handleMessage(msg);
|
|
517
|
+
});
|
|
518
|
+
ws.on('close', () => core.dispose('remote sandbox connection closed (serve stopped or connection lost)'));
|
|
519
|
+
ws.on('error', (err) => core.dispose(`remote sandbox connection failed: ${err.message}`));
|
|
520
|
+
await new Promise((resolve, reject) => {
|
|
521
|
+
const timer = setTimeout(() => reject(remoteError('deadline-exceeded', `timed out connecting to ${wsUrl}`)), ATTACH_TIMEOUT_MS);
|
|
522
|
+
ws.once('open', () => {
|
|
523
|
+
clearTimeout(timer);
|
|
524
|
+
// Idle default: an open-but-idle connection must not pin the event
|
|
525
|
+
// loop (both the eager and lazy `remoteSandbox` paths come through
|
|
526
|
+
// here). The core re-refs while ops/subs are outstanding.
|
|
527
|
+
wsSocket()?.unref();
|
|
528
|
+
resolve();
|
|
529
|
+
});
|
|
530
|
+
ws.once('error', (err) => {
|
|
531
|
+
clearTimeout(timer);
|
|
532
|
+
reject(remoteError('unavailable', `failed to connect to ${wsUrl}: ${err.message}`));
|
|
533
|
+
});
|
|
534
|
+
});
|
|
535
|
+
core.start();
|
|
536
|
+
try {
|
|
537
|
+
await withTimeout(core.ready, ATTACH_TIMEOUT_MS, `timed out attaching to the bridge at ${wsUrl}`);
|
|
538
|
+
}
|
|
539
|
+
catch (err) {
|
|
540
|
+
try {
|
|
541
|
+
ws.close();
|
|
542
|
+
}
|
|
543
|
+
catch { }
|
|
544
|
+
throw err;
|
|
545
|
+
}
|
|
546
|
+
return createRemoteSandboxHandle({
|
|
547
|
+
serveUrl,
|
|
548
|
+
channel: core.channel,
|
|
549
|
+
close() {
|
|
550
|
+
core.dispose('remote sandbox connection closed by the client');
|
|
551
|
+
try {
|
|
552
|
+
ws.close();
|
|
553
|
+
}
|
|
554
|
+
catch { }
|
|
555
|
+
},
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* Synchronous construction, lazy connection — the ambient-init seam.
|
|
560
|
+
*
|
|
561
|
+
* `pyric-tools/register` installs this behind the
|
|
562
|
+
* `Symbol.for('pyric.remote.sandboxFactory')` global so `pyric-admin`'s bare
|
|
563
|
+
* `initializeApp()` can mint a full branded handle without awaiting anything.
|
|
564
|
+
* The wire connection (discovery → WS attach) happens on the FIRST op (or
|
|
565
|
+
* `ready` access), so the existing fail-fast — "no browser tab is connected —
|
|
566
|
+
* open <url>" — surfaces on first use instead of at construction. A failed
|
|
567
|
+
* connect is NOT latched: the next op retries, matching the error's own
|
|
568
|
+
* "…and retry" guidance. `connectRemoteSandbox` (eager) is unchanged.
|
|
569
|
+
*/
|
|
570
|
+
export function remoteSandbox(options = {}) {
|
|
571
|
+
return createLazyRemoteSandbox(() => connectRemoteSandbox(options), options);
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* The lazy wrapper with the connect function injected — the test seam
|
|
575
|
+
* (tests inject a fake connect; production injects `connectRemoteSandbox`).
|
|
576
|
+
*/
|
|
577
|
+
export function createLazyRemoteSandbox(connect, options = {}) {
|
|
578
|
+
let inner = null;
|
|
579
|
+
let closed = false;
|
|
580
|
+
function ensure() {
|
|
581
|
+
if (closed) {
|
|
582
|
+
return Promise.reject(remoteError('unavailable', 'remote sandbox connection closed by the client'));
|
|
583
|
+
}
|
|
584
|
+
if (!inner) {
|
|
585
|
+
inner = connect().then((h) => {
|
|
586
|
+
if (closed) {
|
|
587
|
+
h.close();
|
|
588
|
+
throw remoteError('unavailable', 'remote sandbox connection closed by the client');
|
|
589
|
+
}
|
|
590
|
+
// Discovery resolved the real URL — reflect it on the outer handle.
|
|
591
|
+
handle.serveUrl = h.serveUrl;
|
|
592
|
+
return h;
|
|
593
|
+
}, (err) => {
|
|
594
|
+
// Fail-fast surfaces on this op, but don't latch: the remediation
|
|
595
|
+
// is "open <url> and retry", so the next op re-attempts the connect.
|
|
596
|
+
inner = null;
|
|
597
|
+
throw err;
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
return inner;
|
|
601
|
+
}
|
|
602
|
+
const channel = {
|
|
603
|
+
op: (payload) => ensure().then((h) => h.channel.op(payload)),
|
|
604
|
+
subscribe(sub, onSnap, onError) {
|
|
605
|
+
let cancelled = false;
|
|
606
|
+
let innerUnsub = null;
|
|
607
|
+
ensure().then((h) => {
|
|
608
|
+
if (cancelled)
|
|
609
|
+
return;
|
|
610
|
+
innerUnsub = h.channel.subscribe(sub, onSnap, onError);
|
|
611
|
+
}, (err) => {
|
|
612
|
+
if (cancelled)
|
|
613
|
+
return;
|
|
614
|
+
const e = err instanceof Error && 'code' in err
|
|
615
|
+
? err
|
|
616
|
+
: remoteError('unavailable', String(err));
|
|
617
|
+
if (onError)
|
|
618
|
+
onError(e);
|
|
619
|
+
else
|
|
620
|
+
console.error('pyric remote sandbox: subscription failed to connect:', e);
|
|
621
|
+
});
|
|
622
|
+
return () => {
|
|
623
|
+
cancelled = true;
|
|
624
|
+
if (innerUnsub) {
|
|
625
|
+
innerUnsub();
|
|
626
|
+
innerUnsub = null;
|
|
627
|
+
}
|
|
628
|
+
};
|
|
629
|
+
},
|
|
630
|
+
};
|
|
631
|
+
const handle = createRemoteSandboxHandle({
|
|
632
|
+
channel,
|
|
633
|
+
// Before discovery the URL is unknown; op-level errors always carry the
|
|
634
|
+
// real URL (they come from the inner connect), and `serveUrl` is patched
|
|
635
|
+
// to the discovered value as soon as the first connect succeeds.
|
|
636
|
+
serveUrl: options.url?.replace(/\/$/, '') ?? '<pyric dev url (pending discovery)>',
|
|
637
|
+
close() {
|
|
638
|
+
if (closed)
|
|
639
|
+
return;
|
|
640
|
+
closed = true;
|
|
641
|
+
const settled = inner;
|
|
642
|
+
inner = null;
|
|
643
|
+
if (settled) {
|
|
644
|
+
settled.then((h) => h.close(), () => { });
|
|
645
|
+
}
|
|
646
|
+
},
|
|
647
|
+
});
|
|
648
|
+
// `ready` — the eager checker: accessing it starts the connection. Marked
|
|
649
|
+
// handled (same pattern as the core's `ready`) so a mere existence check
|
|
650
|
+
// (`handle.ready instanceof Promise`) never surfaces an unhandled rejection.
|
|
651
|
+
Object.defineProperty(handle, 'ready', {
|
|
652
|
+
get: () => {
|
|
653
|
+
const p = ensure().then(() => undefined);
|
|
654
|
+
p.catch(() => { });
|
|
655
|
+
return p;
|
|
656
|
+
},
|
|
657
|
+
enumerable: true,
|
|
658
|
+
configurable: true,
|
|
659
|
+
});
|
|
660
|
+
return handle;
|
|
661
|
+
}
|
|
662
|
+
function withTimeout(p, ms, message) {
|
|
663
|
+
return new Promise((resolve, reject) => {
|
|
664
|
+
const timer = setTimeout(() => reject(remoteError('deadline-exceeded', message)), ms);
|
|
665
|
+
p.then((v) => {
|
|
666
|
+
clearTimeout(timer);
|
|
667
|
+
resolve(v);
|
|
668
|
+
}, (e) => {
|
|
669
|
+
clearTimeout(timer);
|
|
670
|
+
reject(e);
|
|
671
|
+
});
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
// ─── RTDB push-id generator ────────────────────────────────────────────────
|
|
675
|
+
// Client-minted push ids (the worker-protocol contract: `rtdb.push` carries
|
|
676
|
+
// the key so `.key` is synchronously known to callers). Standard Firebase
|
|
677
|
+
// algorithm — 8 chars of timestamp + 12 random, monotonic within one ms.
|
|
678
|
+
// Inlined (like pyric-admin does) because pyric doesn't export its generator.
|
|
679
|
+
const PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';
|
|
680
|
+
let lastPushTime = 0;
|
|
681
|
+
const lastRandChars = new Array(12).fill(0);
|
|
682
|
+
function generatePushId(now = Date.now()) {
|
|
683
|
+
const duplicateTime = now === lastPushTime;
|
|
684
|
+
lastPushTime = now;
|
|
685
|
+
const timeStampChars = new Array(8);
|
|
686
|
+
let ts = now;
|
|
687
|
+
for (let i = 7; i >= 0; i--) {
|
|
688
|
+
timeStampChars[i] = PUSH_CHARS.charAt(ts % 64);
|
|
689
|
+
ts = Math.floor(ts / 64);
|
|
690
|
+
}
|
|
691
|
+
if (ts !== 0) {
|
|
692
|
+
throw new Error('RTDB push-id: timestamp overflow.');
|
|
693
|
+
}
|
|
694
|
+
let id = timeStampChars.join('');
|
|
695
|
+
if (!duplicateTime) {
|
|
696
|
+
for (let i = 0; i < 12; i++) {
|
|
697
|
+
lastRandChars[i] = Math.floor(Math.random() * 64);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
else {
|
|
701
|
+
let i;
|
|
702
|
+
for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {
|
|
703
|
+
lastRandChars[i] = 0;
|
|
704
|
+
}
|
|
705
|
+
if (i < 0) {
|
|
706
|
+
for (let j = 0; j < 12; j++) {
|
|
707
|
+
lastRandChars[j] = Math.floor(Math.random() * 64);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
else {
|
|
711
|
+
lastRandChars[i] = (lastRandChars[i] ?? 0) + 1;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
for (let i = 0; i < 12; i++) {
|
|
715
|
+
id += PUSH_CHARS.charAt(lastRandChars[i]);
|
|
716
|
+
}
|
|
717
|
+
return id;
|
|
718
|
+
}
|
|
719
|
+
//# sourceMappingURL=index.js.map
|