@pyric/cli 0.1.0-alpha.30.2 → 0.1.0-alpha.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assurance/.generated/conformance-verdicts.d.ts +107 -40
- package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
- package/dist/assurance/.generated/conformance-verdicts.js +107 -40
- package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
- package/dist/assurance/capabilities.d.ts.map +1 -1
- package/dist/assurance/capabilities.js +12 -14
- package/dist/assurance/capabilities.js.map +1 -1
- package/dist/bounded-request.d.ts +27 -5
- package/dist/bounded-request.d.ts.map +1 -1
- package/dist/bounded-request.js +48 -4
- package/dist/bounded-request.js.map +1 -1
- package/dist/bridge/client/bridge-url.d.ts +5 -1
- package/dist/bridge/client/bridge-url.d.ts.map +1 -1
- package/dist/bridge/client/bridge-url.js +5 -1
- package/dist/bridge/client/bridge-url.js.map +1 -1
- package/dist/bridge/client/bridge.d.ts +9 -3
- package/dist/bridge/client/bridge.d.ts.map +1 -1
- package/dist/bridge/client/bridge.js +17 -3
- package/dist/bridge/client/bridge.js.map +1 -1
- package/dist/bridge/frame-output.d.ts.map +1 -1
- package/dist/bridge/frame-output.js +46 -0
- package/dist/bridge/frame-output.js.map +1 -1
- package/dist/bridge/protocol.d.ts +10 -0
- package/dist/bridge/protocol.d.ts.map +1 -1
- package/dist/bridge/protocol.js +10 -0
- package/dist/bridge/protocol.js.map +1 -1
- package/dist/bridge/server/in-process.d.ts +16 -7
- package/dist/bridge/server/in-process.d.ts.map +1 -1
- package/dist/bridge/server/in-process.js +51 -17
- package/dist/bridge/server/in-process.js.map +1 -1
- package/dist/bridge/server/peer.d.ts +8 -0
- package/dist/bridge/server/peer.d.ts.map +1 -1
- package/dist/bridge/server/peer.js +10 -0
- package/dist/bridge/server/peer.js.map +1 -1
- package/dist/bridge/server/standalone.d.ts +7 -2
- package/dist/bridge/server/standalone.d.ts.map +1 -1
- package/dist/bridge/server/standalone.js +27 -99
- package/dist/bridge/server/standalone.js.map +1 -1
- package/dist/bridge/surface/arguments/firestore.d.ts +6 -6
- package/dist/bridge/surface/arguments/sandbox.d.ts +0 -47
- package/dist/bridge/surface/arguments/sandbox.d.ts.map +1 -1
- package/dist/bridge/surface/arguments/sandbox.js +2 -59
- package/dist/bridge/surface/arguments/sandbox.js.map +1 -1
- package/dist/bridge/surface/arguments/seed.d.ts +61 -0
- package/dist/bridge/surface/arguments/seed.d.ts.map +1 -0
- package/dist/bridge/surface/arguments/seed.js +67 -0
- package/dist/bridge/surface/arguments/seed.js.map +1 -0
- package/dist/bridge/surface/arguments/storage.d.ts +2 -2
- package/dist/bridge/surface/context.d.ts +5 -10
- package/dist/bridge/surface/context.d.ts.map +1 -1
- package/dist/bridge/surface/context.js +11 -23
- package/dist/bridge/surface/context.js.map +1 -1
- package/dist/bridge/surface/database-instance-catalog.d.ts +0 -3
- package/dist/bridge/surface/database-instance-catalog.d.ts.map +1 -1
- package/dist/bridge/surface/database-instance-catalog.js +4 -27
- package/dist/bridge/surface/database-instance-catalog.js.map +1 -1
- package/dist/bridge/surface/database-instance-project.d.ts +5 -0
- package/dist/bridge/surface/database-instance-project.d.ts.map +1 -0
- package/dist/bridge/surface/database-instance-project.js +32 -0
- package/dist/bridge/surface/database-instance-project.js.map +1 -0
- package/dist/bridge/surface/database-instance.d.ts +3 -3
- package/dist/bridge/surface/database-instance.d.ts.map +1 -1
- package/dist/bridge/surface/database-instance.js +1 -2
- package/dist/bridge/surface/database-instance.js.map +1 -1
- package/dist/bridge/surface/functions-runtime.d.ts +2 -2
- package/dist/bridge/surface/functions-runtime.js +5 -5
- package/dist/bridge/surface/functions-runtime.js.map +1 -1
- package/dist/bridge/surface/held-identity.d.ts +4 -4
- package/dist/bridge/surface/held-identity.d.ts.map +1 -1
- package/dist/bridge/surface/held-identity.js.map +1 -1
- package/dist/bridge/surface/manifest.sandbox.generated.d.ts +3 -0
- package/dist/bridge/surface/manifest.sandbox.generated.d.ts.map +1 -0
- package/dist/bridge/surface/manifest.sandbox.generated.js +135 -0
- package/dist/bridge/surface/manifest.sandbox.generated.js.map +1 -0
- package/dist/bridge/surface/method-types.d.ts +48 -7
- package/dist/bridge/surface/method-types.d.ts.map +1 -1
- package/dist/bridge/surface/method-types.js +15 -0
- package/dist/bridge/surface/method-types.js.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/clearScripts.d.ts +2 -1
- package/dist/bridge/surface/methods/ai_logic/clearScripts.d.ts.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/clearScripts.js +2 -1
- package/dist/bridge/surface/methods/ai_logic/clearScripts.js.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/script.d.ts +2 -1
- package/dist/bridge/surface/methods/ai_logic/script.d.ts.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/script.js +2 -1
- package/dist/bridge/surface/methods/ai_logic/script.js.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/scripts.d.ts +2 -1
- package/dist/bridge/surface/methods/ai_logic/scripts.d.ts.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/scripts.js +2 -1
- package/dist/bridge/surface/methods/ai_logic/scripts.js.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/status.d.ts +2 -1
- package/dist/bridge/surface/methods/ai_logic/status.d.ts.map +1 -1
- package/dist/bridge/surface/methods/ai_logic/status.js +1 -0
- package/dist/bridge/surface/methods/ai_logic/status.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/attach.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/attach.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/attach.js +1 -0
- package/dist/bridge/surface/methods/assurance/attach.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/canIUse.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/canIUse.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/canIUse.js +1 -0
- package/dist/bridge/surface/methods/assurance/canIUse.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/define.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/define.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/define.js +1 -0
- package/dist/bridge/surface/methods/assurance/define.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/export.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/export.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/export.js +1 -0
- package/dist/bridge/surface/methods/assurance/export.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/inspect.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/inspect.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/inspect.js +1 -0
- package/dist/bridge/surface/methods/assurance/inspect.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/map.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/map.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/map.js +1 -0
- package/dist/bridge/surface/methods/assurance/map.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/minimize.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/minimize.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/minimize.js +1 -0
- package/dist/bridge/surface/methods/assurance/minimize.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/propose.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/propose.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/propose.js +1 -0
- package/dist/bridge/surface/methods/assurance/propose.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/replaySession.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/replaySession.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/replaySession.js +1 -0
- package/dist/bridge/surface/methods/assurance/replaySession.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/run.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/run.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/run.js +1 -0
- package/dist/bridge/surface/methods/assurance/run.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/start.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/start.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/start.js +1 -0
- package/dist/bridge/surface/methods/assurance/start.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/testRulesHosted.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/testRulesHosted.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/testRulesHosted.js +1 -0
- package/dist/bridge/surface/methods/assurance/testRulesHosted.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/verify.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/verify.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/verify.js +1 -0
- package/dist/bridge/surface/methods/assurance/verify.js.map +1 -1
- package/dist/bridge/surface/methods/assurance/verifyCases.d.ts +1 -0
- package/dist/bridge/surface/methods/assurance/verifyCases.d.ts.map +1 -1
- package/dist/bridge/surface/methods/assurance/verifyCases.js +1 -0
- package/dist/bridge/surface/methods/assurance/verifyCases.js.map +1 -1
- package/dist/bridge/surface/methods/auth/actAsAdmin.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/actAsAdmin.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/actAsAdmin.js +1 -0
- package/dist/bridge/surface/methods/auth/actAsAdmin.js.map +1 -1
- package/dist/bridge/surface/methods/auth/actAsAnonymous.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/actAsAnonymous.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/actAsAnonymous.js +1 -0
- package/dist/bridge/surface/methods/auth/actAsAnonymous.js.map +1 -1
- package/dist/bridge/surface/methods/auth/createCustomToken.d.ts +1 -0
- package/dist/bridge/surface/methods/auth/createCustomToken.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/createCustomToken.js +1 -0
- package/dist/bridge/surface/methods/auth/createCustomToken.js.map +1 -1
- package/dist/bridge/surface/methods/auth/createUser.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/createUser.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/createUser.js +2 -1
- package/dist/bridge/surface/methods/auth/createUser.js.map +1 -1
- package/dist/bridge/surface/methods/auth/deleteUser.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/deleteUser.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/deleteUser.js +2 -1
- package/dist/bridge/surface/methods/auth/deleteUser.js.map +1 -1
- package/dist/bridge/surface/methods/auth/getUser.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/getUser.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/getUser.js +2 -1
- package/dist/bridge/surface/methods/auth/getUser.js.map +1 -1
- package/dist/bridge/surface/methods/auth/getUserByEmail.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/getUserByEmail.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/getUserByEmail.js +2 -1
- package/dist/bridge/surface/methods/auth/getUserByEmail.js.map +1 -1
- package/dist/bridge/surface/methods/auth/impersonate.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/impersonate.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/impersonate.js +1 -0
- package/dist/bridge/surface/methods/auth/impersonate.js.map +1 -1
- package/dist/bridge/surface/methods/auth/importUsers.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/importUsers.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/importUsers.js +3 -2
- package/dist/bridge/surface/methods/auth/importUsers.js.map +1 -1
- package/dist/bridge/surface/methods/auth/listUsers.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/listUsers.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/listUsers.js +2 -1
- package/dist/bridge/surface/methods/auth/listUsers.js.map +1 -1
- package/dist/bridge/surface/methods/auth/sessions.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/sessions.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/sessions.js +1 -0
- package/dist/bridge/surface/methods/auth/sessions.js.map +1 -1
- package/dist/bridge/surface/methods/auth/setCustomUserClaims.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/setCustomUserClaims.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/setCustomUserClaims.js +2 -1
- package/dist/bridge/surface/methods/auth/setCustomUserClaims.js.map +1 -1
- package/dist/bridge/surface/methods/auth/signInAnonymously.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/signInAnonymously.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/signInAnonymously.js +1 -0
- package/dist/bridge/surface/methods/auth/signInAnonymously.js.map +1 -1
- package/dist/bridge/surface/methods/auth/signInWithCredential.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/signInWithCredential.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/signInWithCredential.js +1 -0
- package/dist/bridge/surface/methods/auth/signInWithCredential.js.map +1 -1
- package/dist/bridge/surface/methods/auth/signInWithCustomToken.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/signInWithCustomToken.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/signInWithCustomToken.js +1 -0
- package/dist/bridge/surface/methods/auth/signInWithCustomToken.js.map +1 -1
- package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.js +1 -0
- package/dist/bridge/surface/methods/auth/signInWithEmailAndPassword.js.map +1 -1
- package/dist/bridge/surface/methods/auth/signOut.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/signOut.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/signOut.js +1 -0
- package/dist/bridge/surface/methods/auth/signOut.js.map +1 -1
- package/dist/bridge/surface/methods/auth/takeAuthMail.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/takeAuthMail.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/takeAuthMail.js +1 -0
- package/dist/bridge/surface/methods/auth/takeAuthMail.js.map +1 -1
- package/dist/bridge/surface/methods/auth/updateUser.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/updateUser.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/updateUser.js +2 -1
- package/dist/bridge/surface/methods/auth/updateUser.js.map +1 -1
- package/dist/bridge/surface/methods/auth/useAppSession.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/useAppSession.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/useAppSession.js +1 -0
- package/dist/bridge/surface/methods/auth/useAppSession.js.map +1 -1
- package/dist/bridge/surface/methods/auth/whoami.d.ts +2 -1
- package/dist/bridge/surface/methods/auth/whoami.d.ts.map +1 -1
- package/dist/bridge/surface/methods/auth/whoami.js +1 -0
- package/dist/bridge/surface/methods/auth/whoami.js.map +1 -1
- package/dist/bridge/surface/methods/database/crawl.d.ts +2 -1
- package/dist/bridge/surface/methods/database/crawl.d.ts.map +1 -1
- package/dist/bridge/surface/methods/database/crawl.js +1 -0
- package/dist/bridge/surface/methods/database/crawl.js.map +1 -1
- package/dist/bridge/surface/methods/database/get.d.ts +2 -1
- package/dist/bridge/surface/methods/database/get.d.ts.map +1 -1
- package/dist/bridge/surface/methods/database/get.js +1 -0
- package/dist/bridge/surface/methods/database/get.js.map +1 -1
- package/dist/bridge/surface/methods/database/push.d.ts +2 -1
- package/dist/bridge/surface/methods/database/push.d.ts.map +1 -1
- package/dist/bridge/surface/methods/database/push.js +1 -0
- package/dist/bridge/surface/methods/database/push.js.map +1 -1
- package/dist/bridge/surface/methods/database/query.d.ts +2 -1
- package/dist/bridge/surface/methods/database/query.d.ts.map +1 -1
- package/dist/bridge/surface/methods/database/query.js +1 -0
- package/dist/bridge/surface/methods/database/query.js.map +1 -1
- package/dist/bridge/surface/methods/database/remove.d.ts +2 -1
- package/dist/bridge/surface/methods/database/remove.d.ts.map +1 -1
- package/dist/bridge/surface/methods/database/remove.js +1 -0
- package/dist/bridge/surface/methods/database/remove.js.map +1 -1
- package/dist/bridge/surface/methods/database/set.d.ts +2 -1
- package/dist/bridge/surface/methods/database/set.d.ts.map +1 -1
- package/dist/bridge/surface/methods/database/set.js +1 -0
- package/dist/bridge/surface/methods/database/set.js.map +1 -1
- package/dist/bridge/surface/methods/database/update.d.ts +2 -1
- package/dist/bridge/surface/methods/database/update.d.ts.map +1 -1
- package/dist/bridge/surface/methods/database/update.js +1 -0
- package/dist/bridge/surface/methods/database/update.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/addDoc.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/addDoc.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/addDoc.js +2 -1
- package/dist/bridge/surface/methods/firestore/addDoc.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/deleteDoc.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/deleteDoc.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/deleteDoc.js +2 -1
- package/dist/bridge/surface/methods/firestore/deleteDoc.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/discoverPaths.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/discoverPaths.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/discoverPaths.js +1 -0
- package/dist/bridge/surface/methods/firestore/discoverPaths.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/extractIndexes.d.ts +7 -6
- package/dist/bridge/surface/methods/firestore/extractIndexes.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/extractIndexes.js +1 -0
- package/dist/bridge/surface/methods/firestore/extractIndexes.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/findCollectionGroup.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/findCollectionGroup.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/findCollectionGroup.js +1 -0
- package/dist/bridge/surface/methods/firestore/findCollectionGroup.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/getAggregateFromServer.d.ts +6 -5
- package/dist/bridge/surface/methods/firestore/getAggregateFromServer.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/getAggregateFromServer.js +1 -0
- package/dist/bridge/surface/methods/firestore/getAggregateFromServer.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/getCountFromServer.d.ts +6 -5
- package/dist/bridge/surface/methods/firestore/getCountFromServer.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/getCountFromServer.js +1 -0
- package/dist/bridge/surface/methods/firestore/getCountFromServer.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/getDoc.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/getDoc.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/getDoc.js +2 -1
- package/dist/bridge/surface/methods/firestore/getDoc.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/getDocs.d.ts +6 -5
- package/dist/bridge/surface/methods/firestore/getDocs.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/getDocs.js +2 -1
- package/dist/bridge/surface/methods/firestore/getDocs.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/setDoc.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/setDoc.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/setDoc.js +2 -1
- package/dist/bridge/surface/methods/firestore/setDoc.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/updateDoc.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/updateDoc.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/updateDoc.js +2 -1
- package/dist/bridge/surface/methods/firestore/updateDoc.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/writeBatch.d.ts +2 -1
- package/dist/bridge/surface/methods/firestore/writeBatch.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/writeBatch.js +2 -1
- package/dist/bridge/surface/methods/firestore/writeBatch.js.map +1 -1
- package/dist/bridge/surface/methods/firestore/writeIndexes.d.ts +1 -0
- package/dist/bridge/surface/methods/firestore/writeIndexes.d.ts.map +1 -1
- package/dist/bridge/surface/methods/firestore/writeIndexes.js +1 -0
- package/dist/bridge/surface/methods/firestore/writeIndexes.js.map +1 -1
- package/dist/bridge/surface/methods/functions/executions.d.ts +3 -2
- package/dist/bridge/surface/methods/functions/executions.d.ts.map +1 -1
- package/dist/bridge/surface/methods/functions/executions.js +2 -1
- package/dist/bridge/surface/methods/functions/executions.js.map +1 -1
- package/dist/bridge/surface/methods/functions/fire.d.ts +1 -0
- package/dist/bridge/surface/methods/functions/fire.d.ts.map +1 -1
- package/dist/bridge/surface/methods/functions/fire.js +6 -5
- package/dist/bridge/surface/methods/functions/fire.js.map +1 -1
- package/dist/bridge/surface/methods/functions/listTriggers.d.ts +2 -1
- package/dist/bridge/surface/methods/functions/listTriggers.d.ts.map +1 -1
- package/dist/bridge/surface/methods/functions/listTriggers.js +1 -0
- package/dist/bridge/surface/methods/functions/listTriggers.js.map +1 -1
- package/dist/bridge/surface/methods/messaging/deliveries.d.ts +2 -1
- package/dist/bridge/surface/methods/messaging/deliveries.d.ts.map +1 -1
- package/dist/bridge/surface/methods/messaging/deliveries.js +1 -0
- package/dist/bridge/surface/methods/messaging/deliveries.js.map +1 -1
- package/dist/bridge/surface/methods/messaging/send.d.ts +2 -1
- package/dist/bridge/surface/methods/messaging/send.d.ts.map +1 -1
- package/dist/bridge/surface/methods/messaging/send.js +2 -1
- package/dist/bridge/surface/methods/messaging/send.js.map +1 -1
- package/dist/bridge/surface/methods/messaging/subscribeToTopic.d.ts +2 -1
- package/dist/bridge/surface/methods/messaging/subscribeToTopic.d.ts.map +1 -1
- package/dist/bridge/surface/methods/messaging/subscribeToTopic.js +1 -0
- package/dist/bridge/surface/methods/messaging/subscribeToTopic.js.map +1 -1
- package/dist/bridge/surface/methods/messaging/tokens.d.ts +2 -1
- package/dist/bridge/surface/methods/messaging/tokens.d.ts.map +1 -1
- package/dist/bridge/surface/methods/messaging/tokens.js +1 -0
- package/dist/bridge/surface/methods/messaging/tokens.js.map +1 -1
- package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.d.ts +2 -1
- package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.d.ts.map +1 -1
- package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.js +1 -0
- package/dist/bridge/surface/methods/messaging/unsubscribeFromTopic.js.map +1 -1
- package/dist/bridge/surface/methods/registry.d.ts.map +1 -1
- package/dist/bridge/surface/methods/registry.js +2 -8
- package/dist/bridge/surface/methods/registry.js.map +1 -1
- package/dist/bridge/surface/methods/rules/explainDenial.d.ts +1 -0
- package/dist/bridge/surface/methods/rules/explainDenial.d.ts.map +1 -1
- package/dist/bridge/surface/methods/rules/explainDenial.js +1 -0
- package/dist/bridge/surface/methods/rules/explainDenial.js.map +1 -1
- package/dist/bridge/surface/methods/rules/getStdlib.d.ts +1 -0
- package/dist/bridge/surface/methods/rules/getStdlib.d.ts.map +1 -1
- package/dist/bridge/surface/methods/rules/getStdlib.js +1 -0
- package/dist/bridge/surface/methods/rules/getStdlib.js.map +1 -1
- package/dist/bridge/surface/methods/rules/lint.d.ts +1 -0
- package/dist/bridge/surface/methods/rules/lint.d.ts.map +1 -1
- package/dist/bridge/surface/methods/rules/lint.js +1 -0
- package/dist/bridge/surface/methods/rules/lint.js.map +1 -1
- package/dist/bridge/surface/methods/rules/listStdlib.d.ts +1 -0
- package/dist/bridge/surface/methods/rules/listStdlib.d.ts.map +1 -1
- package/dist/bridge/surface/methods/rules/listStdlib.js +1 -0
- package/dist/bridge/surface/methods/rules/listStdlib.js.map +1 -1
- package/dist/bridge/surface/methods/rules/set.d.ts +1 -0
- package/dist/bridge/surface/methods/rules/set.d.ts.map +1 -1
- package/dist/bridge/surface/methods/rules/set.js +1 -0
- package/dist/bridge/surface/methods/rules/set.js.map +1 -1
- package/dist/bridge/surface/methods/rules/simulate.d.ts +1 -0
- package/dist/bridge/surface/methods/rules/simulate.d.ts.map +1 -1
- package/dist/bridge/surface/methods/rules/simulate.js +1 -0
- package/dist/bridge/surface/methods/rules/simulate.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/activity.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/activity.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/activity.js +2 -1
- package/dist/bridge/surface/methods/sandbox/activity.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/advanceClock.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/advanceClock.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/advanceClock.js +1 -0
- package/dist/bridge/surface/methods/sandbox/advanceClock.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/apply.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/apply.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/apply.js +1 -0
- package/dist/bridge/surface/methods/sandbox/apply.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/checkpoint.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/checkpoint.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/checkpoint.js +1 -0
- package/dist/bridge/surface/methods/sandbox/checkpoint.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/deleteCapture.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/deleteCapture.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/deleteCapture.js +1 -1
- package/dist/bridge/surface/methods/sandbox/deleteCapture.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.js +1 -0
- package/dist/bridge/surface/methods/sandbox/deleteCheckpoint.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/diff.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/diff.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/diff.js +1 -0
- package/dist/bridge/surface/methods/sandbox/diff.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/discard.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/discard.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/discard.js +1 -0
- package/dist/bridge/surface/methods/sandbox/discard.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/events.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/events.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/events.js +2 -1
- package/dist/bridge/surface/methods/sandbox/events.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/exportFixture.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/exportFixture.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/exportFixture.js +1 -0
- package/dist/bridge/surface/methods/sandbox/exportFixture.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/fork.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/fork.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/fork.js +1 -0
- package/dist/bridge/surface/methods/sandbox/fork.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/inspect.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/inspect.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/inspect.js +2 -1
- package/dist/bridge/surface/methods/sandbox/inspect.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listBranches.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/listBranches.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listBranches.js +1 -0
- package/dist/bridge/surface/methods/sandbox/listBranches.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listCaptures.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/listCaptures.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listCaptures.js +1 -1
- package/dist/bridge/surface/methods/sandbox/listCaptures.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listCheckpoints.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/listCheckpoints.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listCheckpoints.js +1 -0
- package/dist/bridge/surface/methods/sandbox/listCheckpoints.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listeners.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/listeners.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/listeners.js +1 -0
- package/dist/bridge/surface/methods/sandbox/listeners.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/openCapture.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/openCapture.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/openCapture.js +1 -1
- package/dist/bridge/surface/methods/sandbox/openCapture.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/promote.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/promote.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/promote.js +1 -0
- package/dist/bridge/surface/methods/sandbox/promote.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/renameCapture.d.ts +3 -2
- package/dist/bridge/surface/methods/sandbox/renameCapture.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/renameCapture.js +1 -1
- package/dist/bridge/surface/methods/sandbox/renameCapture.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/reset.d.ts +3 -2
- package/dist/bridge/surface/methods/sandbox/reset.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/reset.js +1 -0
- package/dist/bridge/surface/methods/sandbox/reset.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/resetClock.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/resetClock.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/resetClock.js +1 -0
- package/dist/bridge/surface/methods/sandbox/resetClock.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/restore.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/restore.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/restore.js +1 -0
- package/dist/bridge/surface/methods/sandbox/restore.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/saveCapture.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/saveCapture.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/saveCapture.js +1 -1
- package/dist/bridge/surface/methods/sandbox/saveCapture.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/seed.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/seed.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/seed.js +3 -2
- package/dist/bridge/surface/methods/sandbox/seed.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/seedFromFixture.d.ts +1 -0
- package/dist/bridge/surface/methods/sandbox/seedFromFixture.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/seedFromFixture.js +1 -0
- package/dist/bridge/surface/methods/sandbox/seedFromFixture.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox/setClock.d.ts +2 -1
- package/dist/bridge/surface/methods/sandbox/setClock.d.ts.map +1 -1
- package/dist/bridge/surface/methods/sandbox/setClock.js +1 -0
- package/dist/bridge/surface/methods/sandbox/setClock.js.map +1 -1
- package/dist/bridge/surface/methods/sandbox-registry.d.ts +6 -0
- package/dist/bridge/surface/methods/sandbox-registry.d.ts.map +1 -0
- package/dist/bridge/surface/methods/sandbox-registry.js +21 -0
- package/dist/bridge/surface/methods/sandbox-registry.js.map +1 -0
- package/dist/bridge/surface/methods/storage/deleteObject.d.ts +2 -1
- package/dist/bridge/surface/methods/storage/deleteObject.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/deleteObject.js +1 -0
- package/dist/bridge/surface/methods/storage/deleteObject.js.map +1 -1
- package/dist/bridge/surface/methods/storage/getBytes.d.ts +2 -1
- package/dist/bridge/surface/methods/storage/getBytes.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/getBytes.js +1 -0
- package/dist/bridge/surface/methods/storage/getBytes.js.map +1 -1
- package/dist/bridge/surface/methods/storage/getDownloadURL.d.ts +2 -1
- package/dist/bridge/surface/methods/storage/getDownloadURL.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/getDownloadURL.js +1 -0
- package/dist/bridge/surface/methods/storage/getDownloadURL.js.map +1 -1
- package/dist/bridge/surface/methods/storage/getMetadata.d.ts +2 -1
- package/dist/bridge/surface/methods/storage/getMetadata.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/getMetadata.js +1 -0
- package/dist/bridge/surface/methods/storage/getMetadata.js.map +1 -1
- package/dist/bridge/surface/methods/storage/listAll.d.ts +2 -1
- package/dist/bridge/surface/methods/storage/listAll.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/listAll.js +1 -0
- package/dist/bridge/surface/methods/storage/listAll.js.map +1 -1
- package/dist/bridge/surface/methods/storage/provision.d.ts +1 -0
- package/dist/bridge/surface/methods/storage/provision.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/provision.js +1 -0
- package/dist/bridge/surface/methods/storage/provision.js.map +1 -1
- package/dist/bridge/surface/methods/storage/setCrossServiceIam.d.ts +2 -1
- package/dist/bridge/surface/methods/storage/setCrossServiceIam.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/setCrossServiceIam.js +1 -0
- package/dist/bridge/surface/methods/storage/setCrossServiceIam.js.map +1 -1
- package/dist/bridge/surface/methods/storage/status.d.ts +1 -0
- package/dist/bridge/surface/methods/storage/status.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/status.js +1 -0
- package/dist/bridge/surface/methods/storage/status.js.map +1 -1
- package/dist/bridge/surface/methods/storage/updateMetadata.d.ts +6 -5
- package/dist/bridge/surface/methods/storage/updateMetadata.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/updateMetadata.js +1 -0
- package/dist/bridge/surface/methods/storage/updateMetadata.js.map +1 -1
- package/dist/bridge/surface/methods/storage/uploadBytes.d.ts +1 -0
- package/dist/bridge/surface/methods/storage/uploadBytes.d.ts.map +1 -1
- package/dist/bridge/surface/methods/storage/uploadBytes.js +1 -0
- package/dist/bridge/surface/methods/storage/uploadBytes.js.map +1 -1
- package/dist/bridge/surface/render/discriminator-schemas.d.ts +2 -2
- package/dist/bridge/surface/request-instant.d.ts +2 -2
- package/dist/bridge/surface/request-instant.d.ts.map +1 -1
- package/dist/bridge/surface/request-instant.js.map +1 -1
- package/dist/bridge/surface/rules-engines/database.d.ts.map +1 -1
- package/dist/bridge/surface/rules-engines/database.js +1 -2
- package/dist/bridge/surface/rules-engines/database.js.map +1 -1
- package/dist/bridge/surface/rules-engines/storage-request-resource.d.ts +38 -0
- package/dist/bridge/surface/rules-engines/storage-request-resource.d.ts.map +1 -0
- package/dist/bridge/surface/rules-engines/storage-request-resource.js +246 -0
- package/dist/bridge/surface/rules-engines/storage-request-resource.js.map +1 -0
- package/dist/bridge/surface/rules-engines/storage.d.ts.map +1 -1
- package/dist/bridge/surface/rules-engines/storage.js +44 -65
- package/dist/bridge/surface/rules-engines/storage.js.map +1 -1
- package/dist/bridge/surface/sandbox-context.d.ts +25 -0
- package/dist/bridge/surface/sandbox-context.d.ts.map +1 -0
- package/dist/bridge/surface/sandbox-context.js +29 -0
- package/dist/bridge/surface/sandbox-context.js.map +1 -0
- package/dist/bridge/surface/service-handles.d.ts +6 -6
- package/dist/bridge/surface/service-handles.d.ts.map +1 -1
- package/dist/bridge/surface/service-handles.js +7 -4
- package/dist/bridge/surface/service-handles.js.map +1 -1
- package/dist/bridge/surface/sign-in.d.ts +2 -2
- package/dist/bridge/surface/sign-in.d.ts.map +1 -1
- package/dist/bridge/surface/sign-in.js +1 -1
- package/dist/bridge/surface/sign-in.js.map +1 -1
- package/dist/bridge/surface/storage-rules.d.ts +2 -9
- package/dist/bridge/surface/storage-rules.d.ts.map +1 -1
- package/dist/bridge/surface/storage-rules.js +0 -10
- package/dist/bridge/surface/storage-rules.js.map +1 -1
- package/dist/bridge/surface/stored-identity.d.ts +3 -3
- package/dist/bridge/surface/stored-identity.d.ts.map +1 -1
- package/dist/bridge/surface/stored-identity.js.map +1 -1
- package/dist/bridge/surface/types.d.ts +29 -8
- package/dist/bridge/surface/types.d.ts.map +1 -1
- package/dist/cli/firebase-json.d.ts +35 -7
- package/dist/cli/firebase-json.d.ts.map +1 -1
- package/dist/cli/firebase-json.js +13 -0
- package/dist/cli/firebase-json.js.map +1 -1
- package/dist/cli/firestore-indexes.d.ts.map +1 -1
- package/dist/cli/firestore-indexes.js +2 -1
- package/dist/cli/firestore-indexes.js.map +1 -1
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +44 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/public-dir-hint.d.ts +8 -0
- package/dist/cli/public-dir-hint.d.ts.map +1 -0
- package/dist/cli/public-dir-hint.js +30 -0
- package/dist/cli/public-dir-hint.js.map +1 -0
- package/dist/cli/run.d.ts +8 -2
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +28 -5
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/sandbox-runner.d.ts.map +1 -1
- package/dist/cli/sandbox-runner.js +11 -2
- package/dist/cli/sandbox-runner.js.map +1 -1
- package/dist/cli/serve-diagnostics.d.ts.map +1 -1
- package/dist/cli/serve-diagnostics.js +11 -1
- package/dist/cli/serve-diagnostics.js.map +1 -1
- package/dist/cli/serve.d.ts.map +1 -1
- package/dist/cli/serve.js +25 -24
- package/dist/cli/serve.js.map +1 -1
- package/dist/cli/snapshot.d.ts.map +1 -1
- package/dist/cli/snapshot.js +13 -5
- package/dist/cli/snapshot.js.map +1 -1
- package/dist/cli/surface-method-runner.js +1 -1
- package/dist/cli/surface-method-runner.js.map +1 -1
- package/dist/cli/verify.d.ts.map +1 -1
- package/dist/cli/verify.js +10 -1
- package/dist/cli/verify.js.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use-browser.js +19 -3
- package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
- package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
- package/dist/conformance/.generated/can-i-use.js +1 -1
- package/dist/conformance/.generated/can-i-use.js.map +1 -1
- package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
- package/dist/conformance/.generated/conformance-docs.js +1 -1
- package/dist/conformance/.generated/conformance-docs.js.map +1 -1
- package/dist/conformance/.generated/served-availability.d.ts.map +1 -1
- package/dist/conformance/.generated/served-availability.js +1 -1
- package/dist/conformance/.generated/served-availability.js.map +1 -1
- package/dist/discover/merge.d.ts.map +1 -1
- package/dist/discover/merge.js +11 -3
- package/dist/discover/merge.js.map +1 -1
- package/dist/functions/child-protocol.d.ts +43 -0
- package/dist/functions/child-protocol.d.ts.map +1 -0
- package/dist/functions/child-protocol.js +14 -0
- package/dist/functions/child-protocol.js.map +1 -0
- package/dist/functions/child.d.ts +2 -0
- package/dist/functions/child.d.ts.map +1 -0
- package/dist/functions/child.js +92 -0
- package/dist/functions/child.js.map +1 -0
- package/dist/{functions-rtdb → functions}/development-runtime.d.ts +5 -4
- package/dist/functions/development-runtime.d.ts.map +1 -0
- package/dist/{functions-rtdb → functions}/development-runtime.js +2 -2
- package/dist/functions/development-runtime.js.map +1 -0
- package/dist/functions/endpoints.d.ts +39 -0
- package/dist/functions/endpoints.d.ts.map +1 -0
- package/dist/functions/endpoints.js +48 -0
- package/dist/functions/endpoints.js.map +1 -0
- package/dist/functions/events.d.ts.map +1 -0
- package/dist/functions/events.js.map +1 -0
- package/dist/functions/execution-log.d.ts.map +1 -0
- package/dist/functions/execution-log.js.map +1 -0
- package/dist/functions/module-loader.d.ts.map +1 -0
- package/dist/functions/module-loader.js.map +1 -0
- package/dist/functions/project.d.ts +7 -0
- package/dist/functions/project.d.ts.map +1 -0
- package/dist/{functions-rtdb → functions}/project.js +1 -1
- package/dist/functions/project.js.map +1 -0
- package/dist/functions/rtdb/child-runtime.d.ts +23 -0
- package/dist/functions/rtdb/child-runtime.d.ts.map +1 -0
- package/dist/functions/rtdb/child-runtime.js +102 -0
- package/dist/functions/rtdb/child-runtime.js.map +1 -0
- package/dist/functions/rtdb/delivery.d.ts.map +1 -0
- package/dist/functions/rtdb/delivery.js.map +1 -0
- package/dist/{functions-rtdb → functions/rtdb}/discovery.d.ts +3 -20
- package/dist/functions/rtdb/discovery.d.ts.map +1 -0
- package/dist/{functions-rtdb → functions/rtdb}/discovery.js +6 -21
- package/dist/functions/rtdb/discovery.js.map +1 -0
- package/dist/functions/rtdb/event.d.ts.map +1 -0
- package/dist/functions/rtdb/event.js.map +1 -0
- package/dist/functions/rtdb/execution.d.ts.map +1 -0
- package/dist/functions/rtdb/execution.js.map +1 -0
- package/dist/functions/rtdb/in-memory-delivery.d.ts.map +1 -0
- package/dist/functions/rtdb/in-memory-delivery.js.map +1 -0
- package/dist/functions/rtdb/projection.d.ts.map +1 -0
- package/dist/functions/rtdb/projection.js.map +1 -0
- package/dist/functions/rtdb/reference-pattern.d.ts.map +1 -0
- package/dist/functions/rtdb/reference-pattern.js.map +1 -0
- package/dist/{functions-rtdb → functions/rtdb}/remote-delivery.d.ts +1 -1
- package/dist/functions/rtdb/remote-delivery.d.ts.map +1 -0
- package/dist/functions/rtdb/remote-delivery.js.map +1 -0
- package/dist/{functions-rtdb/child.d.ts → functions/spawn.d.ts} +16 -38
- package/dist/functions/spawn.d.ts.map +1 -0
- package/dist/functions/spawn.js +166 -0
- package/dist/functions/spawn.js.map +1 -0
- package/dist/functions/unsupported.d.ts +23 -0
- package/dist/functions/unsupported.d.ts.map +1 -0
- package/dist/functions/unsupported.js +25 -0
- package/dist/functions/unsupported.js.map +1 -0
- package/dist/google-endpoints.d.ts +9 -2
- package/dist/google-endpoints.d.ts.map +1 -1
- package/dist/google-endpoints.js +72 -3
- package/dist/google-endpoints.js.map +1 -1
- package/dist/next/bridge-import-loader.d.ts +9 -0
- package/dist/next/bridge-import-loader.d.ts.map +1 -0
- package/dist/next/bridge-import-loader.js +45 -0
- package/dist/next/bridge-import-loader.js.map +1 -0
- package/dist/next/bridge-imports.d.ts +26 -0
- package/dist/next/bridge-imports.d.ts.map +1 -0
- package/dist/next/bridge-imports.js +90 -0
- package/dist/next/bridge-imports.js.map +1 -0
- package/dist/next/client-aliases.d.ts +13 -5
- package/dist/next/client-aliases.d.ts.map +1 -1
- package/dist/next/client-aliases.js +14 -27
- package/dist/next/client-aliases.js.map +1 -1
- package/dist/next/guard.d.ts +3 -2
- package/dist/next/guard.d.ts.map +1 -1
- package/dist/next/guard.js +28 -10
- package/dist/next/guard.js.map +1 -1
- package/dist/next/turbopack-config.d.ts +9 -0
- package/dist/next/turbopack-config.d.ts.map +1 -1
- package/dist/next/turbopack-config.js +21 -0
- package/dist/next/turbopack-config.js.map +1 -1
- package/dist/next/webpack-config.d.ts +9 -0
- package/dist/next/webpack-config.d.ts.map +1 -1
- package/dist/next/webpack-config.js +18 -0
- package/dist/next/webpack-config.js.map +1 -1
- package/dist/next/with-pyric.d.ts +1 -0
- package/dist/next/with-pyric.d.ts.map +1 -1
- package/dist/next/with-pyric.js +25 -0
- package/dist/next/with-pyric.js.map +1 -1
- package/dist/register/activation.d.ts +16 -0
- package/dist/register/activation.d.ts.map +1 -0
- package/dist/register/activation.js +22 -0
- package/dist/register/activation.js.map +1 -0
- package/dist/register/app-bridge-admin-app-check.d.ts.map +1 -1
- package/dist/register/app-bridge-admin-app-check.js +3 -1
- package/dist/register/app-bridge-admin-app-check.js.map +1 -1
- package/dist/register/child-process-guard.d.ts +43 -0
- package/dist/register/child-process-guard.d.ts.map +1 -0
- package/dist/register/child-process-guard.js +165 -0
- package/dist/register/child-process-guard.js.map +1 -0
- package/dist/register/client/bootstrap.js +6 -1
- package/dist/register/client/bootstrap.js.map +1 -1
- package/dist/register/connect-prototypes.d.ts +9 -0
- package/dist/register/connect-prototypes.d.ts.map +1 -1
- package/dist/register/connect-prototypes.js +11 -0
- package/dist/register/connect-prototypes.js.map +1 -1
- package/dist/register/hooks.d.ts +7 -1
- package/dist/register/hooks.d.ts.map +1 -1
- package/dist/register/hooks.js +44 -2
- package/dist/register/hooks.js.map +1 -1
- package/dist/register/index.d.ts.map +1 -1
- package/dist/register/index.js +93 -23
- package/dist/register/index.js.map +1 -1
- package/dist/register/mapping.d.ts +33 -0
- package/dist/register/mapping.d.ts.map +1 -1
- package/dist/register/mapping.js +45 -3
- package/dist/register/mapping.js.map +1 -1
- package/dist/register/net-guard.d.ts +17 -0
- package/dist/register/net-guard.d.ts.map +1 -1
- package/dist/register/net-guard.js +118 -41
- package/dist/register/net-guard.js.map +1 -1
- package/dist/register/package-identity.d.ts +16 -0
- package/dist/register/package-identity.d.ts.map +1 -0
- package/dist/register/package-identity.js +97 -0
- package/dist/register/package-identity.js.map +1 -0
- package/dist/register/swap-or-stop.d.ts +27 -0
- package/dist/register/swap-or-stop.d.ts.map +1 -0
- package/dist/register/swap-or-stop.js +170 -0
- package/dist/register/swap-or-stop.js.map +1 -0
- package/dist/register/worker-guard.d.ts +20 -0
- package/dist/register/worker-guard.d.ts.map +1 -0
- package/dist/register/worker-guard.js +77 -0
- package/dist/register/worker-guard.js.map +1 -0
- package/dist/remote/resolve-host.d.ts +9 -0
- package/dist/remote/resolve-host.d.ts.map +1 -1
- package/dist/remote/resolve-host.js +13 -2
- package/dist/remote/resolve-host.js.map +1 -1
- package/dist/serve/ai-proxy.d.ts +2 -0
- package/dist/serve/ai-proxy.d.ts.map +1 -1
- package/dist/serve/ai-proxy.js +33 -8
- package/dist/serve/ai-proxy.js.map +1 -1
- package/dist/serve/app-ports.d.ts +48 -0
- package/dist/serve/app-ports.d.ts.map +1 -0
- package/dist/serve/app-ports.js +82 -0
- package/dist/serve/app-ports.js.map +1 -0
- package/dist/serve/bridge-mount.d.ts +13 -0
- package/dist/serve/bridge-mount.d.ts.map +1 -1
- package/dist/serve/bridge-mount.js +28 -8
- package/dist/serve/bridge-mount.js.map +1 -1
- package/dist/serve/bundler.d.ts +6 -0
- package/dist/serve/bundler.d.ts.map +1 -1
- package/dist/serve/bundler.js +78 -26
- package/dist/serve/bundler.js.map +1 -1
- package/dist/serve/discovery.d.ts +17 -3
- package/dist/serve/discovery.d.ts.map +1 -1
- package/dist/serve/discovery.js +199 -63
- package/dist/serve/discovery.js.map +1 -1
- package/dist/serve/entries/auth.d.ts.map +1 -1
- package/dist/serve/entries/auth.js +19 -1
- package/dist/serve/entries/auth.js.map +1 -1
- package/dist/serve/entries/firestore-surface.d.ts +1 -0
- package/dist/serve/entries/firestore-surface.d.ts.map +1 -1
- package/dist/serve/entries/firestore-surface.js +1 -0
- package/dist/serve/entries/firestore-surface.js.map +1 -1
- package/dist/serve/entries/init-payload.d.ts +9 -2
- package/dist/serve/entries/init-payload.d.ts.map +1 -1
- package/dist/serve/entries/init-payload.js +25 -5
- package/dist/serve/entries/init-payload.js.map +1 -1
- package/dist/serve/entries/moved-host.d.ts +18 -0
- package/dist/serve/entries/moved-host.d.ts.map +1 -0
- package/dist/serve/entries/moved-host.js +14 -0
- package/dist/serve/entries/moved-host.js.map +1 -0
- package/dist/serve/entries/runtime-origin.d.ts +6 -0
- package/dist/serve/entries/runtime-origin.d.ts.map +1 -1
- package/dist/serve/entries/runtime-origin.js.map +1 -1
- package/dist/serve/entries/unsupported/firestore.d.ts +0 -1
- package/dist/serve/entries/unsupported/firestore.d.ts.map +1 -1
- package/dist/serve/entries/unsupported/firestore.js +0 -1
- package/dist/serve/entries/unsupported/firestore.js.map +1 -1
- package/dist/serve/entries/worker-runtime.d.ts.map +1 -1
- package/dist/serve/entries/worker-runtime.js +19 -7
- package/dist/serve/entries/worker-runtime.js.map +1 -1
- package/dist/serve/firebase-module-swap.d.ts +19 -2
- package/dist/serve/firebase-module-swap.d.ts.map +1 -1
- package/dist/serve/firebase-module-swap.js +92 -16
- package/dist/serve/firebase-module-swap.js.map +1 -1
- package/dist/serve/gemini-proxy.js +2 -2
- package/dist/serve/gemini-proxy.js.map +1 -1
- package/dist/serve/hosted/runtime.d.ts.map +1 -1
- package/dist/serve/hosted/runtime.js +10 -3
- package/dist/serve/hosted/runtime.js.map +1 -1
- package/dist/serve/namespace.d.ts +7 -0
- package/dist/serve/namespace.d.ts.map +1 -1
- package/dist/serve/namespace.js +32 -24
- package/dist/serve/namespace.js.map +1 -1
- package/dist/serve/repro/compare.d.ts +2 -1
- package/dist/serve/repro/compare.d.ts.map +1 -1
- package/dist/serve/repro/compare.js +9 -1
- package/dist/serve/repro/compare.js.map +1 -1
- package/dist/serve/rules-fixture-check.d.ts.map +1 -1
- package/dist/serve/rules-fixture-check.js +22 -10
- package/dist/serve/rules-fixture-check.js.map +1 -1
- package/dist/serve/rules.d.ts +35 -9
- package/dist/serve/rules.d.ts.map +1 -1
- package/dist/serve/rules.js +72 -21
- package/dist/serve/rules.js.map +1 -1
- package/dist/serve/sandbox-session.d.ts +3 -0
- package/dist/serve/sandbox-session.d.ts.map +1 -1
- package/dist/serve/sandbox-session.js +10 -3
- package/dist/serve/sandbox-session.js.map +1 -1
- package/dist/serve/server.d.ts +10 -2
- package/dist/serve/server.d.ts.map +1 -1
- package/dist/serve/server.js +24 -4
- package/dist/serve/server.js.map +1 -1
- package/dist/serve/site-ui/_astro/{RulesCodeEditor.Cp_-FK3b.js → RulesCodeEditor.D-eQLCvu.js} +1 -1
- package/dist/serve/site-ui/_astro/app.BjQiEBOY.js +1 -0
- package/dist/serve/site-ui/_astro/app.C84Qr10v.js +151 -0
- package/dist/serve/site-ui/_astro/{chess-showcase.CVhCNUi_.js → chess-showcase.CsH1s4g7.js} +1 -1
- package/dist/serve/site-ui/_astro/{example-runtime.zC1l-Yka.js → example-runtime.CTp8mh7I.js} +1 -1
- package/dist/serve/site-ui/_astro/sandbox-controls.DI8MTU3L.js +1725 -0
- package/dist/serve/site-ui/_astro/{seed.B4vza_Bv.js → seed.BvtbLu-q.js} +1 -1
- package/dist/serve/site-ui/_astro/writes.D8gcuovU.js +1 -0
- package/dist/serve/site-ui/auth/index.html +1 -1
- package/dist/serve/site-ui/docs/ai-compat/index.html +48 -9
- package/dist/serve/site-ui/docs/ai-compat.md +53 -8
- package/dist/serve/site-ui/docs/app-check-compat/index.html +102 -26
- package/dist/serve/site-ui/docs/app-check-compat.md +107 -25
- package/dist/serve/site-ui/docs/auth-compat/index.html +33 -21
- package/dist/serve/site-ui/docs/auth-compat.md +35 -20
- package/dist/serve/site-ui/docs/build/ai-logic/index.html +13 -4
- package/dist/serve/site-ui/docs/build/ai-logic.md +14 -4
- package/dist/serve/site-ui/docs/conformance-scores/index.html +2 -2
- package/dist/serve/site-ui/docs/conformance-scores.md +2 -2
- package/dist/serve/site-ui/docs/database-compat/index.html +113 -49
- package/dist/serve/site-ui/docs/database-compat.md +118 -48
- package/dist/serve/site-ui/docs/firestore-compat/index.html +144 -37
- package/dist/serve/site-ui/docs/firestore-compat.md +149 -36
- package/dist/serve/site-ui/docs/firestore-swift-compat/index.html +1 -1
- package/dist/serve/site-ui/docs/firestore-swift-compat.md +1 -1
- package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +12 -12
- package/dist/serve/site-ui/docs/functions-rtdb-compat.md +12 -12
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +1 -1
- package/dist/serve/site-ui/docs/get-started/how-the-swap-works.md +1 -1
- package/dist/serve/site-ui/docs/get-started/node-host/index.html +1 -0
- package/dist/serve/site-ui/docs/get-started/node-host.md +2 -0
- package/dist/serve/site-ui/docs/index.json +45 -5
- package/dist/serve/site-ui/docs/messaging-compat/index.html +2 -2
- package/dist/serve/site-ui/docs/messaging-compat.md +2 -2
- package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +3 -1
- package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api.md +2 -0
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api/index.html +11 -3
- package/dist/serve/site-ui/docs/pyric-app-check-reference-api.md +13 -3
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +1 -0
- package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +1 -0
- package/dist/serve/site-ui/docs/pyric-cli-register-client-firestore-reference-api/index.html +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-register-client-firestore-reference-api.md +1 -1
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +17 -9
- package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +13 -11
- package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +8 -4
- package/dist/serve/site-ui/docs/pyric-database-reference-api.md +9 -4
- package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +15 -4
- package/dist/serve/site-ui/docs/pyric-rules-reference-api.md +21 -4
- package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +7 -1
- package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +1 -0
- package/dist/serve/site-ui/docs/reference/cli/index.html +4 -3
- package/dist/serve/site-ui/docs/reference/cli.md +5 -3
- package/dist/serve/site-ui/docs/rules-compat/index.html +150 -49
- package/dist/serve/site-ui/docs/rules-compat.md +149 -51
- package/dist/serve/site-ui/docs/storage-compat/index.html +20 -20
- package/dist/serve/site-ui/docs/storage-compat.md +20 -20
- package/dist/serve/site-ui/docs/tutorial/index.html +2 -1
- package/dist/serve/site-ui/docs/tutorial.md +2 -1
- package/dist/serve/site-ui/examples/chess/index.html +1 -1
- package/dist/serve/site-ui/firestore/index.html +1 -1
- package/dist/serve/site-ui/rtdb/index.html +1 -1
- package/dist/serve/site-ui/settings/index.html +1 -1
- package/dist/serve/site-ui/storage/index.html +1 -1
- package/dist/serve/site-ui/studio/index.html +1 -1
- package/dist/serve/site-ui/traffic/index.html +1 -1
- package/dist/serve/vite-ai-config.d.ts +8 -0
- package/dist/serve/vite-ai-config.d.ts.map +1 -1
- package/dist/serve/vite-ai-config.js +16 -1
- package/dist/serve/vite-ai-config.js.map +1 -1
- package/dist/serve/vite-functions-development.d.ts +3 -3
- package/dist/serve/vite-functions-development.d.ts.map +1 -1
- package/dist/serve/vite-functions-development.js +1 -1
- package/dist/serve/vite-functions-development.js.map +1 -1
- package/dist/serve/vite-generation-bridge.d.ts +2 -2
- package/dist/serve/vite-generation-bridge.d.ts.map +1 -1
- package/dist/serve/vite-generation-functions.d.ts +3 -3
- package/dist/serve/vite-generation-functions.d.ts.map +1 -1
- package/dist/serve/vite-generation-functions.js +1 -1
- package/dist/serve/vite-generation-functions.js.map +1 -1
- package/dist/serve/vite-generation-middleware.d.ts +1 -1
- package/dist/serve/vite-generation-middleware.d.ts.map +1 -1
- package/dist/serve/vite-generation-middleware.js +36 -1
- package/dist/serve/vite-generation-middleware.js.map +1 -1
- package/dist/serve/vite-module-swap.d.ts.map +1 -1
- package/dist/serve/vite-module-swap.js +8 -0
- package/dist/serve/vite-module-swap.js.map +1 -1
- package/dist/serve/vite-page-runtime.d.ts.map +1 -1
- package/dist/serve/vite-page-runtime.js +7 -1
- package/dist/serve/vite-page-runtime.js.map +1 -1
- package/dist/serve/vite-rules-source.d.ts +1 -1
- package/dist/serve/vite-rules-source.d.ts.map +1 -1
- package/dist/serve/vite-rules-source.js +2 -4
- package/dist/serve/vite-rules-source.js.map +1 -1
- package/dist/serve/vite-sandbox-generation.d.ts +2 -2
- package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
- package/dist/serve/vite-sandbox-generation.js +2 -2
- package/dist/serve/vite-sandbox-generation.js.map +1 -1
- package/dist/serve/worker/client/auth.d.ts +29 -5
- package/dist/serve/worker/client/auth.d.ts.map +1 -1
- package/dist/serve/worker/client/auth.js +61 -11
- package/dist/serve/worker/client/auth.js.map +1 -1
- package/dist/serve/worker/client/clock.d.ts +0 -16
- package/dist/serve/worker/client/clock.d.ts.map +1 -1
- package/dist/serve/worker/client/clock.js +23 -10
- package/dist/serve/worker/client/clock.js.map +1 -1
- package/dist/serve/worker/client/firestore-reads.d.ts +12 -5
- package/dist/serve/worker/client/firestore-reads.d.ts.map +1 -1
- package/dist/serve/worker/client/firestore-reads.js +47 -16
- package/dist/serve/worker/client/firestore-reads.js.map +1 -1
- package/dist/serve/worker/client/firestore-refs.d.ts.map +1 -1
- package/dist/serve/worker/client/firestore-refs.js +4 -14
- package/dist/serve/worker/client/firestore-refs.js.map +1 -1
- package/dist/serve/worker/client/rtdb-connection-lifecycle.d.ts.map +1 -1
- package/dist/serve/worker/client/rtdb-connection-lifecycle.js +5 -0
- package/dist/serve/worker/client/rtdb-connection-lifecycle.js.map +1 -1
- package/dist/serve/worker/client/rtdb-snapshots.d.ts +7 -0
- package/dist/serve/worker/client/rtdb-snapshots.d.ts.map +1 -1
- package/dist/serve/worker/client/rtdb-snapshots.js +25 -1
- package/dist/serve/worker/client/rtdb-snapshots.js.map +1 -1
- package/dist/serve/worker/client/rtdb-value-validation.d.ts +21 -0
- package/dist/serve/worker/client/rtdb-value-validation.d.ts.map +1 -0
- package/dist/serve/worker/client/rtdb-value-validation.js +183 -0
- package/dist/serve/worker/client/rtdb-value-validation.js.map +1 -0
- package/dist/serve/worker/client/rtdb-writes.d.ts.map +1 -1
- package/dist/serve/worker/client/rtdb-writes.js +7 -0
- package/dist/serve/worker/client/rtdb-writes.js.map +1 -1
- package/dist/serve/worker/client/snapshots.d.ts +2 -0
- package/dist/serve/worker/client/snapshots.d.ts.map +1 -1
- package/dist/serve/worker/client/snapshots.js +13 -7
- package/dist/serve/worker/client/snapshots.js.map +1 -1
- package/dist/serve/worker/client/websocket-connection.d.ts +6 -0
- package/dist/serve/worker/client/websocket-connection.d.ts.map +1 -1
- package/dist/serve/worker/client/websocket-connection.js +32 -3
- package/dist/serve/worker/client/websocket-connection.js.map +1 -1
- package/dist/serve/worker/host/auth-credential-sign-in.d.ts +33 -0
- package/dist/serve/worker/host/auth-credential-sign-in.d.ts.map +1 -0
- package/dist/serve/worker/host/auth-credential-sign-in.js +70 -0
- package/dist/serve/worker/host/auth-credential-sign-in.js.map +1 -0
- package/dist/serve/worker/host/auth-reauthentication.js +3 -3
- package/dist/serve/worker/host/auth-reauthentication.js.map +1 -1
- package/dist/serve/worker/host/rules.d.ts +15 -1
- package/dist/serve/worker/host/rules.d.ts.map +1 -1
- package/dist/serve/worker/host/rules.js +43 -34
- package/dist/serve/worker/host/rules.js.map +1 -1
- package/dist/serve/worker/host/staged-sign-in-results.d.ts +24 -0
- package/dist/serve/worker/host/staged-sign-in-results.d.ts.map +1 -0
- package/dist/serve/worker/host/staged-sign-in-results.js +40 -0
- package/dist/serve/worker/host/staged-sign-in-results.js.map +1 -0
- package/dist/serve/worker/host/storage.d.ts.map +1 -1
- package/dist/serve/worker/host/storage.js +20 -12
- package/dist/serve/worker/host/storage.js.map +1 -1
- package/dist/serve/worker/host/subscriptions.d.ts.map +1 -1
- package/dist/serve/worker/host/subscriptions.js +6 -2
- package/dist/serve/worker/host/subscriptions.js.map +1 -1
- package/dist/serve/worker/host-auth.d.ts +3 -0
- package/dist/serve/worker/host-auth.d.ts.map +1 -1
- package/dist/serve/worker/host-auth.js +32 -13
- package/dist/serve/worker/host-auth.js.map +1 -1
- package/dist/serve/worker/inbound-validation/operation-arguments.d.ts.map +1 -1
- package/dist/serve/worker/inbound-validation/operation-arguments.js +27 -14
- package/dist/serve/worker/inbound-validation/operation-arguments.js.map +1 -1
- package/dist/serve/worker/operation-persistence.d.ts +1 -0
- package/dist/serve/worker/operation-persistence.d.ts.map +1 -1
- package/dist/serve/worker/operation-persistence.js +1 -0
- package/dist/serve/worker/operation-persistence.js.map +1 -1
- package/dist/serve/worker/protocol.d.ts +9 -1
- package/dist/serve/worker/protocol.d.ts.map +1 -1
- package/dist/serve/worker/protocol.js.map +1 -1
- package/dist/serve/worker/rtdb-value-equality.d.ts.map +1 -1
- package/dist/serve/worker/rtdb-value-equality.js +3 -1
- package/dist/serve/worker/rtdb-value-equality.js.map +1 -1
- package/dist/serve/worker/serve-init.d.ts.map +1 -1
- package/dist/serve/worker/serve-init.js +3 -9
- package/dist/serve/worker/serve-init.js.map +1 -1
- package/dist/serve/worker-build-lock.d.ts +23 -0
- package/dist/serve/worker-build-lock.d.ts.map +1 -0
- package/dist/serve/worker-build-lock.js +179 -0
- package/dist/serve/worker-build-lock.js.map +1 -0
- package/dist/serve/worker-bundle-cache.d.ts +17 -0
- package/dist/serve/worker-bundle-cache.d.ts.map +1 -0
- package/dist/serve/worker-bundle-cache.js +89 -0
- package/dist/serve/worker-bundle-cache.js.map +1 -0
- package/dist/verify/cases.js +7 -3
- package/dist/verify/cases.js.map +1 -1
- package/dist/verify/index.d.ts.map +1 -1
- package/dist/verify/index.js +11 -5
- package/dist/verify/index.js.map +1 -1
- package/package.json +10 -4
- package/src/assurance/.generated/conformance-verdicts.ts +107 -40
- package/src/assurance/capabilities.ts +11 -15
- package/src/bounded-request.ts +66 -7
- package/src/bridge/client/bridge-url.ts +5 -1
- package/src/bridge/client/bridge.ts +19 -3
- package/src/bridge/frame-output.ts +45 -0
- package/src/bridge/protocol.ts +13 -0
- package/src/bridge/server/in-process.ts +57 -17
- package/src/bridge/server/peer.ts +11 -0
- package/src/bridge/server/standalone.ts +29 -107
- package/src/bridge/surface/arguments/sandbox.ts +2 -69
- package/src/bridge/surface/arguments/seed.ts +78 -0
- package/src/bridge/surface/context.ts +26 -37
- package/src/bridge/surface/database-instance-catalog.ts +4 -32
- package/src/bridge/surface/database-instance-project.ts +40 -0
- package/src/bridge/surface/database-instance.ts +4 -4
- package/src/bridge/surface/functions-runtime.ts +5 -5
- package/src/bridge/surface/held-identity.ts +4 -4
- package/src/bridge/surface/manifest.sandbox.generated.ts +137 -0
- package/src/bridge/surface/method-types.ts +61 -7
- package/src/bridge/surface/methods/ai_logic/clearScripts.ts +2 -1
- package/src/bridge/surface/methods/ai_logic/script.ts +2 -1
- package/src/bridge/surface/methods/ai_logic/scripts.ts +2 -1
- package/src/bridge/surface/methods/ai_logic/status.ts +1 -0
- package/src/bridge/surface/methods/assurance/attach.ts +1 -0
- package/src/bridge/surface/methods/assurance/canIUse.ts +1 -0
- package/src/bridge/surface/methods/assurance/define.ts +1 -0
- package/src/bridge/surface/methods/assurance/export.ts +1 -0
- package/src/bridge/surface/methods/assurance/inspect.ts +1 -0
- package/src/bridge/surface/methods/assurance/map.ts +1 -0
- package/src/bridge/surface/methods/assurance/minimize.ts +1 -0
- package/src/bridge/surface/methods/assurance/propose.ts +1 -0
- package/src/bridge/surface/methods/assurance/replaySession.ts +1 -0
- package/src/bridge/surface/methods/assurance/run.ts +1 -0
- package/src/bridge/surface/methods/assurance/start.ts +1 -0
- package/src/bridge/surface/methods/assurance/testRulesHosted.ts +1 -0
- package/src/bridge/surface/methods/assurance/verify.ts +1 -0
- package/src/bridge/surface/methods/assurance/verifyCases.ts +1 -0
- package/src/bridge/surface/methods/auth/actAsAdmin.ts +1 -0
- package/src/bridge/surface/methods/auth/actAsAnonymous.ts +1 -0
- package/src/bridge/surface/methods/auth/createCustomToken.ts +1 -0
- package/src/bridge/surface/methods/auth/createUser.ts +2 -1
- package/src/bridge/surface/methods/auth/deleteUser.ts +2 -1
- package/src/bridge/surface/methods/auth/getUser.ts +2 -1
- package/src/bridge/surface/methods/auth/getUserByEmail.ts +2 -1
- package/src/bridge/surface/methods/auth/impersonate.ts +1 -0
- package/src/bridge/surface/methods/auth/importUsers.ts +3 -2
- package/src/bridge/surface/methods/auth/listUsers.ts +2 -1
- package/src/bridge/surface/methods/auth/sessions.ts +1 -0
- package/src/bridge/surface/methods/auth/setCustomUserClaims.ts +2 -1
- package/src/bridge/surface/methods/auth/signInAnonymously.ts +1 -0
- package/src/bridge/surface/methods/auth/signInWithCredential.ts +1 -0
- package/src/bridge/surface/methods/auth/signInWithCustomToken.ts +1 -0
- package/src/bridge/surface/methods/auth/signInWithEmailAndPassword.ts +1 -0
- package/src/bridge/surface/methods/auth/signOut.ts +1 -0
- package/src/bridge/surface/methods/auth/takeAuthMail.ts +1 -0
- package/src/bridge/surface/methods/auth/updateUser.ts +2 -1
- package/src/bridge/surface/methods/auth/useAppSession.ts +1 -0
- package/src/bridge/surface/methods/auth/whoami.ts +1 -0
- package/src/bridge/surface/methods/database/crawl.ts +1 -0
- package/src/bridge/surface/methods/database/get.ts +1 -0
- package/src/bridge/surface/methods/database/push.ts +1 -0
- package/src/bridge/surface/methods/database/query.ts +1 -0
- package/src/bridge/surface/methods/database/remove.ts +1 -0
- package/src/bridge/surface/methods/database/set.ts +1 -0
- package/src/bridge/surface/methods/database/update.ts +1 -0
- package/src/bridge/surface/methods/firestore/addDoc.ts +2 -1
- package/src/bridge/surface/methods/firestore/deleteDoc.ts +2 -1
- package/src/bridge/surface/methods/firestore/discoverPaths.ts +1 -0
- package/src/bridge/surface/methods/firestore/extractIndexes.ts +1 -0
- package/src/bridge/surface/methods/firestore/findCollectionGroup.ts +1 -0
- package/src/bridge/surface/methods/firestore/getAggregateFromServer.ts +1 -0
- package/src/bridge/surface/methods/firestore/getCountFromServer.ts +1 -0
- package/src/bridge/surface/methods/firestore/getDoc.ts +2 -1
- package/src/bridge/surface/methods/firestore/getDocs.ts +2 -1
- package/src/bridge/surface/methods/firestore/setDoc.ts +2 -1
- package/src/bridge/surface/methods/firestore/updateDoc.ts +2 -1
- package/src/bridge/surface/methods/firestore/writeBatch.ts +2 -1
- package/src/bridge/surface/methods/firestore/writeIndexes.ts +1 -0
- package/src/bridge/surface/methods/functions/executions.ts +2 -1
- package/src/bridge/surface/methods/functions/fire.ts +7 -6
- package/src/bridge/surface/methods/functions/listTriggers.ts +1 -0
- package/src/bridge/surface/methods/messaging/deliveries.ts +1 -0
- package/src/bridge/surface/methods/messaging/send.ts +2 -1
- package/src/bridge/surface/methods/messaging/subscribeToTopic.ts +1 -0
- package/src/bridge/surface/methods/messaging/tokens.ts +1 -0
- package/src/bridge/surface/methods/messaging/unsubscribeFromTopic.ts +1 -0
- package/src/bridge/surface/methods/registry.ts +2 -12
- package/src/bridge/surface/methods/rules/explainDenial.ts +1 -0
- package/src/bridge/surface/methods/rules/getStdlib.ts +1 -0
- package/src/bridge/surface/methods/rules/lint.ts +1 -0
- package/src/bridge/surface/methods/rules/listStdlib.ts +1 -0
- package/src/bridge/surface/methods/rules/set.ts +1 -0
- package/src/bridge/surface/methods/rules/simulate.ts +1 -0
- package/src/bridge/surface/methods/sandbox/activity.ts +2 -1
- package/src/bridge/surface/methods/sandbox/advanceClock.ts +1 -0
- package/src/bridge/surface/methods/sandbox/apply.ts +1 -0
- package/src/bridge/surface/methods/sandbox/checkpoint.ts +1 -0
- package/src/bridge/surface/methods/sandbox/deleteCapture.ts +1 -1
- package/src/bridge/surface/methods/sandbox/deleteCheckpoint.ts +1 -0
- package/src/bridge/surface/methods/sandbox/diff.ts +1 -0
- package/src/bridge/surface/methods/sandbox/discard.ts +1 -0
- package/src/bridge/surface/methods/sandbox/events.ts +2 -1
- package/src/bridge/surface/methods/sandbox/exportFixture.ts +1 -0
- package/src/bridge/surface/methods/sandbox/fork.ts +1 -0
- package/src/bridge/surface/methods/sandbox/inspect.ts +2 -1
- package/src/bridge/surface/methods/sandbox/listBranches.ts +1 -0
- package/src/bridge/surface/methods/sandbox/listCaptures.ts +1 -1
- package/src/bridge/surface/methods/sandbox/listCheckpoints.ts +1 -0
- package/src/bridge/surface/methods/sandbox/listeners.ts +1 -0
- package/src/bridge/surface/methods/sandbox/openCapture.ts +1 -1
- package/src/bridge/surface/methods/sandbox/promote.ts +1 -0
- package/src/bridge/surface/methods/sandbox/renameCapture.ts +1 -1
- package/src/bridge/surface/methods/sandbox/reset.ts +3 -2
- package/src/bridge/surface/methods/sandbox/resetClock.ts +1 -0
- package/src/bridge/surface/methods/sandbox/restore.ts +1 -0
- package/src/bridge/surface/methods/sandbox/saveCapture.ts +1 -1
- package/src/bridge/surface/methods/sandbox/seed.ts +3 -2
- package/src/bridge/surface/methods/sandbox/seedFromFixture.ts +1 -0
- package/src/bridge/surface/methods/sandbox/setClock.ts +1 -0
- package/src/bridge/surface/methods/sandbox-registry.ts +24 -0
- package/src/bridge/surface/methods/storage/deleteObject.ts +1 -0
- package/src/bridge/surface/methods/storage/getBytes.ts +1 -0
- package/src/bridge/surface/methods/storage/getDownloadURL.ts +1 -0
- package/src/bridge/surface/methods/storage/getMetadata.ts +1 -0
- package/src/bridge/surface/methods/storage/listAll.ts +1 -0
- package/src/bridge/surface/methods/storage/provision.ts +1 -0
- package/src/bridge/surface/methods/storage/setCrossServiceIam.ts +1 -0
- package/src/bridge/surface/methods/storage/status.ts +1 -0
- package/src/bridge/surface/methods/storage/updateMetadata.ts +1 -0
- package/src/bridge/surface/methods/storage/uploadBytes.ts +1 -0
- package/src/bridge/surface/request-instant.ts +2 -2
- package/src/bridge/surface/rules-engines/database.ts +1 -2
- package/src/bridge/surface/rules-engines/storage-request-resource.ts +275 -0
- package/src/bridge/surface/rules-engines/storage.ts +54 -81
- package/src/bridge/surface/sandbox-context.ts +49 -0
- package/src/bridge/surface/service-handles.ts +13 -9
- package/src/bridge/surface/sign-in.ts +3 -3
- package/src/bridge/surface/storage-rules.ts +2 -14
- package/src/bridge/surface/stored-identity.ts +3 -3
- package/src/bridge/surface/types.ts +30 -8
- package/src/cli/firebase-json.ts +45 -7
- package/src/cli/firestore-indexes.ts +2 -1
- package/src/cli/index.ts +46 -11
- package/src/cli/public-dir-hint.ts +35 -0
- package/src/cli/run.ts +35 -7
- package/src/cli/sandbox-runner.ts +10 -2
- package/src/cli/serve-diagnostics.ts +12 -1
- package/src/cli/serve.ts +27 -26
- package/src/cli/service-commands.test.ts +7 -0
- package/src/cli/snapshot.ts +15 -6
- package/src/cli/surface-method-runner.ts +1 -1
- package/src/cli/verify.ts +11 -1
- package/src/conformance/.generated/can-i-use-browser.ts +22 -3
- package/src/conformance/.generated/can-i-use.ts +1 -1
- package/src/conformance/.generated/conformance-docs.ts +1 -1
- package/src/conformance/.generated/served-availability.ts +1 -1
- package/src/discover/merge.ts +12 -3
- package/src/functions/child-protocol.ts +59 -0
- package/src/functions/child.ts +107 -0
- package/src/{functions-rtdb → functions}/development-runtime.ts +13 -14
- package/src/functions/endpoints.ts +80 -0
- package/src/{functions-rtdb → functions}/project.ts +2 -2
- package/src/functions/rtdb/child-runtime.ts +139 -0
- package/src/{functions-rtdb → functions/rtdb}/discovery.ts +9 -43
- package/src/{functions-rtdb → functions/rtdb}/remote-delivery.ts +1 -1
- package/src/functions/spawn.ts +212 -0
- package/src/functions/unsupported.ts +42 -0
- package/src/google-endpoints.ts +74 -3
- package/src/next/bridge-import-loader.ts +56 -0
- package/src/next/bridge-imports.ts +108 -0
- package/src/next/client-aliases.ts +14 -27
- package/src/next/guard.ts +33 -11
- package/src/next/turbopack-config.ts +26 -0
- package/src/next/webpack-config.ts +26 -0
- package/src/next/with-pyric.ts +26 -0
- package/src/register/activation.ts +26 -0
- package/src/register/app-bridge-admin-app-check.ts +3 -1
- package/src/register/child-process-guard.ts +189 -0
- package/src/register/client/bootstrap.ts +7 -1
- package/src/register/connect-prototypes.ts +12 -0
- package/src/register/hooks.ts +56 -3
- package/src/register/index.ts +92 -20
- package/src/register/mapping.ts +57 -3
- package/src/register/net-guard.ts +149 -39
- package/src/register/package-identity.ts +98 -0
- package/src/register/swap-or-stop.ts +194 -0
- package/src/register/worker-guard.ts +90 -0
- package/src/remote/resolve-host.ts +14 -2
- package/src/serve/ai-proxy.ts +36 -8
- package/src/serve/app-ports.ts +119 -0
- package/src/serve/bridge-mount.ts +36 -8
- package/src/serve/bundler.ts +87 -29
- package/src/serve/discovery.ts +244 -67
- package/src/serve/entries/auth.ts +22 -1
- package/src/serve/entries/firestore-surface.ts +1 -0
- package/src/serve/entries/init-payload.ts +28 -5
- package/src/serve/entries/moved-host.ts +28 -0
- package/src/serve/entries/runtime-origin.ts +6 -0
- package/src/serve/entries/unsupported/firestore.ts +0 -1
- package/src/serve/entries/worker-runtime.ts +19 -6
- package/src/serve/firebase-module-swap.ts +98 -15
- package/src/serve/gemini-proxy.ts +2 -2
- package/src/serve/hosted/runtime.ts +10 -2
- package/src/serve/namespace.ts +41 -29
- package/src/serve/repro/compare.ts +9 -1
- package/src/serve/rules-fixture-check.ts +34 -9
- package/src/serve/rules.ts +104 -20
- package/src/serve/sandbox-session.ts +11 -3
- package/src/serve/server.ts +29 -2
- package/src/serve/vite-ai-config.ts +19 -1
- package/src/serve/vite-functions-development.ts +3 -3
- package/src/serve/vite-generation-bridge.ts +2 -2
- package/src/serve/vite-generation-functions.ts +5 -5
- package/src/serve/vite-generation-middleware.ts +38 -2
- package/src/serve/vite-module-swap.ts +8 -0
- package/src/serve/vite-page-runtime.ts +6 -0
- package/src/serve/vite-rules-source.ts +2 -5
- package/src/serve/vite-sandbox-generation.ts +5 -5
- package/src/serve/worker/__tests__/auth-credential-sign-in.test.ts +343 -0
- package/src/serve/worker/__tests__/auth-m2-parity.test.ts +45 -1
- package/src/serve/worker/__tests__/staged-sign-in-results.test.ts +139 -0
- package/src/serve/worker/client/auth.ts +97 -21
- package/src/serve/worker/client/clock.ts +10 -12
- package/src/serve/worker/client/firestore-reads.ts +70 -21
- package/src/serve/worker/client/firestore-refs.ts +4 -14
- package/src/serve/worker/client/rtdb-connection-lifecycle.ts +5 -0
- package/src/serve/worker/client/rtdb-snapshots.ts +24 -2
- package/src/serve/worker/client/rtdb-value-validation.ts +198 -0
- package/src/serve/worker/client/rtdb-writes.ts +7 -0
- package/src/serve/worker/client/snapshots.ts +15 -6
- package/src/serve/worker/client/websocket-connection.ts +39 -3
- package/src/serve/worker/host/auth-credential-sign-in.ts +97 -0
- package/src/serve/worker/host/auth-reauthentication.ts +3 -3
- package/src/serve/worker/host/rules.ts +53 -34
- package/src/serve/worker/host/staged-sign-in-results.ts +53 -0
- package/src/serve/worker/host/storage.ts +26 -11
- package/src/serve/worker/host/subscriptions.ts +7 -4
- package/src/serve/worker/host-auth.ts +33 -15
- package/src/serve/worker/inbound-validation/operation-arguments.ts +27 -14
- package/src/serve/worker/operation-persistence.ts +1 -0
- package/src/serve/worker/protocol.ts +7 -1
- package/src/serve/worker/rtdb-value-equality.ts +3 -1
- package/src/serve/worker/serve-init.ts +3 -9
- package/src/serve/worker-build-lock.ts +207 -0
- package/src/serve/worker-bundle-cache.ts +90 -0
- package/src/verify/cases.ts +6 -3
- package/src/verify/index.ts +16 -4
- package/dist/functions-rtdb/child.d.ts.map +0 -1
- package/dist/functions-rtdb/child.js +0 -386
- package/dist/functions-rtdb/child.js.map +0 -1
- package/dist/functions-rtdb/delivery.d.ts.map +0 -1
- package/dist/functions-rtdb/delivery.js.map +0 -1
- package/dist/functions-rtdb/development-runtime.d.ts.map +0 -1
- package/dist/functions-rtdb/development-runtime.js.map +0 -1
- package/dist/functions-rtdb/discovery.d.ts.map +0 -1
- package/dist/functions-rtdb/discovery.js.map +0 -1
- package/dist/functions-rtdb/event.d.ts.map +0 -1
- package/dist/functions-rtdb/event.js.map +0 -1
- package/dist/functions-rtdb/events.d.ts.map +0 -1
- package/dist/functions-rtdb/events.js.map +0 -1
- package/dist/functions-rtdb/execution-log.d.ts.map +0 -1
- package/dist/functions-rtdb/execution-log.js.map +0 -1
- package/dist/functions-rtdb/execution.d.ts.map +0 -1
- package/dist/functions-rtdb/execution.js.map +0 -1
- package/dist/functions-rtdb/in-memory-delivery.d.ts.map +0 -1
- package/dist/functions-rtdb/in-memory-delivery.js.map +0 -1
- package/dist/functions-rtdb/module-loader.d.ts.map +0 -1
- package/dist/functions-rtdb/module-loader.js.map +0 -1
- package/dist/functions-rtdb/project.d.ts +0 -7
- package/dist/functions-rtdb/project.d.ts.map +0 -1
- package/dist/functions-rtdb/project.js.map +0 -1
- package/dist/functions-rtdb/projection.d.ts.map +0 -1
- package/dist/functions-rtdb/projection.js.map +0 -1
- package/dist/functions-rtdb/reference-pattern.d.ts.map +0 -1
- package/dist/functions-rtdb/reference-pattern.js.map +0 -1
- package/dist/functions-rtdb/remote-delivery.d.ts.map +0 -1
- package/dist/functions-rtdb/remote-delivery.js.map +0 -1
- package/dist/serve/gemini-error-redaction.d.ts +0 -6
- package/dist/serve/gemini-error-redaction.d.ts.map +0 -1
- package/dist/serve/gemini-error-redaction.js +0 -61
- package/dist/serve/gemini-error-redaction.js.map +0 -1
- package/dist/serve/site-ui/_astro/app.C--T2qDK.js +0 -151
- package/dist/serve/site-ui/_astro/app.DqyhRyrU.js +0 -1
- package/dist/serve/site-ui/_astro/sandbox-controls.Bv6lfpIe.js +0 -1725
- package/dist/serve/site-ui/_astro/writes.Bg0YEEA7.js +0 -1
- package/src/functions-rtdb/child.ts +0 -512
- package/src/serve/gemini-error-redaction.ts +0 -60
- /package/dist/{functions-rtdb → functions}/events.d.ts +0 -0
- /package/dist/{functions-rtdb → functions}/events.js +0 -0
- /package/dist/{functions-rtdb → functions}/execution-log.d.ts +0 -0
- /package/dist/{functions-rtdb → functions}/execution-log.js +0 -0
- /package/dist/{functions-rtdb → functions}/module-loader.d.ts +0 -0
- /package/dist/{functions-rtdb → functions}/module-loader.js +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/delivery.d.ts +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/delivery.js +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/event.d.ts +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/event.js +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/execution.d.ts +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/execution.js +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/in-memory-delivery.d.ts +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/in-memory-delivery.js +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/projection.d.ts +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/projection.js +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/reference-pattern.d.ts +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/reference-pattern.js +0 -0
- /package/dist/{functions-rtdb → functions/rtdb}/remote-delivery.js +0 -0
- /package/src/{functions-rtdb → functions}/events.ts +0 -0
- /package/src/{functions-rtdb → functions}/execution-log.ts +0 -0
- /package/src/{functions-rtdb → functions}/module-loader.ts +0 -0
- /package/src/{functions-rtdb → functions/rtdb}/delivery.ts +0 -0
- /package/src/{functions-rtdb → functions/rtdb}/event.ts +0 -0
- /package/src/{functions-rtdb → functions/rtdb}/execution.ts +0 -0
- /package/src/{functions-rtdb → functions/rtdb}/in-memory-delivery.ts +0 -0
- /package/src/{functions-rtdb → functions/rtdb}/projection.ts +0 -0
- /package/src/{functions-rtdb → functions/rtdb}/reference-pattern.ts +0 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swap or stop (ADR 0022): under the register, `firebase` and `firebase-admin`
|
|
3
|
+
* imports resolve to the sandbox. When a resolve lands in the real SDK anyway,
|
|
4
|
+
* through an absolute path, an npm alias, a link under another name, or a
|
|
5
|
+
* direct `@firebase/*` import, the import stops before the file loads. The
|
|
6
|
+
* real SDK never runs, so it never reaches production with this machine's
|
|
7
|
+
* credentials.
|
|
8
|
+
*
|
|
9
|
+
* The package is named by the resolved file's own `package.json`
|
|
10
|
+
* (`package-identity.ts`), never by its folder. Only files under a
|
|
11
|
+
* `node_modules` directory are checked: every installed SDK lives under one,
|
|
12
|
+
* including the pnpm and bun stores, and the check stays off the resolve path
|
|
13
|
+
* for everything else.
|
|
14
|
+
*
|
|
15
|
+
* The real SDK is allowed only where the swap table chooses it
|
|
16
|
+
* (`choosesRealFirebase` in `mapping.ts`), or when an SDK file this hook
|
|
17
|
+
* already allowed imports what its entry needs: a firebase-admin file
|
|
18
|
+
* reaches only the verifier bridge pair's files, and a client SDK file only
|
|
19
|
+
* the `@firebase/*` packages the production AI entries import. The importer's
|
|
20
|
+
* URL alone is no proof, since `createRequire` can name any file, so each
|
|
21
|
+
* hook keeps the URLs it allowed. In sandbox AI mode that set stays empty.
|
|
22
|
+
* `firebase-admin` is never chosen, with one exception: the App Check verifier
|
|
23
|
+
* bridge that production AI mode loads on pyric's behalf (#1552), whose
|
|
24
|
+
* firebase-admin app holds no credentials. An app's own import of the real
|
|
25
|
+
* package still stops. `PYRIC_GUARD` does not change any of this: the stop
|
|
26
|
+
* belongs to the swap, not to the network guard.
|
|
27
|
+
*
|
|
28
|
+
* Loaded by both resolve hooks, including the loader-thread one, so it imports
|
|
29
|
+
* node built-ins and side-effect-free modules only.
|
|
30
|
+
*/
|
|
31
|
+
import { fileURLToPath } from 'node:url';
|
|
32
|
+
import { packageNameOf, pathInPackageOf } from './package-identity.js';
|
|
33
|
+
import { choosesRealFirebase } from './mapping.js';
|
|
34
|
+
import {
|
|
35
|
+
SDK_MODULES,
|
|
36
|
+
isAdminBridgeFile,
|
|
37
|
+
isBypassedBridgeImport,
|
|
38
|
+
isProductionAiSdkPackage,
|
|
39
|
+
resolveAiMode,
|
|
40
|
+
type AiMode,
|
|
41
|
+
} from '../serve/firebase-module-swap.js';
|
|
42
|
+
|
|
43
|
+
/** The code on the error a stopped import throws. */
|
|
44
|
+
export const REAL_SDK_STOPPED_CODE = 'PYRIC_REAL_SDK_STOPPED';
|
|
45
|
+
|
|
46
|
+
const LOG_PREFIX = '@pyric/cli/register';
|
|
47
|
+
const REPORT_URL = 'https://github.com/davideast/pyric/issues/new';
|
|
48
|
+
|
|
49
|
+
/** One resolve the register finished: what was asked, by whom, and where it landed. */
|
|
50
|
+
export interface ResolvedLoad {
|
|
51
|
+
readonly specifier: string;
|
|
52
|
+
/** The canonical name of a Turbopack-renamed specifier, when it is one. */
|
|
53
|
+
readonly canonical?: string | null;
|
|
54
|
+
readonly importer: string | undefined;
|
|
55
|
+
readonly url: string;
|
|
56
|
+
/** Defaults to the mode `PYRIC_AI_MODE` and `PYRIC_AI_PASSTHROUGH` select. */
|
|
57
|
+
readonly aiMode?: AiMode;
|
|
58
|
+
/** Defaults to the manifest lookup in `package-identity.ts`. */
|
|
59
|
+
readonly nameOf?: (url: string) => string | null;
|
|
60
|
+
/** Defaults to `pathInPackageOf` in `package-identity.ts`. */
|
|
61
|
+
readonly pathInPackage?: (url: string, packageName: string) => string | null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
type SdkFamily = 'admin' | 'client';
|
|
65
|
+
|
|
66
|
+
/** `firebase-admin` is the admin SDK; `firebase` and every `@firebase/*` package are the client SDK. */
|
|
67
|
+
function sdkFamilyOf(name: string | null): SdkFamily | null {
|
|
68
|
+
if (name === 'firebase-admin') return 'admin';
|
|
69
|
+
const isClientPackage = name === 'firebase' || (name?.startsWith('@firebase/') ?? false);
|
|
70
|
+
return isClientPackage ? 'client' : null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function isInstalledFile(url: string): boolean {
|
|
74
|
+
return url.startsWith('file:') && url.includes('/node_modules/');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Whether this load is an SDK file the hook already allowed, importing what
|
|
79
|
+
* that SDK entry needs: a firebase-admin file reaches only the files of the
|
|
80
|
+
* verifier bridge's `firebase-admin/app` and `firebase-admin/app-check`, and a
|
|
81
|
+
* client SDK file only the `@firebase/*` packages that `firebase/ai`,
|
|
82
|
+
* `firebase/app` and `firebase/app-check` import. So a `createRequire` forge
|
|
83
|
+
* from an allowed file gets no further than the entry it came from.
|
|
84
|
+
*/
|
|
85
|
+
function isFromAllowedSdkFile(load: ResolvedLoad, packageName: string, allowedUrls: ReadonlySet<string>): boolean {
|
|
86
|
+
const importer = load.importer;
|
|
87
|
+
const isAllowedImporter = importer !== undefined && allowedUrls.has(importer);
|
|
88
|
+
if (!isAllowedImporter) return false;
|
|
89
|
+
const importerFamily = sdkFamilyOf((load.nameOf ?? packageNameOf)(importer));
|
|
90
|
+
if (importerFamily === 'client') return isProductionAiSdkPackage(packageName);
|
|
91
|
+
const isAdminTarget = importerFamily === 'admin' && packageName === 'firebase-admin';
|
|
92
|
+
if (!isAdminTarget) return false;
|
|
93
|
+
const pathOf = load.pathInPackage ?? pathInPackageOf;
|
|
94
|
+
return isAdminBridgeFile(pathOf(load.url, packageName));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Whether this load may reach the real SDK. */
|
|
98
|
+
function isAllowedRealLoad(load: ResolvedLoad, packageName: string, family: SdkFamily, allowedUrls: ReadonlySet<string>): boolean {
|
|
99
|
+
if (isFromAllowedSdkFile(load, packageName, allowedUrls)) return true;
|
|
100
|
+
const specifier = load.canonical ?? load.specifier;
|
|
101
|
+
const aiMode = load.aiMode ?? resolveAiMode(undefined, process.env);
|
|
102
|
+
if (family === 'admin') return isBypassedBridgeImport(specifier, load.importer, aiMode);
|
|
103
|
+
const pathOf = load.pathInPackage ?? pathInPackageOf;
|
|
104
|
+
return choosesRealFirebase({
|
|
105
|
+
specifier,
|
|
106
|
+
importer: load.importer,
|
|
107
|
+
packageName,
|
|
108
|
+
pathInPackage: () => pathOf(load.url, packageName),
|
|
109
|
+
aiMode,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** The served `firebase/*` import that stands for a `@firebase/*` package, when pyric serves one. */
|
|
114
|
+
function servedImportFor(packageName: string): string | null {
|
|
115
|
+
const candidate = `firebase/${packageName.slice('@firebase/'.length)}`;
|
|
116
|
+
const isServed = (SDK_MODULES as readonly string[]).includes(candidate);
|
|
117
|
+
return isServed ? candidate : null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** The import an app writes in place of the one that stopped. */
|
|
121
|
+
function fixFor(family: SdkFamily, packageName: string): string {
|
|
122
|
+
if (family === 'admin') {
|
|
123
|
+
return "import firebase-admin by its package name (for example 'firebase-admin/app'), so the register routes it to the sandbox";
|
|
124
|
+
}
|
|
125
|
+
if (packageName === 'firebase') {
|
|
126
|
+
return "import firebase by its package name (for example 'firebase/firestore'), so the register routes it to the sandbox";
|
|
127
|
+
}
|
|
128
|
+
const served = servedImportFor(packageName);
|
|
129
|
+
if (served === null) {
|
|
130
|
+
return `pyric serves no firebase/* import for '${packageName}', so import a served one (for example 'firebase/firestore'), or move this code out of the sandboxed process`;
|
|
131
|
+
}
|
|
132
|
+
return `import '${served}' instead of '${packageName}', so the register routes it to the sandbox`;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function stopMessage(load: ResolvedLoad, family: SdkFamily, packageName: string): string {
|
|
136
|
+
const consequence = family === 'admin'
|
|
137
|
+
? "so it would have run with this machine's Google credentials"
|
|
138
|
+
: "so it would have reached production with the app's API key";
|
|
139
|
+
return [
|
|
140
|
+
`${LOG_PREFIX}: stopped loading the real ${packageName}`,
|
|
141
|
+
` import '${load.specifier}'`,
|
|
142
|
+
` from ${load.importer ?? 'the entry point'}`,
|
|
143
|
+
` found ${load.url}`,
|
|
144
|
+
`Under pyric, ${packageName} resolves to the sandbox. This import didn't, ${consequence}.`,
|
|
145
|
+
`Fix: ${fixFor(family, packageName)}. To run the real SDK, start this process without @pyric/cli/register.`,
|
|
146
|
+
`If pyric should have routed this import, report it: ${REPORT_URL}`,
|
|
147
|
+
`code: ${REAL_SDK_STOPPED_CODE}`,
|
|
148
|
+
].join('\n');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Whether this load is Node 22 resolving again a CommonJS file this hook
|
|
153
|
+
* already allowed. Node 22 resolves a CommonJS file imported from ESM a second
|
|
154
|
+
* time, by its own path and with no importer; Node 24 does not. That second
|
|
155
|
+
* pass loads nothing new, so it goes ahead. An app's import of the same file
|
|
156
|
+
* names its importer, so it still stops.
|
|
157
|
+
*/
|
|
158
|
+
function isCjsReloadOfAllowedFile(load: ResolvedLoad, allowedUrls: ReadonlySet<string>): boolean {
|
|
159
|
+
const hasNoImporter = load.importer === undefined;
|
|
160
|
+
const wasAllowed = allowedUrls.has(load.url);
|
|
161
|
+
if (!hasNoImporter || !wasAllowed) return false;
|
|
162
|
+
return load.specifier === fileURLToPath(load.url);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* The error that stops this load, or `null` when the load may go ahead: it is
|
|
167
|
+
* not the real SDK, or the swap table chose the real SDK here. `allowedUrls`
|
|
168
|
+
* is the calling hook's record of the real SDK files it allowed; an allowed
|
|
169
|
+
* load joins it.
|
|
170
|
+
*/
|
|
171
|
+
export function stopFor(load: ResolvedLoad, allowedUrls: Set<string>): Error | null {
|
|
172
|
+
if (!isInstalledFile(load.url)) return null;
|
|
173
|
+
const packageName = (load.nameOf ?? packageNameOf)(load.url);
|
|
174
|
+
const family = sdkFamilyOf(packageName);
|
|
175
|
+
if (family === null || packageName === null) return null;
|
|
176
|
+
if (isCjsReloadOfAllowedFile(load, allowedUrls)) return null;
|
|
177
|
+
if (isAllowedRealLoad(load, packageName, family, allowedUrls)) {
|
|
178
|
+
allowedUrls.add(load.url);
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
const error = new Error(stopMessage(load, family, packageName));
|
|
182
|
+
return Object.assign(error, { code: REAL_SDK_STOPPED_CODE, url: load.url, specifier: load.specifier });
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** Writes each stop to stderr once per file, so a caught import still shows in the log. */
|
|
186
|
+
export function createStopReporter(write: (line: string) => void): (error: Error) => void {
|
|
187
|
+
const reported = new Set<string>();
|
|
188
|
+
return (error) => {
|
|
189
|
+
const url = (error as { url?: string }).url ?? error.message;
|
|
190
|
+
if (reported.has(url)) return;
|
|
191
|
+
reported.add(url);
|
|
192
|
+
write(`${error.message}\n`);
|
|
193
|
+
};
|
|
194
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The register in worker threads.
|
|
3
|
+
*
|
|
4
|
+
* Built-in modules and resolve hooks are per thread, so the swap, the stop
|
|
5
|
+
* and the network guard have to be installed inside each worker as well. The
|
|
6
|
+
* register installs this wrapper whatever `PYRIC_GUARD` says. Node runs `--import` preloads (from the command
|
|
7
|
+
* line or `NODE_OPTIONS`) in a worker built from a file, a `data:` URL or ESM
|
|
8
|
+
* source, and the register then activates there as it does on the main
|
|
9
|
+
* thread. Two kinds of worker skip it:
|
|
10
|
+
*
|
|
11
|
+
* - a worker built from CommonJS source with `eval: true`, which never runs
|
|
12
|
+
* preloads;
|
|
13
|
+
* - a worker given its own `execArgv`, when the register came from the
|
|
14
|
+
* command line rather than `NODE_OPTIONS`.
|
|
15
|
+
*
|
|
16
|
+
* Wrapping `worker_threads.Worker` closes both. The worker still activates
|
|
17
|
+
* the register only under its own `PYRIC_SANDBOX`, exactly as the main thread
|
|
18
|
+
* does, so a worker the caller started outside the sandbox stays outside it.
|
|
19
|
+
*/
|
|
20
|
+
import Module, { createRequire } from 'node:module';
|
|
21
|
+
import { fileURLToPath } from 'node:url';
|
|
22
|
+
|
|
23
|
+
/** The `Worker` options this module reads. */
|
|
24
|
+
interface WorkerOptionsLike {
|
|
25
|
+
eval?: unknown;
|
|
26
|
+
execArgv?: unknown;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type WorkerConstructor = new (source: unknown, options?: unknown) => object;
|
|
30
|
+
|
|
31
|
+
/** Marks a `Worker` this module already wrapped. */
|
|
32
|
+
const GUARDED_WORKER = Symbol.for('pyric.guardedWorker');
|
|
33
|
+
|
|
34
|
+
/** A `'use strict'` directive, which must stay the first statement. */
|
|
35
|
+
const USE_STRICT = /^(\s*(['"])use strict\2;?[ \t]*\n?)/;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The arguments to build the worker with, so that it loads the register at
|
|
39
|
+
* `registerUrl`. Returns new values and never changes the caller's.
|
|
40
|
+
*/
|
|
41
|
+
export function guardWorkerArguments(
|
|
42
|
+
source: unknown,
|
|
43
|
+
options: WorkerOptionsLike | undefined,
|
|
44
|
+
registerUrl: string,
|
|
45
|
+
): [unknown, WorkerOptionsLike | undefined] {
|
|
46
|
+
let guardedSource = source;
|
|
47
|
+
let guardedOptions = options;
|
|
48
|
+
if (options?.eval === true && typeof source === 'string') {
|
|
49
|
+
guardedSource = withRegisterPrefix(source, registerUrl);
|
|
50
|
+
}
|
|
51
|
+
if (Array.isArray(options?.execArgv) && !options.execArgv.includes(registerUrl)) {
|
|
52
|
+
guardedOptions = { ...options, execArgv: [...options.execArgv, '--import', registerUrl] };
|
|
53
|
+
}
|
|
54
|
+
return [guardedSource, guardedOptions];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Eval source that first loads the register. `require` exists only when Node
|
|
59
|
+
* runs the source as CommonJS; ESM source already ran the preload, and the
|
|
60
|
+
* prefix does nothing there.
|
|
61
|
+
*/
|
|
62
|
+
function withRegisterPrefix(source: string, registerUrl: string): string {
|
|
63
|
+
const prefix = `typeof require === 'function' && require(${JSON.stringify(fileURLToPath(registerUrl))});\n`;
|
|
64
|
+
const directive = USE_STRICT.exec(source)?.[1];
|
|
65
|
+
if (directive === undefined) return `${prefix}${source}`;
|
|
66
|
+
const separator = directive.endsWith('\n') ? '' : '\n';
|
|
67
|
+
return `${directive}${separator}${prefix}${source.slice(directive.length)}`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Replace `workerThreads.Worker` with a subclass that builds every worker with
|
|
72
|
+
* {@link guardWorkerArguments}. A subclass keeps `instanceof Worker` true.
|
|
73
|
+
* `workerThreads` defaults to `node:worker_threads`; tests pass a stand-in.
|
|
74
|
+
*/
|
|
75
|
+
export function installWorkerGuard(registerUrl: string, workerThreads?: { Worker: unknown }): void {
|
|
76
|
+
const target = workerThreads ?? (createRequire(import.meta.url)('node:worker_threads') as { Worker: unknown });
|
|
77
|
+
const Original = target.Worker as (WorkerConstructor & { [GUARDED_WORKER]?: true }) | undefined;
|
|
78
|
+
if (typeof Original !== 'function' || Original[GUARDED_WORKER] === true) return;
|
|
79
|
+
class GuardedWorker extends Original {
|
|
80
|
+
static readonly [GUARDED_WORKER] = true;
|
|
81
|
+
constructor(source: unknown, options?: WorkerOptionsLike) {
|
|
82
|
+
super(...guardWorkerArguments(source, options, registerUrl));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
Object.defineProperty(GuardedWorker, 'name', { value: Original.name });
|
|
86
|
+
target.Worker = GuardedWorker;
|
|
87
|
+
// ESM `import { Worker } from 'node:worker_threads'` reads the export as
|
|
88
|
+
// synced, so publish the replacement there too.
|
|
89
|
+
if (workerThreads === undefined) Module.syncBuiltinESMExports();
|
|
90
|
+
}
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
* Shared by the Node remote client (`connectRemoteSandbox`, which
|
|
7
7
|
* `pyric-admin` uses) and the client SDK bootstrap that `@pyric/cli/register`
|
|
8
8
|
* installs (#1082), so both pick the same host for the same process.
|
|
9
|
+
*
|
|
10
|
+
* Discovery reads the project's `.pyric/serve.json` and probes the port it
|
|
11
|
+
* names, without the port scan `discoverServe` falls back to: a host found
|
|
12
|
+
* only by the scan is never attached to (`selectProjectHost`), and on a
|
|
13
|
+
* machine where closed ports never answer the scan takes seconds. A process
|
|
14
|
+
* resolves again at each reconnect, so a scan there would spend the window
|
|
15
|
+
* its held calls wait in (#1219).
|
|
9
16
|
*/
|
|
10
17
|
import {
|
|
11
18
|
discoverServe,
|
|
@@ -54,12 +61,17 @@ function warnOncePerUrl(url: string, message: string, warn?: (message: string) =
|
|
|
54
61
|
else process.stderr.write(`${message}\n`);
|
|
55
62
|
}
|
|
56
63
|
|
|
64
|
+
/** The project's host as its `.pyric/serve.json` names it; no port scan. */
|
|
65
|
+
export function discoverProjectPointer(cwd: string): Promise<Discovered | null> {
|
|
66
|
+
return discoverServe(cwd, () => {}, []);
|
|
67
|
+
}
|
|
68
|
+
|
|
57
69
|
async function resolveConfiguredHost(configuredUrl: string, options: ResolveRemoteHostOptions): Promise<ResolvedRemoteHost> {
|
|
58
70
|
const choice = await selectExplicitHost({
|
|
59
71
|
url: configuredUrl,
|
|
60
72
|
cwd: options.cwd,
|
|
61
73
|
launcherInstanceId: options.instanceId,
|
|
62
|
-
discover: options.discover,
|
|
74
|
+
discover: options.discover ?? discoverProjectPointer,
|
|
63
75
|
probe: options.probe,
|
|
64
76
|
});
|
|
65
77
|
if (choice.kind === 'stale') throw hostError('not-found', choice.message);
|
|
@@ -73,7 +85,7 @@ async function resolveConfiguredHost(configuredUrl: string, options: ResolveRemo
|
|
|
73
85
|
|
|
74
86
|
async function discoverProjectHost(options: ResolveRemoteHostOptions): Promise<ResolvedRemoteHost> {
|
|
75
87
|
const refused: string[] = [];
|
|
76
|
-
const found = selectProjectHost(await (options.discover ??
|
|
88
|
+
const found = selectProjectHost(await (options.discover ?? discoverProjectPointer)(options.cwd), (m) => refused.push(m));
|
|
77
89
|
const hasNoDiscovery = found === null;
|
|
78
90
|
if (hasNoDiscovery) {
|
|
79
91
|
throw hostError(
|
package/src/serve/ai-proxy.ts
CHANGED
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
12
12
|
import type { ServeLogger } from './server.js';
|
|
13
|
-
import { redactUrl } from 'pyric/ai/internal';
|
|
13
|
+
import { redactUpstreamText, redactUrl } from 'pyric/ai/internal';
|
|
14
14
|
import { sanitizeForTerminal } from './ai-terminal-text.js';
|
|
15
15
|
import type { AiEngineConfigWire } from './worker/protocol.js';
|
|
16
16
|
import { permitGuardHost } from '../register/net-guard.js';
|
|
17
17
|
import { FIREBASE_AI_LOGIC_HOST } from '../google-endpoints.js';
|
|
18
18
|
import type { AiMode } from './firebase-module-swap.js';
|
|
19
19
|
import { HOSTED_METHOD_BODY_LIMIT } from './hosted/method-protocol.js';
|
|
20
|
-
import { BODY_TOO_LARGE_CODE, collectRawBody } from '../bridge/server/peer.js';
|
|
20
|
+
import { BODY_TOO_LARGE_CODE, closingHeaders, collectRawBody } from '../bridge/server/peer.js';
|
|
21
21
|
|
|
22
22
|
/** The dev server's diagnostics throttle, as this module needs it: the
|
|
23
23
|
* denials route owns the instance, and the proxy shares it so a failing
|
|
@@ -70,6 +70,8 @@ type AiProxyFailure =
|
|
|
70
70
|
status: number;
|
|
71
71
|
/** The upstream's raw `Retry-After` header, when it sent one. */
|
|
72
72
|
retryAfter?: string;
|
|
73
|
+
/** The credentials the request carried, masked from `retryAfter`. */
|
|
74
|
+
credentials?: readonly string[];
|
|
73
75
|
}
|
|
74
76
|
| { kind: 'stream-abort'; target: string; latencyMs: number; cause: string };
|
|
75
77
|
|
|
@@ -82,13 +84,17 @@ const AI_PROXY_RETRY_AFTER_MAX = 64;
|
|
|
82
84
|
* nothing worth printing.
|
|
83
85
|
*
|
|
84
86
|
* The header is remote-authored, so it is sanitized and length-capped like
|
|
85
|
-
* every other upstream string that reaches the terminal.
|
|
87
|
+
* every other upstream string that reaches the terminal. It is masked of the
|
|
88
|
+
* request's credentials first, with the masking the gemini engine and proxy
|
|
89
|
+
* use (`redactUpstreamText`), so the cap cannot leave a prefix of a key
|
|
90
|
+
* behind. Delta-seconds (the
|
|
86
91
|
* common form) get an `s` suffix so the wait reads as a duration; the
|
|
87
92
|
* HTTP-date form is echoed verbatim, since `Wed, 21 Oct 2026 07:28:00 GMTs`
|
|
88
93
|
* would be nonsense.
|
|
89
94
|
*/
|
|
90
|
-
function formatRetryAfter(raw: string): string | null {
|
|
91
|
-
const
|
|
95
|
+
function formatRetryAfter(raw: string, credentials: readonly string[]): string | null {
|
|
96
|
+
const masked = redactUpstreamText(raw, credentials);
|
|
97
|
+
const clean = sanitizeForTerminal(masked).slice(0, AI_PROXY_RETRY_AFTER_MAX).trim();
|
|
92
98
|
if (clean === '') return null;
|
|
93
99
|
if (/^\d+$/.test(clean)) return `${clean}s`;
|
|
94
100
|
return clean;
|
|
@@ -161,7 +167,7 @@ export function formatAiProxyWarning(failure: AiProxyFailure, source = 'ai-proxy
|
|
|
161
167
|
);
|
|
162
168
|
}
|
|
163
169
|
if (failure.kind === 'status' && failure.retryAfter !== undefined) {
|
|
164
|
-
const wait = formatRetryAfter(failure.retryAfter);
|
|
170
|
+
const wait = formatRetryAfter(failure.retryAfter, failure.credentials ?? []);
|
|
165
171
|
if (wait !== null) {
|
|
166
172
|
lines.push(` Retry-After: ${wait}, no automatic retry; the status went to the caller`);
|
|
167
173
|
}
|
|
@@ -229,6 +235,28 @@ export function permitAiUpstreams(ai: {
|
|
|
229
235
|
for (const destination of destinations) permitGuardHost(destination);
|
|
230
236
|
}
|
|
231
237
|
|
|
238
|
+
/** The `key` parameter of `target`, or null when it has none or is not a URL. */
|
|
239
|
+
function urlKeyParam(target: string): string | null {
|
|
240
|
+
try {
|
|
241
|
+
return new URL(target).searchParams.get('key');
|
|
242
|
+
} catch {
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* The credentials an upstream request carries: the `key` URL parameter, the
|
|
249
|
+
* `x-goog-api-key` header, and the `Authorization` value without its scheme.
|
|
250
|
+
*/
|
|
251
|
+
function requestCredentials(input: Parameters<typeof fetch>[0], init: RequestInit | undefined): string[] {
|
|
252
|
+
const isRequest = input instanceof Request;
|
|
253
|
+
const headers = new Headers(isRequest ? input.headers : init?.headers);
|
|
254
|
+
const urlKey = urlKeyParam(isRequest ? input.url : String(input));
|
|
255
|
+
const authorization = headers.get('authorization')?.replace(/^\S+\s+/, '') ?? null;
|
|
256
|
+
const found = [urlKey, headers.get('x-goog-api-key'), authorization];
|
|
257
|
+
return found.filter((value): value is string => value !== null && value !== '');
|
|
258
|
+
}
|
|
259
|
+
|
|
232
260
|
/** Shared upstream I/O for the browser proxy and the direct Node engine.
|
|
233
261
|
* Responses remain incremental; cancellation stops reading without a warning.
|
|
234
262
|
*/
|
|
@@ -255,7 +283,7 @@ export async function fetchAiUpstream(
|
|
|
255
283
|
if (failed) {
|
|
256
284
|
const retryAfter = upstream.headers.get('retry-after');
|
|
257
285
|
note({ kind: 'status', target, latencyMs: Date.now() - startedAt, status: upstream.status,
|
|
258
|
-
...(retryAfter !== null ? { retryAfter } : {}) });
|
|
286
|
+
...(retryAfter !== null ? { retryAfter, credentials: requestCredentials(input, init) } : {}) });
|
|
259
287
|
}
|
|
260
288
|
const body = upstream.body;
|
|
261
289
|
const hasNoBody = body === null;
|
|
@@ -300,7 +328,7 @@ export async function readAiProxyBody(
|
|
|
300
328
|
} catch (error) {
|
|
301
329
|
const tooLarge = (error as { code?: unknown }).code === BODY_TOO_LARGE_CODE;
|
|
302
330
|
const status = tooLarge ? 413 : 400;
|
|
303
|
-
res.writeHead(status, { 'content-type': 'text/plain' }).end(tooLarge ? 'Payload Too Large' : 'Bad Request');
|
|
331
|
+
res.writeHead(status, closingHeaders({ 'content-type': 'text/plain' })).end(tooLarge ? 'Payload Too Large' : 'Bad Request');
|
|
304
332
|
return null;
|
|
305
333
|
}
|
|
306
334
|
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ports a page of this app may name in its `Origin` when it opens the
|
|
3
|
+
* bridge socket or calls a control route.
|
|
4
|
+
*
|
|
5
|
+
* A page this server serves names the server's own port. Under a dev server
|
|
6
|
+
* that proxies `/__pyric/*` to this one, such as `withPyric`'s rewrite under
|
|
7
|
+
* `pyric sandbox -- next dev`, the page loads from the dev server, so its
|
|
8
|
+
* Origin names the dev server's port instead. The proxy says which port that
|
|
9
|
+
* is: it forwards each request with `x-forwarded-host` set to the host the
|
|
10
|
+
* browser asked it for. A socket the proxy forwards (the Node host's page)
|
|
11
|
+
* carries that header itself. A socket that comes straight to this server
|
|
12
|
+
* (the SharedWorker sandbox) does not, but the page's `/__pyric/init.json`
|
|
13
|
+
* went through the proxy before the page learned the bridge URL, so the
|
|
14
|
+
* port was learned from that request.
|
|
15
|
+
*
|
|
16
|
+
* Only a same-origin request teaches a port: one whose `sec-fetch-site` is
|
|
17
|
+
* `same-origin`, which the browser sets and a page cannot change. The page
|
|
18
|
+
* Next serves fetches `/__pyric/*` from Next's own origin, and the proxy
|
|
19
|
+
* passes the header through. A page on another port that sends the request
|
|
20
|
+
* itself, even with an `x-forwarded-host` it chose, is `same-site` at most,
|
|
21
|
+
* so it teaches nothing. A proxy names its own host, never the page's, so a
|
|
22
|
+
* page on another port that goes through the proxy is still refused. Only
|
|
23
|
+
* loopback names and the bound host are learned; a name allowed through
|
|
24
|
+
* `--allowed-host` (a tunnel) is never port-checked in the first place.
|
|
25
|
+
*
|
|
26
|
+
* Only the standalone server learns (`learnsProxyPorts`). A mount inside a
|
|
27
|
+
* dev server, such as the Vite plugin's, serves the page on the connection's
|
|
28
|
+
* own port, and that dev server may answer cross-origin preflights for
|
|
29
|
+
* `/__pyric/*` paths it does not handle.
|
|
30
|
+
*/
|
|
31
|
+
import type { IncomingMessage } from 'node:http';
|
|
32
|
+
import { getHeader, isAllowedHost } from './server.js';
|
|
33
|
+
|
|
34
|
+
/** A dev server proxies from one port; a handful covers restarts on new ports. */
|
|
35
|
+
const MAX_LEARNED_PORTS = 8;
|
|
36
|
+
|
|
37
|
+
export interface AppPorts {
|
|
38
|
+
/** Records the proxy port a same-origin forwarded request names. */
|
|
39
|
+
learn(req: IncomingMessage): void;
|
|
40
|
+
/** The ports a page's Origin may name on this request's connection. */
|
|
41
|
+
forRequest(req: IncomingMessage): number[];
|
|
42
|
+
/**
|
|
43
|
+
* The same, plus the proxy's port when a proxy forwarded this WebSocket
|
|
44
|
+
* upgrade from the page it serves: the Origin names the host the proxy
|
|
45
|
+
* names in `x-forwarded-host`. A browser cannot put a header on a
|
|
46
|
+
* WebSocket handshake, so only a proxy can name that host, and it names
|
|
47
|
+
* its own. The page may open its socket before any same-origin request
|
|
48
|
+
* has gone through the proxy, as the Node host's page under Next does.
|
|
49
|
+
*/
|
|
50
|
+
forUpgrade(req: IncomingMessage): number[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function createAppPorts(boundHost: string): AppPorts {
|
|
54
|
+
const learned = new Set<number>();
|
|
55
|
+
const forRequest = (req: IncomingMessage): number[] => {
|
|
56
|
+
const ports = [...learned];
|
|
57
|
+
const localPort = req.socket?.localPort;
|
|
58
|
+
const hasLocalPort = typeof localPort === 'number';
|
|
59
|
+
if (hasLocalPort) ports.unshift(localPort);
|
|
60
|
+
return ports;
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
learn(req) {
|
|
64
|
+
const isSameOrigin = getHeader(req, 'sec-fetch-site') === 'same-origin';
|
|
65
|
+
if (!isSameOrigin) return;
|
|
66
|
+
const port = forwardedLoopbackPort(getHeader(req, 'x-forwarded-host'), boundHost);
|
|
67
|
+
const namesNoPort = port === undefined;
|
|
68
|
+
if (namesNoPort) return;
|
|
69
|
+
learned.delete(port);
|
|
70
|
+
learned.add(port);
|
|
71
|
+
const isOverCapacity = learned.size > MAX_LEARNED_PORTS;
|
|
72
|
+
if (isOverCapacity) learned.delete(learned.values().next().value as number);
|
|
73
|
+
},
|
|
74
|
+
forRequest,
|
|
75
|
+
forUpgrade(req) {
|
|
76
|
+
const ports = forRequest(req);
|
|
77
|
+
const proxyPort = proxiedPagePort(req, boundHost);
|
|
78
|
+
const isProxiedFromItsPage = proxyPort !== undefined;
|
|
79
|
+
if (isProxiedFromItsPage) ports.push(proxyPort);
|
|
80
|
+
return ports;
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** The proxy's port when the Origin names the host `x-forwarded-host` names, else `undefined`. */
|
|
86
|
+
function proxiedPagePort(req: IncomingMessage, boundHost: string): number | undefined {
|
|
87
|
+
const forwardedHost = getHeader(req, 'x-forwarded-host');
|
|
88
|
+
const originHeader = getHeader(req, 'origin');
|
|
89
|
+
const lacksEither = forwardedHost === undefined || originHeader === undefined;
|
|
90
|
+
if (lacksEither) return undefined;
|
|
91
|
+
let origin: URL;
|
|
92
|
+
try {
|
|
93
|
+
origin = new URL(originHeader);
|
|
94
|
+
} catch {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const namesTheProxy = origin.host.toLowerCase() === forwardedHost.trim().toLowerCase();
|
|
98
|
+
if (!namesTheProxy) return undefined;
|
|
99
|
+
return forwardedLoopbackPort(forwardedHost, boundHost);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** The port in a single loopback `x-forwarded-host`, else `undefined`. */
|
|
103
|
+
function forwardedLoopbackPort(forwardedHost: string | undefined, boundHost: string): number | undefined {
|
|
104
|
+
const hasNoForwardedHost = forwardedHost === undefined || forwardedHost.trim() === '';
|
|
105
|
+
if (hasNoForwardedHost) return undefined;
|
|
106
|
+
const namesSeveralHosts = forwardedHost.includes(',');
|
|
107
|
+
if (namesSeveralHosts) return undefined;
|
|
108
|
+
let forwarded: URL;
|
|
109
|
+
try {
|
|
110
|
+
forwarded = new URL(`http://${forwardedHost.trim()}`);
|
|
111
|
+
} catch {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const isLoopback = isAllowedHost(forwarded.hostname, boundHost);
|
|
115
|
+
if (!isLoopback) return undefined;
|
|
116
|
+
const namesNoPort = forwarded.port === '';
|
|
117
|
+
if (namesNoPort) return 80;
|
|
118
|
+
return Number(forwarded.port);
|
|
119
|
+
}
|
|
@@ -29,8 +29,10 @@ import { getBridgeToolSurface } from '../bridge/server/mcp-contract.js';
|
|
|
29
29
|
import { createAuditWriter } from '../bridge/server/audit.js';
|
|
30
30
|
import { attachPeer, collectBody, BODY_TOO_LARGE_CODE } from '../bridge/server/peer.js';
|
|
31
31
|
import { pointerHeldByAnotherHost } from './discovery.js';
|
|
32
|
+
import { boundedFetch } from '../bounded-request.js';
|
|
32
33
|
import { pyricVersion } from './standalone-assets.js';
|
|
33
34
|
import { getHeader, isAllowedHost, isAllowedLoopbackRequest, isAllowedOrigin, isAllowedUpgrade } from './server.js';
|
|
35
|
+
import { createAppPorts, type AppPorts } from './app-ports.js';
|
|
34
36
|
import { MAX_BRIDGE_FRAME_BYTES, MAX_MOUNTED_MCP_SESSIONS, STORAGE_BYTE_ROUTE_CAPABILITY, WORKER_PORT_CAPABILITY, WORKER_RELAY_CAPABILITY } from '../bridge/protocol.js';
|
|
35
37
|
import { STORAGE_ROUTE_PREFIX } from './worker/protocol/storage.js';
|
|
36
38
|
import type { DatabaseRulesDestination, InitPayload } from './init-payload.js';
|
|
@@ -40,9 +42,15 @@ import { MCP_PROJECT_HEADER, MCP_INSTANCE_HEADER, mcpProjectError } from './mcp-
|
|
|
40
42
|
|
|
41
43
|
const WS_PATH = '/__pyric/sandbox';
|
|
42
44
|
const MCP_PATH = '/__pyric/mcp';
|
|
43
|
-
const HEALTH_PATH = '/__pyric/health';
|
|
45
|
+
export const HEALTH_PATH = '/__pyric/health';
|
|
44
46
|
const BRIDGE_VERSION = pyricVersion();
|
|
45
47
|
|
|
48
|
+
/** The 503 a closed mount answers its routes with, so a client knows the host is going away. */
|
|
49
|
+
export function answerMountClosed(res: ServerResponse): void {
|
|
50
|
+
res.writeHead(503, { 'content-type': 'application/json' });
|
|
51
|
+
res.end(JSON.stringify({ error: 'pyric bridge: mount is closed' }));
|
|
52
|
+
}
|
|
53
|
+
|
|
46
54
|
/**
|
|
47
55
|
* Test-only: `PYRIC_TEST_PEER_LIVENESS_MS` shortens the host's peer liveness
|
|
48
56
|
* window so app scenarios (`test/apps/host-closes-silent-page`) need not wait
|
|
@@ -68,6 +76,15 @@ export interface BridgeMountOptions {
|
|
|
68
76
|
* `allowedHosts: true` = the caller (vite `server.allowedHosts: true`) opted
|
|
69
77
|
* into all hosts. Omit ⇒ loopback-only. */
|
|
70
78
|
upgradeGuard?: { boundHost: string; allowedHosts?: string[] | true };
|
|
79
|
+
/** Accept a page on the port of a dev server that proxies `/__pyric/*` to
|
|
80
|
+
* this one (`pyric sandbox -- next dev`). Only the standalone server sets
|
|
81
|
+
* it. A mount inside a dev server, such as the Vite plugin's, serves the
|
|
82
|
+
* page on its own port, which the connection's port already covers. */
|
|
83
|
+
learnsProxyPorts?: boolean;
|
|
84
|
+
/** The app's ports, shared with the namespace's guarded routes. The caller
|
|
85
|
+
* that passes them teaches them from each request, so the mount does not.
|
|
86
|
+
* Absent, the mount keeps its own and learns when `learnsProxyPorts`. */
|
|
87
|
+
appPorts?: AppPorts;
|
|
71
88
|
}
|
|
72
89
|
|
|
73
90
|
export interface BridgeMount {
|
|
@@ -131,6 +148,10 @@ export interface BridgeHostAttachment {
|
|
|
131
148
|
|
|
132
149
|
export function createBridgeMount(opts: BridgeMountOptions = {}): BridgeMount {
|
|
133
150
|
const peerOptions = { livenessTimeoutMs: testPeerLivenessMs() };
|
|
151
|
+
// The ports a page of this app may name in its Origin (see app-ports.ts).
|
|
152
|
+
const sharesPorts = opts.appPorts !== undefined;
|
|
153
|
+
const appPorts = opts.appPorts ?? createAppPorts(opts.upgradeGuard?.boundHost ?? 'localhost');
|
|
154
|
+
const learnsHere = opts.learnsProxyPorts === true && !sharesPorts;
|
|
134
155
|
let hostedRuntime: Awaited<ReturnType<typeof createHostedRuntime>> | undefined;
|
|
135
156
|
let hostedStartup: Promise<void> | undefined;
|
|
136
157
|
let disconnectHosted: (() => void) | undefined;
|
|
@@ -313,6 +334,7 @@ export function createBridgeMount(opts: BridgeMountOptions = {}): BridgeMount {
|
|
|
313
334
|
instanceId: bridge.instanceId,
|
|
314
335
|
|
|
315
336
|
async handler(req, res, url) {
|
|
337
|
+
if (learnsHere) appPorts.learn(req);
|
|
316
338
|
const isHealthRequest = url.pathname === HEALTH_PATH;
|
|
317
339
|
const isMcpRequest = url.pathname === MCP_PATH;
|
|
318
340
|
const isHostedRepro = url.pathname === HOSTED_REPRO_PATH;
|
|
@@ -321,8 +343,7 @@ export function createBridgeMount(opts: BridgeMountOptions = {}): BridgeMount {
|
|
|
321
343
|
const isStorageBytes = url.pathname.startsWith(STORAGE_ROUTE_PREFIX);
|
|
322
344
|
const rejectsClosedRequest = closed && (isHealthRequest || isMcpRequest || isHostedMethod || isStorageBytes);
|
|
323
345
|
if (rejectsClosedRequest) {
|
|
324
|
-
res
|
|
325
|
-
res.end(JSON.stringify({ error: 'pyric bridge: mount is closed' }));
|
|
346
|
+
answerMountClosed(res);
|
|
326
347
|
return true;
|
|
327
348
|
}
|
|
328
349
|
if (isHealthRequest) {
|
|
@@ -338,7 +359,7 @@ export function createBridgeMount(opts: BridgeMountOptions = {}): BridgeMount {
|
|
|
338
359
|
const allowedHosts = guard?.allowedHosts;
|
|
339
360
|
const hasNamedHosts = Array.isArray(allowedHosts);
|
|
340
361
|
const extra = hasNamedHosts ? allowedHosts : [];
|
|
341
|
-
const isForbidden = !isAllowedLoopbackRequest(req, boundHost, extra);
|
|
362
|
+
const isForbidden = !isAllowedLoopbackRequest(req, boundHost, extra, appPorts.forRequest(req));
|
|
342
363
|
if (isForbidden) {
|
|
343
364
|
res.writeHead(403, { 'content-type': 'application/json' });
|
|
344
365
|
res.end(JSON.stringify({ error: 'Forbidden: invalid host or origin' }));
|
|
@@ -534,7 +555,9 @@ export function createBridgeMount(opts: BridgeMountOptions = {}): BridgeMount {
|
|
|
534
555
|
const allowedHosts = guard.allowedHosts;
|
|
535
556
|
const hasNamedHosts = Array.isArray(allowedHosts);
|
|
536
557
|
const extra = hasNamedHosts ? allowedHosts : [];
|
|
537
|
-
const
|
|
558
|
+
const acceptsProxiedPage = opts.learnsProxyPorts === true;
|
|
559
|
+
const ports = acceptsProxiedPage ? appPorts.forUpgrade(req) : appPorts.forRequest(req);
|
|
560
|
+
const isForbidden = !isAllowedUpgrade(req.headers, boundHost, extra, ports);
|
|
538
561
|
if (isForbidden) {
|
|
539
562
|
socket.destroy();
|
|
540
563
|
return;
|
|
@@ -583,11 +606,16 @@ export function createBridgeMount(opts: BridgeMountOptions = {}): BridgeMount {
|
|
|
583
606
|
if (hasNoCollisionProbe) return;
|
|
584
607
|
const cannotProbe = !currentOrigin?.port || attachmentClosed;
|
|
585
608
|
if (cannotProbe) return;
|
|
609
|
+
// By default a bounded request, connect included, so a family whose
|
|
610
|
+
// connect never completes leaves no socket pending past 1 s (#1167).
|
|
611
|
+
const probeHealth = (url: string): Promise<Response> => {
|
|
612
|
+
const injected = collision.fetchImpl;
|
|
613
|
+
if (injected) return injected(url, { signal: AbortSignal.any([collisionAbort.signal, AbortSignal.timeout(1000)]) });
|
|
614
|
+
return boundedFetch(url, { deadlineMs: 1000, signal: collisionAbort.signal });
|
|
615
|
+
};
|
|
586
616
|
for (const probe of [`http://127.0.0.1:${currentOrigin.port}`, `http://[::1]:${currentOrigin.port}`]) {
|
|
587
617
|
try {
|
|
588
|
-
const response = await (
|
|
589
|
-
signal: AbortSignal.any([collisionAbort.signal, AbortSignal.timeout(1000)]),
|
|
590
|
-
});
|
|
618
|
+
const response = await probeHealth(`${probe}${HEALTH_PATH}`);
|
|
591
619
|
if (attachmentClosed) return;
|
|
592
620
|
const isUnavailable = response.status !== 200;
|
|
593
621
|
if (isUnavailable) continue;
|