diff --git a/public/conformance/auth.json b/public/conformance/auth.json index f5814d8..fc42b63 100644 --- a/public/conformance/auth.json +++ b/public/conformance/auth.json @@ -1 +1 @@ -{"runs":[[0,18,0,"custom claims are measured in UTF-16 code units: รฉ counts one, ๐Ÿ”ฅ counts two, at 999 to 1,001"],[18,18,1,"signUp validation order, canonical email and the issued tokens"],[36,16,1,"signInWithPassword success and every recorded failure"],[52,12,1,"emailPrivacyConfig.enableImprovedEmailPrivacy masks enumeration"],[64,12,1,"anonymous sign-up, its token claims and the upgrade to email+password"],[76,16,1,"createAuthUri reports registration and sign-in methods"],[92,19,1,"privileged signUp (Admin SDK createUser) fields and errors"],[111,10,1,"signInWithIdp with a fake Google id_token: new user, repeat, profile and verification fields"],[121,4,1,"signInWithIdp credential forms: fragment, query, JWT id_token, access_token alongside"],[125,13,1,"every provider id the widget offers plus OIDC and SAML"],[138,14,1,"signInWithIdp request validation and the not-implemented credential forms"],[152,15,1,"one account per email: federated sign-in against existing password accounts"],[167,13,1,"signIn.allowDuplicateEmails changes federated sign-in and sign-up semantics"],[180,20,1,"linking a federated identity to a signed-in account and unlinking it"],[200,23,1,"signInWithCustomToken: JSON and JWT tokens, claims and validation"],[223,22,1,"VERIFY_EMAIL: send, list, consume via update and via the action page"],[245,25,1,"PASSWORD_RESET: send, resetPassword, effects on providers and the action page"],[270,27,1,"EMAIL_SIGNIN: send, signInWithEmailLink for new and existing users, action page"],[297,18,1,"VERIFY_AND_CHANGE_EMAIL: send, consume via update and via the action page"],[315,17,1,"plain email updates issue RECOVER_EMAIL codes; the recoverEmail action page"],[332,16,1,"privileged sendOobCode with returnOobLink (Admin SDK generate*Link)"],[348,22,1,"sendVerificationCode and signInWithPhoneNumber for new and existing users"],[370,19,1,"linking a phone number to a signed-in account, collisions and temporary proofs"],[389,31,1,"client accounts:update: profile, email, password, token re-issue, deleteAttribute and errors"],[420,26,1,"privileged accounts:update: claims, phone, flags, timestamps, validSince, password and email"],[446,26,1,"privileged accounts:update: providers, MFA enrolments, deleteAttribute and the security forms"],[472,15,1,"securetoken grant: bodies, reuse, revocation and errors"],[487,24,1,"privileged lookup by every key, dedupe, not found; delete; project scoping"],[511,7,1,"batchCreate (importUsers): every imported field and the sign-ins it enables"],[518,14,1,"batchCreate: per-index errors, whole-request errors, overwrite and hash options"],[532,14,1,"batchGet (listUsers) paging by localId with maxResults and nextPageToken"],[546,14,1,"accounts:query and :queryAccounts: counts, sorting and the not-implemented filters"],[560,9,1,"batchDelete (deleteUsers): limits, NOT_DISABLED, force and lifecycle events"],[569,12,1,"createSessionCookie validity bounds and the cookie claims"],[581,21,1,"v2 project config, the emulator config routes and getProjects"],[602,28,1,"tenant create/get/list/patch/delete and the auto-created tenant"],[630,30,1,"client sign-in flows scoped to a tenant, tenant claims and isolation from the root project"],[660,23,1,"privileged account routes scoped to a tenant, tenant export and delete all"],[683,14,1,"SMS second factor: enrolment start/finalize and its validation"],[697,29,1,"SMS second factor: MFA sign-in, withdraw and ineligible first factors"],[726,12,1,"MFA users created by import, pending credentials on email link and IdP first factors"],[738,21,1,"passkey enrolment and sign-in as the emulator fakes them"],[759,22,1,"beforeCreate and beforeSignIn on password sign-up and sign-in: JWT payload, updates, errors"],[781,6,1,"blocking functions on IdP sign-ins with inbound credential forwarding"],[787,9,1,"blocking functions on email-link and phone sign ins"],[796,9,1,"blocking functions on MFA finalize and under a tenant"],[805,18,1,"trigger_multicast for every create and delete path; silent for imports and delete all"],[823,7,1,"readiness, the OpenAPI document, CORS and unknown routes"],[830,23,1,"the legacy v3 relyingparty routes rewrite onto v1 operations"],[853,9,1,"client operations the official emulator answers with 501"],[862,34,1,"privileged operations the official emulator answers with 501"],[896,3,1,"the popup handler page with and without accounts, the iframe page"],[899,13,1,"delete-all clears accounts but keeps issued codes; verification codes listing"],[912,11,1,"the record set the CLI export writes (batchGet + config) re-imported through the CLI's import route"],[923,4,1,"tenant accounts in the export layout"],[927,23,1,"id token claims per sign-in method, custom and session claims, multi-provider identities"],[950,32,1,"every operation against a disabled account"],[982,18,1,"tokens and codes of a deleted account against every operation"],[1000,14,1,"apiKey in the query, in the header, missing, and owner client routes"],[1014,22,1,"OpenAPI body validation: coercions, unknown fields, wrong types and enum handling"],[1036,19,1,"mixed-case e-mail addresses are lower-cased at every entry point"],[1055,22,1,"providerUserInfo ordering and content through links, unlinks and profile updates"],[1077,1,1,"signUp validation order, canonical email and the issued tokens"],[1078,1,1,"beforeCreate and beforeSignIn on password sign-up and sign-in: JWT payload, updates, errors"],[1079,6,1,"the popup handler page with and without accounts, the iframe page"],[1085,1,1,"OpenAPI body validation: coercions, unknown fields, wrong types and enum handling"],[1086,4,2,"Browser discovery, fake Google IdP, helper popup/iframe, and secure-token refresh routes expose the contract consumed by the Firebase browser SDK"],[1090,11,2,"Identity Toolkit client and privileged Admin routes preserve Firebase response, error, custom-claim, custom-token, and unsigned JWT contracts"],[1101,7,2,"Auth config/accounts import and export preserve persisted fields while user create/delete lifecycle operations multicast legacy Firebase Auth events to Functions"],[1108,8,2,"Sign-in popup and redirect in a real browser (loopback origin)"],[1116,2,2,"An IdP sign-in reuses a linked account and honours disabling"],[1118,8,2,"Sign-in popup and redirect in a real browser (insecure origin emulator.test)"],[1126,9,2,"Refresh grants reused: anonymous sign in"],[1135,9,2,"Refresh grants reused: password sign in"],[1144,9,2,"Refresh grants reused: custom sign in"],[1153,1,2,"Refresh grants reused: unknown sign in"],[1154,4,2,"Refresh from the browser SDK: forced, two tabs, reload"],[1158,2,2,"Browser discovery, fake Google IdP, helper popup/iframe, and secure-token refresh routes expose the contract consumed by the Firebase browser SDK"]],"cases":[{"t":"create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"ascii 1000","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"ascii 1001","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"accented 999","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"accented 1000","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"accented 1001","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"lookup accented","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"emoji 1000","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"emoji 1001","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"lookup emoji","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin carries claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [2 items]}","r":"c","k":"answer"},{"t":"imported","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"configure blocking","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"blocking accented 1000","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"blocking emoji 1000","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"blocking emoji 1001","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"lookup blocking","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"no api key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"missing password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 MISSING_PASSWORD","r":"c","k":"answer"},{"t":"invalid email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"weak password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"local id rejected","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 UNEXPECTED_PARAMETER : User ID","r":"c","k":"answer"},{"t":"ok","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"duplicate","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"duplicate other case","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"lookup garbage token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"without return secure token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"empty email string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"email as number","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"email as object","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /email must be string","r":"c","k":"answer"},{"t":"snake case keys","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"snake case lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"invalid email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"missing password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 MISSING_PASSWORD","r":"c","k":"answer"},{"t":"unknown email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"wrong password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"ok","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"captcha","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"501 NOT_IMPLEMENTED: captcha unimplemented","r":"c","k":"answer"},{"t":"id token param","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"501 NOT_IMPLEMENTED: idToken / pendingIdToken is no longer in use and unsupported by the Auth Emulator.","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"refresh disabled","q":"POST /securetoken.googleapis.com/v1/token","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"lookup disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"enable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"ok again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"lookup after","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"config default","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"enable","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"config after","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"unknown email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_LOGIN_CREDENTIALS","r":"c","k":"answer"},{"t":"wrong password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_LOGIN_CREDENTIALS","r":"c","k":"answer"},{"t":"ok","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"reset unknown","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"reset known","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"disable privacy","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"unknown email again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"upgrade","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup upgraded","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"second anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous with display name","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup display name","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"delete again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"missing identifier","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 MISSING_IDENTIFIER","r":"c","k":"answer"},{"t":"missing continue uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 MISSING_CONTINUE_URI","r":"c","k":"answer"},{"t":"invalid identifier","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 INVALID_IDENTIFIER","r":"c","k":"answer"},{"t":"invalid continue uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 INVALID_CONTINUE_URI","r":"c","k":"answer"},{"t":"provider id","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"501 NOT_IMPLEMENTED: Sign-in with IDP is not yet supported.","r":"c","k":"answer"},{"t":"unregistered","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"google link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"password and google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"with session id","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"google only user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"federated only","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"email link user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"full","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"duplicate local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 DUPLICATE_LOCAL_ID","r":"c","k":"answer"},{"t":"duplicate email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"duplicate phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"disabled user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"disabled signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"no identity","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"id token and local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 UNEXPECTED_PARAMETER : User ID","r":"c","k":"answer"},{"t":"weak password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"with mfa","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup mfa","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mfa invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 INVALID_MFA_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"custom attributes ignored","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup claims","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup owner unscoped","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup unscoped","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"first","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"unverified email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup unverified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"upper case email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"request uri fragment","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"request uri query","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"jwt id token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"access token with id token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"facebook","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"twitter","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"apple","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"microsoft","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"yahoo","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"oidc","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"saml","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"saml missing assertion","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE ((Missing assertion in SAMLResponse.))","r":"c","k":"answer"},{"t":"provider upper case","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"lookup github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup saml","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"missing request uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 MISSING_REQUEST_URI","r":"c","k":"answer"},{"t":"invalid request uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_REQUEST_URI","r":"c","k":"answer"},{"t":"missing provider","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_CREDENTIAL_OR_PROVIDER_ID : Invalid IdP response/credential: http://localhost/?id_token=%7B%22sub%22%3A%22x%22%7D","r":"c","k":"answer"},{"t":"missing sub","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : Invalid Idp Response: id_token missing required fields. ((Missing \"sub\" field. This field is required and must bโ€ฆ","r":"c","k":"answer"},{"t":"sub not string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : ((The \"sub\" field must be a string.))","r":"c","k":"answer"},{"t":"id token not json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : Unable to parse id_token: {not-json ((Auth Emulator failed to parse fake id_token as strict JSON.))","r":"c","k":"answer"},{"t":"id token garbage","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : Unable to parse id_token: garbage-token ((Auth Emulator only accepts strict JSON or JWTs as fake id_tokens.))","r":"c","k":"answer"},{"t":"access token only google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: The Auth Emulator only support sign-in with google.com using id_token, not access_token. Please update your code to usโ€ฆ","r":"c","k":"answer"},{"t":"access token only facebook","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: The Auth Emulator does not support facebook.com sign-in with credentials.","r":"c","k":"answer"},{"t":"access token json claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"no credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: The Auth Emulator only supports sign-in with credentials (id_token required).","r":"c","k":"answer"},{"t":"return refresh token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: returnRefreshToken is not implemented yet.","r":"c","k":"answer"},{"t":"pending id token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: pendingIdToken is not implemented yet.","r":"c","k":"answer"},{"t":"no api key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"password unverified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"google takes over unverified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup taken over","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"password signin after takeover","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"bob password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"verify bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"google joins verified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup joined","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"password still works","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"carol password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"unverified provider email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"unverified provider email return credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"recycled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup recycled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"allow","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"config","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"google same email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"facebook same email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"signup duplicate","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"link google to password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"import duplicate","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"import duplicate sanity","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"link google again same","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 FEDERATED_USER_ID_ALREADY_LINKED","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"link already linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 FEDERATED_USER_ID_ALREADY_LINKED","r":"c","k":"answer"},{"t":"link already linked return credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"link email of other","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"link verified email marks verified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"unlink google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup unlinked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"unlink missing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"google signin after unlink","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"unlink password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"password signin after unlink","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup anon linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 MISSING_CUSTOM_TOKEN","r":"c","k":"answer"},{"t":"json token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"json token again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"json invalid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CUSTOM_TOKEN : ((Auth Emulator only accepts strict JSON or JWTs as fake custom tokens.))","r":"c","k":"answer"},{"t":"jwt token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup jwt","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"wrong audience","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CUSTOM_TOKEN : ((Invalid aud (audience): wrong-audience Note: Firebase ID Tokens / third-party tokens cannot be used with signIโ€ฆ","r":"c","k":"answer"},{"t":"garbage","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CUSTOM_TOKEN : Invalid assertion format","r":"c","k":"answer"},{"t":"missing uid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 MISSING_IDENTIFIER","r":"c","k":"answer"},{"t":"user id field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"numeric uid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"forbidden claim","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 FORBIDDEN_CLAIM : iss","r":"c","k":"answer"},{"t":"claims not object","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CLAIMS","r":"c","k":"answer"},{"t":"signed jwt","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"tenant claim on root","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup tenant claim","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"existing password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom for password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_REQ_TYPE","r":"c","k":"answer"},{"t":"unspecified type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_REQ_TYPE","r":"c","k":"answer"},{"t":"unknown type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"501 NOT_IMPLEMENTED: RECOVER_EMAIL","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"invalid continue url","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_CONTINUE_URI : ((expected an absolute URI with valid scheme and host))","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"consume","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup verified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"consume again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"list after","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"send with continue","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action missing api key","q":"GET /emulator/action","a":"400 missing apiKey query parameter","r":"c","k":"answer"},{"t":"action missing oob","q":"GET /emulator/action","a":"400 missing oobCode query parameter","r":"c","k":"answer"},{"t":"action wrong mode","q":"GET /emulator/action","a":"400 Invalid mode","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/after","r":"c","k":"answer"},{"t":"action used","q":"GET /emulator/action","a":"400 Your request to verify your email has expired or the link has already been used.","r":"c","k":"answer"},{"t":"send json page","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action json","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"unknown email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"reset missing code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 MISSING_OOB_CODE","r":"c","k":"answer"},{"t":"reset invalid code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"verify code only","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"reset weak","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"reset again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"old password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"lookup after reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action no password","q":"GET /emulator/action","a":"400 missing newPassword query parameter","r":"c","k":"answer"},{"t":"action placeholder","q":"GET /emulator/action","a":"400 newPassword must be something other than 'NEW_PASSWORD_HERE'","r":"c","k":"answer"},{"t":"action weak","q":"GET /emulator/action","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/done","r":"c","k":"answer"},{"t":"action used","q":"GET /emulator/action","a":"400 Your request to reset your password has expired or the link has already been used.","r":"c","k":"answer"},{"t":"password4","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action json","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"signin missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"signin missing code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 MISSING_OOB_CODE","r":"c","k":"answer"},{"t":"signin wrong email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 INVALID_EMAIL : The email provided does not match the sign-in email address.","r":"c","k":"answer"},{"t":"signin invalid code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"signin new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"lookup new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin reuse","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"signin existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"verify code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send for alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"link to alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"lookup alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"send for bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"link bob to alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"lookup alice after bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"send for link again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"link existing to alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action no continue","q":"GET /emulator/action","a":"400 Missing continueUrl query parameter","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/finish?x=1&mode=signIn&apiKey=fake-api-key&oobCode={{oob:send-3}}&lang=en","r":"c","k":"answer"},{"t":"signin page code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing new email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_NEW_EMAIL","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"new email exists","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"verify code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"consume","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup changed","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token after change","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"consume again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"signin new email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/changed","r":"c","k":"answer"},{"t":"action used","q":"GET /emulator/action","a":"400 Your request to change your email has expired or the link has already been used.","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action json","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"rename","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin alice4","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"plain update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup plain update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"list recover","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"send verify","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"recover wrong mode","q":"GET /emulator/action","a":"400 Requested mode does not match the OOB code provided.","r":"c","k":"answer"},{"t":"recover","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"recover again","q":"GET /emulator/action","a":"400 Requested mode does not match the OOB code provided.","r":"c","k":"answer"},{"t":"lookup recovered","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin old email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"signin recovered","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"update to same email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"update to existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"update invalid email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"client return link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INSUFFICIENT_PERMISSION","r":"c","k":"answer"},{"t":"verify","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"verify unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"verify missing email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"change","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"change unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"verify with token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"no return link","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"consume admin code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"reset admin code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"list tenant","q":"GET /emulator/v1/projects/{project}/tenants/tenant-alpha/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"list after","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"missing phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"signin missing session","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 MISSING_SESSION_INFO","r":"c","k":"answer"},{"t":"signin missing code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 MISSING_CODE","r":"c","k":"answer"},{"t":"signin invalid session","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_SESSION_INFO","r":"c","k":"answer"},{"t":"signin wrong code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_CODE","r":"c","k":"answer"},{"t":"signin new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin reuse","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_SESSION_INFO","r":"c","k":"answer"},{"t":"list after","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"signin existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"temporary proof invalid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_TEMPORARY_PROOF","r":"c","k":"answer"},{"t":"temporary proof missing phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 MISSING_PHONE_NUMBER","r":"c","k":"answer"},{"t":"send tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 UNSUPPORTED_TENANT_OPERATION","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link collision","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {phoneNumber, temporaryProof, temporaryProofExpiresIn}","r":"c","k":"answer"},{"t":"proof with token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"proof without token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"proof wrong phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_TEMPORARY_PROOF","r":"c","k":"answer"},{"t":"unlink","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup unlinked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin set phone exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"admin set phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup admin phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin lookup by phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"no token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_REQ_TYPE : Unsupported request parameters.","r":"c","k":"answer"},{"t":"profile","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup profile","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete display name","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete photo","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup deleted","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete provider attr","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: deleteAttribute: PROVIDER","r":"c","k":"answer"},{"t":"delete raw user info","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: deleteAttribute: RAW_USER_INFO","r":"c","k":"answer"},{"t":"custom attributes","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INSUFFICIENT_PERMISSION","r":"c","k":"answer"},{"t":"disable user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 OPERATION_NOT_ALLOWED","r":"c","k":"answer"},{"t":"provider field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: provider is not implemented yet.","r":"c","k":"answer"},{"t":"upgrade to federated","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: upgradeToFederatedLogin is not implemented yet.","r":"c","k":"answer"},{"t":"weak password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token after password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"old refresh after password","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"lookup new token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin old password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"signin new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token after email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"delete password attr","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete email attr","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"set email again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup final","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"garbage token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"unknown user token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"missing local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"unknown user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"claims invalid","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_CLAIMS","r":"c","k":"answer"},{"t":"claims too large","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"claims forbidden","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 FORBIDDEN_CLAIM : aud","r":"c","k":"answer"},{"t":"claims array","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_CLAIMS","r":"c","k":"answer"},{"t":"claims","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh with claims","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"phone invalid","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"phone exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"email verified","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"timestamps","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup timestamps","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"valid since","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"token after valid since","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"refresh after valid since","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"valid since reset","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"email exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signin new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"delete provider password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete provider phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"link provider missing provider","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_PROVIDER_ID","r":"c","k":"answer"},{"t":"link provider missing raw id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_RAW_ID","r":"c","k":"answer"},{"t":"link provider","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by federated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mfa set","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup mfa","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mfa missing id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_MFA_ENROLLMENT_ID : mfaEnrollmentId must be defined.","r":"c","k":"answer"},{"t":"mfa invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_MFA_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"mfa clear","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup mfa cleared","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete attributes","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup deleted","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"id token with disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"id token privileged","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"unauthenticated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"bad bearer","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"401 UNAUTHENTICATED: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authenticatโ€ฆ","r":"c","k":"answer"},{"t":"service account token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup final","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing grant type","q":"POST /securetoken.googleapis.com/v1/token","a":"400 MISSING_GRANT_TYPE","r":"c","k":"answer"},{"t":"invalid grant type","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_GRANT_TYPE","r":"c","k":"answer"},{"t":"missing refresh token","q":"POST /securetoken.googleapis.com/v1/token","a":"400 MISSING_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"garbage","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"base64 without marker","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"wrong project","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"unknown user","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"json","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"form","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"camel case","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"reuse","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"no api key","q":"POST /securetoken.googleapis.com/v1/token","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"deleted user","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"alice","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"by local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"by phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mixed dedupe","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"federated incomplete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"none found","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"initial email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"501 NOT_IMPLEMENTED: Lookup by initialEmail is not implemented.","r":"c","k":"answer"},{"t":"unscoped owner lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"target project without owner","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 INSUFFICIENT_PERMISSION : Only authenticated requests can specify target_project_id.","r":"c","k":"answer"},{"t":"target project in body","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"other project path","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"other project create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"other project lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete missing local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"delete unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"delete bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"delete bob again","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"client delete owner","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"projects","q":"GET /identitytoolkit.googleapis.com/v1/projects","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"projects client","q":"GET /identitytoolkit.googleapis.com/v1/projects","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"missing users","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 MISSING_USER_ACCOUNT","r":"c","k":"answer"},{"t":"empty users","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 MISSING_USER_ACCOUNT","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"signin raw password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin hash","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"per index errors","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [16 items]}","r":"c","k":"answer"},{"t":"duplicate local ids","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 DUPLICATE_LOCAL_ID : same","r":"c","k":"answer"},{"t":"sanity duplicate email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 DUPLICATE_EMAIL : s@example.com","r":"c","k":"answer"},{"t":"sanity duplicate raw id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 DUPLICATE_RAW_ID : Provider id(google.com), Raw id(same-raw)","r":"c","k":"answer"},{"t":"sanity email exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"overwrite","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"lookup overwritten","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"overwrite duplicate ids","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"lookup same2","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"hash options ignored","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"signin scrypt","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"lookup scrypt","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"all users after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"default","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"page 1","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"page 2","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"page 3","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"past end","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"exact","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"over cap","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"zero","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"negative","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"not a number","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. must be integer","r":"c","k":"answer"},{"t":"tenant query","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"empty project","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"unauthenticated","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"default","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"count only","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount}","r":"c","k":"answer"},{"t":"desc","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"unspecified","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"expression","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: expression is not implemented.","r":"c","k":"answer"},{"t":"limit","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: limit is not implemented.","r":"c","k":"answer"},{"t":"offset","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: offset is not implemented.","r":"c","k":"answer"},{"t":"offset zero","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"sort by name","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: Only sorting by USER_ID is implemented.","r":"c","k":"answer"},{"t":"alias","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:queryAccounts","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"empty project","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"unauthenticated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"400 LOCAL_ID_LIST_EXCEEDS_LIMIT","r":"c","k":"answer"},{"t":"missing","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"400 LOCAL_ID_LIST_EXCEEDS_LIMIT","r":"c","k":"answer"},{"t":"too many","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"400 LOCAL_ID_LIST_EXCEEDS_LIMIT","r":"c","k":"answer"},{"t":"mixed","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {errors}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"force","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"all users after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"again","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"too short","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 INVALID_DURATION","r":"c","k":"answer"},{"t":"too long","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 INVALID_DURATION","r":"c","k":"answer"},{"t":"default","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"hour","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"numeric duration","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"garbage token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"unauthenticated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"deleted user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"tenant cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/tenant-alpha:createSessionCookie","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"get default","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator default","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"patch masked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get after masked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator after masked","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"patch unmasked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get after unmasked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"invalid event","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"400 INVALID_BLOCKING_FUNCTION : ((Event type is invalid.))","r":"c","k":"answer"},{"t":"invalid uri","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"400 INVALID_BLOCKING_FUNCTION : ((Expected an absolute URI with valid scheme and host.))","r":"c","k":"answer"},{"t":"blocking ok","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get with blocking","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"mask unknown field","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get final","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator patch both","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get after emulator patch","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator patch empty","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator patch no auth","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"tenant config","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/config","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"v2 unknown project","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"recaptcha","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"200 identitytoolkit#GetRecaptchaParamResponse","r":"c","k":"answer"},{"t":"recaptcha no key","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"list empty","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"get auto a","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-a","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get auto b","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-b","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get auto c","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-c","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"list auto","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page 1","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page 2","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page past end","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page zero","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"create defaults","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"create full","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"create empty","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"create mfa partial","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"patch masked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"get after masked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"patch mask nested","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"get after nested","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"patch unmasked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"get after unmasked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-defaults}}","a":"200 {}","r":"c","k":"answer"},{"t":"list after delete","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"get after delete","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-defaults}}","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"delete auto","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-a","a":"200 {}","r":"c","k":"answer"},{"t":"list final","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list unauthenticated","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"create unauthenticated","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signup not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 OPERATION_NOT_ALLOWED","r":"c","k":"answer"},{"t":"anonymous not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 ADMIN_ONLY_OPERATION","r":"c","k":"answer"},{"t":"email link not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 OPERATION_NOT_ALLOWED","r":"c","k":"answer"},{"t":"password signin not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 PASSWORD_LOGIN_DISABLED","r":"c","k":"answer"},{"t":"allow","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup tenant token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup explicit tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup wrong tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TENANT_ID_MISMATCH","r":"c","k":"answer"},{"t":"root lookup by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"tenant lookup by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"tenant lookup body mismatch","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:lookup","a":"400 TENANT_ID_MISMATCH","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin root","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"refresh mismatch","q":"POST /securetoken.googleapis.com/v1/token","a":"400 TENANT_ID_MISMATCH: ((Refresh token tenant ID does not match target tenant ID.))","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"custom token no body tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"custom token mismatch","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 TENANT_ID_MISMATCH","r":"c","k":"answer"},{"t":"custom token json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"tenant oob codes","q":"GET /emulator/v1/projects/{project}/tenants/{{tenantId:create}}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"root oob codes","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"email link signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 UNSUPPORTED_TENANT_OPERATION","r":"c","k":"answer"},{"t":"tenant verification codes","q":"GET /emulator/v1/projects/{project}/tenants/{{tenantId:create}}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"root verification codes","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"tenant create user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"tenant import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"tenant batch get","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"root batch get","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"root batch get tenant query","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"tenant query","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"tenant update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"tenant send oob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"tenant session cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"root session cookie tenant token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"tenant batch delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"tenant delete user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"root delete tenant user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"get projects tenant","q":"GET /identitytoolkit.googleapis.com/v1/projects","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"tenant delete all","q":"DELETE /emulator/v1/projects/{project}/tenants/{{tenantId:create}}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"tenant batch get after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"root batch get after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"disable auth","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signin disabled tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 PROJECT_DISABLED","r":"c","k":"answer"},{"t":"tenant batch get disabled","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchGet","a":"400 PROJECT_DISABLED","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"start unverified","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 UNVERIFIED_EMAIL : Need to verify email first before enrolling second factors.","r":"c","k":"answer"},{"t":"verify","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"start missing token","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"start missing info","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 INVALID_ARGUMENT : ((Missing phoneEnrollmentInfo.))","r":"c","k":"answer"},{"t":"start invalid phone","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"200 {phoneSessionInfo}","r":"c","k":"answer"},{"t":"codes","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"finalize missing code","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"400 MISSING_CODE","r":"c","k":"answer"},{"t":"finalize wrong code","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"400 INVALID_CODE","r":"c","k":"answer"},{"t":"finalize android proof","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"501 NOT_IMPLEMENTED: androidVerificationProof is unsupported!","r":"c","k":"answer"},{"t":"finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup enrolled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"start duplicate","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 SECOND_FACTOR_EXISTS : Phone number already enrolled as second factor for this account.","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"verify","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"200 {phoneSessionInfo}","r":"c","k":"answer"},{"t":"finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"signin pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"mfa start missing credential","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 MISSING_MFA_PENDING_CREDENTIAL : Request does not have MFA pending credential.","r":"c","k":"answer"},{"t":"mfa start missing enrollment","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 MISSING_MFA_ENROLLMENT_ID : No second factor identifier is provided.","r":"c","k":"answer"},{"t":"mfa start unknown enrollment","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 MFA_ENROLLMENT_NOT_FOUND","r":"c","k":"answer"},{"t":"mfa start bad credential","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 ((Invalid phoneVerificationInfo.mfaPendingCredential.))","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize wrong code","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"400 INVALID_CODE","r":"c","k":"answer"},{"t":"mfa finalize missing credential","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"400 MISSING_CREDENTIAL : Please set MFA Pending Credential.","r":"c","k":"answer"},{"t":"mfa start 2","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup signed in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"idp pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone first factor","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"withdraw unknown","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:withdraw","a":"400 MFA_ENROLLMENT_NOT_FOUND","r":"c","k":"answer"},{"t":"withdraw","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:withdraw","a":"200 {expiresIn}","r":"c","k":"answer"},{"t":"lookup withdrawn","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin plain","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"start anonymous","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 UNSUPPORTED_FIRST_FACTOR : MFA is not available for the given first factor.","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"start custom","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 UNSUPPORTED_FIRST_FACTOR : MFA is not available for the given first factor.","r":"c","k":"answer"},{"t":"tenant mfa disabled","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"tenant start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 OPERATION_NOT_ALLOWED : SMS based MFA not enabled.","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"signin pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"idp pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"mfa start idp","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize idp","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"pending other project","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"mfa start wrong project","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 INVALID_PROJECT_ID : Project ID does not match MFA pending credential.","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"enroll start missing token","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:start","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"enroll start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:start","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"enroll finalize missing response","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"400 MISSING_AUTHENTICATOR_RESPONSE","r":"c","k":"answer"},{"t":"enroll finalize missing id","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"400 INVALID_CREDENTIAL_ID","r":"c","k":"answer"},{"t":"enroll finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"200 {localId}","r":"c","k":"answer"},{"t":"lookup enrolled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"enroll duplicate","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"400 CREDENTIAL_ALREADY_IN_USE","r":"c","k":"answer"},{"t":"enroll second","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"200 {localId}","r":"c","k":"answer"},{"t":"enroll unnamed","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"200 {localId}","r":"c","k":"answer"},{"t":"signin start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:start","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"signin finalize missing","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 MISSING_AUTHENTICATOR_RESPONSE","r":"c","k":"answer"},{"t":"signin finalize unknown","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 PASSKEY_CREDENTIAL_NOT_FOUND","r":"c","k":"answer"},{"t":"signin finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup signed in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete passkey","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup deleted","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin deleted","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 PASSKEY_CREDENTIAL_NOT_FOUND","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin disabled","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"lookup signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin empty response","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin no mask","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((Response UserRecord is missing updateMask.))","r":"c","k":"answer"},{"t":"signin function 500","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{functionsOrigin}}/blocking/beforeSignIn returned HTTP error 500: {\"error\":{\"messโ€ฆ","r":"c","k":"answer"},{"t":"signin function 400","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{functionsOrigin}}/blocking/beforeSignIn returned HTTP error 400: {\"error\":{\"messโ€ฆ","r":"c","k":"answer"},{"t":"signin disabled by function","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"signin after disable","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"signup create disables","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"lookup bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup create fails","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{functionsOrigin}}/blocking/beforeCreate returned HTTP error 400: {\"error\":{\"messโ€ฆ","r":"c","k":"answer"},{"t":"lookup carol","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup bad claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 FORBIDDEN_CLAIM : iss","r":"c","k":"answer"},{"t":"anonymous not blocked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom not blocked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"admin create not blocked","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"configure create only","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"signin no trigger","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"idp new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"idp existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"idp with access token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"saml","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"email link send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"phone send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"mfa user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"mfa pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"mfa enroll start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"200 {phoneSessionInfo}","r":"c","k":"answer"},{"t":"mfa enroll finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"custom again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"admin create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"client delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"admin delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"batch delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"delete all","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"readiness","q":"GET /","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"openapi","q":"GET /emulator/openapi.json","a":"200 {$digest}","r":"c","k":"answer"},{"t":"unknown","q":"GET /nothing/here","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"unknown post","q":"POST /identitytoolkit.googleapis.com/v1/accounts:nope","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"get on post route","q":"GET /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"405 {message}","r":"c","k":"answer"},{"t":"preflight","q":"OPTIONS /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"204","r":"c","k":"answer"},{"t":"cors post","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"legacy signup","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"legacy verify password","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"legacy get account info","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"legacy set account info","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/setAccountInfo","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"legacy create auth uri","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"legacy get oob","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/getOobConfirmationCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"legacy reset password","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"legacy verify custom token","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"legacy verify assertion","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"legacy send verification code","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"legacy verify phone","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"legacy recaptcha","q":"GET /www.googleapis.com/identitytoolkit/v3/relyingparty/getRecaptchaParam","a":"200 identitytoolkit#GetRecaptchaParamResponse","r":"c","k":"answer"},{"t":"legacy project config","q":"GET /www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"legacy sign out","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/signOutUser","a":"501 NOT_IMPLEMENTED: signOutUser is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"legacy download","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/downloadAccount","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"legacy download no project","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/downloadAccount","a":"400 INSUFFICIENT_PERMISSION","r":"c","k":"answer"},{"t":"legacy upload","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/uploadAccount","a":"200 {error: []}","r":"c","k":"answer"},{"t":"legacy upload snake","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/uploadAccount","a":"200 {error: []}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"legacy delete expired","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/deleteAccount","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"legacy verify password 2","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"legacy delete","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/deleteAccount","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"legacy public keys","q":"GET /www.googleapis.com/identitytoolkit/v3/relyingparty/publicKeys","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"issue saml response","q":"POST /identitytoolkit.googleapis.com/v1/accounts:issueSamlResponse","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.issueSamlResponse is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"game center","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithGameCenter","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.signInWithGameCenter is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"verify ios client","q":"POST /identitytoolkit.googleapis.com/v1/accounts:verifyIosClient","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.verifyIosClient is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"session cookie public keys no key","q":"GET /identitytoolkit.googleapis.com/v1/sessionCookiePublicKeys","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"session cookie public keys","q":"GET /identitytoolkit.googleapis.com/v1/sessionCookiePublicKeys","a":"501 NOT_IMPLEMENTED: identitytoolkit.getSessionCookiePublicKeys is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"revoke token","q":"POST /identitytoolkit.googleapis.com/v2/accounts:revokeToken","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.revokeToken is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default supported idps","q":"GET /identitytoolkit.googleapis.com/v2/defaultSupportedIdps","a":"501 NOT_IMPLEMENTED: identitytoolkit.defaultSupportedIdps.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"password policy","q":"GET /identitytoolkit.googleapis.com/v2/passwordPolicy","a":"501 NOT_IMPLEMENTED: identitytoolkit.getPasswordPolicy is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"recaptcha config","q":"GET /identitytoolkit.googleapis.com/v2/recaptchaConfig","a":"501 NOT_IMPLEMENTED: identitytoolkit.getRecaptchaConfig is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp configs list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp configs create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp config get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp config patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp config delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml configs list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth configs list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"initialize auth","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/identityPlatform:initializeAuth","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.identityPlatform.initializeAuth is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant get iam","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha:getIamPolicy","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.getIamPolicy is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant set iam","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha:setIamPolicy","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.setIamPolicy is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant test iam","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha:testIamPermissions","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.testIamPermissions is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"handler missing params","q":"GET /emulator/auth/handler","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"send code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"delete all","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"oob codes","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"verification codes","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"consume after delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"phone after delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"old token after delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"old refresh after delete","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"delete all no auth","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"delete all with body","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"export accounts","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"export config","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"delete all","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"cli import route","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants//accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"cli import empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants//accounts:batchCreate","a":"400 MISSING_USER_ACCOUNT","r":"c","k":"answer"},{"t":"cli import config","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"export after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"signin reimported","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:tenant}}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"tenant export","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:tenant}}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"tenants export","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"set claims","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"password signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"refresh multi","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"password signin multi","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"google signin multi","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup multi","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"claims overwrite","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh after overwrite","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"claims clear","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh after clear","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"custom claims vs attributes","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"refresh custom","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"disable password user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable google user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable phone user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"send oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"password signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"google signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"google signin return credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"phone send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"admin lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"session cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"admin update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"enable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup enabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable again","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"send reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"password signin after reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"lookup after reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"send reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"delete again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"consume oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"session cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"signup again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"old token vs new user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"oob codes","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"query key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"header key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"any key value","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"empty key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"no key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"owner no key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"owner and key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"bad bearer with key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"401 UNAUTHENTICATED: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authenticatโ€ฆ","r":"c","k":"answer"},{"t":"basic auth with key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"securetoken no key","q":"POST /securetoken.googleapis.com/v1/token","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"recaptcha no key","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"emulator routes no key","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"action no key","q":"GET /emulator/action","a":"400 missing apiKey query parameter","r":"c","k":"answer"},{"t":"owner on securetoken","q":"POST /securetoken.googleapis.com/v1/token","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"number to string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bool as string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"unknown field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"array for string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /email must be string","r":"c","k":"answer"},{"t":"object for string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /email must be string","r":"c","k":"answer"},{"t":"null field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /tenantId must be string","r":"c","k":"answer"},{"t":"enum index","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"enum unknown","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /requestType must be equal to one of the allowed values","r":"c","k":"answer"},{"t":"enum number out of range","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /requestType must be equal to one of the allowed values","r":"c","k":"answer"},{"t":"string for array","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /localId must be array","r":"c","k":"answer"},{"t":"delete attribute enum index","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete attribute unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /deleteAttribute/0 must be equal to one of the allowed values","r":"c","k":"answer"},{"t":"batch get string max","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. must be integer","r":"c","k":"answer"},{"t":"query sort enum index","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"body array","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. must be object","r":"c","k":"answer"},{"t":"empty body","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"text plain json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 Invalid content-type: text/plain","r":"c","k":"answer"},{"t":"no content type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"form body","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 Invalid content-type: application/x-www-form-urlencoded","r":"c","k":"answer"},{"t":"snake nested","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"snake admin","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"send reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"admin lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"lookup imported","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"import collision","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"update email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup changed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"admin create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup admin","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup admin changed","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"google first","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"link password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup google password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"link github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup four","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"update profile","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup renamed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by github","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by provider email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"create auth uri provider email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"unlink github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by github after","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"relink github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup relinked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"google profile refresh","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup after refresh","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin link","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin relink existing","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup final","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"export","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"malformed json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. Expected property name or '}' in JSON at position 1 (line 1 column 2)","r":"d","k":"answer","w":"the JSON parse error text is V8's; Firenook reports serde's message with the same status and shape"},{"t":"signin function text","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"500 INTERNAL: BLOCKING_FUNCTION_ERROR_RESPONSE : ((Response body is not valid JSON.))","r":"d","k":"answer","w":"a blocking function's non-JSON body is reported with V8's parse error as the reason; Firenook reports serde's"},{"t":"handler empty","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"handler google","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"handler github","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"handler tenant","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"iframe","q":"GET /emulator/auth/iframe","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"iframe no params","q":"GET /emulator/auth/iframe","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"body string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. Unexpected token '\"', \"\"just a string\"\" is not valid JSON","r":"d","k":"answer","w":"the JSON parse error text is V8's; Firenook reports serde's message with the same status and shape"},{"t":"create auth uri existing password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"recaptcha parameters","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"200 identitytoolkit#GetRecaptchaParamResponse","r":"c","k":"answer"},{"t":"fake google idp sign in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"idp secure token refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, user_id, project_id}","r":"c","k":"answer"},{"t":"readiness","q":"GET /","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"password sign up","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"client account lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"client profile update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin custom claims update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin lookup by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin query users","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"password sign in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"strict json custom token sign in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"secure token refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, user_id, project_id}","r":"c","k":"answer"},{"t":"wrong password error","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"emulator config before","q":"GET /emulator/v1/projects/{project}/config","a":"200 {signIn, emailPrivacyConfig}","r":"c","k":"answer"},{"t":"emulator config update","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {signIn, emailPrivacyConfig}","r":"c","k":"answer"},{"t":"accounts json batch import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"accounts json batch export","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet?maxResults=1000","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"admin create user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"admin delete user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"emulator delete all accounts","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"handler validation 1","q":"GET /emulator/auth/handler","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 2","q":"GET /emulator/auth/handler?apiKey=demo","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 3","q":"GET /emulator/auth/handler?providerId=google.com","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"signInWithIdp 1","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"signInWithIdp 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท new user","r":"c","k":"answer"},{"t":"signInWithIdp 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"popup event 1","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"popup event 2","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"sign in to a linked account","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (account linked to github.com and google.com)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"sign in after disabling","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (account disabled)","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"handler validation 1","q":"GET /emulator/auth/handler","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 2","q":"GET /emulator/auth/handler?apiKey=demo","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 3","q":"GET /emulator/auth/handler?providerId=google.com","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"signInWithIdp 1","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"signInWithIdp 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท new user","r":"c","k":"answer"},{"t":"signInWithIdp 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"popup event 1","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"popup event 2","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"anonymous first","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous first)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous repeat original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous repeat original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 1","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 2","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 3","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 4","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous disabled","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous disabled)","a":"400 USER_DISABLED","r":"c","k":"error"},{"t":"anonymous reenabled original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous reenabled original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous deleted","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous deleted)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"password first","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password first)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password repeat original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password repeat original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 1","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 2","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 3","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 4","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password disabled","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password disabled)","a":"400 USER_DISABLED","r":"c","k":"error"},{"t":"password reenabled original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password reenabled original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password deleted","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password deleted)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"custom first","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom first)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom repeat original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom repeat original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 1","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 2","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 3","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 4","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom disabled","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom disabled)","a":"400 USER_DISABLED","r":"c","k":"error"},{"t":"custom reenabled original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom reenabled original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom deleted","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom deleted)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"unknown token","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, unknown token)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"browser refresh 1","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"browser refresh 2","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"browser refresh 3","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"browser refresh 4","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"oauth popup handler","q":"GET /emulator/auth/handler?providerId=google.com","a":"200 {byteLength, sha256, contains}","r":"u"},{"t":"oauth helper iframe","q":"GET /emulator/auth/iframe?appName=phase4","a":"200 {byteLength, sha256, contains}","r":"u"}]} \ No newline at end of file +{"runs":[[0,18,0,"custom claims are measured in UTF-16 code units: รฉ counts one, ๐Ÿ”ฅ counts two, at 999 to 1,001"],[18,18,1,"signUp validation order, canonical email and the issued tokens"],[36,16,1,"signInWithPassword success and every recorded failure"],[52,12,1,"emailPrivacyConfig.enableImprovedEmailPrivacy masks enumeration"],[64,12,1,"anonymous sign-up, its token claims and the upgrade to email+password"],[76,16,1,"createAuthUri reports registration and sign-in methods"],[92,19,1,"privileged signUp (Admin SDK createUser) fields and errors"],[111,10,1,"signInWithIdp with a fake Google id_token: new user, repeat, profile and verification fields"],[121,4,1,"signInWithIdp credential forms: fragment, query, JWT id_token, access_token alongside"],[125,13,1,"every provider id the widget offers plus OIDC and SAML"],[138,14,1,"signInWithIdp request validation and the not-implemented credential forms"],[152,15,1,"one account per email: federated sign-in against existing password accounts"],[167,13,1,"signIn.allowDuplicateEmails changes federated sign-in and sign-up semantics"],[180,20,1,"linking a federated identity to a signed-in account and unlinking it"],[200,23,1,"signInWithCustomToken: JSON and JWT tokens, claims and validation"],[223,22,1,"VERIFY_EMAIL: send, list, consume via update and via the action page"],[245,25,1,"PASSWORD_RESET: send, resetPassword, effects on providers and the action page"],[270,27,1,"EMAIL_SIGNIN: send, signInWithEmailLink for new and existing users, action page"],[297,18,1,"VERIFY_AND_CHANGE_EMAIL: send, consume via update and via the action page"],[315,17,1,"plain email updates issue RECOVER_EMAIL codes; the recoverEmail action page"],[332,16,1,"privileged sendOobCode with returnOobLink (Admin SDK generate*Link)"],[348,22,1,"sendVerificationCode and signInWithPhoneNumber for new and existing users"],[370,19,1,"linking a phone number to a signed-in account, collisions and temporary proofs"],[389,31,1,"client accounts:update: profile, email, password, token re-issue, deleteAttribute and errors"],[420,26,1,"privileged accounts:update: claims, phone, flags, timestamps, validSince, password and email"],[446,26,1,"privileged accounts:update: providers, MFA enrolments, deleteAttribute and the security forms"],[472,15,1,"securetoken grant: bodies, reuse, revocation and errors"],[487,24,1,"privileged lookup by every key, dedupe, not found; delete; project scoping"],[511,7,1,"batchCreate (importUsers): every imported field and the sign-ins it enables"],[518,14,1,"batchCreate: per-index errors, whole-request errors, overwrite and hash options"],[532,14,1,"batchGet (listUsers) paging by localId with maxResults and nextPageToken"],[546,14,1,"accounts:query and :queryAccounts: counts, sorting and the not-implemented filters"],[560,9,1,"batchDelete (deleteUsers): limits, NOT_DISABLED, force and lifecycle events"],[569,12,1,"createSessionCookie validity bounds and the cookie claims"],[581,21,1,"v2 project config, the emulator config routes and getProjects"],[602,28,1,"tenant create/get/list/patch/delete and the auto-created tenant"],[630,30,1,"client sign-in flows scoped to a tenant, tenant claims and isolation from the root project"],[660,23,1,"privileged account routes scoped to a tenant, tenant export and delete all"],[683,14,1,"SMS second factor: enrolment start/finalize and its validation"],[697,29,1,"SMS second factor: MFA sign-in, withdraw and ineligible first factors"],[726,12,1,"MFA users created by import, pending credentials on email link and IdP first factors"],[738,21,1,"passkey enrolment and sign-in as the emulator fakes them"],[759,22,1,"beforeCreate and beforeSignIn on password sign-up and sign-in: JWT payload, updates, errors"],[781,6,1,"blocking functions on IdP sign-ins with inbound credential forwarding"],[787,9,1,"blocking functions on email-link and phone sign ins"],[796,9,1,"blocking functions on MFA finalize and under a tenant"],[805,18,1,"trigger_multicast for every create and delete path; silent for imports and delete all"],[823,7,1,"readiness, the OpenAPI document, CORS and unknown routes"],[830,23,1,"the legacy v3 relyingparty routes rewrite onto v1 operations"],[853,9,1,"client operations the official emulator answers with 501"],[862,34,1,"privileged operations the official emulator answers with 501"],[896,3,1,"the popup handler page with and without accounts, the iframe page"],[899,13,1,"delete-all clears accounts but keeps issued codes; verification codes listing"],[912,11,1,"the record set the CLI export writes (batchGet + config) re-imported through the CLI's import route"],[923,4,1,"tenant accounts in the export layout"],[927,23,1,"id token claims per sign-in method, custom and session claims, multi-provider identities"],[950,32,1,"every operation against a disabled account"],[982,18,1,"tokens and codes of a deleted account against every operation"],[1000,14,1,"apiKey in the query, in the header, missing, and owner client routes"],[1014,22,1,"OpenAPI body validation: coercions, unknown fields, wrong types and enum handling"],[1036,19,1,"mixed-case e-mail addresses are lower-cased at every entry point"],[1055,22,1,"providerUserInfo ordering and content through links, unlinks and profile updates"],[1077,1,1,"signUp validation order, canonical email and the issued tokens"],[1078,1,1,"beforeCreate and beforeSignIn on password sign-up and sign-in: JWT payload, updates, errors"],[1079,6,1,"the popup handler page with and without accounts, the iframe page"],[1085,1,1,"OpenAPI body validation: coercions, unknown fields, wrong types and enum handling"],[1086,4,2,"Browser discovery, fake Google IdP, helper popup/iframe, and secure-token refresh routes expose the contract consumed by the Firebase browser SDK"],[1090,11,2,"Identity Toolkit client and privileged Admin routes preserve Firebase response, error, custom-claim, custom-token, and unsigned JWT contracts"],[1101,7,2,"Auth config/accounts import and export preserve persisted fields while user create/delete lifecycle operations multicast legacy Firebase Auth events to Functions"],[1108,8,2,"Sign-in popup and redirect in a real browser (loopback origin)"],[1116,2,2,"An IdP sign-in reuses a linked account and honours disabling"],[1118,8,2,"Sign-in popup and redirect in a real browser (insecure origin emulator.test)"],[1126,9,2,"Refresh grants reused: anonymous sign in"],[1135,9,2,"Refresh grants reused: password sign in"],[1144,9,2,"Refresh grants reused: custom sign in"],[1153,1,2,"Refresh grants reused: unknown sign in"],[1154,4,2,"Refresh from the browser SDK: forced, two tabs, reload"],[1158,2,2,"Browser discovery, fake Google IdP, helper popup/iframe, and secure-token refresh routes expose the contract consumed by the Firebase browser SDK"]],"cases":[{"t":"create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"ascii 1000","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"ascii 1001","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"accented 999","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"accented 1000","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"accented 1001","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"lookup accented","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"emoji 1000","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"emoji 1001","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"lookup emoji","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin carries claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [2 items]}","r":"c","k":"answer"},{"t":"imported","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"configure blocking","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"blocking accented 1000","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"blocking emoji 1000","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"blocking emoji 1001","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"lookup blocking","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"no api key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"missing password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 MISSING_PASSWORD","r":"c","k":"answer"},{"t":"invalid email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"weak password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"local id rejected","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 UNEXPECTED_PARAMETER : User ID","r":"c","k":"answer"},{"t":"ok","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"duplicate","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"duplicate other case","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"lookup garbage token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"without return secure token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"empty email string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"email as number","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"email as object","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /email must be string","r":"c","k":"answer"},{"t":"snake case keys","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"snake case lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"invalid email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"missing password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 MISSING_PASSWORD","r":"c","k":"answer"},{"t":"unknown email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"wrong password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"ok","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"captcha","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"501 NOT_IMPLEMENTED: captcha unimplemented","r":"c","k":"answer"},{"t":"id token param","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"501 NOT_IMPLEMENTED: idToken / pendingIdToken is no longer in use and unsupported by the Auth Emulator.","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"refresh disabled","q":"POST /securetoken.googleapis.com/v1/token","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"lookup disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"enable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"ok again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"lookup after","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"config default","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"enable","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"config after","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"unknown email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_LOGIN_CREDENTIALS","r":"c","k":"answer"},{"t":"wrong password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_LOGIN_CREDENTIALS","r":"c","k":"answer"},{"t":"ok","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"reset unknown","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"reset known","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"disable privacy","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"unknown email again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"upgrade","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup upgraded","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"second anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous with display name","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup display name","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"delete again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"missing identifier","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 MISSING_IDENTIFIER","r":"c","k":"answer"},{"t":"missing continue uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 MISSING_CONTINUE_URI","r":"c","k":"answer"},{"t":"invalid identifier","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 INVALID_IDENTIFIER","r":"c","k":"answer"},{"t":"invalid continue uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"400 INVALID_CONTINUE_URI","r":"c","k":"answer"},{"t":"provider id","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"501 NOT_IMPLEMENTED: Sign-in with IDP is not yet supported.","r":"c","k":"answer"},{"t":"unregistered","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"google link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"password and google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"with session id","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"google only user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"federated only","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"email link user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"full","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"duplicate local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 DUPLICATE_LOCAL_ID","r":"c","k":"answer"},{"t":"duplicate email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"duplicate phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"disabled user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"disabled signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"no identity","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"id token and local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 UNEXPECTED_PARAMETER : User ID","r":"c","k":"answer"},{"t":"weak password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"with mfa","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup mfa","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mfa invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"400 INVALID_MFA_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"custom attributes ignored","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup claims","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup owner unscoped","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup unscoped","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"first","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"unverified email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup unverified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"upper case email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"request uri fragment","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"request uri query","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"jwt id token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"access token with id token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"facebook","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"twitter","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"apple","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"microsoft","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"yahoo","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"oidc","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"saml","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"saml missing assertion","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE ((Missing assertion in SAMLResponse.))","r":"c","k":"answer"},{"t":"provider upper case","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"lookup github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup saml","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"missing request uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 MISSING_REQUEST_URI","r":"c","k":"answer"},{"t":"invalid request uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_REQUEST_URI","r":"c","k":"answer"},{"t":"missing provider","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_CREDENTIAL_OR_PROVIDER_ID : Invalid IdP response/credential: http://localhost/?id_token=%7B%22sub%22%3A%22x%22%7D","r":"c","k":"answer"},{"t":"missing sub","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : Invalid Idp Response: id_token missing required fields. ((Missing \"sub\" field. This field is required and must bโ€ฆ","r":"c","k":"answer"},{"t":"sub not string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : ((The \"sub\" field must be a string.))","r":"c","k":"answer"},{"t":"id token not json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : Unable to parse id_token: {not-json ((Auth Emulator failed to parse fake id_token as strict JSON.))","r":"c","k":"answer"},{"t":"id token garbage","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 INVALID_IDP_RESPONSE : Unable to parse id_token: garbage-token ((Auth Emulator only accepts strict JSON or JWTs as fake id_tokens.))","r":"c","k":"answer"},{"t":"access token only google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: The Auth Emulator only support sign-in with google.com using id_token, not access_token. Please update your code to usโ€ฆ","r":"c","k":"answer"},{"t":"access token only facebook","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: The Auth Emulator does not support facebook.com sign-in with credentials.","r":"c","k":"answer"},{"t":"access token json claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"no credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: The Auth Emulator only supports sign-in with credentials (id_token required).","r":"c","k":"answer"},{"t":"return refresh token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: returnRefreshToken is not implemented yet.","r":"c","k":"answer"},{"t":"pending id token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"501 NOT_IMPLEMENTED: pendingIdToken is not implemented yet.","r":"c","k":"answer"},{"t":"no api key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"password unverified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"google takes over unverified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup taken over","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"password signin after takeover","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"bob password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"verify bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"google joins verified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup joined","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"password still works","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"carol password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"unverified provider email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"unverified provider email return credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"recycled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup recycled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"allow","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"config","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"google same email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"facebook same email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"signup duplicate","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"link google to password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"import duplicate","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"import duplicate sanity","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"link google again same","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 FEDERATED_USER_ID_ALREADY_LINKED","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"link already linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 FEDERATED_USER_ID_ALREADY_LINKED","r":"c","k":"answer"},{"t":"link already linked return credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"link email of other","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"link verified email marks verified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"unlink google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup unlinked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"unlink missing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"google signin after unlink","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"unlink password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"password signin after unlink","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup anon linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 MISSING_CUSTOM_TOKEN","r":"c","k":"answer"},{"t":"json token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"json token again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"json invalid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CUSTOM_TOKEN : ((Auth Emulator only accepts strict JSON or JWTs as fake custom tokens.))","r":"c","k":"answer"},{"t":"jwt token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup jwt","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"wrong audience","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CUSTOM_TOKEN : ((Invalid aud (audience): wrong-audience Note: Firebase ID Tokens / third-party tokens cannot be used with signIโ€ฆ","r":"c","k":"answer"},{"t":"garbage","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CUSTOM_TOKEN : Invalid assertion format","r":"c","k":"answer"},{"t":"missing uid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 MISSING_IDENTIFIER","r":"c","k":"answer"},{"t":"user id field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"numeric uid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"forbidden claim","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 FORBIDDEN_CLAIM : iss","r":"c","k":"answer"},{"t":"claims not object","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 INVALID_CLAIMS","r":"c","k":"answer"},{"t":"signed jwt","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"tenant claim on root","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup tenant claim","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"existing password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom for password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"lookup password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_REQ_TYPE","r":"c","k":"answer"},{"t":"unspecified type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_REQ_TYPE","r":"c","k":"answer"},{"t":"unknown type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"501 NOT_IMPLEMENTED: RECOVER_EMAIL","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"invalid continue url","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_CONTINUE_URI : ((expected an absolute URI with valid scheme and host))","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"consume","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup verified","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"consume again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"list after","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"send with continue","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action missing api key","q":"GET /emulator/action","a":"400 missing apiKey query parameter","r":"c","k":"answer"},{"t":"action missing oob","q":"GET /emulator/action","a":"400 missing oobCode query parameter","r":"c","k":"answer"},{"t":"action wrong mode","q":"GET /emulator/action","a":"400 Invalid mode","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/after","r":"c","k":"answer"},{"t":"action used","q":"GET /emulator/action","a":"400 Your request to verify your email has expired or the link has already been used.","r":"c","k":"answer"},{"t":"send json page","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action json","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"unknown email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"reset missing code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 MISSING_OOB_CODE","r":"c","k":"answer"},{"t":"reset invalid code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"verify code only","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"reset weak","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"reset again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"old password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"lookup after reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action no password","q":"GET /emulator/action","a":"400 missing newPassword query parameter","r":"c","k":"answer"},{"t":"action placeholder","q":"GET /emulator/action","a":"400 newPassword must be something other than 'NEW_PASSWORD_HERE'","r":"c","k":"answer"},{"t":"action weak","q":"GET /emulator/action","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/done","r":"c","k":"answer"},{"t":"action used","q":"GET /emulator/action","a":"400 Your request to reset your password has expired or the link has already been used.","r":"c","k":"answer"},{"t":"password4","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action json","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"signin missing email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"signin missing code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 MISSING_OOB_CODE","r":"c","k":"answer"},{"t":"signin wrong email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 INVALID_EMAIL : The email provided does not match the sign-in email address.","r":"c","k":"answer"},{"t":"signin invalid code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"signin new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"lookup new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin reuse","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"signin existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"verify code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send for alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"link to alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"lookup alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"send for bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"link bob to alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"lookup alice after bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"send for link again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"link existing to alice","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action no continue","q":"GET /emulator/action","a":"400 Missing continueUrl query parameter","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/finish?x=1&mode=signIn&apiKey=fake-api-key&oobCode={{oob:send-3}}&lang=en","r":"c","k":"answer"},{"t":"signin page code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing new email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_NEW_EMAIL","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"new email exists","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"verify code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"consume","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup changed","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token after change","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"consume again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"signin new email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action redirect","q":"GET /emulator/action","a":"303 See Other. Redirecting to http://localhost/changed","r":"c","k":"answer"},{"t":"action used","q":"GET /emulator/action","a":"400 Your request to change your email has expired or the link has already been used.","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"action json","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"rename","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin alice4","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"plain update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup plain update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"list recover","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"send verify","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"recover wrong mode","q":"GET /emulator/action","a":"400 Requested mode does not match the OOB code provided.","r":"c","k":"answer"},{"t":"recover","q":"GET /emulator/action","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"recover again","q":"GET /emulator/action","a":"400 Requested mode does not match the OOB code provided.","r":"c","k":"answer"},{"t":"lookup recovered","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin old email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"signin recovered","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"update to same email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"update to existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"update invalid email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_EMAIL","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"client return link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INSUFFICIENT_PERMISSION","r":"c","k":"answer"},{"t":"verify","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"verify unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"verify missing email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"change","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"change unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"verify with token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"no return link","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:sendOobCode","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"consume admin code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"reset admin code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"list tenant","q":"GET /emulator/v1/projects/{project}/tenants/tenant-alpha/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"list after","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"missing phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"list","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"signin missing session","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 MISSING_SESSION_INFO","r":"c","k":"answer"},{"t":"signin missing code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 MISSING_CODE","r":"c","k":"answer"},{"t":"signin invalid session","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_SESSION_INFO","r":"c","k":"answer"},{"t":"signin wrong code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_CODE","r":"c","k":"answer"},{"t":"signin new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin reuse","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_SESSION_INFO","r":"c","k":"answer"},{"t":"list after","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"signin existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin disabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"temporary proof invalid","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_TEMPORARY_PROOF","r":"c","k":"answer"},{"t":"temporary proof missing phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 MISSING_PHONE_NUMBER","r":"c","k":"answer"},{"t":"send tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 UNSUPPORTED_TENANT_OPERATION","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link collision","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {phoneNumber, temporaryProof, temporaryProofExpiresIn}","r":"c","k":"answer"},{"t":"proof with token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"proof without token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"proof wrong phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 INVALID_TEMPORARY_PROOF","r":"c","k":"answer"},{"t":"unlink","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup unlinked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"send 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup bob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin set phone exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"admin set phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup admin phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin lookup by phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"no token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_REQ_TYPE : Unsupported request parameters.","r":"c","k":"answer"},{"t":"profile","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup profile","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete display name","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete photo","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup deleted","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete provider attr","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: deleteAttribute: PROVIDER","r":"c","k":"answer"},{"t":"delete raw user info","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: deleteAttribute: RAW_USER_INFO","r":"c","k":"answer"},{"t":"custom attributes","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INSUFFICIENT_PERMISSION","r":"c","k":"answer"},{"t":"disable user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 OPERATION_NOT_ALLOWED","r":"c","k":"answer"},{"t":"provider field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: provider is not implemented yet.","r":"c","k":"answer"},{"t":"upgrade to federated","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"501 NOT_IMPLEMENTED: upgradeToFederatedLogin is not implemented yet.","r":"c","k":"answer"},{"t":"weak password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 WEAK_PASSWORD : Password should be at least 6 characters","r":"c","k":"answer"},{"t":"password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token after password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"old refresh after password","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"lookup new token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin old password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"signin new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"old token after email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"delete password attr","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete email attr","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"set email again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup final","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"garbage token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"unknown user token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"missing local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"unknown user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"claims invalid","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_CLAIMS","r":"c","k":"answer"},{"t":"claims too large","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 CLAIMS_TOO_LARGE","r":"c","k":"answer"},{"t":"claims forbidden","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 FORBIDDEN_CLAIM : aud","r":"c","k":"answer"},{"t":"claims array","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_CLAIMS","r":"c","k":"answer"},{"t":"claims","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh with claims","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"phone invalid","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"phone exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 PHONE_NUMBER_EXISTS","r":"c","k":"answer"},{"t":"email verified","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"timestamps","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup timestamps","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"valid since","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"token after valid since","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"refresh after valid since","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"valid since reset","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"email exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 EMAIL_EXISTS","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signin new password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"delete provider password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup no password","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete provider phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"link provider missing provider","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_PROVIDER_ID","r":"c","k":"answer"},{"t":"link provider missing raw id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_RAW_ID","r":"c","k":"answer"},{"t":"link provider","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup linked","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by federated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mfa set","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup mfa","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mfa missing id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_MFA_ENROLLMENT_ID : mfaEnrollmentId must be defined.","r":"c","k":"answer"},{"t":"mfa invalid phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_MFA_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"mfa clear","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup mfa cleared","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete attributes","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup deleted","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"id token with disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"id token privileged","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"unauthenticated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"bad bearer","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"401 UNAUTHENTICATED: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authenticatโ€ฆ","r":"c","k":"answer"},{"t":"service account token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup final","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing grant type","q":"POST /securetoken.googleapis.com/v1/token","a":"400 MISSING_GRANT_TYPE","r":"c","k":"answer"},{"t":"invalid grant type","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_GRANT_TYPE","r":"c","k":"answer"},{"t":"missing refresh token","q":"POST /securetoken.googleapis.com/v1/token","a":"400 MISSING_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"garbage","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"base64 without marker","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"wrong project","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"unknown user","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"json","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"form","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"camel case","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"reuse","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"no api key","q":"POST /securetoken.googleapis.com/v1/token","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"deleted user","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"alice","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"by local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"by phone","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"mixed dedupe","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"federated incomplete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"none found","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"initial email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"501 NOT_IMPLEMENTED: Lookup by initialEmail is not implemented.","r":"c","k":"answer"},{"t":"unscoped owner lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"target project without owner","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 INSUFFICIENT_PERMISSION : Only authenticated requests can specify target_project_id.","r":"c","k":"answer"},{"t":"target project in body","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"other project path","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"other project create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"other project lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete missing local id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 MISSING_LOCAL_ID","r":"c","k":"answer"},{"t":"delete unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"delete bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"delete bob again","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"client delete owner","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"projects","q":"GET /identitytoolkit.googleapis.com/v1/projects","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"projects client","q":"GET /identitytoolkit.googleapis.com/v1/projects","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"missing users","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 MISSING_USER_ACCOUNT","r":"c","k":"answer"},{"t":"empty users","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 MISSING_USER_ACCOUNT","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"signin raw password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin hash","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"per index errors","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [16 items]}","r":"c","k":"answer"},{"t":"duplicate local ids","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 DUPLICATE_LOCAL_ID : same","r":"c","k":"answer"},{"t":"sanity duplicate email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 DUPLICATE_EMAIL : s@example.com","r":"c","k":"answer"},{"t":"sanity duplicate raw id","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"400 DUPLICATE_RAW_ID : Provider id(google.com), Raw id(same-raw)","r":"c","k":"answer"},{"t":"sanity email exists","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"overwrite","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"lookup overwritten","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"overwrite duplicate ids","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"lookup same2","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"hash options ignored","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"signin scrypt","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"lookup scrypt","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"all users after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"default","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"page 1","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"page 2","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"page 3","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"past end","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"exact","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"over cap","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"zero","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"negative","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"not a number","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. must be integer","r":"c","k":"answer"},{"t":"tenant query","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"empty project","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"unauthenticated","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"default","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"count only","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount}","r":"c","k":"answer"},{"t":"desc","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"unspecified","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"expression","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: expression is not implemented.","r":"c","k":"answer"},{"t":"limit","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: limit is not implemented.","r":"c","k":"answer"},{"t":"offset","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: offset is not implemented.","r":"c","k":"answer"},{"t":"offset zero","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"sort by name","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"501 NOT_IMPLEMENTED: Only sorting by USER_ID is implemented.","r":"c","k":"answer"},{"t":"alias","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:queryAccounts","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"empty project","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"unauthenticated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"400 LOCAL_ID_LIST_EXCEEDS_LIMIT","r":"c","k":"answer"},{"t":"missing","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"400 LOCAL_ID_LIST_EXCEEDS_LIMIT","r":"c","k":"answer"},{"t":"too many","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"400 LOCAL_ID_LIST_EXCEEDS_LIMIT","r":"c","k":"answer"},{"t":"mixed","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {errors}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"force","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"all users after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"again","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"missing token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"too short","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 INVALID_DURATION","r":"c","k":"answer"},{"t":"too long","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 INVALID_DURATION","r":"c","k":"answer"},{"t":"default","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"hour","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"numeric duration","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"garbage token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 INVALID_ID_TOKEN","r":"c","k":"answer"},{"t":"unauthenticated","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"deleted user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"tenant cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/tenant-alpha:createSessionCookie","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"get default","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator default","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"patch masked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get after masked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator after masked","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"patch unmasked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get after unmasked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"invalid event","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"400 INVALID_BLOCKING_FUNCTION : ((Event type is invalid.))","r":"c","k":"answer"},{"t":"invalid uri","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"400 INVALID_BLOCKING_FUNCTION : ((Expected an absolute URI with valid scheme and host.))","r":"c","k":"answer"},{"t":"blocking ok","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get with blocking","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"mask unknown field","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get final","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator patch both","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"get after emulator patch","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator patch empty","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"emulator patch no auth","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"tenant config","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/config","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"v2 unknown project","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"recaptcha","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"200 identitytoolkit#GetRecaptchaParamResponse","r":"c","k":"answer"},{"t":"recaptcha no key","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"list empty","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"get auto a","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-a","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get auto b","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-b","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get auto c","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-c","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"list auto","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page 1","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page 2","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page past end","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list page zero","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"create defaults","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"create full","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"create empty","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"create mfa partial","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"patch masked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"get after masked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"patch mask nested","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"get after nested","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"patch unmasked","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"get after unmasked","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-full}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-defaults}}","a":"200 {}","r":"c","k":"answer"},{"t":"list after delete","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"get after delete","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create-defaults}}","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"delete auto","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/t-a","a":"200 {}","r":"c","k":"answer"},{"t":"list final","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"list unauthenticated","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"create unauthenticated","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signup not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 OPERATION_NOT_ALLOWED","r":"c","k":"answer"},{"t":"anonymous not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 ADMIN_ONLY_OPERATION","r":"c","k":"answer"},{"t":"email link not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 OPERATION_NOT_ALLOWED","r":"c","k":"answer"},{"t":"password signin not allowed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 PASSWORD_LOGIN_DISABLED","r":"c","k":"answer"},{"t":"allow","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup tenant token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup explicit tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup wrong tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TENANT_ID_MISMATCH","r":"c","k":"answer"},{"t":"root lookup by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"tenant lookup by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"tenant lookup body mismatch","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:lookup","a":"400 TENANT_ID_MISMATCH","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin root","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"refresh mismatch","q":"POST /securetoken.googleapis.com/v1/token","a":"400 TENANT_ID_MISMATCH: ((Refresh token tenant ID does not match target tenant ID.))","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"custom token no body tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"custom token mismatch","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 TENANT_ID_MISMATCH","r":"c","k":"answer"},{"t":"custom token json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"tenant oob codes","q":"GET /emulator/v1/projects/{project}/tenants/{{tenantId:create}}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"root oob codes","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"email link signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"400 UNSUPPORTED_TENANT_OPERATION","r":"c","k":"answer"},{"t":"tenant verification codes","q":"GET /emulator/v1/projects/{project}/tenants/{{tenantId:create}}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"root verification codes","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"tenant create user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"tenant import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchCreate","a":"200 {error: [1 item]}","r":"c","k":"answer"},{"t":"tenant batch get","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"root batch get","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"root batch get tenant query","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"tenant query","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"tenant update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"tenant send oob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"tenant session cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"root session cookie tenant token","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"tenant batch delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"tenant delete user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"root delete tenant user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"get projects tenant","q":"GET /identitytoolkit.googleapis.com/v1/projects","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"tenant delete all","q":"DELETE /emulator/v1/projects/{project}/tenants/{{tenantId:create}}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"tenant batch get after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"root batch get after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"disable auth","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/{{tenantId:create}}","a":"200 {disableAuth, displayName, enableAnonymousUser, enableEmailLinkSignin, โ€ฆ}","r":"c","k":"answer"},{"t":"signin disabled tenant","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 PROJECT_DISABLED","r":"c","k":"answer"},{"t":"tenant batch get disabled","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:create}}/accounts:batchGet","a":"400 PROJECT_DISABLED","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"start unverified","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 UNVERIFIED_EMAIL : Need to verify email first before enrolling second factors.","r":"c","k":"answer"},{"t":"verify","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"start missing token","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"start missing info","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 INVALID_ARGUMENT : ((Missing phoneEnrollmentInfo.))","r":"c","k":"answer"},{"t":"start invalid phone","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 INVALID_PHONE_NUMBER : Invalid format.","r":"c","k":"answer"},{"t":"start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"200 {phoneSessionInfo}","r":"c","k":"answer"},{"t":"codes","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"finalize missing code","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"400 MISSING_CODE","r":"c","k":"answer"},{"t":"finalize wrong code","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"400 INVALID_CODE","r":"c","k":"answer"},{"t":"finalize android proof","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"501 NOT_IMPLEMENTED: androidVerificationProof is unsupported!","r":"c","k":"answer"},{"t":"finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup enrolled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"start duplicate","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 SECOND_FACTOR_EXISTS : Phone number already enrolled as second factor for this account.","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"verify","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"200 {phoneSessionInfo}","r":"c","k":"answer"},{"t":"finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"signin pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"mfa start missing credential","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 MISSING_MFA_PENDING_CREDENTIAL : Request does not have MFA pending credential.","r":"c","k":"answer"},{"t":"mfa start missing enrollment","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 MISSING_MFA_ENROLLMENT_ID : No second factor identifier is provided.","r":"c","k":"answer"},{"t":"mfa start unknown enrollment","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 MFA_ENROLLMENT_NOT_FOUND","r":"c","k":"answer"},{"t":"mfa start bad credential","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 ((Invalid phoneVerificationInfo.mfaPendingCredential.))","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize wrong code","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"400 INVALID_CODE","r":"c","k":"answer"},{"t":"mfa finalize missing credential","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"400 MISSING_CREDENTIAL : Please set MFA Pending Credential.","r":"c","k":"answer"},{"t":"mfa start 2","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup signed in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"idp pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone first factor","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"withdraw unknown","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:withdraw","a":"400 MFA_ENROLLMENT_NOT_FOUND","r":"c","k":"answer"},{"t":"withdraw","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:withdraw","a":"200 {expiresIn}","r":"c","k":"answer"},{"t":"lookup withdrawn","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin plain","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"start anonymous","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 UNSUPPORTED_FIRST_FACTOR : MFA is not available for the given first factor.","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"start custom","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 UNSUPPORTED_FIRST_FACTOR : MFA is not available for the given first factor.","r":"c","k":"answer"},{"t":"tenant mfa disabled","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"tenant start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 OPERATION_NOT_ALLOWED : SMS based MFA not enabled.","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"signin pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"idp pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"mfa start idp","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize idp","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"pending other project","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"mfa start wrong project","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"400 INVALID_PROJECT_ID : Project ID does not match MFA pending credential.","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"enroll start missing token","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:start","a":"400 MISSING_ID_TOKEN","r":"c","k":"answer"},{"t":"enroll start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:start","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"enroll finalize missing response","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"400 MISSING_AUTHENTICATOR_RESPONSE","r":"c","k":"answer"},{"t":"enroll finalize missing id","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"400 INVALID_CREDENTIAL_ID","r":"c","k":"answer"},{"t":"enroll finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"200 {localId}","r":"c","k":"answer"},{"t":"lookup enrolled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"enroll duplicate","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"400 CREDENTIAL_ALREADY_IN_USE","r":"c","k":"answer"},{"t":"enroll second","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"200 {localId}","r":"c","k":"answer"},{"t":"enroll unnamed","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeyEnrollment:finalize","a":"200 {localId}","r":"c","k":"answer"},{"t":"signin start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:start","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"signin finalize missing","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 MISSING_AUTHENTICATOR_RESPONSE","r":"c","k":"answer"},{"t":"signin finalize unknown","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 PASSKEY_CREDENTIAL_NOT_FOUND","r":"c","k":"answer"},{"t":"signin finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"lookup signed in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete passkey","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup deleted","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin deleted","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 PASSKEY_CREDENTIAL_NOT_FOUND","r":"c","k":"answer"},{"t":"disable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin disabled","q":"POST /identitytoolkit.googleapis.com/v2/accounts/passkeySignIn:finalize","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"lookup signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin empty response","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"signin no mask","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((Response UserRecord is missing updateMask.))","r":"c","k":"answer"},{"t":"signin function 500","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{functionsOrigin}}/blocking/beforeSignIn returned HTTP error 500: {\"error\":{\"messโ€ฆ","r":"c","k":"answer"},{"t":"signin function 400","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{functionsOrigin}}/blocking/beforeSignIn returned HTTP error 400: {\"error\":{\"messโ€ฆ","r":"c","k":"answer"},{"t":"signin disabled by function","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"signin after disable","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"signup create disables","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"lookup bob","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup create fails","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{functionsOrigin}}/blocking/beforeCreate returned HTTP error 400: {\"error\":{\"messโ€ฆ","r":"c","k":"answer"},{"t":"lookup carol","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup bad claims","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 FORBIDDEN_CLAIM : iss","r":"c","k":"answer"},{"t":"anonymous not blocked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom not blocked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"admin create not blocked","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"configure create only","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"signin no trigger","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"idp new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"idp existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"idp with access token","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"saml","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"email link send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone new","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"phone send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone existing","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"configure","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/config","a":"200 {blockingFunctions, emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"mfa user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"mfa pending","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:start","a":"200 {phoneResponseInfo}","r":"c","k":"answer"},{"t":"mfa finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaSignIn:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"mfa enroll start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"200 {phoneSessionInfo}","r":"c","k":"answer"},{"t":"mfa enroll finalize","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:finalize","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"custom again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"admin create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"client delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"admin delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"batch delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchDelete","a":"200 {}","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"delete all","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"readiness","q":"GET /","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"openapi","q":"GET /emulator/openapi.json","a":"200 {$digest}","r":"c","k":"answer"},{"t":"unknown","q":"GET /nothing/here","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"unknown post","q":"POST /identitytoolkit.googleapis.com/v1/accounts:nope","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"get on post route","q":"GET /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"405 {message}","r":"c","k":"answer"},{"t":"preflight","q":"OPTIONS /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"204","r":"c","k":"answer"},{"t":"cors post","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"legacy signup","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/signupNewUser","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"legacy verify password","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"legacy get account info","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/getAccountInfo","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"legacy set account info","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/setAccountInfo","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"legacy create auth uri","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"legacy get oob","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/getOobConfirmationCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"legacy reset password","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"legacy verify custom token","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"legacy verify assertion","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"legacy send verification code","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"legacy verify phone","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"legacy recaptcha","q":"GET /www.googleapis.com/identitytoolkit/v3/relyingparty/getRecaptchaParam","a":"200 identitytoolkit#GetRecaptchaParamResponse","r":"c","k":"answer"},{"t":"legacy project config","q":"GET /www.googleapis.com/identitytoolkit/v3/relyingparty/getProjectConfig","a":"200 {authorizedDomains, projectId}","r":"c","k":"answer"},{"t":"legacy sign out","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/signOutUser","a":"501 NOT_IMPLEMENTED: signOutUser is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"legacy download","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/downloadAccount","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"legacy download no project","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/downloadAccount","a":"400 INSUFFICIENT_PERMISSION","r":"c","k":"answer"},{"t":"legacy upload","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/uploadAccount","a":"200 {error: []}","r":"c","k":"answer"},{"t":"legacy upload snake","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/uploadAccount","a":"200 {error: []}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"legacy delete expired","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/deleteAccount","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"legacy verify password 2","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"legacy delete","q":"POST /www.googleapis.com/identitytoolkit/v3/relyingparty/deleteAccount","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"legacy public keys","q":"GET /www.googleapis.com/identitytoolkit/v3/relyingparty/publicKeys","a":"404 NOT_FOUND: Not Found","r":"c","k":"answer"},{"t":"issue saml response","q":"POST /identitytoolkit.googleapis.com/v1/accounts:issueSamlResponse","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.issueSamlResponse is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"game center","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithGameCenter","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.signInWithGameCenter is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"verify ios client","q":"POST /identitytoolkit.googleapis.com/v1/accounts:verifyIosClient","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.verifyIosClient is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"session cookie public keys no key","q":"GET /identitytoolkit.googleapis.com/v1/sessionCookiePublicKeys","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"session cookie public keys","q":"GET /identitytoolkit.googleapis.com/v1/sessionCookiePublicKeys","a":"501 NOT_IMPLEMENTED: identitytoolkit.getSessionCookiePublicKeys is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"revoke token","q":"POST /identitytoolkit.googleapis.com/v2/accounts:revokeToken","a":"501 NOT_IMPLEMENTED: identitytoolkit.accounts.revokeToken is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default supported idps","q":"GET /identitytoolkit.googleapis.com/v2/defaultSupportedIdps","a":"501 NOT_IMPLEMENTED: identitytoolkit.defaultSupportedIdps.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"password policy","q":"GET /identitytoolkit.googleapis.com/v2/passwordPolicy","a":"501 NOT_IMPLEMENTED: identitytoolkit.getPasswordPolicy is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"recaptcha config","q":"GET /identitytoolkit.googleapis.com/v2/recaptchaConfig","a":"501 NOT_IMPLEMENTED: identitytoolkit.getRecaptchaConfig is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp configs list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp configs create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp config get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp config patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"default idp config delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.defaultSupportedIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml configs list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"saml config delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.inboundSamlConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth configs list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"oauth config delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.oauthIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"initialize auth","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/identityPlatform:initializeAuth","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.identityPlatform.initializeAuth is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant get iam","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha:getIamPolicy","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.getIamPolicy is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant set iam","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha:setIamPolicy","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.setIamPolicy is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant test iam","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha:testIamPermissions","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.testIamPermissions is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant default idp delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/defaultSupportedIdpConfigs/google.com","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.defaultSupportedIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant saml delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/inboundSamlConfigs/saml.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.inboundSamlConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth list","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.list is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth create","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.create is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth get","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.get is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth patch","q":"PATCH /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.patch is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"tenant oauth delete","q":"DELETE /identitytoolkit.googleapis.com/v2/projects/{project}/tenants/tenant-alpha/oauthIdpConfigs/oidc.x","a":"501 NOT_IMPLEMENTED: identitytoolkit.projects.tenants.oauthIdpConfigs.delete is not implemented in the Auth Emulator.","r":"c","k":"answer"},{"t":"handler missing params","q":"GET /emulator/auth/handler","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"send code","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"delete all","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"all users","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"oob codes","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"verification codes","q":"GET /emulator/v1/projects/{project}/verificationCodes","a":"200 {verificationCodes}","r":"c","k":"answer"},{"t":"consume after delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"phone after delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"old token after delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"old refresh after delete","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"delete all no auth","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"delete all with body","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"export accounts","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"export config","q":"GET /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"delete all","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"cli import route","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants//accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"cli import empty","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants//accounts:batchCreate","a":"400 MISSING_USER_ACCOUNT","r":"c","k":"answer"},{"t":"cli import config","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {emailPrivacyConfig, signIn}","r":"c","k":"answer"},{"t":"export after","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"signin reimported","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"tenant","q":"POST /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {disableAuth, enableAnonymousUser, enableEmailLinkSignin, mfaConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"tenant import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:tenant}}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"tenant export","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/tenants/{{tenantId:tenant}}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"tenants export","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"anonymous","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"set claims","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"password signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"refresh multi","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"password signin multi","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"google signin multi","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup multi","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"claims overwrite","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh after overwrite","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"claims clear","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"refresh after clear","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"custom claims vs attributes","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"refresh custom","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, project_id, user_id}","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"disable password user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable google user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable phone user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"send oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"password signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"google signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"google signin return credential","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"custom","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"phone send 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"phone signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"admin lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"session cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"admin update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"enable","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup enabled","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"disable again","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"send reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"200 identitytoolkit#ResetPasswordResponse","r":"c","k":"answer"},{"t":"password signin after reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"lookup after reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 TOKEN_EXPIRED","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"send oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"send reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"200 {โ€ฆ}","r":"c","k":"answer"},{"t":"delete","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"delete again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:delete","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"answer"},{"t":"consume oob","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:resetPassword","a":"400 INVALID_OOB_CODE","r":"c","k":"answer"},{"t":"link google","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"mfa start","q":"POST /identitytoolkit.googleapis.com/v2/accounts/mfaEnrollment:start","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"session cookie","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}:createSessionCookie","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"signup again","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"old token vs new user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"400 USER_NOT_FOUND","r":"c","k":"answer"},{"t":"oob codes","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"query key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"header key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"any key value","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"empty key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"no key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"owner no key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"owner and key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"bad bearer with key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"401 UNAUTHENTICATED: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authenticatโ€ฆ","r":"c","k":"answer"},{"t":"basic auth with key","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"securetoken no key","q":"POST /securetoken.googleapis.com/v1/token","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"recaptcha no key","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"emulator routes no key","q":"GET /emulator/v1/projects/{project}/oobCodes","a":"200 {oobCodes}","r":"c","k":"answer"},{"t":"action no key","q":"GET /emulator/action","a":"400 missing apiKey query parameter","r":"c","k":"answer"},{"t":"owner on securetoken","q":"POST /securetoken.googleapis.com/v1/token","a":"403 PERMISSION_DENIED: The request is missing a valid API key.","r":"c","k":"answer"},{"t":"number to string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"bool as string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"unknown field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"array for string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /email must be string","r":"c","k":"answer"},{"t":"object for string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /email must be string","r":"c","k":"answer"},{"t":"null field","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /tenantId must be string","r":"c","k":"answer"},{"t":"enum index","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 MISSING_EMAIL","r":"c","k":"answer"},{"t":"enum unknown","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /requestType must be equal to one of the allowed values","r":"c","k":"answer"},{"t":"enum number out of range","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /requestType must be equal to one of the allowed values","r":"c","k":"answer"},{"t":"string for array","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /localId must be array","r":"c","k":"answer"},{"t":"delete attribute enum index","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete attribute unknown","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. /deleteAttribute/0 must be equal to one of the allowed values","r":"c","k":"answer"},{"t":"batch get string max","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. must be integer","r":"c","k":"answer"},{"t":"query sort enum index","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"body array","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. must be object","r":"c","k":"answer"},{"t":"empty body","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"text plain json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 Invalid content-type: text/plain","r":"c","k":"answer"},{"t":"no content type","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"form body","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 Invalid content-type: application/x-www-form-urlencoded","r":"c","k":"answer"},{"t":"snake nested","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"snake admin","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"send reset","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"admin lookup","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"lookup imported","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"import collision","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"update email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup changed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"email link send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendOobCode","a":"200 identitytoolkit#GetOobConfirmationCodeResponse","r":"c","k":"answer"},{"t":"email link signin","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithEmailLink","a":"200 identitytoolkit#EmailLinkSigninResponse","r":"c","k":"answer"},{"t":"idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup idp","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"create auth uri","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"admin create","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"lookup admin","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup admin changed","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"google first","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"link password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup google password","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"link github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"phone send","q":"POST /identitytoolkit.googleapis.com/v1/accounts:sendVerificationCode","a":"200 {sessionInfo}","r":"c","k":"answer"},{"t":"link phone","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPhoneNumber","a":"200 {expiresIn, isNewUser, localId, phoneNumber}","r":"c","k":"answer"},{"t":"lookup four","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"update profile","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup renamed","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by github","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by provider email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"create auth uri provider email","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"unlink github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup by github after","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"relink github","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup relinked","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"google profile refresh","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"lookup after refresh","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin link","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin relink existing","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"lookup final","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"export","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"malformed json","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. Expected property name or '}' in JSON at position 1 (line 1 column 2)","r":"d","k":"answer","w":"the JSON parse error text is V8's; Firenook reports serde's message with the same status and shape"},{"t":"signin function text","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"500 INTERNAL: BLOCKING_FUNCTION_ERROR_RESPONSE : ((Response body is not valid JSON.))","r":"d","k":"answer","w":"a blocking function's non-JSON body is reported with V8's parse error as the reason; Firenook reports serde's"},{"t":"handler empty","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"handler google","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"handler github","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"handler tenant","q":"GET /emulator/auth/handler","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"iframe","q":"GET /emulator/auth/iframe","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"iframe no params","q":"GET /emulator/auth/iframe","a":"200 {$html}","r":"d","k":"answer","w":"Firenook ships its own popup helper page; the accounts it offers are compared"},{"t":"body string","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"400 INVALID_ARGUMENT: Invalid JSON payload received. Unexpected token '\"', \"\"just a string\"\" is not valid JSON","r":"d","k":"answer","w":"the JSON parse error text is V8's; Firenook reports serde's message with the same status and shape"},{"t":"create auth uri existing password user","q":"POST /identitytoolkit.googleapis.com/v1/accounts:createAuthUri","a":"200 identitytoolkit#CreateAuthUriResponse","r":"c","k":"answer"},{"t":"recaptcha parameters","q":"GET /identitytoolkit.googleapis.com/v1/recaptchaParams","a":"200 identitytoolkit#GetRecaptchaParamResponse","r":"c","k":"answer"},{"t":"fake google idp sign in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp","a":"200 identitytoolkit#VerifyAssertionResponse","r":"c","k":"answer"},{"t":"idp secure token refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, user_id, project_id}","r":"c","k":"answer"},{"t":"readiness","q":"GET /","a":"200 {authEmulator}","r":"c","k":"answer"},{"t":"password sign up","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signUp","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"client account lookup","q":"POST /identitytoolkit.googleapis.com/v1/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"client profile update","q":"POST /identitytoolkit.googleapis.com/v1/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin custom claims update","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:update","a":"200 identitytoolkit#SetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin lookup by email","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"admin query users","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"password sign in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"200 identitytoolkit#VerifyPasswordResponse","r":"c","k":"answer"},{"t":"strict json custom token sign in","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithCustomToken","a":"200 identitytoolkit#VerifyCustomTokenResponse","r":"c","k":"answer"},{"t":"secure token refresh","q":"POST /securetoken.googleapis.com/v1/token","a":"200 {expires_in, user_id, project_id}","r":"c","k":"answer"},{"t":"wrong password error","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithPassword","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"emulator config before","q":"GET /emulator/v1/projects/{project}/config","a":"200 {signIn, emailPrivacyConfig}","r":"c","k":"answer"},{"t":"emulator config update","q":"PATCH /emulator/v1/projects/{project}/config","a":"200 {signIn, emailPrivacyConfig}","r":"c","k":"answer"},{"t":"accounts json batch import","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchCreate","a":"200 {error: []}","r":"c","k":"answer"},{"t":"accounts json batch export","q":"GET /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:batchGet?maxResults=1000","a":"200 identitytoolkit#DownloadAccountResponse","r":"c","k":"answer"},{"t":"admin create user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"admin delete user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:delete","a":"200 identitytoolkit#DeleteAccountResponse","r":"c","k":"answer"},{"t":"emulator delete all accounts","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"handler validation 1","q":"GET /emulator/auth/handler","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 2","q":"GET /emulator/auth/handler?apiKey=demo","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 3","q":"GET /emulator/auth/handler?providerId=google.com","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"signInWithIdp 1","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"signInWithIdp 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท new user","r":"c","k":"answer"},{"t":"signInWithIdp 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"popup event 1","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"popup event 2","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"sign in to a linked account","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (account linked to github.com and google.com)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"sign in after disabling","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (account disabled)","a":"400 USER_DISABLED","r":"c","k":"answer"},{"t":"handler validation 1","q":"GET /emulator/auth/handler","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 2","q":"GET /emulator/auth/handler?apiKey=demo","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"handler validation 3","q":"GET /emulator/auth/handler?providerId=google.com","a":"400 missing apiKey or providerId query parameters","r":"c","k":"answer"},{"t":"signInWithIdp 1","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"signInWithIdp 2","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท new user","r":"c","k":"answer"},{"t":"signInWithIdp 3","q":"POST /identitytoolkit.googleapis.com/v1/accounts:signInWithIdp (google.com, from /emulator/auth/handler)","a":"200 ยท existing uid reused","r":"c","k":"answer"},{"t":"popup event 1","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"popup event 2","q":"/emulator/auth/handler page completes the google.com popup","a":"signInViaPopup event with id_token, providerId","r":"c","k":"behaviour"},{"t":"anonymous first","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous first)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous repeat original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous repeat original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 1","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 2","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 3","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous concurrent 4","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous concurrent 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous disabled","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous disabled)","a":"400 USER_DISABLED","r":"c","k":"error"},{"t":"anonymous reenabled original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous reenabled original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"anonymous deleted","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, anonymous deleted)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"password first","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password first)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password repeat original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password repeat original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 1","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 2","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 3","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password concurrent 4","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password concurrent 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password disabled","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password disabled)","a":"400 USER_DISABLED","r":"c","k":"error"},{"t":"password reenabled original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password reenabled original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"password deleted","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, password deleted)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"custom first","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom first)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom repeat original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom repeat original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 1","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 2","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 3","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom concurrent 4","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom concurrent 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom disabled","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom disabled)","a":"400 USER_DISABLED","r":"c","k":"error"},{"t":"custom reenabled original","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom reenabled original)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"custom deleted","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, custom deleted)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"unknown token","q":"POST /securetoken.googleapis.com/v1/token (refresh grant, unknown token)","a":"400 INVALID_REFRESH_TOKEN","r":"c","k":"error"},{"t":"browser refresh 1","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 1)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"browser refresh 2","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 2)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"browser refresh 3","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 3)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"browser refresh 4","q":"POST /securetoken.googleapis.com/v1/token from the browser SDK (browser refresh 4)","a":"200 ยท same refresh grant returned, expires in 3600","r":"c","k":"answer"},{"t":"oauth popup handler","q":"GET /emulator/auth/handler?providerId=google.com","a":"200 {byteLength, sha256, contains}","r":"d","k":"answer","w":"Firenook serves its own popup helper page (the Auth replay's divergence table, DESIGN.md Auth browser helpers): status, content type and the sendAuthEvent/gapi.iframes markers match, the bytes are its own"},{"t":"oauth helper iframe","q":"GET /emulator/auth/iframe?appName=phase4","a":"200 {byteLength, sha256, contains}","r":"d","k":"answer","w":"Firenook serves its own popup helper page (the Auth replay's divergence table, DESIGN.md Auth browser helpers): status, content type and the sendAuthEvent/gapi.iframes markers match, the bytes are its own"}]} \ No newline at end of file diff --git a/public/conformance/firestore-rules.json b/public/conformance/firestore-rules.json index 2cc77d2..6bb2b3f 100644 --- a/public/conformance/firestore-rules.json +++ b/public/conformance/firestore-rules.json @@ -1 +1 @@ -{"runs":[[0,4,0,"Rules expressions: literals and coercion"],[4,7,0,"Rules expressions: numeric arithmetic and comparison"],[11,5,0,"Rules expressions: boolean short circuit and errors"],[16,12,0,"Rules expressions: string list map and map diff"],[28,4,0,"Rules expressions: request auth method time query resource and existing resource"],[32,4,0,"Rules expressions: literals and coercion"],[36,7,0,"Rules expressions: numeric arithmetic and comparison"],[43,5,0,"Rules expressions: boolean short circuit and errors"],[48,12,0,"Rules expressions: string list map and map diff"],[60,4,0,"Rules expressions: request auth method time query resource and existing resource"],[64,4,0,"Rules expressions: literals and coercion"],[68,7,0,"Rules expressions: numeric arithmetic and comparison"],[75,5,0,"Rules expressions: boolean short circuit and errors"],[80,12,0,"Rules expressions: string list map and map diff"],[92,4,0,"Rules expressions: request auth method time query resource and existing resource"],[96,4,0,"Rules expressions: literals and coercion"],[100,7,0,"Rules expressions: numeric arithmetic and comparison"],[107,5,0,"Rules expressions: boolean short circuit and errors"],[112,12,0,"Rules expressions: string list map and map diff"],[124,4,0,"Rules expressions: request auth method time query resource and existing resource"],[128,4,0,"Rules expressions: literals and coercion"],[132,7,0,"Rules expressions: numeric arithmetic and comparison"],[139,5,0,"Rules expressions: boolean short circuit and errors"],[144,12,0,"Rules expressions: string list map and map diff"],[156,4,0,"Rules expressions: request auth method time query resource and existing resource"],[160,4,0,"Rules expressions: literals and coercion"],[164,7,0,"Rules expressions: numeric arithmetic and comparison"],[171,5,0,"Rules expressions: boolean short circuit and errors"],[176,12,0,"Rules expressions: string list map and map diff"],[188,4,0,"Rules expressions: request auth method time query resource and existing resource"],[192,4,0,"Rules expressions: literals and coercion"],[196,7,0,"Rules expressions: numeric arithmetic and comparison"],[203,5,0,"Rules expressions: boolean short circuit and errors"],[208,12,0,"Rules expressions: string list map and map diff"],[220,4,0,"Rules expressions: request auth method time query resource and existing resource"],[224,4,0,"Rules expressions: literals and coercion"],[228,7,0,"Rules expressions: numeric arithmetic and comparison"],[235,5,0,"Rules expressions: boolean short circuit and errors"],[240,12,0,"Rules expressions: string list map and map diff"],[252,4,0,"Rules expressions: request auth method time query resource and existing resource"],[256,4,0,"Rules expressions: literals and coercion"],[260,7,0,"Rules expressions: numeric arithmetic and comparison"],[267,5,0,"Rules expressions: boolean short circuit and errors"],[272,12,0,"Rules expressions: string list map and map diff"],[284,4,0,"Rules expressions: request auth method time query resource and existing resource"],[288,4,0,"Rules expressions: literals and coercion"],[292,7,0,"Rules expressions: numeric arithmetic and comparison"],[299,5,0,"Rules expressions: boolean short circuit and errors"],[304,12,0,"Rules expressions: string list map and map diff"],[316,4,0,"Rules expressions: request auth method time query resource and existing resource"],[320,4,0,"Rules expressions: literals and coercion"],[324,7,0,"Rules expressions: numeric arithmetic and comparison"],[331,5,0,"Rules expressions: boolean short circuit and errors"],[336,12,0,"Rules expressions: string list map and map diff"],[348,4,0,"Rules expressions: request auth method time query resource and existing resource"],[352,4,0,"Rules expressions: literals and coercion"],[356,7,0,"Rules expressions: numeric arithmetic and comparison"],[363,5,0,"Rules expressions: boolean short circuit and errors"],[368,12,0,"Rules expressions: string list map and map diff"],[380,4,0,"Rules expressions: request auth method time query resource and existing resource"],[384,4,0,"Rules expressions: literals and coercion"],[388,7,0,"Rules expressions: numeric arithmetic and comparison"],[395,5,0,"Rules expressions: boolean short circuit and errors"],[400,12,0,"Rules expressions: string list map and map diff"],[412,4,0,"Rules expressions: request auth method time query resource and existing resource"],[416,4,0,"Rules expressions: literals and coercion"],[420,7,0,"Rules expressions: numeric arithmetic and comparison"],[427,5,0,"Rules expressions: boolean short circuit and errors"],[432,12,0,"Rules expressions: string list map and map diff"],[444,4,0,"Rules expressions: request auth method time query resource and existing resource"],[448,4,0,"Rules expressions: literals and coercion"],[452,7,0,"Rules expressions: numeric arithmetic and comparison"],[459,5,0,"Rules expressions: boolean short circuit and errors"],[464,12,0,"Rules expressions: string list map and map diff"],[476,4,0,"Rules expressions: request auth method time query resource and existing resource"],[480,4,0,"Rules expressions: literals and coercion"],[484,7,0,"Rules expressions: numeric arithmetic and comparison"],[491,5,0,"Rules expressions: boolean short circuit and errors"],[496,12,0,"Rules expressions: string list map and map diff"],[508,4,0,"Rules expressions: request auth method time query resource and existing resource"],[512,4,0,"Rules expressions: literals and coercion"],[516,7,0,"Rules expressions: numeric arithmetic and comparison"],[523,5,0,"Rules expressions: boolean short circuit and errors"],[528,12,0,"Rules expressions: string list map and map diff"],[540,4,0,"Rules expressions: request auth method time query resource and existing resource"],[544,4,0,"Rules expressions: literals and coercion"],[548,7,0,"Rules expressions: numeric arithmetic and comparison"],[555,5,0,"Rules expressions: boolean short circuit and errors"],[560,12,0,"Rules expressions: string list map and map diff"],[572,4,0,"Rules expressions: request auth method time query resource and existing resource"],[576,4,0,"Rules expressions: literals and coercion"],[580,7,0,"Rules expressions: numeric arithmetic and comparison"],[587,5,0,"Rules expressions: boolean short circuit and errors"],[592,12,0,"Rules expressions: string list map and map diff"],[604,4,0,"Rules expressions: request auth method time query resource and existing resource"],[608,4,0,"Rules expressions: literals and coercion"],[612,7,0,"Rules expressions: numeric arithmetic and comparison"],[619,5,0,"Rules expressions: boolean short circuit and errors"],[624,12,0,"Rules expressions: string list map and map diff"],[636,4,0,"Rules expressions: request auth method time query resource and existing resource"],[640,4,0,"Rules expressions: literals and coercion"],[644,7,0,"Rules expressions: numeric arithmetic and comparison"],[651,5,0,"Rules expressions: boolean short circuit and errors"],[656,12,0,"Rules expressions: string list map and map diff"],[668,4,0,"Rules expressions: request auth method time query resource and existing resource"],[672,4,0,"Rules expressions: literals and coercion"],[676,7,0,"Rules expressions: numeric arithmetic and comparison"],[683,5,0,"Rules expressions: boolean short circuit and errors"],[688,12,0,"Rules expressions: string list map and map diff"],[700,4,0,"Rules expressions: request auth method time query resource and existing resource"],[704,4,0,"Rules expressions: literals and coercion"],[708,7,0,"Rules expressions: numeric arithmetic and comparison"],[715,5,0,"Rules expressions: boolean short circuit and errors"],[720,12,0,"Rules expressions: string list map and map diff"],[732,4,0,"Rules expressions: request auth method time query resource and existing resource"],[736,4,0,"Rules expressions: literals and coercion"],[740,7,0,"Rules expressions: numeric arithmetic and comparison"],[747,5,0,"Rules expressions: boolean short circuit and errors"],[752,12,0,"Rules expressions: string list map and map diff"],[764,4,0,"Rules expressions: request auth method time query resource and existing resource"],[768,4,0,"Rules expressions: literals and coercion"],[772,7,0,"Rules expressions: numeric arithmetic and comparison"],[779,5,0,"Rules expressions: boolean short circuit and errors"],[784,12,0,"Rules expressions: string list map and map diff"],[796,4,0,"Rules expressions: request auth method time query resource and existing resource"],[800,4,0,"Rules expressions: literals and coercion"],[804,7,0,"Rules expressions: numeric arithmetic and comparison"],[811,5,0,"Rules expressions: boolean short circuit and errors"],[816,12,0,"Rules expressions: string list map and map diff"],[828,4,0,"Rules expressions: request auth method time query resource and existing resource"],[832,4,0,"Rules expressions: literals and coercion"],[836,7,0,"Rules expressions: numeric arithmetic and comparison"],[843,5,0,"Rules expressions: boolean short circuit and errors"],[848,12,0,"Rules expressions: string list map and map diff"],[860,4,0,"Rules expressions: request auth method time query resource and existing resource"],[864,4,0,"Rules expressions: literals and coercion"],[868,7,0,"Rules expressions: numeric arithmetic and comparison"],[875,5,0,"Rules expressions: boolean short circuit and errors"],[880,12,0,"Rules expressions: string list map and map diff"],[892,4,0,"Rules expressions: request auth method time query resource and existing resource"],[896,4,0,"Rules expressions: literals and coercion"],[900,7,0,"Rules expressions: numeric arithmetic and comparison"],[907,5,0,"Rules expressions: boolean short circuit and errors"],[912,12,0,"Rules expressions: string list map and map diff"],[924,4,0,"Rules expressions: request auth method time query resource and existing resource"],[928,4,0,"Rules expressions: literals and coercion"],[932,7,0,"Rules expressions: numeric arithmetic and comparison"],[939,5,0,"Rules expressions: boolean short circuit and errors"],[944,12,0,"Rules expressions: string list map and map diff"],[956,4,0,"Rules expressions: request auth method time query resource and existing resource"],[960,4,0,"Rules expressions: literals and coercion"],[964,7,0,"Rules expressions: numeric arithmetic and comparison"],[971,5,0,"Rules expressions: boolean short circuit and errors"],[976,12,0,"Rules expressions: string list map and map diff"],[988,4,0,"Rules expressions: request auth method time query resource and existing resource"],[992,4,0,"Rules expressions: literals and coercion"],[996,7,0,"Rules expressions: numeric arithmetic and comparison"],[1003,5,0,"Rules expressions: boolean short circuit and errors"],[1008,12,0,"Rules expressions: string list map and map diff"],[1020,4,0,"Rules expressions: request auth method time query resource and existing resource"],[1024,6,0,"Language contract: string"],[1030,6,0,"Language contract: list"],[1036,3,0,"Language contract: map"],[1039,2,0,"Language contract: map diff"],[1041,3,0,"Language contract: set"],[1044,2,0,"Language contract: bytes"],[1046,2,0,"Language contract: duration"],[1048,3,0,"Language contract: timestamp"],[1051,2,0,"Language contract: latlng"],[1053,3,0,"Language contract: math"],[1056,2,0,"Language contract: hashing"],[1058,2,0,"Language contract: request"],[1060,1,0,"Language contract: path"],[1061,1,0,"Language contract: function"],[1062,1,0,"Language contract: resource"],[1063,1,0,"Language contract: query"],[1064,3,0,"Language contract: match"],[1067,1,0,"Limits: function depth"],[1068,2,0,"Limits: balanced expression terms"],[1070,1,0,"Compiler and source size: unexpected token"],[1071,1,0,"Compiler and source size: unclosed block"],[1072,1,0,"Compiler and source size: duplicate let"],[1073,1,0,"Compiler and source size: undefined name"],[1074,1,0,"Compiler and source size: invalid function arity"],[1075,1,0,"Compiler and source size: recursive function"],[1076,1,0,"Compiler and source size: invalid recursive wildcard"],[1077,4,0,"Compiler and source size: source bytes"],[1081,1,0,"complex-firestore.rules: production compile"],[1082,1,0,"Language contract: debug"],[1083,2,0,"Compiler and source size: source bytes"],[1085,8,0,"Limits: function depth"],[1093,9,0,"Limits: linear expression terms"],[1102,6,0,"Limits: balanced expression terms"],[1108,14,1,"Coverage after a rules reload and two reads"],[1122,1,1,"Setup"],[1123,13,1,"Coverage after a rules reload and two reads"],[1136,3,1,"A rejected reload keeps the last valid rules"],[1139,23,2,"Firestore requests with live rules evaluations"],[1162,26,2,"Requests websocket messages"],[1188,1,3,"Firestore requests with live rules evaluations"],[1189,5,3,"Firestore requests with live rules evaluations"],[1194,8,3,"Requests websocket messages"],[1202,2,4,"Reads as: no Authorization header (a signed-out client SDK)"],[1204,6,4,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1210,6,4,"Reads as: the owner credential, lowercase scheme"],[1216,6,4,"Reads as: the owner credential, all uppercase"],[1222,2,4,"Reads as: a current unsigned token for alice"],[1224,2,4,"Reads as: current unsigned token for alice, lowercase scheme"],[1226,2,4,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1228,2,4,"Reads as: a token issued a day from now"],[1230,2,4,"Reads as: a token whose aud and iss name another project"],[1232,2,4,"Reads as: a token whose aud alone names another project"],[1234,2,4,"Reads as: an unsigned token with only sub: alice"],[1236,2,4,"Reads as: a token whose header has no alg"],[1238,2,4,"Reads as: an RS256 header and a signature nobody checks"],[1240,2,4,"Reads as: standard padded base64 segments"],[1242,6,4,"Reads as: a token of two segments"],[1248,6,4,"Reads as: a token whose payload is an array"],[1254,6,4,"Reads as: a credential that is not a JWT"],[1260,2,4,"Reads as: no Authorization header (a signed-out client SDK)"],[1262,6,4,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1268,6,4,"Reads as: the owner credential, lowercase scheme"],[1274,6,4,"Reads as: the owner credential, all uppercase"],[1280,2,4,"Reads as: a current unsigned token for alice"],[1282,2,4,"Reads as: current unsigned token for alice, lowercase scheme"],[1284,2,4,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1286,2,4,"Reads as: a token issued a day from now"],[1288,2,4,"Reads as: a token whose aud and iss name another project"],[1290,2,4,"Reads as: a token whose aud alone names another project"],[1292,2,4,"Reads as: an unsigned token with only sub: alice"],[1294,2,4,"Reads as: a token whose header has no alg"],[1296,2,4,"Reads as: an RS256 header and a signature nobody checks"],[1298,2,4,"Reads as: standard padded base64 segments"],[1300,6,4,"Reads as: a token of two segments"],[1306,6,4,"Reads as: a token whose payload is an array"],[1312,6,4,"Reads as: a credential that is not a JWT"],[1318,3,4,"What request.auth holds for: no Authorization header (a signed-out client SDK)"],[1321,3,4,"What request.auth holds for: the owner credential (the Admin SDKs' emulator credential)"],[1324,3,4,"What request.auth holds for: the owner credential, lowercase scheme"],[1327,3,4,"What request.auth holds for: the owner credential, all uppercase"],[1330,3,4,"What request.auth holds for: a current unsigned token for alice"],[1333,3,4,"What request.auth holds for: current unsigned token for alice, lowercase scheme"],[1336,3,4,"What request.auth holds for: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1339,3,4,"What request.auth holds for: a token issued a day from now"],[1342,3,4,"What request.auth holds for: a token whose aud and iss name another project"],[1345,3,4,"What request.auth holds for: a token whose aud alone names another project"],[1348,3,4,"What request.auth holds for: an unsigned token with only sub: alice"],[1351,3,4,"What request.auth holds for: an unsigned token with only user_id: alice"],[1354,3,4,"What request.auth holds for: an unsigned token with no claims"],[1357,3,4,"What request.auth holds for: an unsigned token with sub: 7"],[1360,3,4,"What request.auth holds for: a token whose header has no alg"],[1363,3,4,"What request.auth holds for: an RS256 header and a signature nobody checks"],[1366,3,4,"What request.auth holds for: standard padded base64 segments"],[1369,3,4,"What request.auth holds for: a token of two segments"],[1372,3,4,"What request.auth holds for: a token whose payload is an array"],[1375,3,4,"What request.auth holds for: a credential that is not a JWT"],[1378,12,4,"Metadata operations need the owner"],[1390,2,4,"Enterprise pipelines are evaluated as a list"],[1392,3,4,"The rules reload route reads the body as JSON"],[1395,4,4,"Reads as: no Authorization header (a signed-out client SDK)"],[1399,4,4,"Reads as: a current unsigned token for alice"],[1403,4,4,"Reads as: current unsigned token for alice, lowercase scheme"],[1407,4,4,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1411,4,4,"Reads as: a token issued a day from now"],[1415,4,4,"Reads as: a token whose aud and iss name another project"],[1419,4,4,"Reads as: a token whose aud alone names another project"],[1423,4,4,"Reads as: an unsigned token with only sub: alice"],[1427,6,4,"Reads as: an unsigned token with only user_id: alice"],[1433,6,4,"Reads as: an unsigned token with no claims"],[1439,6,4,"Reads as: an unsigned token with sub: 7"],[1445,4,4,"Reads as: a token whose header has no alg"],[1449,4,4,"Reads as: an RS256 header and a signature nobody checks"],[1453,4,4,"Reads as: standard padded base64 segments"],[1457,6,4,"Reads as: a Basic credential"],[1463,6,4,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1469,4,4,"Reads as: no Authorization header (a signed-out client SDK)"],[1473,4,4,"Reads as: a current unsigned token for alice"],[1477,4,4,"Reads as: current unsigned token for alice, lowercase scheme"],[1481,4,4,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1485,4,4,"Reads as: a token issued a day from now"],[1489,4,4,"Reads as: a token whose aud and iss name another project"],[1493,4,4,"Reads as: a token whose aud alone names another project"],[1497,4,4,"Reads as: an unsigned token with only sub: alice"],[1501,6,4,"Reads as: an unsigned token with only user_id: alice"],[1507,6,4,"Reads as: an unsigned token with no claims"],[1513,6,4,"Reads as: an unsigned token with sub: 7"],[1519,4,4,"Reads as: a token whose header has no alg"],[1523,4,4,"Reads as: an RS256 header and a signature nobody checks"],[1527,4,4,"Reads as: standard padded base64 segments"],[1531,6,4,"Reads as: a Basic credential"],[1537,6,4,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1543,3,4,"What request.auth holds for: a Basic credential"],[1546,3,4,"What request.auth holds for: the owner credential (Storage's admin credential), Firebase scheme"],[1549,5,4,"The message of a refused request"],[1554,6,4,"Metadata operations need the owner"],[1560,2,4,"Enterprise pipelines are evaluated as a list"],[1562,5,5,"The identifier \"duration\" in each position"],[1567,5,5,"The identifier \"hashing\" in each position"],[1572,5,5,"The identifier \"latlng\" in each position"],[1577,5,5,"The identifier \"math\" in each position"],[1582,5,5,"The identifier \"timestamp\" in each position"],[1587,5,5,"The identifier \"request\" in each position"],[1592,5,5,"The identifier \"resource\" in each position"],[1597,5,5,"The identifier \"value\" in each position"],[1602,123,6,"Paths and document names under allow get"],[1725,7,6,"Document names under allow list"],[1732,5,6,"Document names under allow create"],[1737,2,8,"Contributed rooms ruleset: a function outside the service block"],[1739,3,8,"Contributed rooms ruleset: the conditional operator inside a function"],[1742,2,8,"Contributed rooms ruleset: keys().hasOnly() and hasAll()"],[1744,3,8,"Contributed rooms ruleset: type, length and list-membership checks"],[1747,3,8,"Contributed rooms ruleset: diff().affectedKeys() on update, and a delete never allowed"],[1750,3,8,"Contributed rooms ruleset: exists() on another document"],[1753,1,8,"Contributed rooms ruleset: a field check in the proof of a list query"],[1754,3,8,"Contributed rooms ruleset: get() with a default on the payload, and is int"],[1757,1,8,"Contributed rooms ruleset: get() on the parent document"],[1758,1,8,"Contributed rooms ruleset: a null value on write"],[1759,2,8,"Contributed rooms ruleset: a query pinned to a missing document id"],[1761,2,8,"Contributed rooms ruleset: matches() on the document id"],[1763,2,8,"Contributed rooms ruleset: keys().hasAny()"],[1765,1,8,"Contributed rooms ruleset: a field check in the proof of a list query"],[1766,7,9,"Document access limits (10 and 20) and cached repeated access"],[1773,2,9,"getAfter sees the pending write of a commit"],[1775,5,9,"Runtime errors deny: missing fields, division by zero, list bounds, wrong types"],[1780,1,9,"complex-firestore.rules: public read"],[1781,2,9,"complex-firestore.rules: query limit validation"],[1783,2,9,"complex-firestore.rules: auth and custom claims"],[1785,2,9,"complex-firestore.rules: field change validation"],[1787,2,9,"complex-firestore.rules: nested and recursive matches"],[1789,2,9,"complex-firestore.rules: cross document access"],[1791,1,9,"complex-firestore.rules: create update delete resource differences"],[1792,1,9,"complex-firestore.rules: field change validation"],[1793,2,9,"complex-firestore.rules: create update delete resource differences"],[1795,2,9,"complex-firestore.rules: nested and recursive matches"],[1797,2,9,"complex-firestore.rules: create update delete resource differences"],[1799,2,9,"complex-firestore.rules: field change validation"],[1801,1,9,"complex-firestore.rules: nested and recursive matches"],[1802,4,9,"complex-firestore.rules: auth and custom claims"],[1806,2,9,"complex-firestore.rules: field change validation"],[1808,2,9,"complex-firestore.rules: timestamps durations and helper functions"],[1810,2,9,"complex-firestore.rules: nested and recursive matches"],[1812,2,9,"complex-firestore.rules: auth and custom claims"],[1814,9,9,"complex-firestore.rules: complex generated policy"],[1823,2,9,"complex-firestore.rules: getAfter batch invariant"],[1825,3,9,"query-authorization: owner equality"],[1828,3,9,"query-authorization: owner absent"],[1831,3,9,"query-authorization: owner wrong uid"],[1834,3,9,"query-authorization: owner unverified"],[1837,3,9,"query-authorization: owner in single"],[1840,3,9,"query-authorization: owner in mixed"],[1843,3,9,"query-authorization: owner array is not equality"],[1846,3,9,"query-authorization: owner inequality"],[1849,3,9,"query-authorization: owner bounded equality"],[1852,3,9,"query-authorization: owner compound and"],[1855,3,9,"query-authorization: owner compound or safe"],[1858,3,9,"query-authorization: owner compound or unsafe"],[1861,3,9,"query-authorization: owner empty"],[1864,3,9,"query-authorization: owner empty unconstrained"],[1867,3,9,"query-authorization: owner empty wrong uid"],[1870,3,9,"query-authorization: owner nonmatching extra filter"],[1873,3,9,"query-authorization: permission get allowed"],[1876,3,9,"query-authorization: permission get denied"],[1879,3,9,"query-authorization: permission get missing"],[1882,3,9,"query-authorization: permission in all granted"],[1885,3,9,"query-authorization: permission in mixed"],[1888,3,9,"query-authorization: short circuit missing get"],[1891,3,9,"query-authorization: array contains owner"],[1894,3,9,"query-authorization: array contains other"],[1897,3,9,"query-authorization: array any owner"],[1900,3,9,"query-authorization: array any mixed"],[1903,3,9,"query-authorization: array absent"],[1906,3,9,"query-authorization: range equality inside"],[1909,3,9,"query-authorization: range strict bound"],[1912,3,9,"query-authorization: range inclusive bound"],[1915,3,9,"query-authorization: range unsafe inclusive"],[1918,3,9,"query-authorization: range safe in"],[1921,3,9,"query-authorization: range unsafe in"],[1924,3,9,"query-authorization: range absent"],[1927,3,9,"query-authorization: not equal null"],[1930,3,9,"query-authorization: not equal string"],[1933,3,9,"query-authorization: not in blocked"],[1936,3,9,"query-authorization: limit allowed"],[1939,3,9,"query-authorization: limit denied"],[1942,3,9,"query-authorization: limit absent"],[1945,3,9,"query-authorization: offset allowed"],[1948,3,9,"query-authorization: offset denied"],[1951,3,9,"query-authorization: offset default"],[1954,3,9,"query-authorization: order desc"],[1957,3,9,"query-authorization: order asc"],[1960,3,9,"query-authorization: order absent"],[1963,3,9,"query-authorization: get fixed path"],[1966,3,9,"query-authorization: exists fixed path"],[1969,3,9,"query-authorization: exists constrained path"],[1972,3,9,"query-authorization: exists missing path"],[1975,3,9,"query-authorization: exists unconstrained path"],[1978,3,9,"query-authorization: group recursive owner"],[1981,3,9,"query-authorization: group recursive unconstrained"],[1984,3,9,"query-authorization: group recursive empty owner"],[1987,3,9,"query-authorization: group root only rule"],[1990,3,9,"query-authorization: nested collection owner"],[1993,1,9,"query-authorization: owner absent"],[1994,1,9,"query-authorization: owner empty unconstrained"],[1995,1,9,"query-authorization: get fixed path"],[1996,1,9,"query-authorization: limit allowed"],[1997,3,9,"query-authorization: owner equality"],[2000,2,9,"query-authorization: owner absent"],[2002,2,9,"query-authorization: owner wrong uid"],[2004,2,9,"query-authorization: owner unverified"],[2006,2,9,"query-authorization: owner in single"],[2008,2,9,"query-authorization: owner in mixed"],[2010,2,9,"query-authorization: owner array is not equality"],[2012,2,9,"query-authorization: owner inequality"],[2014,2,9,"query-authorization: owner bounded equality"],[2016,2,9,"query-authorization: owner compound and"],[2018,2,9,"query-authorization: owner compound or safe"],[2020,2,9,"query-authorization: owner compound or unsafe"],[2022,2,9,"query-authorization: owner empty"],[2024,2,9,"query-authorization: owner empty unconstrained"],[2026,2,9,"query-authorization: owner empty wrong uid"],[2028,2,9,"query-authorization: owner nonmatching extra filter"],[2030,2,9,"query-authorization: permission get allowed"],[2032,2,9,"query-authorization: permission get denied"],[2034,2,9,"query-authorization: permission get missing"],[2036,2,9,"query-authorization: permission in all granted"],[2038,2,9,"query-authorization: permission in mixed"],[2040,2,9,"query-authorization: short circuit missing get"],[2042,2,9,"query-authorization: array contains owner"],[2044,2,9,"query-authorization: array contains other"],[2046,2,9,"query-authorization: array any owner"],[2048,2,9,"query-authorization: array any mixed"],[2050,2,9,"query-authorization: array absent"],[2052,2,9,"query-authorization: range equality inside"],[2054,2,9,"query-authorization: range strict bound"],[2056,2,9,"query-authorization: range inclusive bound"],[2058,2,9,"query-authorization: range unsafe inclusive"],[2060,2,9,"query-authorization: range safe in"],[2062,2,9,"query-authorization: range unsafe in"],[2064,2,9,"query-authorization: range absent"],[2066,2,9,"query-authorization: not equal null"],[2068,2,9,"query-authorization: not equal string"],[2070,2,9,"query-authorization: not in blocked"],[2072,2,9,"query-authorization: limit allowed"],[2074,2,9,"query-authorization: limit denied"],[2076,2,9,"query-authorization: limit absent"],[2078,2,9,"query-authorization: offset default"],[2080,2,9,"query-authorization: order desc"],[2082,2,9,"query-authorization: order asc"],[2084,2,9,"query-authorization: order absent"],[2086,2,9,"query-authorization: get fixed path"],[2088,2,9,"query-authorization: exists fixed path"],[2090,2,9,"query-authorization: exists constrained path"],[2092,2,9,"query-authorization: exists missing path"],[2094,2,9,"query-authorization: exists unconstrained path"],[2096,2,9,"query-authorization: group recursive owner"],[2098,2,9,"query-authorization: group recursive unconstrained"],[2100,2,9,"query-authorization: group recursive empty owner"],[2102,2,9,"query-authorization: group root only rule"],[2104,2,9,"query-authorization: nested collection owner"],[2106,3,9,"query-authorization: owner equality"],[2109,2,9,"query-authorization: owner absent"],[2111,2,9,"query-authorization: owner wrong uid"],[2113,2,9,"query-authorization: owner unverified"],[2115,2,9,"query-authorization: owner in single"],[2117,2,9,"query-authorization: owner in mixed"],[2119,2,9,"query-authorization: owner array is not equality"],[2121,2,9,"query-authorization: owner inequality"],[2123,2,9,"query-authorization: owner bounded equality"],[2125,2,9,"query-authorization: owner compound and"],[2127,2,9,"query-authorization: owner compound or safe"],[2129,2,9,"query-authorization: owner compound or unsafe"],[2131,2,9,"query-authorization: owner empty"],[2133,2,9,"query-authorization: owner empty unconstrained"],[2135,2,9,"query-authorization: owner empty wrong uid"],[2137,2,9,"query-authorization: owner nonmatching extra filter"],[2139,2,9,"query-authorization: permission get allowed"],[2141,2,9,"query-authorization: permission get denied"],[2143,2,9,"query-authorization: permission get missing"],[2145,2,9,"query-authorization: permission in all granted"],[2147,2,9,"query-authorization: permission in mixed"],[2149,2,9,"query-authorization: short circuit missing get"],[2151,2,9,"query-authorization: array contains owner"],[2153,2,9,"query-authorization: array contains other"],[2155,2,9,"query-authorization: array any owner"],[2157,2,9,"query-authorization: array any mixed"],[2159,2,9,"query-authorization: array absent"],[2161,2,9,"query-authorization: range equality inside"],[2163,2,9,"query-authorization: range strict bound"],[2165,2,9,"query-authorization: range inclusive bound"],[2167,2,9,"query-authorization: range unsafe inclusive"],[2169,2,9,"query-authorization: range safe in"],[2171,2,9,"query-authorization: range unsafe in"],[2173,2,9,"query-authorization: range absent"],[2175,2,9,"query-authorization: not equal null"],[2177,2,9,"query-authorization: not equal string"],[2179,2,9,"query-authorization: not in blocked"],[2181,2,9,"query-authorization: limit allowed"],[2183,2,9,"query-authorization: limit denied"],[2185,2,9,"query-authorization: limit absent"],[2187,2,9,"query-authorization: offset default"],[2189,2,9,"query-authorization: order desc"],[2191,2,9,"query-authorization: order asc"],[2193,2,9,"query-authorization: order absent"],[2195,2,9,"query-authorization: get fixed path"],[2197,2,9,"query-authorization: exists fixed path"],[2199,2,9,"query-authorization: exists constrained path"],[2201,2,9,"query-authorization: exists missing path"],[2203,2,9,"query-authorization: exists unconstrained path"],[2205,2,9,"query-authorization: group recursive owner"],[2207,2,9,"query-authorization: group recursive unconstrained"],[2209,2,9,"query-authorization: group recursive empty owner"],[2211,2,9,"query-authorization: group root only rule"],[2213,2,9,"query-authorization: nested collection owner"],[2215,1,9,"query-authorization: owner equality"],[2216,3,9,"query-paths: owner equality"],[2219,3,9,"query-paths: owner absent"],[2222,3,9,"query-paths: owner empty unconstrained"],[2225,3,9,"query-paths: limit allowed"],[2228,3,9,"query-paths: get fixed path"],[2231,3,9,"query-paths: path members granted"],[2234,3,9,"query-paths: path members denied"],[2237,3,9,"query-paths: path members missing"],[2240,3,9,"query-paths: path-getMembers granted"],[2243,3,9,"query-paths: path-getMembers denied"],[2246,3,9,"query-paths: path-getMembers missing"],[2249,3,9,"query-paths: path-functionMembers granted"],[2252,3,9,"query-paths: path-functionMembers denied"],[2255,3,9,"query-paths: path-functionMembers missing"],[2258,3,9,"query-paths: path-reversedMembers granted"],[2261,3,9,"query-paths: path-reversedMembers denied"],[2264,3,9,"query-paths: path-reversedMembers missing"],[2267,3,9,"query-paths: path-unknownOnly granted"],[2270,3,9,"query-paths: path-unknownOnly denied"],[2273,3,9,"query-paths: path-unknownOnly missing"],[2276,3,9,"query-paths: path-negatedAnd granted"],[2279,3,9,"query-paths: path-negatedAnd denied"],[2282,3,9,"query-paths: path-negatedAnd missing"],[2285,3,9,"query-paths: path-literalOr granted"],[2288,3,9,"query-paths: path-literalOr denied"],[2291,3,9,"query-paths: path-literalOr missing"],[2294,3,9,"query-paths: path-concreteErrorOr granted"],[2297,3,9,"query-paths: path-concreteErrorOr denied"],[2300,3,9,"query-paths: path-concreteErrorOr missing"],[2303,3,9,"query-paths: path-concreteErrorAnd granted"],[2306,3,9,"query-paths: path-concreteErrorAnd denied"],[2309,3,9,"query-paths: path-concreteErrorAnd missing"],[2312,3,9,"query-paths: path-budgetErrorOr granted"],[2315,3,9,"query-paths: path-budgetErrorOr denied"],[2318,3,9,"query-paths: path-budgetErrorOr missing"],[2321,3,9,"query-paths: path members empty granted"],[2324,3,9,"query-paths: path members filtered denied"],[2327,1,9,"query-paths: owner absent"],[2328,1,9,"query-paths: owner empty unconstrained"],[2329,1,9,"query-paths: get fixed path"],[2330,1,9,"query-paths: limit allowed"],[2331,1,9,"query-paths: path members granted"],[2332,1,9,"query-paths: path members denied"],[2333,1,9,"query-paths: path members empty granted"],[2334,3,9,"query-paths: owner equality"],[2337,2,9,"query-paths: owner absent"],[2339,2,9,"query-paths: owner empty unconstrained"],[2341,2,9,"query-paths: limit allowed"],[2343,2,9,"query-paths: get fixed path"],[2345,2,9,"query-paths: path members granted"],[2347,2,9,"query-paths: path members denied"],[2349,2,9,"query-paths: path members missing"],[2351,2,9,"query-paths: path-getMembers granted"],[2353,2,9,"query-paths: path-getMembers denied"],[2355,2,9,"query-paths: path-getMembers missing"],[2357,2,9,"query-paths: path-functionMembers granted"],[2359,2,9,"query-paths: path-functionMembers denied"],[2361,2,9,"query-paths: path-functionMembers missing"],[2363,2,9,"query-paths: path-reversedMembers granted"],[2365,2,9,"query-paths: path-reversedMembers denied"],[2367,2,9,"query-paths: path-reversedMembers missing"],[2369,2,9,"query-paths: path-unknownOnly granted"],[2371,2,9,"query-paths: path-unknownOnly denied"],[2373,2,9,"query-paths: path-unknownOnly missing"],[2375,2,9,"query-paths: path-negatedAnd granted"],[2377,2,9,"query-paths: path-negatedAnd denied"],[2379,2,9,"query-paths: path-negatedAnd missing"],[2381,2,9,"query-paths: path-literalOr granted"],[2383,2,9,"query-paths: path-literalOr denied"],[2385,2,9,"query-paths: path-literalOr missing"],[2387,2,9,"query-paths: path-concreteErrorOr granted"],[2389,2,9,"query-paths: path-concreteErrorOr denied"],[2391,2,9,"query-paths: path-concreteErrorOr missing"],[2393,2,9,"query-paths: path-concreteErrorAnd granted"],[2395,2,9,"query-paths: path-concreteErrorAnd denied"],[2397,2,9,"query-paths: path-concreteErrorAnd missing"],[2399,2,9,"query-paths: path-budgetErrorOr granted"],[2401,2,9,"query-paths: path-budgetErrorOr denied"],[2403,2,9,"query-paths: path-budgetErrorOr missing"],[2405,2,9,"query-paths: path members empty granted"],[2407,2,9,"query-paths: path members filtered denied"],[2409,3,9,"query-paths: owner equality"],[2412,2,9,"query-paths: owner absent"],[2414,2,9,"query-paths: owner empty unconstrained"],[2416,2,9,"query-paths: limit allowed"],[2418,2,9,"query-paths: get fixed path"],[2420,2,9,"query-paths: path members granted"],[2422,2,9,"query-paths: path members denied"],[2424,2,9,"query-paths: path members missing"],[2426,2,9,"query-paths: path-getMembers granted"],[2428,2,9,"query-paths: path-getMembers denied"],[2430,2,9,"query-paths: path-getMembers missing"],[2432,2,9,"query-paths: path-functionMembers granted"],[2434,2,9,"query-paths: path-functionMembers denied"],[2436,2,9,"query-paths: path-functionMembers missing"],[2438,2,9,"query-paths: path-reversedMembers granted"],[2440,2,9,"query-paths: path-reversedMembers denied"],[2442,2,9,"query-paths: path-reversedMembers missing"],[2444,2,9,"query-paths: path-unknownOnly granted"],[2446,2,9,"query-paths: path-unknownOnly denied"],[2448,2,9,"query-paths: path-unknownOnly missing"],[2450,2,9,"query-paths: path-negatedAnd granted"],[2452,2,9,"query-paths: path-negatedAnd denied"],[2454,2,9,"query-paths: path-negatedAnd missing"],[2456,2,9,"query-paths: path-literalOr granted"],[2458,2,9,"query-paths: path-literalOr denied"],[2460,2,9,"query-paths: path-literalOr missing"],[2462,2,9,"query-paths: path-concreteErrorOr granted"],[2464,2,9,"query-paths: path-concreteErrorOr denied"],[2466,2,9,"query-paths: path-concreteErrorOr missing"],[2468,2,9,"query-paths: path-concreteErrorAnd granted"],[2470,2,9,"query-paths: path-concreteErrorAnd denied"],[2472,2,9,"query-paths: path-concreteErrorAnd missing"],[2474,2,9,"query-paths: path-budgetErrorOr granted"],[2476,2,9,"query-paths: path-budgetErrorOr denied"],[2478,2,9,"query-paths: path-budgetErrorOr missing"],[2480,2,9,"query-paths: path members empty granted"],[2482,2,9,"query-paths: path members filtered denied"],[2484,1,9,"query-paths: owner equality"]],"cases":[{"t":"case 0000","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0001","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0002","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0003","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0004","q":"get: 2 + 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0005","q":"get: 11 - 4 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0006","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0007","q":"get: 9 / 3 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0008","q":"get: 10 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0009","q":"get: 0 < 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0010","q":"get: -1 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0011","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0012","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0013","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0014","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0015","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0016","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0017","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0018","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0019","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0020","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0021","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0022","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0023","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0024","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0025","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0026","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0027","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0028","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0029","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0030","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0031","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0032","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0033","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0034","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0035","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0036","q":"get: 3 + 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0037","q":"get: 12 - 4 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0038","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0039","q":"get: 10 / 3 == 3.3333333333333335","a":"DENY","r":"c","k":"verdict"},{"t":"case 0040","q":"get: 11 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0041","q":"get: 1 < 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0042","q":"get: -2 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0043","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0044","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0045","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0046","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0047","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0048","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0049","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0050","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0051","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0052","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0053","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0054","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0055","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0056","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0057","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0058","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0059","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0060","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0061","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0062","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0063","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0064","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0065","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0066","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0067","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0068","q":"get: 4 + 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0069","q":"get: 13 - 4 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0070","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0071","q":"get: 11 / 3 == 3.6666666666666665","a":"DENY","r":"c","k":"verdict"},{"t":"case 0072","q":"get: 12 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0073","q":"get: 2 < 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0074","q":"get: -3 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0075","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0076","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0077","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0078","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0079","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0080","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0081","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0082","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0083","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0084","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0085","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0086","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0087","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0088","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0089","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0090","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0091","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0092","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0093","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0094","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0095","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0096","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0097","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0098","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0099","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0100","q":"get: 5 + 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0101","q":"get: 14 - 4 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0102","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0103","q":"get: 12 / 3 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0104","q":"get: 13 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0105","q":"get: 3 < 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0106","q":"get: -4 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0107","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0108","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0109","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0110","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0111","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0112","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0113","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0114","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0115","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0116","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0117","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0118","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0119","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0120","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0121","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0122","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0123","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0124","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0125","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0126","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0127","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0128","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0129","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0130","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0131","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0132","q":"get: 6 + 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0133","q":"get: 15 - 4 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0134","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0135","q":"get: 13 / 3 == 4.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0136","q":"get: 14 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0137","q":"get: 4 < 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0138","q":"get: -5 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0139","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0140","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0141","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0142","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0143","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0144","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0145","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0146","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0147","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0148","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0149","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0150","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0151","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0152","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0153","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0154","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0155","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0156","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0157","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0158","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0159","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0160","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0161","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0162","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0163","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0164","q":"get: 7 + 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0165","q":"get: 16 - 4 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0166","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0167","q":"get: 14 / 3 == 4.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0168","q":"get: 15 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0169","q":"get: 5 < 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0170","q":"get: -6 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0171","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0172","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0173","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0174","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0175","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0176","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0177","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0178","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0179","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0180","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0181","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0182","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0183","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0184","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0185","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0186","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0187","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0188","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0189","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0190","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0191","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0192","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0193","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0194","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0195","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0196","q":"get: 8 + 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0197","q":"get: 17 - 4 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0198","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0199","q":"get: 15 / 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0200","q":"get: 16 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0201","q":"get: 6 < 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0202","q":"get: -7 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0203","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0204","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0205","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0206","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0207","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0208","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0209","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0210","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0211","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0212","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0213","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0214","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0215","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0216","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0217","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0218","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0219","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0220","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0221","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0222","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0223","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0224","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0225","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0226","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0227","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0228","q":"get: 9 + 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0229","q":"get: 18 - 4 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0230","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0231","q":"get: 16 / 3 == 5.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0232","q":"get: 17 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0233","q":"get: 7 < 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0234","q":"get: -8 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0235","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0236","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0237","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0238","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0239","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0240","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0241","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0242","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0243","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0244","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0245","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0246","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0247","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0248","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0249","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0250","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0251","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0252","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0253","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0254","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0255","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0256","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0257","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0258","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0259","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0260","q":"get: 10 + 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0261","q":"get: 19 - 4 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0262","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0263","q":"get: 17 / 3 == 5.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0264","q":"get: 18 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0265","q":"get: 8 < 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0266","q":"get: -9 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0267","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0268","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0269","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0270","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0271","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0272","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0273","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0274","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0275","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0276","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0277","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0278","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0279","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0280","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0281","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0282","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0283","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0284","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0285","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0286","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0287","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0288","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0289","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0290","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0291","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0292","q":"get: 11 + 3 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0293","q":"get: 20 - 4 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0294","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0295","q":"get: 18 / 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0296","q":"get: 19 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0297","q":"get: 9 < 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0298","q":"get: -10 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0299","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0300","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0301","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0302","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0303","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0304","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0305","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0306","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0307","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0308","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0309","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0310","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0311","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0312","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0313","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0314","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0315","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0316","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0317","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0318","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0319","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0320","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0321","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0322","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0323","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0324","q":"get: 12 + 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0325","q":"get: 21 - 4 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0326","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0327","q":"get: 19 / 3 == 6.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0328","q":"get: 20 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0329","q":"get: 10 < 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0330","q":"get: -11 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0331","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0332","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0333","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0334","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0335","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0336","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0337","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0338","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0339","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0340","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0341","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0342","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0343","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0344","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0345","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0346","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0347","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0348","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0349","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0350","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0351","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0352","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0353","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0354","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0355","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0356","q":"get: 13 + 3 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0357","q":"get: 22 - 4 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0358","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0359","q":"get: 20 / 3 == 6.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0360","q":"get: 21 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0361","q":"get: 11 < 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0362","q":"get: -12 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0363","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0364","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0365","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0366","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0367","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0368","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0369","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0370","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0371","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0372","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0373","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0374","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0375","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0376","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0377","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0378","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0379","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0380","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0381","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0382","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0383","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0384","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0385","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0386","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0387","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0388","q":"get: 14 + 3 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0389","q":"get: 23 - 4 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0390","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0391","q":"get: 21 / 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0392","q":"get: 22 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0393","q":"get: 12 < 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0394","q":"get: -13 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0395","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0396","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0397","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0398","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0399","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0400","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0401","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0402","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0403","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0404","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0405","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0406","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0407","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0408","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0409","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0410","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0411","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0412","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0413","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0414","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0415","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0416","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0417","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0418","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0419","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0420","q":"get: 15 + 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0421","q":"get: 24 - 4 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0422","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0423","q":"get: 22 / 3 == 7.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0424","q":"get: 23 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0425","q":"get: 13 < 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0426","q":"get: -14 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0427","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0428","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0429","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0430","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0431","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0432","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0433","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0434","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0435","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0436","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0437","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0438","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0439","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0440","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0441","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0442","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0443","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0444","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0445","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0446","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0447","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0448","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0449","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0450","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0451","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0452","q":"get: 16 + 3 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0453","q":"get: 25 - 4 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0454","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0455","q":"get: 23 / 3 == 7.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0456","q":"get: 24 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0457","q":"get: 14 < 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0458","q":"get: -15 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0459","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0460","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0461","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0462","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0463","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0464","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0465","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0466","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0467","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0468","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0469","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0470","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0471","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0472","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0473","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0474","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0475","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0476","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0477","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0478","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0479","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0480","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0481","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0482","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0483","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0484","q":"get: 17 + 3 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0485","q":"get: 26 - 4 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0486","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0487","q":"get: 24 / 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0488","q":"get: 25 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0489","q":"get: 15 < 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0490","q":"get: -16 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0491","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0492","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0493","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0494","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0495","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0496","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0497","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0498","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0499","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0500","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0501","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0502","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0503","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0504","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0505","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0506","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0507","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0508","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0509","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0510","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0511","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0512","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0513","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0514","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0515","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0516","q":"get: 18 + 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0517","q":"get: 27 - 4 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0518","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0519","q":"get: 25 / 3 == 8.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0520","q":"get: 26 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0521","q":"get: 16 < 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0522","q":"get: -17 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0523","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0524","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0525","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0526","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0527","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0528","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0529","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0530","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0531","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0532","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0533","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0534","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0535","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0536","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0537","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0538","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0539","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0540","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0541","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0542","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0543","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0544","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0545","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0546","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0547","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0548","q":"get: 19 + 3 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0549","q":"get: 28 - 4 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0550","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0551","q":"get: 26 / 3 == 8.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0552","q":"get: 27 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0553","q":"get: 17 < 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0554","q":"get: -18 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0555","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0556","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0557","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0558","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0559","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0560","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0561","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0562","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0563","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0564","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0565","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0566","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0567","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0568","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0569","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0570","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0571","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0572","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0573","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0574","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0575","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0576","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0577","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0578","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0579","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0580","q":"get: 20 + 3 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0581","q":"get: 29 - 4 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0582","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0583","q":"get: 27 / 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0584","q":"get: 28 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0585","q":"get: 18 < 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0586","q":"get: -19 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0587","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0588","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0589","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0590","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0591","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0592","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0593","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0594","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0595","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0596","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0597","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0598","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0599","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0600","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0601","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0602","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0603","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0604","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0605","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0606","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0607","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0608","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0609","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0610","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0611","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0612","q":"get: 21 + 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0613","q":"get: 30 - 4 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0614","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0615","q":"get: 28 / 3 == 9.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0616","q":"get: 29 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0617","q":"get: 19 < 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0618","q":"get: -20 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0619","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0620","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0621","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0622","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0623","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0624","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0625","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0626","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0627","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0628","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0629","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0630","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0631","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0632","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0633","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0634","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0635","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0636","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0637","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0638","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0639","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0640","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0641","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0642","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0643","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0644","q":"get: 22 + 3 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0645","q":"get: 31 - 4 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0646","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0647","q":"get: 29 / 3 == 9.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0648","q":"get: 30 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0649","q":"get: 20 < 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0650","q":"get: -21 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0651","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0652","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0653","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0654","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0655","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0656","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0657","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0658","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0659","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0660","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0661","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0662","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0663","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0664","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0665","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0666","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0667","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0668","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0669","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0670","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0671","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0672","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0673","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0674","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0675","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0676","q":"get: 23 + 3 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0677","q":"get: 32 - 4 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0678","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0679","q":"get: 30 / 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0680","q":"get: 31 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0681","q":"get: 21 < 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0682","q":"get: -22 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0683","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0684","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0685","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0686","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0687","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0688","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0689","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0690","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0691","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0692","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0693","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0694","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0695","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0696","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0697","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0698","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0699","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0700","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0701","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0702","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0703","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0704","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0705","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0706","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0707","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0708","q":"get: 24 + 3 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0709","q":"get: 33 - 4 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0710","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0711","q":"get: 31 / 3 == 10.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0712","q":"get: 32 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0713","q":"get: 22 < 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0714","q":"get: -23 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0715","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0716","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0717","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0718","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0719","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0720","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0721","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0722","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0723","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0724","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0725","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0726","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0727","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0728","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0729","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0730","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0731","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0732","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0733","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0734","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0735","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0736","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0737","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0738","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0739","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0740","q":"get: 25 + 3 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0741","q":"get: 34 - 4 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0742","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0743","q":"get: 32 / 3 == 10.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0744","q":"get: 33 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0745","q":"get: 23 < 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0746","q":"get: -24 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0747","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0748","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0749","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0750","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0751","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0752","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0753","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0754","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0755","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0756","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0757","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0758","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0759","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0760","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0761","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0762","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0763","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0764","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0765","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0766","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0767","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0768","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0769","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0770","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0771","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0772","q":"get: 26 + 3 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0773","q":"get: 35 - 4 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0774","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0775","q":"get: 33 / 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0776","q":"get: 34 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0777","q":"get: 24 < 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0778","q":"get: -25 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0779","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0780","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0781","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0782","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0783","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0784","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0785","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0786","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0787","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0788","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0789","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0790","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0791","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0792","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0793","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0794","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0795","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0796","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0797","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0798","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0799","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0800","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0801","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0802","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0803","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0804","q":"get: 27 + 3 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0805","q":"get: 36 - 4 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0806","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0807","q":"get: 34 / 3 == 11.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0808","q":"get: 35 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0809","q":"get: 25 < 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0810","q":"get: -26 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0811","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0812","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0813","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0814","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0815","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0816","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0817","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0818","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0819","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0820","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0821","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0822","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0823","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0824","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0825","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0826","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0827","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0828","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0829","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0830","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0831","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0832","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0833","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0834","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0835","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0836","q":"get: 28 + 3 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0837","q":"get: 37 - 4 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0838","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0839","q":"get: 35 / 3 == 11.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0840","q":"get: 36 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0841","q":"get: 26 < 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0842","q":"get: -27 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0843","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0844","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0845","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0846","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0847","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0848","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0849","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0850","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0851","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0852","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0853","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0854","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0855","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0856","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0857","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0858","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0859","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0860","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0861","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0862","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0863","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0864","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0865","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0866","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0867","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0868","q":"get: 29 + 3 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0869","q":"get: 38 - 4 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0870","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0871","q":"get: 36 / 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0872","q":"get: 37 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0873","q":"get: 27 < 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0874","q":"get: -28 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0875","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0876","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0877","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0878","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0879","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0880","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0881","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0882","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0883","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0884","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0885","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0886","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0887","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0888","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0889","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0890","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0891","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0892","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0893","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0894","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0895","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0896","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0897","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0898","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0899","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0900","q":"get: 30 + 3 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0901","q":"get: 39 - 4 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0902","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0903","q":"get: 37 / 3 == 12.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0904","q":"get: 38 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0905","q":"get: 28 < 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0906","q":"get: -29 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0907","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0908","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0909","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0910","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0911","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0912","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0913","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0914","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0915","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0916","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0917","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0918","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0919","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0920","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0921","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0922","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0923","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0924","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0925","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0926","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0927","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0928","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0929","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0930","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0931","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0932","q":"get: 31 + 3 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0933","q":"get: 40 - 4 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0934","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0935","q":"get: 38 / 3 == 12.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0936","q":"get: 39 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0937","q":"get: 29 < 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0938","q":"get: -30 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0939","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0940","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0941","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0942","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0943","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0944","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0945","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0946","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0947","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0948","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0949","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0950","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0951","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0952","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0953","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0954","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0955","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0956","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0957","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0958","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0959","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0960","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0961","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0962","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0963","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0964","q":"get: 32 + 3 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0965","q":"get: 41 - 4 == 37","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0966","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0967","q":"get: 39 / 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0968","q":"get: 40 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0969","q":"get: 30 < 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0970","q":"get: -31 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0971","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0972","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0973","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0974","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0975","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0976","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0977","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0978","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0979","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0980","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0981","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0982","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0983","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0984","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0985","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0986","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0987","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0988","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0989","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0990","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0991","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0992","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0993","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0994","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0995","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0996","q":"get: 33 + 3 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0997","q":"get: 42 - 4 == 38","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0998","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0999","q":"get: 40 / 3 == 13.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 1000","q":"get: 41 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1001","q":"get: 31 < 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1002","q":"get: -32 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1003","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1004","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1005","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1006","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 1007","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1008","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1009","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1010","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1011","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1012","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1013","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1014","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1015","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1016","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1017","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1018","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1019","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1020","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1021","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1022","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1023","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string trim","q":"get: ' {name} '.trim() == '{name}'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string case","q":"get: 'FiRe'.lower() == 'fire' && 'FiRe'.upper() == 'FIRE'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string replace","q":"get: 'abcabc'.replace('a', 'x') == 'xbcxbc'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string split","q":"get: 'a,b,c'.split(',') == ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"string match","q":"get: 'phase3'.matches('^phase[0-9]$')","a":"ALLOW","r":"c","k":"verdict"},{"t":"string coercion","q":"get: string(123) == '123' && string(true) == 'true'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list concat","q":"get: [1, 2].concat([3]) == [1, 2, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list membership","q":"get: [1, 2, 3].hasAll([1, 3]) && [1, 2, 3].hasAny([9, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list has only","q":"get: [1, 2, 2].hasOnly([2, 1])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list join","q":"get: ['a', 'b', 'c'].join('-') == 'a-b-c'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list remove all","q":"get: [1, 2, 3, 2].removeAll([2]) == [1, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list index range","q":"get: [10, 20, 30][1] == 20 && [10, 20, 30][0:2] == [10, 20]","a":"ALLOW","r":"c","k":"verdict"},{"t":"map get","q":"get: {'a': 1}.get('missing', 7) == 7 && {'a': 1}.get('a', 7) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"map keys values","q":"get: {'a': 1, 'b': 2}.keys().hasOnly(['a', 'b']) && {'a': 1, 'b': 2}.values().hasAll([1, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map size membership","q":"get: {'a': 1, 'b': 2}.size() == 2 && 'a' in {'a': 1}","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).affectedKeys().hasOnly(['b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff sets","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).changedKeys().hasOnly(['b']) && {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).addedKโ€ฆ","a":"ALLOW","r":"c","k":"verdict"},{"t":"set union","q":"get: ['a', 'b'].toSet().union(['b', 'c'].toSet()).hasOnly(['a', 'b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set intersection","q":"get: ['a', 'b'].toSet().intersection(['b', 'c'].toSet()).hasOnly(['b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set difference","q":"get: ['a', 'b'].toSet().difference(['b'].toSet()).hasOnly(['a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes size hex","q":"get: 'abc'.toUtf8().size() == 3 && 'abc'.toUtf8().toHexString() == '616263'","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes base64 unicode","q":"get: 'รฉ'.toUtf8().size() == 2 && 'abc'.toUtf8().toBase64() == 'YWJj'","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration seconds","q":"get: duration.value(90, 's').seconds() == 90","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration nanos","q":"get: duration.value(123, 'ns').nanos() == 123","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp date","q":"get: timestamp.date(2024, 2, 29).year() == 2024 && timestamp.date(2024, 2, 29).month() == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp components","q":"get: timestamp.date(2024, 2, 29).day() == 29 && timestamp.date(2024, 2, 29).dayOfWeek() == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp arithmetic","q":"get: timestamp.date(2024, 2, 29) + duration.value(1, 'd') == timestamp.date(2024, 3, 1)","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng components","q":"get: latlng.value(1.25, 2.5).latitude() == 1.25 && latlng.value(1.25, 2.5).longitude() == 2.5","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng distance","q":"get: latlng.value(1, 2).distance(latlng.value(1, 2)) == 0.0","a":"ALLOW","r":"c","k":"verdict"},{"t":"math basic","q":"get: math.abs(-2) == 2 && math.ceil(1.2) == 2 && math.floor(1.8) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"math round sqrt","q":"get: math.round(1.6) == 2 && math.sqrt(81) == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"math pow","q":"get: math.pow(2, 3) == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing md5","q":"get: hashing.md5('abc'.toUtf8()).toHexString() == '900150983CD24FB0D6963F7D28E17F72'","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing sha256","q":"get: hashing.sha256('abc'.toUtf8()).toHexString() == 'BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request auth","q":"get: request.auth.uid == 'phase3-user' && request.auth.token.role == 'editor'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request method time","q":"get: request.method == 'get' && request.time.year() == 2026","a":"ALLOW","r":"c","k":"verdict"},{"t":"path value","q":"get: resource.__name__ == /databases/$(database)/documents/phase3-language/path-value","a":"ALLOW","r":"c","k":"verdict"},{"t":"function let","q":"get: usesLet(3)","a":"ALLOW","r":"c","k":"verdict"},{"t":"resource update diff","q":"update: resource.data.name == 'before' && request.resource.data.name == 'after' && request.resource.data.diff(resource.data).affectedKeys()โ€ฆ","a":"ALLOW","r":"c","k":"verdict"},{"t":"query limit","q":"list: request.query.limit == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"nested match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"recursive match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"overlapping allow","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 22","q":"projects.test with the function-depth-22 source (888 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->โ€ฆ","r":"c","k":"verdict"},{"t":"balanced expression terms 100","q":"projects.test with the balanced-expression-terms-100 source (3933 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced expression terms 125","q":"projects.test with the balanced-expression-terms-125 source (4972 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"verdict"},{"t":"unexpected token","q":"projects.test with the unexpected-token source (154 bytes)","a":"compile ERROR: Missing conditional expression after 'if'.","r":"c","k":"verdict"},{"t":"unclosed block","q":"projects.test with the unclosed-block source (89 bytes)","a":"compile ERROR: Missing 'match' keyword before path.","r":"c","k":"verdict"},{"t":"duplicate let","q":"projects.test with the duplicate-let source (245 bytes)","a":"compile ERROR: The identifier [value] is already bound in the current scope.","r":"c","k":"verdict"},{"t":"undefined name","q":"projects.test with the undefined-name source (170 bytes)","a":"compiled, WARNING: Invalid variable name: missingName.","r":"c","k":"verdict"},{"t":"invalid function arity","q":"projects.test with the invalid-function-arity source (169 bytes)","a":"compiled, WARNING: Incorrect number of arguments supplied to function: math.abs.","r":"c","k":"verdict"},{"t":"recursive function","q":"projects.test with the recursive-function source (210 bytes)","a":"compile ERROR: Recursive call is not allowed.","r":"c","k":"verdict"},{"t":"invalid recursive wildcard","q":"projects.test with the invalid-recursive-wildcard source (163 bytes)","a":"compile ERROR: Invalid glob match expression. Only one glob match is permitted in a match declaration path.","r":"c","k":"verdict"},{"t":"source bytes 255999","q":"projects.test with the source-bytes-255999 source (255999 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256000","q":"projects.test with the source-bytes-256000 source (256000 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256001","q":"projects.test with the source-bytes-256001 source (256001 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 262145","q":"projects.test with the source-bytes-262145 source (262145 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"c","k":"verdict"},{"t":"production compile","q":"compile complex-firestore.rules (1193 non-blank lines)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"debug return","q":"get: debug(request.auth.uid) == 'phase3-user'","a":"DENY, error: Function not found error: Name: [debug].","r":"d","k":"verdict","w":"production's projects.test has no debug() (Function not found); Firenook evaluates debug() to its argument, as the emulator does"},{"t":"source bytes 262143","q":"projects.test with the source-bytes-262143 source (262143 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"source bytes 262144","q":"projects.test with the source-bytes-262144 source (262144 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"function depth 15","q":"projects.test with the function-depth-15 source (643 bytes)","a":"ALLOW","r":"u"},{"t":"function depth 16","q":"projects.test with the function-depth-16 source (678 bytes)","a":"ALLOW","r":"u"},{"t":"function depth 17","q":"projects.test with the function-depth-17 source (713 bytes)","a":"ALLOW","r":"u"},{"t":"function depth 18","q":"projects.test with the function-depth-18 source (748 bytes)","a":"ALLOW","r":"u"},{"t":"function depth 19","q":"projects.test with the function-depth-19 source (783 bytes)","a":"ALLOW","r":"u"},{"t":"function depth 20","q":"projects.test with the function-depth-20 source (818 bytes)","a":"ALLOW","r":"u"},{"t":"function depth 21","q":"projects.test with the function-depth-21 source (853 bytes)","a":"ALLOW","r":"u"},{"t":"function depth 23","q":"projects.test with the function-depth-23 source (923 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->โ€ฆ","r":"u"},{"t":"linear expression terms 20","q":"projects.test with the linear-expression-terms-20 source (740 bytes)","a":"ALLOW","r":"u"},{"t":"linear expression terms 30","q":"projects.test with the linear-expression-terms-30 source (1040 bytes)","a":"ALLOW","r":"u"},{"t":"linear expression terms 40","q":"projects.test with the linear-expression-terms-40 source (1340 bytes)","a":"ALLOW","r":"u"},{"t":"linear expression terms 50","q":"projects.test with the linear-expression-terms-50 source (1640 bytes)","a":"ALLOW","r":"u"},{"t":"linear expression terms 60","q":"projects.test with the linear-expression-terms-60 source (1940 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"u"},{"t":"linear expression terms 70","q":"projects.test with the linear-expression-terms-70 source (2240 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"u"},{"t":"linear expression terms 80","q":"projects.test with the linear-expression-terms-80 source (2540 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"u"},{"t":"linear expression terms 90","q":"projects.test with the linear-expression-terms-90 source (2840 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"u"},{"t":"linear expression terms 100","q":"projects.test with the linear-expression-terms-100 source (3140 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"u"},{"t":"balanced expression terms 150","q":"projects.test with the balanced-expression-terms-150 source (5923 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"u"},{"t":"balanced expression terms 175","q":"projects.test with the balanced-expression-terms-175 source (6962 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"u"},{"t":"balanced expression terms 200","q":"projects.test with the balanced-expression-terms-200 source (7913 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"u"},{"t":"balanced expression terms 225","q":"projects.test with the balanced-expression-terms-225 source (8954 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"u"},{"t":"balanced expression terms 250","q":"projects.test with the balanced-expression-terms-250 source (9907 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"u"},{"t":"balanced expression terms 300","q":"projects.test with the balanced-expression-terms-300 source (11903 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"u"},{"t":"constant","q":"reload rules, read twice, GET :ruleCoverage: allow get: if true;","a":"read 200 ยท no report (constant rules)","r":"c","k":"answer"},{"t":"list and map","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].size() == 2 && {'ok': true}.ok;","a":"read 200 ยท coverage report with 6 expressions","r":"c","k":"answer"},{"t":"empty containers","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [].size() == 0 && {}.size() == 0;","a":"read 200 ยท coverage report with 7 expressions","r":"c","k":"answer"},{"t":"slice","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2, 3][1:2] == [2];","a":"read 200 ยท coverage report with 4 expressions","r":"c","k":"answer"},{"t":"method arguments","q":"reload rules, read twice, GET :ruleCoverage: allow get: if 'hello'.matches('h.*');","a":"read 200 ยท coverage report with 1 expression","r":"c","k":"answer"},{"t":"grouped literal","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ('hello').size() == 5;","a":"read 200 ยท coverage report with 2 expressions","r":"c","k":"answer"},{"t":"constant function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept();","a":"read 200 ยท coverage report with 1 expression","r":"c","k":"answer"},{"t":"duration","q":"reload rules, read twice, GET :ruleCoverage: allow get: if duration.value(1, 's') == duration.value(1000, 'ms');","a":"read 200 ยท coverage report with 3 expressions","r":"c","k":"answer"},{"t":"set","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].toSet().hasAll([1]);","a":"read 200 ยท coverage report with 4 expressions","r":"c","k":"answer"},{"t":"map diff","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'x': 1}.diff({'x': 2}).changedKeys().hasOnly(['x']);","a":"read 200 ยท coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff statuses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'same': 1, 'removed': 1, 'changed': 1}.diff({'same': 1, 'added': 1, 'changed':โ€ฆ","a":"read 200 ยท coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff direction size","q":"reload rules, read twice, GET :ruleCoverage: allow get: if check();","a":"read 200 ยท coverage report with 19 expressions","r":"c","k":"answer"},{"t":"bytes","q":"reload rules, read twice, GET :ruleCoverage: allow get: if hashing.sha256('hello'.toUtf8()).size() == 32;","a":"read 200 ยท coverage report with 4 expressions","r":"c","k":"answer"},{"t":"timestamp","q":"reload rules, read twice, GET :ruleCoverage: allow get: if timestamp.date(2020, 1, 2).year() == 2020;","a":"read 200 ยท coverage report with 3 expressions","r":"c","k":"answer"},{"t":"owner seed","q":"PATCH /v1/projects/{project}/databases/(default)/documents/items/one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"u"},{"t":"short circuit","q":"reload rules, read twice, GET :ruleCoverage: allow get: if false && resource.data.missing;","a":"read 403 ยท coverage report with 4 expressions","r":"u"},{"t":"field equality","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible == true;","a":"read 200 ยท coverage report with 4 expressions","r":"u"},{"t":"missing field","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.missing == true;","a":"read 403 ยท coverage report with 4 expressions","r":"u"},{"t":"function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 ยท coverage report with 8 expressions","r":"u"},{"t":"unicode crlf","q":"reload rules, read twice, GET :ruleCoverage: allow get: if 'ไธญๆ–‡๐Ÿš€' == 'ไธญๆ–‡๐Ÿš€' && resource.data.visible;","a":"read 200 ยท coverage report with 5 expressions","r":"u"},{"t":"parentheses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if (resource.data.visible == true) || false;","a":"read 200 ยท coverage report with 5 expressions","r":"u"},{"t":"unary","q":"reload rules, read twice, GET :ruleCoverage: allow get: if !resource.data.visible;","a":"read 403 ยท coverage report with 4 expressions","r":"u"},{"t":"index","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data['visible'];","a":"read 200 ยท coverage report with 3 expressions","r":"u"},{"t":"simple function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 ยท coverage report with 5 expressions","r":"u"},{"t":"path interpolation","q":"reload rules, read twice, GET :ruleCoverage: allow get: if exists(/databases/$(database)/documents/items/one);","a":"read 200 ยท coverage report with 3 expressions","r":"u"},{"t":"type check","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible is bool;","a":"read 200 ยท coverage report with 4 expressions","r":"u"},{"t":"nested grouping","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ((resource.data.visible));","a":"read 200 ยท coverage report with 3 expressions","r":"u"},{"t":"request","q":"reload rules, read twice, GET :ruleCoverage: allow get: if request.auth == null && request.method == \"get\";","a":"read 200 ยท coverage report with 7 expressions","r":"u"},{"t":"invalid reload","q":"PUT /emulator/v1/projects/{project}:securityRules (source \"broken\")","a":"400 INVALID_ARGUMENT: Error compiling rules: L1:1 mismatched input 'broken' expecting {'function', 'import', 'service', 'rules_version'}","r":"u"},{"t":"coverage after the rejected reload","q":"GET :ruleCoverage after the rejected reload","a":"coverage of the last valid rules, 7 expressions","r":"u"},{"t":"namespace name as a function parameter","q":"PUT :securityRules with function accept(duration)","a":"400 INVALID_ARGUMENT: Error compiling rules: L4:19 duration is a package and cannot be used as variable name.","r":"u"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"u"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"u"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"u"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] ยท 1 evaluation message","r":"u"},{"t":"query unbounded","q":"POST :runQuery","a":"200 [1 item] ยท 1 evaluation message","r":"u"},{"t":"query group","q":"POST :runQuery","a":"403 PERMISSION_DENIED: No matching allow statements ยท 1 evaluation message","r":"u"},{"t":"query nested","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements ยท 1 evaluation message","r":"u"},{"t":"query nested group","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements ยท 1 evaluation message","r":"u"},{"t":"get mask","q":"GET /values/typed?mask.fieldPaths=yes&mask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"u"},{"t":"patch mask","q":"PATCH /values/typed?updateMask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"u"},{"t":"patch quoted mask","q":"PATCH /values/typed?updateMask.fieldPaths=%60a.b%60&updateMask.fieldPaths=nested.active","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"u"},{"t":"commit transform","q":"POST :commit","a":"200 {writeResults, commitTime} ยท 2 evaluation messages","r":"u"},{"t":"batch get mask","q":"POST :batchGet","a":"200 [1 item] ยท 1 evaluation message","r":"u"},{"t":"begin read transaction","q":"POST :beginTransaction","a":"200 {transaction} ยท 0 evaluation messages","r":"u"},{"t":"transaction get","q":"POST :batchGet","a":"200 [1 item] ยท 1 evaluation message","r":"u"},{"t":"rollback","q":"POST :rollback","a":"200 {} ยท 0 evaluation messages","r":"u"},{"t":"begin write transaction","q":"POST :beginTransaction","a":"200 {transaction} ยท 0 evaluation messages","r":"u"},{"t":"write transaction get","q":"POST :batchGet","a":"200 [1 item] ยท 1 evaluation message","r":"u"},{"t":"write rollback","q":"POST :rollback","a":"200 {} ยท 0 evaluation messages","r":"u"},{"t":"commit replacement transform","q":"POST :commit","a":"200 {writeResults, commitTime} ยท 2 evaluation messages","r":"u"},{"t":"commit empty mask","q":"POST :commit","a":"200 {writeResults, commitTime} ยท 2 evaluation messages","r":"u"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} ยท 1 evaluation message","r":"u"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. ยท 1 evaluation message","r":"u"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"u"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"u"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow list /databases/(default)/documents/values/*","r":"u"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"deny list /databases/(default)/documents/**/values/*","r":"u"},{"t":"evaluation request 8","q":"rules evaluation event 8","a":"deny list /databases/(default)/documents/parents/p/values/*","r":"u"},{"t":"evaluation request 9","q":"rules evaluation event 9","a":"deny list /databases/(default)/documents/parents/p/**/values/*","r":"u"},{"t":"evaluation request 10","q":"rules evaluation event 10","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 11","q":"rules evaluation event 11","a":"allow create /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 12","q":"rules evaluation event 12","a":"allow update /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 13","q":"rules evaluation event 13","a":"allow create /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 14","q":"rules evaluation event 14","a":"allow update /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 15","q":"rules evaluation event 15","a":"allow create /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 16","q":"rules evaluation event 16","a":"allow update /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 17","q":"rules evaluation event 17","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 18","q":"rules evaluation event 18","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 19","q":"rules evaluation event 19","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 20","q":"rules evaluation event 20","a":"allow create /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 21","q":"rules evaluation event 21","a":"allow update /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 22","q":"rules evaluation event 22","a":"allow create /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 23","q":"rules evaluation event 23","a":"allow update /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 24","q":"rules evaluation event 24","a":"allow delete /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 25","q":"rules evaluation event 25","a":"allow get /databases/(default)/documents/values/missing","r":"u"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"c","k":"status"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"u"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"u"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] ยท 1 evaluation message","r":"u"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} ยท 1 evaluation message","r":"u"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. ยท 1 evaluation message","r":"u"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"u"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"u"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow delete /databases/(default)/documents/values/typed","r":"u"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"allow get /databases/(default)/documents/values/missing","r":"u"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as absent","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as signed","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as absent","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as signed","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L8, Null value error. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L9, Null value error. for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-id-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-id-only","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as empty-claims","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, absent)","q":"ListCollectionIds as absent (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, absent)","q":"POST :listCollectionIds as absent (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, user)","q":"ListCollectionIds as user (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, user)","q":"POST :listCollectionIds as user (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, owner)","q":"ListCollectionIds as owner (with rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (rules, owner)","q":"POST :listCollectionIds as owner (with rules)","a":"200","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, absent)","q":"ListCollectionIds as absent (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, absent)","q":"POST :listCollectionIds as absent (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, user)","q":"ListCollectionIds as user (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, user)","q":"POST :listCollectionIds as user (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, owner)","q":"ListCollectionIds as owner (no rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (open, owner)","q":"POST :listCollectionIds as owner (no rules)","a":"200","r":"c","k":"status"},{"t":"pipeline as owner","q":"Enterprise ExecutePipeline as owner","a":"OK","r":"c","k":"status"},{"t":"query as owner","q":"Enterprise RunQuery as owner","a":"OK","r":"c","k":"status"},{"t":"json","q":"PUT /emulator/v1/projects/โ€ฆ:securityRules (json body)","a":"200 ยท the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"text plain","q":"PUT /emulator/v1/projects/โ€ฆ:securityRules (text-plain body)","a":"200 ยท the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"no content type","q":"PUT /emulator/v1/projects/โ€ฆ:securityRules (no-content-type body)","a":"200 ยท the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"twoAllows over gRPC","q":"read refused by rules (twoAllows)","a":"PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"twoAllows over REST","q":"read refused by rules (twoAllows)","a":"403 PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over gRPC","q":"read refused by rules (noMatchingAllow)","a":"PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over REST","q":"read refused by rules (noMatchingAllow)","a":"403 PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"create over REST","q":"create refused by rules (create)","a":"403 PERMISSION_DENIED: false for 'create' @ L14","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"PartitionQuery over gRPC (rules, absent)","q":"PartitionQuery as absent (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, user)","q":"PartitionQuery as user (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, owner)","q":"PartitionQuery as owner (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, absent)","q":"PartitionQuery as absent (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, user)","q":"PartitionQuery as user (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, owner)","q":"PartitionQuery as owner (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"pipeline as user","q":"Enterprise ExecutePipeline as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"query as user","q":"Enterprise RunQuery as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"duration as a parameter","q":"install rules using \"duration\" as a parameter: function accept(duration) { return duration; }","a":"400 Error compiling rules: L4:18 duration is a package and cannot be used as variable name. L4:37 duration is a package and cannot be usedโ€ฆ","r":"c","k":"verdict"},{"t":"duration as a binding","q":"install rules using \"duration\" as a binding: function accept() { let duration = true; return duration; }","a":"400 Error compiling rules: L4:26 duration is a package and cannot be used as variable name. L4:50 duration is a package and cannot be usedโ€ฆ","r":"c","k":"verdict"},{"t":"duration as a function","q":"install rules using \"duration\" as a function: function duration() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"duration as a wildcard","q":"install rules using \"duration\" as a wildcard: allow get: if duration == 'one';","a":"400 Error compiling rules: L4:16 duration is a package and cannot be used as variable name. L4:42 duration is a package and cannot be usedโ€ฆ","r":"c","k":"verdict"},{"t":"duration as a field","q":"install rules using \"duration\" as a field: allow get: if {'duration': true}.duration;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a parameter","q":"install rules using \"hashing\" as a parameter: function accept(hashing) { return hashing; }","a":"400 Error compiling rules: L4:18 hashing is a package and cannot be used as variable name. L4:36 hashing is a package and cannot be used asโ€ฆ","r":"c","k":"verdict"},{"t":"hashing as a binding","q":"install rules using \"hashing\" as a binding: function accept() { let hashing = true; return hashing; }","a":"400 Error compiling rules: L4:26 hashing is a package and cannot be used as variable name. L4:49 hashing is a package and cannot be used asโ€ฆ","r":"c","k":"verdict"},{"t":"hashing as a function","q":"install rules using \"hashing\" as a function: function hashing() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a wildcard","q":"install rules using \"hashing\" as a wildcard: allow get: if hashing == 'one';","a":"400 Error compiling rules: L4:16 hashing is a package and cannot be used as variable name. L4:41 hashing is a package and cannot be used asโ€ฆ","r":"c","k":"verdict"},{"t":"hashing as a field","q":"install rules using \"hashing\" as a field: allow get: if {'hashing': true}.hashing;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a parameter","q":"install rules using \"latlng\" as a parameter: function accept(latlng) { return latlng; }","a":"400 Error compiling rules: L4:18 latlng is a package and cannot be used as variable name. L4:35 latlng is a package and cannot be used as vโ€ฆ","r":"c","k":"verdict"},{"t":"latlng as a binding","q":"install rules using \"latlng\" as a binding: function accept() { let latlng = true; return latlng; }","a":"400 Error compiling rules: L4:26 latlng is a package and cannot be used as variable name. L4:48 latlng is a package and cannot be used as vโ€ฆ","r":"c","k":"verdict"},{"t":"latlng as a function","q":"install rules using \"latlng\" as a function: function latlng() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a wildcard","q":"install rules using \"latlng\" as a wildcard: allow get: if latlng == 'one';","a":"400 Error compiling rules: L4:16 latlng is a package and cannot be used as variable name. L4:40 latlng is a package and cannot be used as vโ€ฆ","r":"c","k":"verdict"},{"t":"latlng as a field","q":"install rules using \"latlng\" as a field: allow get: if {'latlng': true}.latlng;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a parameter","q":"install rules using \"math\" as a parameter: function accept(math) { return math; }","a":"400 Error compiling rules: L4:18 math is a package and cannot be used as variable name. L4:33 math is a package and cannot be used as variaโ€ฆ","r":"c","k":"verdict"},{"t":"math as a binding","q":"install rules using \"math\" as a binding: function accept() { let math = true; return math; }","a":"400 Error compiling rules: L4:26 math is a package and cannot be used as variable name. L4:46 math is a package and cannot be used as variaโ€ฆ","r":"c","k":"verdict"},{"t":"math as a function","q":"install rules using \"math\" as a function: function math() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a wildcard","q":"install rules using \"math\" as a wildcard: allow get: if math == 'one';","a":"400 Error compiling rules: L4:16 math is a package and cannot be used as variable name. L4:38 math is a package and cannot be used as variaโ€ฆ","r":"c","k":"verdict"},{"t":"math as a field","q":"install rules using \"math\" as a field: allow get: if {'math': true}.math;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a parameter","q":"install rules using \"timestamp\" as a parameter: function accept(timestamp) { return timestamp; }","a":"400 Error compiling rules: L4:18 timestamp is a package and cannot be used as variable name. L4:38 timestamp is a package and cannot be useโ€ฆ","r":"c","k":"verdict"},{"t":"timestamp as a binding","q":"install rules using \"timestamp\" as a binding: function accept() { let timestamp = true; return timestamp; }","a":"400 Error compiling rules: L4:26 timestamp is a package and cannot be used as variable name. L4:51 timestamp is a package and cannot be useโ€ฆ","r":"c","k":"verdict"},{"t":"timestamp as a function","q":"install rules using \"timestamp\" as a function: function timestamp() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a wildcard","q":"install rules using \"timestamp\" as a wildcard: allow get: if timestamp == 'one';","a":"400 Error compiling rules: L4:16 timestamp is a package and cannot be used as variable name. L4:43 timestamp is a package and cannot be useโ€ฆ","r":"c","k":"verdict"},{"t":"timestamp as a field","q":"install rules using \"timestamp\" as a field: allow get: if {'timestamp': true}.timestamp;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a parameter","q":"install rules using \"request\" as a parameter: function accept(request) { return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a binding","q":"install rules using \"request\" as a binding: function accept() { let request = true; return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a function","q":"install rules using \"request\" as a function: function request() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a wildcard","q":"install rules using \"request\" as a wildcard: allow get: if request == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a field","q":"install rules using \"request\" as a field: allow get: if {'request': true}.request;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a parameter","q":"install rules using \"resource\" as a parameter: function accept(resource) { return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a binding","q":"install rules using \"resource\" as a binding: function accept() { let resource = true; return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a function","q":"install rules using \"resource\" as a function: function resource() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a wildcard","q":"install rules using \"resource\" as a wildcard: allow get: if resource == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a field","q":"install rules using \"resource\" as a field: allow get: if {'resource': true}.resource;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a parameter","q":"install rules using \"value\" as a parameter: function accept(value) { return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a binding","q":"install rules using \"value\" as a binding: function accept() { let value = true; return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a function","q":"install rules using \"value\" as a function: function value() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a wildcard","q":"install rules using \"value\" as a wildcard: allow get: if value == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a field","q":"install rules using \"value\" as a field: allow get: if {'value': true}.value;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"is a path","q":"get c/x: path('a/b') is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"is not a string","q":"get c/x: path('a/b') is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the same path","q":"get c/x: path('a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"differs from another path","q":"get c/x: path('a/b') != path('a/c')","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal with its slash","q":"get c/x: path('/a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal without its slash","q":"get c/x: path('a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"not equal to a string","q":"get c/x: path('a/b') == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the text","q":"get c/x: string(path('a/b')) == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the slash","q":"get c/x: string(path('/a/b')) == '/a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment without a slash","q":"get c/x: path('a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment with a slash","q":"get c/x: path('/a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"last segment","q":"get c/x: path('/a/b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with it","q":"get c/x: exists(path('/databases/' + database + '/documents/c/x'))","a":"200 (expression held)","r":"c","k":"status"},{"t":"get with it","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).data.v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with a string is an error","q":"get c/x: exists('/databases/' + database + '/documents/c/x')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"exists for a missing document","q":"get c/x: exists(path('/databases/' + database + '/documents/c/missing'))","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the document name","q":"get c/x: resource.__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an integer is an error","q":"get c/x: path(1) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a null is an error","q":"get c/x: path(null) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"no argument is an error","q":"get c/x: path() is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two arguments is an error","q":"get c/x: path('a', 'b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"empty text","q":"get c/x: path('') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a doubled slash","q":"get c/x: path('a//b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash","q":"get c/x: path('a/b/') == path('a/b')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash alone","q":"get c/x: path('a/b/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the root alone","q":"get c/x: path('/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two leading slashes","q":"get c/x: path('//a') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in a segment","q":"get c/x: path('a b/c') == /a%20b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a space is kept","q":"get c/x: path('a b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a single segment","q":"get c/x: path('a') == /a","a":"200 (expression held)","r":"c","k":"status"},{"t":"an odd number of segments reads too","q":"get c/x: path('/databases/' + database + '/documents/c')[4] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a leading slash is kept","q":"get c/x: path('/a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolated literal","q":"get c/x: /a/$('b') == path('/a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string in a literal","q":"get c/x: /a/$('b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string function","q":"get c/x: /a/$(string(1)) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an index","q":"get c/x: /a/$(['b'][0]) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a map key","q":"get c/x: /a/$({'k': 'b'}['k']) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal","q":"get c/x: /databases/$(database)/documents/c/x == resource.__name__","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal reversed","q":"get c/x: resource.__name__ == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against the request path","q":"get c/x: resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name is a path","q":"get c/x: resource.__name__ is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name as a string","q":"get c/x: string(resource.__name__) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name with a project","q":"get c/x: string(resource.__name__) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name first segment databases","q":"get c/x: resource.__name__[0] == 'databases'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name first segment projects","q":"get c/x: resource.__name__[0] == 'projects'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name last segment","q":"get c/x: resource.__name__[4] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path as a string","q":"get c/x: string(request.path) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path with a project","q":"get c/x: string(request.path) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape is read in a literal","q":"get c/x: /a%20b/c[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape is kept as text","q":"get c/x: /a%20b/c[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape in string of a literal","q":"get c/x: string(/a%20b/c) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in string of a literal","q":"get c/x: string(/a%20b/c) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape through path","q":"get c/x: path('a%20b/c')[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape through path is read","q":"get c/x: path('a%20b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path","q":"get c/x: string(path('a b/c')) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path encoded","q":"get c/x: string(path('a b/c')) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape in a literal","q":"get c/x: /a%2Fb/c[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index","q":"get c/x: resource['__name__'] == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape read","q":"get c/x: string(/a%2Fb/c) == '/a/b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape kept","q":"get c/x: string(/a%2Fb/c) == '/a%2Fb/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape equals two segments","q":"get c/x: /a%2Fb/c == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape through path","q":"get c/x: path('a%2Fb/c')[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash one segment","q":"get c/x: /a/$('b/c')[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash two segments","q":"get c/x: /a/$('b/c')[2] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated slash equals","q":"get c/x: /a/$('b/c') == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated escape kept","q":"get c/x: /a/$('b%20c')[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated escape read","q":"get c/x: /a/$('b%20c')[1] == 'b c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape through path","q":"get c/x: path('a%zz') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape kept through path","q":"get c/x: path('a%zz')[0] == 'a%zz'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape in a literal","q":"get c/x: /a%zz/c is path","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"a literal right after if","q":"get c/x: /a/b is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a dot in a literal","q":"get c/x: /a/b.c[1] == 'b.c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolation then index","q":"get c/x: /a/$('b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal indexed","q":"get c/x: /a/b[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal range","q":"get c/x: /a/b/c[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a path range","q":"get c/x: path('/a/b/c')[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind through path","q":"get c/x: path('/a/{x}/c').bind({'x': 'b'}) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind on a literal","q":"get c/x: /a/{x}/c.bind({'x': 'b'}) == /a/b/c","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"bind an integer","q":"get c/x: path('/a/{x}/c').bind({'x': 1}) == /a/1/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a missing key","q":"get c/x: path('/a/{x}/c').bind({'y': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a missing key keeps it","q":"get c/x: string(path('/a/{x}/c').bind({'y': 'b'})) == '/a/{x}/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind an extra key","q":"get c/x: path('/a/{x}/c').bind({'x': 'b', 'y': 'd'}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment","q":"get c/x: path('/a/p{x}q/c').bind({'x': 'b'}) == /a/pbq/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment kept","q":"get c/x: string(path('/a/p{x}q/c').bind({'x': 'b'})) == '/a/p{x}q/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind two keys","q":"get c/x: path('/{x}/{y}').bind({'x': 'a', 'y': 'b'}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a slash value","q":"get c/x: path('/a/{x}').bind({'x': 'b/c'})[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a path value","q":"get c/x: path('/a/{x}').bind({'x': path('b/c')}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind nothing","q":"get c/x: path('/a/b').bind({}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a non map","q":"get c/x: path('/a/{x}').bind('b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind on the request path","q":"get c/x: request.path.bind({}) == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a size of a path","q":"get c/x: path('/a/b').size() == 2","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a path","q":"get c/x: /a/$(path('b/c')) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a path segment","q":"get c/x: /a/$(path('b/c'))[2] == 'c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a literal","q":"get c/x: /a/$(/b/c) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an integer","q":"get c/x: /a/$(1) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool is an error","q":"get c/x: /a/$(true) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating the request path","q":"get c/x: /a/$(request.path)[1] == request.path[0]","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating inside a segment","q":"get c/x: /a/p$('b')q == /a/pbq","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"interpolating an empty string","q":"get c/x: /a/$('')/c is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool reads as text","q":"get c/x: /a/$(true)[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float","q":"get c/x: /a/$(1.5) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float reads as text","q":"get c/x: /a/$(1.5)[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a null","q":"get c/x: /a/$(null) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a list","q":"get c/x: /a/$([1]) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a map","q":"get c/x: /a/$({'k': 1}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a bool","q":"get c/x: path('/a/{x}').bind({'x': true})[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a float","q":"get c/x: path('/a/{x}').bind({'x': 1.5})[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a null","q":"get c/x: path('/a/{x}').bind({'x': null}) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a list","q":"get c/x: path('/a/{x}').bind({'x': [1]}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a recursive template","q":"get c/x: path('/a/{x=**}').bind({'x': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind keeps spaces","q":"get c/x: path('/a/{x}').bind({'x': 'b c'})[1] == 'b c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind does not read an escape","q":"get c/x: path('/a/{x}').bind({'x': 'b%20c'})[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index is a path","q":"get c/x: resource['__name__'] is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id by index","q":"get c/x: resource['id'] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the data by index","q":"get c/x: resource['data'].v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id","q":"get c/x: resource.id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id is a string","q":"get c/x: resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id against a wildcard","q":"get c/x: resource.id == id","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in parentheses","q":"get c/x: (/a/b) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal negated equal","q":"get c/x: /a/b != /a/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in a list","q":"get c/x: /a/b in [/a/b]","a":"200 (expression held)","r":"c","k":"status"},{"t":"list the id","q":"list c: resource.id == 'x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id differs","q":"list c: resource.id != 'nope'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id is a string","q":"list c: resource.id is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name is a path","q":"list c: resource.__name__ is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name equals","q":"list c: resource.__name__ == /databases/$(database)/documents/c/x","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name by index","q":"list c: resource['__name__'] is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id by index","q":"list c: resource['id'] is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"create the id","q":"create c/new: request.resource.id == 'new'","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the id is a string","q":"create c/new: request.resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name","q":"create c/new: request.resource.__name__ == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name by index","q":"create c/new: request.resource['__name__'] == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name against the request path","q":"create c/new: request.resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"member get room","q":"GET documents/rooms/r1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"anonymous get room","q":"GET documents/rooms/r1 signed out","a":"403 PERMISSION_DENIED: false for 'get' @ L26","r":"c","k":"status"},{"t":"lead create room","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"member create room","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"anonymous create room","q":"POST documents:commit signed out","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"create room unknown field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"create room missing field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L29","r":"c","k":"status"},{"t":"create room title not string","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"create room title too long","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"create room visibility not listed","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"update room allowed field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"update room locked field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L39:24 for 'update' @ L39, false for 'update' @ L39","r":"c","k":"status"},{"t":"lead delete room","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'delete' @ L43","r":"c","k":"status"},{"t":"outsider get entry","q":"GET documents/rooms/r1/entries/e1 as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L52:23 for 'get' @ L52, false for 'get' @ L52","r":"c","k":"status"},{"t":"member get entry","q":"GET documents/rooms/r1/entries/e1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"member list foreign members","q":"POST documents/rooms/r2:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L47:24 for 'list' @ L47, false for 'list' @ L47","r":"c","k":"status"},{"t":"outsider query entries with field","q":"POST documents/rooms/r1:runQuery as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L55:24 for 'list' @ L55, false for 'list' @ L55","r":"c","k":"status"},{"t":"create entry without optional field","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create entry over limit","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"create entry not integer","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"update entry in open room","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create room with null field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"anonymous query missing document id","q":"POST documents:runQuery signed out","a":"403 PERMISSION_DENIED: false for 'list' @ L27","r":"c","k":"status"},{"t":"member query missing document id","q":"POST documents:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L27:22 for 'list' @ L27","r":"c","k":"status"},{"t":"get matching document id","q":"GET documents/marks/yellow as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get non matching document id","q":"GET documents/marks/YELLOW_1 as u-member","a":"403 PERMISSION_DENIED: false for 'get' @ L71","r":"c","k":"status"},{"t":"create mark both fields","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create mark wrong type","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L73","r":"c","k":"status"},{"t":"member query entries with field","q":"POST documents/rooms/r1:runQuery as u-member","a":"200 [1 item]","r":"d","k":"answer","w":"Firenook ends a runQuery stream without \"done\": true, as production does"},{"t":"probe/access 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/access 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-11","a":"403 PERMISSION_DENIED: evaluation error at L17:21 for 'get' @ L17, Service call error. Function: [get], Argument: [path_value { segments {โ€ฆ","r":"c","k":"verdict"},{"t":"probe/cached 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/cached-11","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-11","a":"403 PERMISSION_DENIED: evaluation error at L55:21 for 'get' @ L55, Service call error. Function: [exists], Argument: [path_value { segmentsโ€ฆ","r":"c","k":"verdict"},{"t":"batch 20 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"batch 21 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L68:32 for 'create' @ L68, evaluation error at L68:32 for 'update' @ L68, evaluation error at L6โ€ฆ","r":"c","k":"verdict"},{"t":"get after sees pending write","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after denies stale invariant","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L71:24 for 'update' @ L71, evaluation error at L74:24 for 'create' @ L74, false for 'update' @ Lโ€ฆ","r":"c","k":"verdict"},{"t":"runtime/missing field","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-field","a":"403 PERMISSION_DENIED: evaluation error at L77:21 for 'get' @ L77, Property missing is undefined on object. for 'get' @ L77","r":"c","k":"verdict"},{"t":"runtime/division zero","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/division-zero","a":"403 PERMISSION_DENIED: Divide by zero error. for 'get' @ L80, Divide by zero error. for 'get' @ L80","r":"c","k":"verdict"},{"t":"runtime/list out of bounds","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/list-out-of-bounds","a":"403 PERMISSION_DENIED: Index out of bound error. Index: [2] , size: [1]. for 'get' @ L83, Index out of bound error. Index: [2] , size: [1].โ€ฆ","r":"c","k":"verdict"},{"t":"runtime/wrong type method","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/wrong-type-method","a":"403 PERMISSION_DENIED: evaluation error at L86:21 for 'get' @ L86, Function not found error: Name: [size]. for 'get' @ L86","r":"c","k":"verdict"},{"t":"runtime/missing get resource","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-get-resource","a":"403 PERMISSION_DENIED: evaluation error at L89:21 for 'get' @ L89, Null value error. for 'get' @ L89","r":"c","k":"verdict"},{"t":"public get","q":"GET /v1/projects/{project}/databases/(default)/documents/public/news","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"public list bounded","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"200 [1 item]","r":"c","k":"verdict"},{"t":"public list oversized","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"403 PERMISSION_DENIED: false for 'list' @ L67, false for 'list' @ L1190","r":"c","k":"verdict"},{"t":"tenant claim read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant wrong claim","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: evaluation error at L71:21 for 'get' @ L71, false for 'get' @ L1190, false for 'get' @ L71, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"tenant admin update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant editor update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, false for 'update' @ L74, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"member self read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"member other read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L78, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: evaluation error at L89:23 for 'get' @ L89, false for 'get' @ L1190, false for 'get' @ L89, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project owner update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project owner forbidden change","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'create' @ L92, false for 'create' @ L1190, evaluation error at L96:26 for 'update' @ L96, false for 'updaโ€ฆ","r":"c","k":"verdict"},{"t":"project admin delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {}","r":"c","k":"verdict"},{"t":"project member delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'delete' @ L102, false for 'delete' @ L1190","r":"c","k":"verdict"},{"t":"task member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"403 PERMISSION_DENIED: evaluation error at L104:25 for 'get' @ L104, false for 'get' @ L1190, false for 'get' @ L104, false for 'get' @ L11โ€ฆ","r":"c","k":"verdict"},{"t":"task self create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task other create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-bob","a":"403 PERMISSION_DENIED: false for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'update' @ L110, false for 'uโ€ฆ","r":"c","k":"verdict"},{"t":"task assignee update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-allow","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task forbidden update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-deny","a":"403 PERMISSION_DENIED: evaluation error at L107:28 for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'updateโ€ฆ","r":"c","k":"verdict"},{"t":"comment member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment author create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-new","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment impersonation","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-bad","a":"403 PERMISSION_DENIED: false for 'create' @ L121, false for 'create' @ L1190, evaluation error at L125:38 for 'update' @ L125, false for 'uโ€ฆ","r":"c","k":"verdict"},{"t":"profile self read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile other read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L136, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"profile self update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile role injection","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'create' @ L142, false for 'create' @ L1190, evaluation error at L138:24 for 'update' @ L138, false for 'uโ€ฆ","r":"c","k":"verdict"},{"t":"audit admin create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/admin-event","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"audit editor create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/editor-event","a":"403 PERMISSION_DENIED: false for 'create' @ L145, false for 'create' @ L1190, false for 'update' @ L150, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"recursive asset member","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"recursive asset nonmember","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"403 PERMISSION_DENIED: evaluation error at L131:23 for 'get' @ L131, false for 'get' @ L1190, false for 'get' @ L131, false for 'get' @ L11โ€ฆ","r":"c","k":"verdict"},{"t":"stats admin read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"stats editor read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"403 PERMISSION_DENIED: false for 'get' @ L153, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"generated entity 00","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 01","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-01/document-01","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 02","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-02/document-02","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 03","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-03/document-03","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 04","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-04/document-04","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 05","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-05/document-05","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 06","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-06/document-06","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 07","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-07/document-07","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity wrong tenant","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"403 PERMISSION_DENIED: evaluation error at L166:21 for 'get' @ L166, false for 'get' @ L1190, false for 'get' @ L166, false for 'get' @ L11โ€ฆ","r":"c","k":"verdict"},{"t":"get after atomic allow","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after atomic deny","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, evaluation error at L157:24 for 'update' @ L157, false for 'update' @ L1190, evaluationโ€ฆ","r":"c","k":"verdict"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == trueโ€ฆ","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score == 5","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score > 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery nonnull where value != null","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 2","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 2","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets offset 2","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedExists","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == trueโ€ฆ","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery offsets","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == trueโ€ฆ","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery offsets","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/members","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"}]} \ No newline at end of file +{"runs":[[0,4,0,"Rules expressions: literals and coercion"],[4,7,0,"Rules expressions: numeric arithmetic and comparison"],[11,5,0,"Rules expressions: boolean short circuit and errors"],[16,12,0,"Rules expressions: string list map and map diff"],[28,4,0,"Rules expressions: request auth method time query resource and existing resource"],[32,4,0,"Rules expressions: literals and coercion"],[36,7,0,"Rules expressions: numeric arithmetic and comparison"],[43,5,0,"Rules expressions: boolean short circuit and errors"],[48,12,0,"Rules expressions: string list map and map diff"],[60,4,0,"Rules expressions: request auth method time query resource and existing resource"],[64,4,0,"Rules expressions: literals and coercion"],[68,7,0,"Rules expressions: numeric arithmetic and comparison"],[75,5,0,"Rules expressions: boolean short circuit and errors"],[80,12,0,"Rules expressions: string list map and map diff"],[92,4,0,"Rules expressions: request auth method time query resource and existing resource"],[96,4,0,"Rules expressions: literals and coercion"],[100,7,0,"Rules expressions: numeric arithmetic and comparison"],[107,5,0,"Rules expressions: boolean short circuit and errors"],[112,12,0,"Rules expressions: string list map and map diff"],[124,4,0,"Rules expressions: request auth method time query resource and existing resource"],[128,4,0,"Rules expressions: literals and coercion"],[132,7,0,"Rules expressions: numeric arithmetic and comparison"],[139,5,0,"Rules expressions: boolean short circuit and errors"],[144,12,0,"Rules expressions: string list map and map diff"],[156,4,0,"Rules expressions: request auth method time query resource and existing resource"],[160,4,0,"Rules expressions: literals and coercion"],[164,7,0,"Rules expressions: numeric arithmetic and comparison"],[171,5,0,"Rules expressions: boolean short circuit and errors"],[176,12,0,"Rules expressions: string list map and map diff"],[188,4,0,"Rules expressions: request auth method time query resource and existing resource"],[192,4,0,"Rules expressions: literals and coercion"],[196,7,0,"Rules expressions: numeric arithmetic and comparison"],[203,5,0,"Rules expressions: boolean short circuit and errors"],[208,12,0,"Rules expressions: string list map and map diff"],[220,4,0,"Rules expressions: request auth method time query resource and existing resource"],[224,4,0,"Rules expressions: literals and coercion"],[228,7,0,"Rules expressions: numeric arithmetic and comparison"],[235,5,0,"Rules expressions: boolean short circuit and errors"],[240,12,0,"Rules expressions: string list map and map diff"],[252,4,0,"Rules expressions: request auth method time query resource and existing resource"],[256,4,0,"Rules expressions: literals and coercion"],[260,7,0,"Rules expressions: numeric arithmetic and comparison"],[267,5,0,"Rules expressions: boolean short circuit and errors"],[272,12,0,"Rules expressions: string list map and map diff"],[284,4,0,"Rules expressions: request auth method time query resource and existing resource"],[288,4,0,"Rules expressions: literals and coercion"],[292,7,0,"Rules expressions: numeric arithmetic and comparison"],[299,5,0,"Rules expressions: boolean short circuit and errors"],[304,12,0,"Rules expressions: string list map and map diff"],[316,4,0,"Rules expressions: request auth method time query resource and existing resource"],[320,4,0,"Rules expressions: literals and coercion"],[324,7,0,"Rules expressions: numeric arithmetic and comparison"],[331,5,0,"Rules expressions: boolean short circuit and errors"],[336,12,0,"Rules expressions: string list map and map diff"],[348,4,0,"Rules expressions: request auth method time query resource and existing resource"],[352,4,0,"Rules expressions: literals and coercion"],[356,7,0,"Rules expressions: numeric arithmetic and comparison"],[363,5,0,"Rules expressions: boolean short circuit and errors"],[368,12,0,"Rules expressions: string list map and map diff"],[380,4,0,"Rules expressions: request auth method time query resource and existing resource"],[384,4,0,"Rules expressions: literals and coercion"],[388,7,0,"Rules expressions: numeric arithmetic and comparison"],[395,5,0,"Rules expressions: boolean short circuit and errors"],[400,12,0,"Rules expressions: string list map and map diff"],[412,4,0,"Rules expressions: request auth method time query resource and existing resource"],[416,4,0,"Rules expressions: literals and coercion"],[420,7,0,"Rules expressions: numeric arithmetic and comparison"],[427,5,0,"Rules expressions: boolean short circuit and errors"],[432,12,0,"Rules expressions: string list map and map diff"],[444,4,0,"Rules expressions: request auth method time query resource and existing resource"],[448,4,0,"Rules expressions: literals and coercion"],[452,7,0,"Rules expressions: numeric arithmetic and comparison"],[459,5,0,"Rules expressions: boolean short circuit and errors"],[464,12,0,"Rules expressions: string list map and map diff"],[476,4,0,"Rules expressions: request auth method time query resource and existing resource"],[480,4,0,"Rules expressions: literals and coercion"],[484,7,0,"Rules expressions: numeric arithmetic and comparison"],[491,5,0,"Rules expressions: boolean short circuit and errors"],[496,12,0,"Rules expressions: string list map and map diff"],[508,4,0,"Rules expressions: request auth method time query resource and existing resource"],[512,4,0,"Rules expressions: literals and coercion"],[516,7,0,"Rules expressions: numeric arithmetic and comparison"],[523,5,0,"Rules expressions: boolean short circuit and errors"],[528,12,0,"Rules expressions: string list map and map diff"],[540,4,0,"Rules expressions: request auth method time query resource and existing resource"],[544,4,0,"Rules expressions: literals and coercion"],[548,7,0,"Rules expressions: numeric arithmetic and comparison"],[555,5,0,"Rules expressions: boolean short circuit and errors"],[560,12,0,"Rules expressions: string list map and map diff"],[572,4,0,"Rules expressions: request auth method time query resource and existing resource"],[576,4,0,"Rules expressions: literals and coercion"],[580,7,0,"Rules expressions: numeric arithmetic and comparison"],[587,5,0,"Rules expressions: boolean short circuit and errors"],[592,12,0,"Rules expressions: string list map and map diff"],[604,4,0,"Rules expressions: request auth method time query resource and existing resource"],[608,4,0,"Rules expressions: literals and coercion"],[612,7,0,"Rules expressions: numeric arithmetic and comparison"],[619,5,0,"Rules expressions: boolean short circuit and errors"],[624,12,0,"Rules expressions: string list map and map diff"],[636,4,0,"Rules expressions: request auth method time query resource and existing resource"],[640,4,0,"Rules expressions: literals and coercion"],[644,7,0,"Rules expressions: numeric arithmetic and comparison"],[651,5,0,"Rules expressions: boolean short circuit and errors"],[656,12,0,"Rules expressions: string list map and map diff"],[668,4,0,"Rules expressions: request auth method time query resource and existing resource"],[672,4,0,"Rules expressions: literals and coercion"],[676,7,0,"Rules expressions: numeric arithmetic and comparison"],[683,5,0,"Rules expressions: boolean short circuit and errors"],[688,12,0,"Rules expressions: string list map and map diff"],[700,4,0,"Rules expressions: request auth method time query resource and existing resource"],[704,4,0,"Rules expressions: literals and coercion"],[708,7,0,"Rules expressions: numeric arithmetic and comparison"],[715,5,0,"Rules expressions: boolean short circuit and errors"],[720,12,0,"Rules expressions: string list map and map diff"],[732,4,0,"Rules expressions: request auth method time query resource and existing resource"],[736,4,0,"Rules expressions: literals and coercion"],[740,7,0,"Rules expressions: numeric arithmetic and comparison"],[747,5,0,"Rules expressions: boolean short circuit and errors"],[752,12,0,"Rules expressions: string list map and map diff"],[764,4,0,"Rules expressions: request auth method time query resource and existing resource"],[768,4,0,"Rules expressions: literals and coercion"],[772,7,0,"Rules expressions: numeric arithmetic and comparison"],[779,5,0,"Rules expressions: boolean short circuit and errors"],[784,12,0,"Rules expressions: string list map and map diff"],[796,4,0,"Rules expressions: request auth method time query resource and existing resource"],[800,4,0,"Rules expressions: literals and coercion"],[804,7,0,"Rules expressions: numeric arithmetic and comparison"],[811,5,0,"Rules expressions: boolean short circuit and errors"],[816,12,0,"Rules expressions: string list map and map diff"],[828,4,0,"Rules expressions: request auth method time query resource and existing resource"],[832,4,0,"Rules expressions: literals and coercion"],[836,7,0,"Rules expressions: numeric arithmetic and comparison"],[843,5,0,"Rules expressions: boolean short circuit and errors"],[848,12,0,"Rules expressions: string list map and map diff"],[860,4,0,"Rules expressions: request auth method time query resource and existing resource"],[864,4,0,"Rules expressions: literals and coercion"],[868,7,0,"Rules expressions: numeric arithmetic and comparison"],[875,5,0,"Rules expressions: boolean short circuit and errors"],[880,12,0,"Rules expressions: string list map and map diff"],[892,4,0,"Rules expressions: request auth method time query resource and existing resource"],[896,4,0,"Rules expressions: literals and coercion"],[900,7,0,"Rules expressions: numeric arithmetic and comparison"],[907,5,0,"Rules expressions: boolean short circuit and errors"],[912,12,0,"Rules expressions: string list map and map diff"],[924,4,0,"Rules expressions: request auth method time query resource and existing resource"],[928,4,0,"Rules expressions: literals and coercion"],[932,7,0,"Rules expressions: numeric arithmetic and comparison"],[939,5,0,"Rules expressions: boolean short circuit and errors"],[944,12,0,"Rules expressions: string list map and map diff"],[956,4,0,"Rules expressions: request auth method time query resource and existing resource"],[960,4,0,"Rules expressions: literals and coercion"],[964,7,0,"Rules expressions: numeric arithmetic and comparison"],[971,5,0,"Rules expressions: boolean short circuit and errors"],[976,12,0,"Rules expressions: string list map and map diff"],[988,4,0,"Rules expressions: request auth method time query resource and existing resource"],[992,4,0,"Rules expressions: literals and coercion"],[996,7,0,"Rules expressions: numeric arithmetic and comparison"],[1003,5,0,"Rules expressions: boolean short circuit and errors"],[1008,12,0,"Rules expressions: string list map and map diff"],[1020,4,0,"Rules expressions: request auth method time query resource and existing resource"],[1024,6,0,"Language contract: string"],[1030,6,0,"Language contract: list"],[1036,3,0,"Language contract: map"],[1039,2,0,"Language contract: map diff"],[1041,3,0,"Language contract: set"],[1044,2,0,"Language contract: bytes"],[1046,2,0,"Language contract: duration"],[1048,3,0,"Language contract: timestamp"],[1051,2,0,"Language contract: latlng"],[1053,3,0,"Language contract: math"],[1056,2,0,"Language contract: hashing"],[1058,2,0,"Language contract: request"],[1060,1,0,"Language contract: path"],[1061,1,0,"Language contract: function"],[1062,1,0,"Language contract: resource"],[1063,1,0,"Language contract: query"],[1064,3,0,"Language contract: match"],[1067,9,0,"Limits: function depth"],[1076,5,0,"Limits: linear expression terms"],[1081,8,0,"Limits: balanced expression terms"],[1089,2,0,"Limits: linear expression terms"],[1091,17,0,"Limits: true chain terms"],[1108,9,0,"Limits: time chain terms"],[1117,3,0,"Limits: literal left terms"],[1120,5,0,"Limits: right nested terms"],[1125,4,0,"Limits: balanced parenthesised terms"],[1129,1,0,"Compiler and source size: unexpected token"],[1130,1,0,"Compiler and source size: unclosed block"],[1131,1,0,"Compiler and source size: duplicate let"],[1132,1,0,"Compiler and source size: undefined name"],[1133,1,0,"Compiler and source size: invalid function arity"],[1134,1,0,"Compiler and source size: recursive function"],[1135,1,0,"Compiler and source size: invalid recursive wildcard"],[1136,4,0,"Compiler and source size: source bytes"],[1140,1,0,"complex-firestore.rules: production compile"],[1141,1,0,"Language contract: debug"],[1142,20,0,"Limits: linear expression terms"],[1162,8,0,"Limits: true chain terms"],[1170,9,0,"Limits: time chain terms"],[1179,6,0,"Limits: literal left terms"],[1185,2,0,"Compiler and source size: source bytes"],[1187,1,1,"The ruleset the other inputs change"],[1188,8,1,"A stray or wrong word at the top level"],[1196,6,1,"rules_version gone wrong"],[1202,4,1,"A missing or extra brace"],[1206,5,1,"A missing or extra semicolon"],[1211,4,1,"A missing or extra parenthesis"],[1215,4,1,"A string left open"],[1219,2,1,"A bad match path"],[1221,21,1,"A condition cut short or mistyped"],[1242,3,1,"A bad function header or body"],[1245,3,1,"let misused"],[1248,2,1,"A misspelled keyword"],[1250,20,1,"The source ends inside a block"],[1270,4,1,"Two mistakes in one source"],[1274,3,1,"Where a position is counted from"],[1277,4,1,"The production Rules API's refusals, sent unchanged"],[1281,3,1,"A stray or wrong word at the top level"],[1284,1,1,"rules_version gone wrong"],[1285,4,1,"A missing or extra brace"],[1289,1,1,"A missing or extra parenthesis"],[1290,5,1,"A bad match path"],[1295,1,1,"A condition cut short or mistyped"],[1296,4,1,"A bad function header or body"],[1300,2,1,"let misused"],[1302,3,1,"A misspelled keyword"],[1305,1,1,"Two mistakes in one source"],[1306,1,1,"The production Rules API's refusals, sent unchanged"],[1307,1,2,"Setup"],[1308,15,2,"Coverage after a rules reload and two reads"],[1323,3,2,"A rejected reload keeps the last valid rules"],[1326,12,2,"Coverage after a rules reload and two reads"],[1338,11,3,"Firestore requests with live rules evaluations"],[1349,8,3,"Requests websocket messages"],[1357,12,3,"Firestore requests with live rules evaluations"],[1369,18,3,"Requests websocket messages"],[1387,4,4,"Firestore requests with live rules evaluations"],[1391,4,4,"Requests websocket messages"],[1395,2,4,"Firestore requests with live rules evaluations"],[1397,4,4,"Requests websocket messages"],[1401,2,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1403,6,5,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1409,6,5,"Reads as: the owner credential, lowercase scheme"],[1415,6,5,"Reads as: the owner credential, all uppercase"],[1421,2,5,"Reads as: a current unsigned token for alice"],[1423,2,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1425,2,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1427,2,5,"Reads as: a token issued a day from now"],[1429,2,5,"Reads as: a token whose aud and iss name another project"],[1431,2,5,"Reads as: a token whose aud alone names another project"],[1433,2,5,"Reads as: an unsigned token with only sub: alice"],[1435,2,5,"Reads as: a token whose header has no alg"],[1437,2,5,"Reads as: an RS256 header and a signature nobody checks"],[1439,2,5,"Reads as: standard padded base64 segments"],[1441,6,5,"Reads as: a token of two segments"],[1447,6,5,"Reads as: a token whose payload is an array"],[1453,6,5,"Reads as: a credential that is not a JWT"],[1459,2,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1461,6,5,"Reads as: the owner credential (the Admin SDKs' emulator credential)"],[1467,6,5,"Reads as: the owner credential, lowercase scheme"],[1473,6,5,"Reads as: the owner credential, all uppercase"],[1479,2,5,"Reads as: a current unsigned token for alice"],[1481,2,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1483,2,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1485,2,5,"Reads as: a token issued a day from now"],[1487,2,5,"Reads as: a token whose aud and iss name another project"],[1489,2,5,"Reads as: a token whose aud alone names another project"],[1491,2,5,"Reads as: an unsigned token with only sub: alice"],[1493,2,5,"Reads as: a token whose header has no alg"],[1495,2,5,"Reads as: an RS256 header and a signature nobody checks"],[1497,2,5,"Reads as: standard padded base64 segments"],[1499,6,5,"Reads as: a token of two segments"],[1505,6,5,"Reads as: a token whose payload is an array"],[1511,6,5,"Reads as: a credential that is not a JWT"],[1517,3,5,"What request.auth holds for: no Authorization header (a signed-out client SDK)"],[1520,3,5,"What request.auth holds for: the owner credential (the Admin SDKs' emulator credential)"],[1523,3,5,"What request.auth holds for: the owner credential, lowercase scheme"],[1526,3,5,"What request.auth holds for: the owner credential, all uppercase"],[1529,3,5,"What request.auth holds for: a current unsigned token for alice"],[1532,3,5,"What request.auth holds for: current unsigned token for alice, lowercase scheme"],[1535,3,5,"What request.auth holds for: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1538,3,5,"What request.auth holds for: a token issued a day from now"],[1541,3,5,"What request.auth holds for: a token whose aud and iss name another project"],[1544,3,5,"What request.auth holds for: a token whose aud alone names another project"],[1547,3,5,"What request.auth holds for: an unsigned token with only sub: alice"],[1550,3,5,"What request.auth holds for: an unsigned token with only user_id: alice"],[1553,3,5,"What request.auth holds for: an unsigned token with no claims"],[1556,3,5,"What request.auth holds for: an unsigned token with sub: 7"],[1559,3,5,"What request.auth holds for: a token whose header has no alg"],[1562,3,5,"What request.auth holds for: an RS256 header and a signature nobody checks"],[1565,3,5,"What request.auth holds for: standard padded base64 segments"],[1568,3,5,"What request.auth holds for: a token of two segments"],[1571,3,5,"What request.auth holds for: a token whose payload is an array"],[1574,3,5,"What request.auth holds for: a credential that is not a JWT"],[1577,12,5,"Metadata operations need the owner"],[1589,2,5,"Enterprise pipelines are evaluated as a list"],[1591,3,5,"The rules reload route reads the body as JSON"],[1594,4,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1598,4,5,"Reads as: a current unsigned token for alice"],[1602,4,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1606,4,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1610,4,5,"Reads as: a token issued a day from now"],[1614,4,5,"Reads as: a token whose aud and iss name another project"],[1618,4,5,"Reads as: a token whose aud alone names another project"],[1622,4,5,"Reads as: an unsigned token with only sub: alice"],[1626,6,5,"Reads as: an unsigned token with only user_id: alice"],[1632,6,5,"Reads as: an unsigned token with no claims"],[1638,6,5,"Reads as: an unsigned token with sub: 7"],[1644,4,5,"Reads as: a token whose header has no alg"],[1648,4,5,"Reads as: an RS256 header and a signature nobody checks"],[1652,4,5,"Reads as: standard padded base64 segments"],[1656,6,5,"Reads as: a Basic credential"],[1662,6,5,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1668,4,5,"Reads as: no Authorization header (a signed-out client SDK)"],[1672,4,5,"Reads as: a current unsigned token for alice"],[1676,4,5,"Reads as: current unsigned token for alice, lowercase scheme"],[1680,4,5,"Reads as: the token createMockUserToken builds without iat: iat 0, exp 3600"],[1684,4,5,"Reads as: a token issued a day from now"],[1688,4,5,"Reads as: a token whose aud and iss name another project"],[1692,4,5,"Reads as: a token whose aud alone names another project"],[1696,4,5,"Reads as: an unsigned token with only sub: alice"],[1700,6,5,"Reads as: an unsigned token with only user_id: alice"],[1706,6,5,"Reads as: an unsigned token with no claims"],[1712,6,5,"Reads as: an unsigned token with sub: 7"],[1718,4,5,"Reads as: a token whose header has no alg"],[1722,4,5,"Reads as: an RS256 header and a signature nobody checks"],[1726,4,5,"Reads as: standard padded base64 segments"],[1730,6,5,"Reads as: a Basic credential"],[1736,6,5,"Reads as: the owner credential (Storage's admin credential), Firebase scheme"],[1742,3,5,"What request.auth holds for: a Basic credential"],[1745,3,5,"What request.auth holds for: the owner credential (Storage's admin credential), Firebase scheme"],[1748,5,5,"The message of a refused request"],[1753,6,5,"Metadata operations need the owner"],[1759,2,5,"Enterprise pipelines are evaluated as a list"],[1761,5,6,"The identifier \"duration\" in each position"],[1766,5,6,"The identifier \"hashing\" in each position"],[1771,5,6,"The identifier \"latlng\" in each position"],[1776,5,6,"The identifier \"math\" in each position"],[1781,5,6,"The identifier \"timestamp\" in each position"],[1786,5,6,"The identifier \"request\" in each position"],[1791,5,6,"The identifier \"resource\" in each position"],[1796,5,6,"The identifier \"value\" in each position"],[1801,123,7,"Paths and document names under allow get"],[1924,7,7,"Document names under allow list"],[1931,5,7,"Document names under allow create"],[1936,2,9,"Contributed rooms ruleset: a function outside the service block"],[1938,3,9,"Contributed rooms ruleset: the conditional operator inside a function"],[1941,2,9,"Contributed rooms ruleset: keys().hasOnly() and hasAll()"],[1943,3,9,"Contributed rooms ruleset: type, length and list-membership checks"],[1946,3,9,"Contributed rooms ruleset: diff().affectedKeys() on update, and a delete never allowed"],[1949,3,9,"Contributed rooms ruleset: exists() on another document"],[1952,1,9,"Contributed rooms ruleset: a field check in the proof of a list query"],[1953,3,9,"Contributed rooms ruleset: get() with a default on the payload, and is int"],[1956,1,9,"Contributed rooms ruleset: get() on the parent document"],[1957,1,9,"Contributed rooms ruleset: a null value on write"],[1958,2,9,"Contributed rooms ruleset: a query pinned to a missing document id"],[1960,2,9,"Contributed rooms ruleset: matches() on the document id"],[1962,2,9,"Contributed rooms ruleset: keys().hasAny()"],[1964,1,9,"Contributed rooms ruleset: a field check in the proof of a list query"],[1965,7,10,"Document access limits (10 and 20) and cached repeated access"],[1972,2,10,"getAfter sees the pending write of a commit"],[1974,5,10,"Runtime errors deny: missing fields, division by zero, list bounds, wrong types"],[1979,1,10,"complex-firestore.rules: public read"],[1980,2,10,"complex-firestore.rules: query limit validation"],[1982,2,10,"complex-firestore.rules: auth and custom claims"],[1984,2,10,"complex-firestore.rules: field change validation"],[1986,2,10,"complex-firestore.rules: nested and recursive matches"],[1988,2,10,"complex-firestore.rules: cross document access"],[1990,1,10,"complex-firestore.rules: create update delete resource differences"],[1991,1,10,"complex-firestore.rules: field change validation"],[1992,2,10,"complex-firestore.rules: create update delete resource differences"],[1994,2,10,"complex-firestore.rules: nested and recursive matches"],[1996,2,10,"complex-firestore.rules: create update delete resource differences"],[1998,2,10,"complex-firestore.rules: field change validation"],[2000,1,10,"complex-firestore.rules: nested and recursive matches"],[2001,4,10,"complex-firestore.rules: auth and custom claims"],[2005,2,10,"complex-firestore.rules: field change validation"],[2007,2,10,"complex-firestore.rules: timestamps durations and helper functions"],[2009,2,10,"complex-firestore.rules: nested and recursive matches"],[2011,2,10,"complex-firestore.rules: auth and custom claims"],[2013,9,10,"complex-firestore.rules: complex generated policy"],[2022,2,10,"complex-firestore.rules: getAfter batch invariant"],[2024,3,10,"query-authorization: owner equality"],[2027,3,10,"query-authorization: owner absent"],[2030,3,10,"query-authorization: owner wrong uid"],[2033,3,10,"query-authorization: owner unverified"],[2036,3,10,"query-authorization: owner in single"],[2039,3,10,"query-authorization: owner in mixed"],[2042,3,10,"query-authorization: owner array is not equality"],[2045,3,10,"query-authorization: owner inequality"],[2048,3,10,"query-authorization: owner bounded equality"],[2051,3,10,"query-authorization: owner compound and"],[2054,3,10,"query-authorization: owner compound or safe"],[2057,3,10,"query-authorization: owner compound or unsafe"],[2060,3,10,"query-authorization: owner empty"],[2063,3,10,"query-authorization: owner empty unconstrained"],[2066,3,10,"query-authorization: owner empty wrong uid"],[2069,3,10,"query-authorization: owner nonmatching extra filter"],[2072,3,10,"query-authorization: permission get allowed"],[2075,3,10,"query-authorization: permission get denied"],[2078,3,10,"query-authorization: permission get missing"],[2081,3,10,"query-authorization: permission in all granted"],[2084,3,10,"query-authorization: permission in mixed"],[2087,3,10,"query-authorization: short circuit missing get"],[2090,3,10,"query-authorization: array contains owner"],[2093,3,10,"query-authorization: array contains other"],[2096,3,10,"query-authorization: array any owner"],[2099,3,10,"query-authorization: array any mixed"],[2102,3,10,"query-authorization: array absent"],[2105,3,10,"query-authorization: range equality inside"],[2108,3,10,"query-authorization: range strict bound"],[2111,3,10,"query-authorization: range inclusive bound"],[2114,3,10,"query-authorization: range unsafe inclusive"],[2117,3,10,"query-authorization: range safe in"],[2120,3,10,"query-authorization: range unsafe in"],[2123,3,10,"query-authorization: range absent"],[2126,3,10,"query-authorization: not equal null"],[2129,3,10,"query-authorization: not equal string"],[2132,3,10,"query-authorization: not in blocked"],[2135,3,10,"query-authorization: limit allowed"],[2138,3,10,"query-authorization: limit denied"],[2141,3,10,"query-authorization: limit absent"],[2144,3,10,"query-authorization: offset allowed"],[2147,3,10,"query-authorization: offset denied"],[2150,3,10,"query-authorization: offset default"],[2153,3,10,"query-authorization: order desc"],[2156,3,10,"query-authorization: order asc"],[2159,3,10,"query-authorization: order absent"],[2162,3,10,"query-authorization: get fixed path"],[2165,3,10,"query-authorization: exists fixed path"],[2168,3,10,"query-authorization: exists constrained path"],[2171,3,10,"query-authorization: exists missing path"],[2174,3,10,"query-authorization: exists unconstrained path"],[2177,3,10,"query-authorization: group recursive owner"],[2180,3,10,"query-authorization: group recursive unconstrained"],[2183,3,10,"query-authorization: group recursive empty owner"],[2186,3,10,"query-authorization: group root only rule"],[2189,3,10,"query-authorization: nested collection owner"],[2192,1,10,"query-authorization: owner absent"],[2193,1,10,"query-authorization: owner empty unconstrained"],[2194,1,10,"query-authorization: get fixed path"],[2195,1,10,"query-authorization: limit allowed"],[2196,3,10,"query-authorization: owner equality"],[2199,2,10,"query-authorization: owner absent"],[2201,2,10,"query-authorization: owner wrong uid"],[2203,2,10,"query-authorization: owner unverified"],[2205,2,10,"query-authorization: owner in single"],[2207,2,10,"query-authorization: owner in mixed"],[2209,2,10,"query-authorization: owner array is not equality"],[2211,2,10,"query-authorization: owner inequality"],[2213,2,10,"query-authorization: owner bounded equality"],[2215,2,10,"query-authorization: owner compound and"],[2217,2,10,"query-authorization: owner compound or safe"],[2219,2,10,"query-authorization: owner compound or unsafe"],[2221,2,10,"query-authorization: owner empty"],[2223,2,10,"query-authorization: owner empty unconstrained"],[2225,2,10,"query-authorization: owner empty wrong uid"],[2227,2,10,"query-authorization: owner nonmatching extra filter"],[2229,2,10,"query-authorization: permission get allowed"],[2231,2,10,"query-authorization: permission get denied"],[2233,2,10,"query-authorization: permission get missing"],[2235,2,10,"query-authorization: permission in all granted"],[2237,2,10,"query-authorization: permission in mixed"],[2239,2,10,"query-authorization: short circuit missing get"],[2241,2,10,"query-authorization: array contains owner"],[2243,2,10,"query-authorization: array contains other"],[2245,2,10,"query-authorization: array any owner"],[2247,2,10,"query-authorization: array any mixed"],[2249,2,10,"query-authorization: array absent"],[2251,2,10,"query-authorization: range equality inside"],[2253,2,10,"query-authorization: range strict bound"],[2255,2,10,"query-authorization: range inclusive bound"],[2257,2,10,"query-authorization: range unsafe inclusive"],[2259,2,10,"query-authorization: range safe in"],[2261,2,10,"query-authorization: range unsafe in"],[2263,2,10,"query-authorization: range absent"],[2265,2,10,"query-authorization: not equal null"],[2267,2,10,"query-authorization: not equal string"],[2269,2,10,"query-authorization: not in blocked"],[2271,2,10,"query-authorization: limit allowed"],[2273,2,10,"query-authorization: limit denied"],[2275,2,10,"query-authorization: limit absent"],[2277,2,10,"query-authorization: offset default"],[2279,2,10,"query-authorization: order desc"],[2281,2,10,"query-authorization: order asc"],[2283,2,10,"query-authorization: order absent"],[2285,2,10,"query-authorization: get fixed path"],[2287,2,10,"query-authorization: exists fixed path"],[2289,2,10,"query-authorization: exists constrained path"],[2291,2,10,"query-authorization: exists missing path"],[2293,2,10,"query-authorization: exists unconstrained path"],[2295,2,10,"query-authorization: group recursive owner"],[2297,2,10,"query-authorization: group recursive unconstrained"],[2299,2,10,"query-authorization: group recursive empty owner"],[2301,2,10,"query-authorization: group root only rule"],[2303,2,10,"query-authorization: nested collection owner"],[2305,3,10,"query-authorization: owner equality"],[2308,2,10,"query-authorization: owner absent"],[2310,2,10,"query-authorization: owner wrong uid"],[2312,2,10,"query-authorization: owner unverified"],[2314,2,10,"query-authorization: owner in single"],[2316,2,10,"query-authorization: owner in mixed"],[2318,2,10,"query-authorization: owner array is not equality"],[2320,2,10,"query-authorization: owner inequality"],[2322,2,10,"query-authorization: owner bounded equality"],[2324,2,10,"query-authorization: owner compound and"],[2326,2,10,"query-authorization: owner compound or safe"],[2328,2,10,"query-authorization: owner compound or unsafe"],[2330,2,10,"query-authorization: owner empty"],[2332,2,10,"query-authorization: owner empty unconstrained"],[2334,2,10,"query-authorization: owner empty wrong uid"],[2336,2,10,"query-authorization: owner nonmatching extra filter"],[2338,2,10,"query-authorization: permission get allowed"],[2340,2,10,"query-authorization: permission get denied"],[2342,2,10,"query-authorization: permission get missing"],[2344,2,10,"query-authorization: permission in all granted"],[2346,2,10,"query-authorization: permission in mixed"],[2348,2,10,"query-authorization: short circuit missing get"],[2350,2,10,"query-authorization: array contains owner"],[2352,2,10,"query-authorization: array contains other"],[2354,2,10,"query-authorization: array any owner"],[2356,2,10,"query-authorization: array any mixed"],[2358,2,10,"query-authorization: array absent"],[2360,2,10,"query-authorization: range equality inside"],[2362,2,10,"query-authorization: range strict bound"],[2364,2,10,"query-authorization: range inclusive bound"],[2366,2,10,"query-authorization: range unsafe inclusive"],[2368,2,10,"query-authorization: range safe in"],[2370,2,10,"query-authorization: range unsafe in"],[2372,2,10,"query-authorization: range absent"],[2374,2,10,"query-authorization: not equal null"],[2376,2,10,"query-authorization: not equal string"],[2378,2,10,"query-authorization: not in blocked"],[2380,2,10,"query-authorization: limit allowed"],[2382,2,10,"query-authorization: limit denied"],[2384,2,10,"query-authorization: limit absent"],[2386,2,10,"query-authorization: offset default"],[2388,2,10,"query-authorization: order desc"],[2390,2,10,"query-authorization: order asc"],[2392,2,10,"query-authorization: order absent"],[2394,2,10,"query-authorization: get fixed path"],[2396,2,10,"query-authorization: exists fixed path"],[2398,2,10,"query-authorization: exists constrained path"],[2400,2,10,"query-authorization: exists missing path"],[2402,2,10,"query-authorization: exists unconstrained path"],[2404,2,10,"query-authorization: group recursive owner"],[2406,2,10,"query-authorization: group recursive unconstrained"],[2408,2,10,"query-authorization: group recursive empty owner"],[2410,2,10,"query-authorization: group root only rule"],[2412,2,10,"query-authorization: nested collection owner"],[2414,1,10,"query-authorization: owner equality"],[2415,3,10,"query-paths: owner equality"],[2418,3,10,"query-paths: owner absent"],[2421,3,10,"query-paths: owner empty unconstrained"],[2424,3,10,"query-paths: limit allowed"],[2427,3,10,"query-paths: get fixed path"],[2430,3,10,"query-paths: path members granted"],[2433,3,10,"query-paths: path members denied"],[2436,3,10,"query-paths: path members missing"],[2439,3,10,"query-paths: path-getMembers granted"],[2442,3,10,"query-paths: path-getMembers denied"],[2445,3,10,"query-paths: path-getMembers missing"],[2448,3,10,"query-paths: path-functionMembers granted"],[2451,3,10,"query-paths: path-functionMembers denied"],[2454,3,10,"query-paths: path-functionMembers missing"],[2457,3,10,"query-paths: path-reversedMembers granted"],[2460,3,10,"query-paths: path-reversedMembers denied"],[2463,3,10,"query-paths: path-reversedMembers missing"],[2466,3,10,"query-paths: path-unknownOnly granted"],[2469,3,10,"query-paths: path-unknownOnly denied"],[2472,3,10,"query-paths: path-unknownOnly missing"],[2475,3,10,"query-paths: path-negatedAnd granted"],[2478,3,10,"query-paths: path-negatedAnd denied"],[2481,3,10,"query-paths: path-negatedAnd missing"],[2484,3,10,"query-paths: path-literalOr granted"],[2487,3,10,"query-paths: path-literalOr denied"],[2490,3,10,"query-paths: path-literalOr missing"],[2493,3,10,"query-paths: path-concreteErrorOr granted"],[2496,3,10,"query-paths: path-concreteErrorOr denied"],[2499,3,10,"query-paths: path-concreteErrorOr missing"],[2502,3,10,"query-paths: path-concreteErrorAnd granted"],[2505,3,10,"query-paths: path-concreteErrorAnd denied"],[2508,3,10,"query-paths: path-concreteErrorAnd missing"],[2511,3,10,"query-paths: path-budgetErrorOr granted"],[2514,3,10,"query-paths: path-budgetErrorOr denied"],[2517,3,10,"query-paths: path-budgetErrorOr missing"],[2520,3,10,"query-paths: path members empty granted"],[2523,3,10,"query-paths: path members filtered denied"],[2526,1,10,"query-paths: owner absent"],[2527,1,10,"query-paths: owner empty unconstrained"],[2528,1,10,"query-paths: get fixed path"],[2529,1,10,"query-paths: limit allowed"],[2530,1,10,"query-paths: path members granted"],[2531,1,10,"query-paths: path members denied"],[2532,1,10,"query-paths: path members empty granted"],[2533,3,10,"query-paths: owner equality"],[2536,2,10,"query-paths: owner absent"],[2538,2,10,"query-paths: owner empty unconstrained"],[2540,2,10,"query-paths: limit allowed"],[2542,2,10,"query-paths: get fixed path"],[2544,2,10,"query-paths: path members granted"],[2546,2,10,"query-paths: path members denied"],[2548,2,10,"query-paths: path members missing"],[2550,2,10,"query-paths: path-getMembers granted"],[2552,2,10,"query-paths: path-getMembers denied"],[2554,2,10,"query-paths: path-getMembers missing"],[2556,2,10,"query-paths: path-functionMembers granted"],[2558,2,10,"query-paths: path-functionMembers denied"],[2560,2,10,"query-paths: path-functionMembers missing"],[2562,2,10,"query-paths: path-reversedMembers granted"],[2564,2,10,"query-paths: path-reversedMembers denied"],[2566,2,10,"query-paths: path-reversedMembers missing"],[2568,2,10,"query-paths: path-unknownOnly granted"],[2570,2,10,"query-paths: path-unknownOnly denied"],[2572,2,10,"query-paths: path-unknownOnly missing"],[2574,2,10,"query-paths: path-negatedAnd granted"],[2576,2,10,"query-paths: path-negatedAnd denied"],[2578,2,10,"query-paths: path-negatedAnd missing"],[2580,2,10,"query-paths: path-literalOr granted"],[2582,2,10,"query-paths: path-literalOr denied"],[2584,2,10,"query-paths: path-literalOr missing"],[2586,2,10,"query-paths: path-concreteErrorOr granted"],[2588,2,10,"query-paths: path-concreteErrorOr denied"],[2590,2,10,"query-paths: path-concreteErrorOr missing"],[2592,2,10,"query-paths: path-concreteErrorAnd granted"],[2594,2,10,"query-paths: path-concreteErrorAnd denied"],[2596,2,10,"query-paths: path-concreteErrorAnd missing"],[2598,2,10,"query-paths: path-budgetErrorOr granted"],[2600,2,10,"query-paths: path-budgetErrorOr denied"],[2602,2,10,"query-paths: path-budgetErrorOr missing"],[2604,2,10,"query-paths: path members empty granted"],[2606,2,10,"query-paths: path members filtered denied"],[2608,3,10,"query-paths: owner equality"],[2611,2,10,"query-paths: owner absent"],[2613,2,10,"query-paths: owner empty unconstrained"],[2615,2,10,"query-paths: limit allowed"],[2617,2,10,"query-paths: get fixed path"],[2619,2,10,"query-paths: path members granted"],[2621,2,10,"query-paths: path members denied"],[2623,2,10,"query-paths: path members missing"],[2625,2,10,"query-paths: path-getMembers granted"],[2627,2,10,"query-paths: path-getMembers denied"],[2629,2,10,"query-paths: path-getMembers missing"],[2631,2,10,"query-paths: path-functionMembers granted"],[2633,2,10,"query-paths: path-functionMembers denied"],[2635,2,10,"query-paths: path-functionMembers missing"],[2637,2,10,"query-paths: path-reversedMembers granted"],[2639,2,10,"query-paths: path-reversedMembers denied"],[2641,2,10,"query-paths: path-reversedMembers missing"],[2643,2,10,"query-paths: path-unknownOnly granted"],[2645,2,10,"query-paths: path-unknownOnly denied"],[2647,2,10,"query-paths: path-unknownOnly missing"],[2649,2,10,"query-paths: path-negatedAnd granted"],[2651,2,10,"query-paths: path-negatedAnd denied"],[2653,2,10,"query-paths: path-negatedAnd missing"],[2655,2,10,"query-paths: path-literalOr granted"],[2657,2,10,"query-paths: path-literalOr denied"],[2659,2,10,"query-paths: path-literalOr missing"],[2661,2,10,"query-paths: path-concreteErrorOr granted"],[2663,2,10,"query-paths: path-concreteErrorOr denied"],[2665,2,10,"query-paths: path-concreteErrorOr missing"],[2667,2,10,"query-paths: path-concreteErrorAnd granted"],[2669,2,10,"query-paths: path-concreteErrorAnd denied"],[2671,2,10,"query-paths: path-concreteErrorAnd missing"],[2673,2,10,"query-paths: path-budgetErrorOr granted"],[2675,2,10,"query-paths: path-budgetErrorOr denied"],[2677,2,10,"query-paths: path-budgetErrorOr missing"],[2679,2,10,"query-paths: path members empty granted"],[2681,2,10,"query-paths: path members filtered denied"],[2683,1,10,"query-paths: owner equality"]],"cases":[{"t":"case 0000","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0001","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0002","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0003","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0004","q":"get: 2 + 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0005","q":"get: 11 - 4 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0006","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0007","q":"get: 9 / 3 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0008","q":"get: 10 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0009","q":"get: 0 < 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0010","q":"get: -1 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0011","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0012","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0013","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0014","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0015","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0016","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0017","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0018","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0019","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0020","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0021","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0022","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0023","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0024","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0025","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0026","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0027","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0028","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0029","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0030","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0031","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0032","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0033","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0034","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0035","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0036","q":"get: 3 + 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0037","q":"get: 12 - 4 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0038","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0039","q":"get: 10 / 3 == 3.3333333333333335","a":"DENY","r":"c","k":"verdict"},{"t":"case 0040","q":"get: 11 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0041","q":"get: 1 < 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0042","q":"get: -2 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0043","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0044","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0045","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0046","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0047","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0048","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0049","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0050","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0051","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0052","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0053","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0054","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0055","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0056","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0057","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0058","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0059","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0060","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0061","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0062","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0063","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0064","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0065","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0066","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0067","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0068","q":"get: 4 + 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0069","q":"get: 13 - 4 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0070","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0071","q":"get: 11 / 3 == 3.6666666666666665","a":"DENY","r":"c","k":"verdict"},{"t":"case 0072","q":"get: 12 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0073","q":"get: 2 < 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0074","q":"get: -3 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0075","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0076","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0077","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0078","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0079","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0080","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0081","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0082","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0083","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0084","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0085","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0086","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0087","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0088","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0089","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0090","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0091","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0092","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0093","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0094","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0095","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0096","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0097","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0098","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0099","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0100","q":"get: 5 + 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0101","q":"get: 14 - 4 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0102","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0103","q":"get: 12 / 3 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0104","q":"get: 13 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0105","q":"get: 3 < 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0106","q":"get: -4 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0107","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0108","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0109","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0110","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0111","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0112","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0113","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0114","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0115","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0116","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0117","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0118","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0119","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0120","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0121","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0122","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0123","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0124","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0125","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0126","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0127","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0128","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0129","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0130","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0131","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0132","q":"get: 6 + 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0133","q":"get: 15 - 4 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0134","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0135","q":"get: 13 / 3 == 4.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0136","q":"get: 14 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0137","q":"get: 4 < 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0138","q":"get: -5 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0139","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0140","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0141","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0142","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0143","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0144","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0145","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0146","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0147","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0148","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0149","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0150","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0151","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0152","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0153","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0154","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0155","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0156","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0157","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0158","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0159","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0160","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0161","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0162","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0163","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0164","q":"get: 7 + 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0165","q":"get: 16 - 4 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0166","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0167","q":"get: 14 / 3 == 4.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0168","q":"get: 15 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0169","q":"get: 5 < 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0170","q":"get: -6 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0171","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0172","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0173","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0174","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0175","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0176","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0177","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0178","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0179","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0180","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0181","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0182","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0183","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0184","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0185","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0186","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0187","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0188","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0189","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0190","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0191","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0192","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0193","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0194","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0195","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0196","q":"get: 8 + 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0197","q":"get: 17 - 4 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0198","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0199","q":"get: 15 / 3 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0200","q":"get: 16 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0201","q":"get: 6 < 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0202","q":"get: -7 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0203","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0204","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0205","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0206","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0207","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0208","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0209","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0210","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0211","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0212","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0213","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0214","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0215","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0216","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0217","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0218","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0219","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0220","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0221","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0222","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0223","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0224","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0225","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0226","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0227","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0228","q":"get: 9 + 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0229","q":"get: 18 - 4 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0230","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0231","q":"get: 16 / 3 == 5.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0232","q":"get: 17 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0233","q":"get: 7 < 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0234","q":"get: -8 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0235","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0236","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0237","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0238","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0239","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0240","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0241","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0242","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0243","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0244","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0245","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0246","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0247","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0248","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0249","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0250","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0251","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0252","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0253","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0254","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0255","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0256","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0257","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0258","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0259","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0260","q":"get: 10 + 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0261","q":"get: 19 - 4 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0262","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0263","q":"get: 17 / 3 == 5.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0264","q":"get: 18 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0265","q":"get: 8 < 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0266","q":"get: -9 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0267","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0268","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0269","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0270","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0271","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0272","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0273","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0274","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0275","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0276","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0277","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0278","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0279","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0280","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0281","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0282","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0283","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0284","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0285","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0286","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0287","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0288","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0289","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0290","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0291","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0292","q":"get: 11 + 3 == 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0293","q":"get: 20 - 4 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0294","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0295","q":"get: 18 / 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0296","q":"get: 19 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0297","q":"get: 9 < 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0298","q":"get: -10 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0299","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0300","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0301","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0302","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0303","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0304","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0305","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0306","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0307","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0308","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0309","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0310","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0311","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0312","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0313","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0314","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0315","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0316","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0317","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0318","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0319","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0320","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0321","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0322","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0323","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0324","q":"get: 12 + 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0325","q":"get: 21 - 4 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0326","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0327","q":"get: 19 / 3 == 6.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0328","q":"get: 20 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0329","q":"get: 10 < 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0330","q":"get: -11 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0331","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0332","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0333","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0334","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0335","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0336","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0337","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0338","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0339","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0340","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0341","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0342","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0343","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0344","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0345","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0346","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0347","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0348","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0349","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0350","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0351","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0352","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0353","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0354","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0355","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0356","q":"get: 13 + 3 == 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0357","q":"get: 22 - 4 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0358","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0359","q":"get: 20 / 3 == 6.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0360","q":"get: 21 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0361","q":"get: 11 < 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0362","q":"get: -12 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0363","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0364","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0365","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0366","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0367","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0368","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0369","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0370","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0371","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0372","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0373","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0374","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0375","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0376","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0377","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0378","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0379","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0380","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0381","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0382","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0383","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0384","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0385","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0386","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0387","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0388","q":"get: 14 + 3 == 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0389","q":"get: 23 - 4 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0390","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0391","q":"get: 21 / 3 == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0392","q":"get: 22 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0393","q":"get: 12 < 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0394","q":"get: -13 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0395","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0396","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0397","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0398","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0399","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0400","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0401","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0402","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0403","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0404","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0405","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0406","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0407","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0408","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0409","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0410","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0411","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0412","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0413","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0414","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0415","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0416","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0417","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0418","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0419","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0420","q":"get: 15 + 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0421","q":"get: 24 - 4 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0422","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0423","q":"get: 22 / 3 == 7.333333333333333","a":"DENY","r":"c","k":"verdict"},{"t":"case 0424","q":"get: 23 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0425","q":"get: 13 < 14","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0426","q":"get: -14 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0427","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0428","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0429","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0430","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0431","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0432","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0433","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0434","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0435","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0436","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0437","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0438","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0439","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0440","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0441","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0442","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0443","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0444","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0445","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0446","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0447","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0448","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0449","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0450","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0451","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0452","q":"get: 16 + 3 == 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0453","q":"get: 25 - 4 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0454","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0455","q":"get: 23 / 3 == 7.666666666666667","a":"DENY","r":"c","k":"verdict"},{"t":"case 0456","q":"get: 24 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0457","q":"get: 14 < 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0458","q":"get: -15 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0459","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0460","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0461","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0462","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0463","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0464","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0465","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0466","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0467","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0468","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0469","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0470","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0471","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0472","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0473","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0474","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0475","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0476","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0477","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0478","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0479","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0480","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0481","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0482","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0483","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0484","q":"get: 17 + 3 == 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0485","q":"get: 26 - 4 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0486","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0487","q":"get: 24 / 3 == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0488","q":"get: 25 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0489","q":"get: 15 < 16","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0490","q":"get: -16 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0491","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0492","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0493","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0494","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0495","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0496","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0497","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0498","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0499","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0500","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0501","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0502","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0503","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0504","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0505","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0506","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0507","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0508","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0509","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0510","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0511","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0512","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0513","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0514","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0515","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0516","q":"get: 18 + 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0517","q":"get: 27 - 4 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0518","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0519","q":"get: 25 / 3 == 8.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0520","q":"get: 26 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0521","q":"get: 16 < 17","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0522","q":"get: -17 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0523","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0524","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0525","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0526","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0527","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0528","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0529","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0530","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0531","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0532","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0533","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0534","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0535","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0536","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0537","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0538","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0539","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0540","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0541","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0542","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0543","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0544","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0545","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0546","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0547","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0548","q":"get: 19 + 3 == 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0549","q":"get: 28 - 4 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0550","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0551","q":"get: 26 / 3 == 8.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0552","q":"get: 27 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0553","q":"get: 17 < 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0554","q":"get: -18 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0555","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0556","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0557","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0558","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0559","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0560","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0561","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0562","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0563","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0564","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0565","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0566","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0567","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0568","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0569","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0570","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0571","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0572","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0573","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0574","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0575","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0576","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0577","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0578","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0579","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0580","q":"get: 20 + 3 == 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0581","q":"get: 29 - 4 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0582","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0583","q":"get: 27 / 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0584","q":"get: 28 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0585","q":"get: 18 < 19","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0586","q":"get: -19 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0587","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0588","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0589","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0590","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0591","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0592","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0593","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0594","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0595","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0596","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0597","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0598","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0599","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0600","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0601","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0602","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0603","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0604","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0605","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0606","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0607","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0608","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0609","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0610","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0611","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0612","q":"get: 21 + 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0613","q":"get: 30 - 4 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0614","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0615","q":"get: 28 / 3 == 9.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0616","q":"get: 29 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0617","q":"get: 19 < 20","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0618","q":"get: -20 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0619","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0620","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0621","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0622","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0623","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0624","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0625","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0626","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0627","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0628","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0629","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0630","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0631","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0632","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0633","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0634","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0635","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0636","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0637","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0638","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0639","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0640","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0641","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0642","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0643","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0644","q":"get: 22 + 3 == 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0645","q":"get: 31 - 4 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0646","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0647","q":"get: 29 / 3 == 9.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0648","q":"get: 30 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0649","q":"get: 20 < 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0650","q":"get: -21 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0651","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0652","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0653","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0654","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0655","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0656","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0657","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0658","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0659","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0660","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0661","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0662","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0663","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0664","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0665","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0666","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0667","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0668","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0669","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0670","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0671","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0672","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0673","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0674","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0675","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0676","q":"get: 23 + 3 == 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0677","q":"get: 32 - 4 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0678","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0679","q":"get: 30 / 3 == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0680","q":"get: 31 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0681","q":"get: 21 < 22","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0682","q":"get: -22 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0683","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0684","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0685","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0686","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0687","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0688","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0689","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0690","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0691","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0692","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0693","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0694","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0695","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0696","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0697","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0698","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0699","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0700","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0701","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0702","q":"get: request.auth.token.score == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0703","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0704","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0705","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0706","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0707","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0708","q":"get: 24 + 3 == 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0709","q":"get: 33 - 4 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0710","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0711","q":"get: 31 / 3 == 10.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0712","q":"get: 32 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0713","q":"get: 22 < 23","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0714","q":"get: -23 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0715","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0716","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0717","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0718","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0719","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0720","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0721","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0722","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0723","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0724","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0725","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0726","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0727","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0728","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0729","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0730","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0731","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0732","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0733","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0734","q":"get: request.auth.token.score == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0735","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0736","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0737","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0738","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0739","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0740","q":"get: 25 + 3 == 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0741","q":"get: 34 - 4 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0742","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0743","q":"get: 32 / 3 == 10.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0744","q":"get: 33 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0745","q":"get: 23 < 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0746","q":"get: -24 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0747","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0748","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0749","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0750","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0751","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0752","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0753","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0754","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0755","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0756","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0757","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0758","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0759","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0760","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0761","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0762","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0763","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0764","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0765","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0766","q":"get: request.auth.token.score == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0767","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0768","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0769","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0770","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0771","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0772","q":"get: 26 + 3 == 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0773","q":"get: 35 - 4 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0774","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0775","q":"get: 33 / 3 == 11","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0776","q":"get: 34 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0777","q":"get: 24 < 25","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0778","q":"get: -25 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0779","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0780","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0781","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0782","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0783","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0784","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0785","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0786","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0787","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0788","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0789","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0790","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0791","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0792","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0793","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0794","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0795","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0796","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0797","q":"get: request.auth.uid == 'user-0'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0798","q":"get: request.auth.token.score == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0799","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0800","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0801","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0802","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0803","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0804","q":"get: 27 + 3 == 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0805","q":"get: 36 - 4 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0806","q":"get: 6 * 3 == 18","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0807","q":"get: 34 / 3 == 11.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0808","q":"get: 35 % 7 == 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0809","q":"get: 25 < 26","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0810","q":"get: -26 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0811","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0812","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0813","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0814","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0815","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0816","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0817","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0818","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0819","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0820","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0821","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0822","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0823","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0824","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0825","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0826","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0827","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0828","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0829","q":"get: request.auth.uid == 'user-1'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0830","q":"get: request.auth.token.score == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0831","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0832","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0833","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0834","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0835","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0836","q":"get: 28 + 3 == 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0837","q":"get: 37 - 4 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0838","q":"get: 7 * 3 == 21","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0839","q":"get: 35 / 3 == 11.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0840","q":"get: 36 % 7 == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0841","q":"get: 26 < 27","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0842","q":"get: -27 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0843","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0844","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0845","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0846","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0847","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0848","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0849","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0850","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0851","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0852","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0853","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0854","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0855","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0856","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0857","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0858","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0859","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0860","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0861","q":"get: request.auth.uid == 'user-2'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0862","q":"get: request.auth.token.score == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0863","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0864","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0865","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0866","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0867","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0868","q":"get: 29 + 3 == 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0869","q":"get: 38 - 4 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0870","q":"get: 8 * 3 == 24","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0871","q":"get: 36 / 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0872","q":"get: 37 % 7 == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0873","q":"get: 27 < 28","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0874","q":"get: -28 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0875","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0876","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0877","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0878","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0879","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0880","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0881","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0882","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0883","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0884","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0885","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0886","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0887","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0888","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0889","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0890","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0891","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0892","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0893","q":"get: request.auth.uid == 'user-3'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0894","q":"get: request.auth.token.score == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0895","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0896","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0897","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0898","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0899","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0900","q":"get: 30 + 3 == 33","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0901","q":"get: 39 - 4 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0902","q":"get: 2 * 3 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0903","q":"get: 37 / 3 == 12.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 0904","q":"get: 38 % 7 == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0905","q":"get: 28 < 29","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0906","q":"get: -29 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0907","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0908","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0909","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0910","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0911","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0912","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0913","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0914","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0915","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0916","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0917","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0918","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0919","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0920","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0921","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0922","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0923","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0924","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0925","q":"get: request.auth.uid == 'user-4'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0926","q":"get: request.auth.token.score == 7","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0927","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0928","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0929","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0930","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0931","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0932","q":"get: 31 + 3 == 34","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0933","q":"get: 40 - 4 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0934","q":"get: 3 * 3 == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0935","q":"get: 38 / 3 == 12.666666666666666","a":"DENY","r":"c","k":"verdict"},{"t":"case 0936","q":"get: 39 % 7 == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0937","q":"get: 29 < 30","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0938","q":"get: -30 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0939","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0940","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0941","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0942","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0943","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0944","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0945","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0946","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0947","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0948","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0949","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0950","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0951","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0952","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0953","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0954","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0955","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0956","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0957","q":"get: request.auth.uid == 'user-5'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0958","q":"get: request.auth.token.score == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0959","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0960","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0961","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0962","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0963","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0964","q":"get: 32 + 3 == 35","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0965","q":"get: 41 - 4 == 37","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0966","q":"get: 4 * 3 == 12","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0967","q":"get: 39 / 3 == 13","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0968","q":"get: 40 % 7 == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0969","q":"get: 30 < 31","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0970","q":"get: -31 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0971","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0972","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0973","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0974","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 0975","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0976","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0977","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0978","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0979","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0980","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0981","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0982","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0983","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0984","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0985","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0986","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0987","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0988","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0989","q":"get: request.auth.uid == 'user-6'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0990","q":"get: request.auth.token.score == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0991","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0992","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0993","q":"get: false","a":"DENY","r":"c","k":"verdict"},{"t":"case 0994","q":"get: null == null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0995","q":"get: null != 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0996","q":"get: 33 + 3 == 36","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0997","q":"get: 42 - 4 == 38","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0998","q":"get: 5 * 3 == 15","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 0999","q":"get: 40 / 3 == 13.333333333333334","a":"DENY","r":"c","k":"verdict"},{"t":"case 1000","q":"get: 41 % 7 == 6","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1001","q":"get: 31 < 32","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1002","q":"get: -32 < 0","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1003","q":"get: true && true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1004","q":"get: false || true","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1005","q":"get: !false","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1006","q":"get: false && request.auth.token.missing == 1","a":"DENY","r":"c","k":"verdict"},{"t":"case 1007","q":"get: true || request.auth.token.missing == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1008","q":"get: 'alpha' == 'alpha'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1009","q":"get: 'alpha'.size() == 5","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1010","q":"get: 'alphabet'.matches('^alpha.*')","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1011","q":"get: 'MiXeD'.lower() == 'mixed'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1012","q":"get: 'MiXeD'.upper() == 'MIXED'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1013","q":"get: ['a', 'b', 'c'].size() == 3","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1014","q":"get: 'b' in ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1015","q":"get: ['a', 'b', 'c'].hasAll(['a', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1016","q":"get: ['a', 'b', 'c'].hasAny(['x', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1017","q":"get: ['a', 'b'].hasOnly(['b', 'a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1018","q":"get: {'a': 1, 'b': 2}.a == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1019","q":"get: {'a': 1, 'b': 2}.keys().hasAll(['a', 'b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1020","q":"get: request.auth != null","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1021","q":"get: request.auth.uid == 'user-7'","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1022","q":"get: request.auth.token.score == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"case 1023","q":"get: request.method == 'get'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string trim","q":"get: ' {name} '.trim() == '{name}'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string case","q":"get: 'FiRe'.lower() == 'fire' && 'FiRe'.upper() == 'FIRE'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string replace","q":"get: 'abcabc'.replace('a', 'x') == 'xbcxbc'","a":"ALLOW","r":"c","k":"verdict"},{"t":"string split","q":"get: 'a,b,c'.split(',') == ['a', 'b', 'c']","a":"ALLOW","r":"c","k":"verdict"},{"t":"string match","q":"get: 'phase3'.matches('^phase[0-9]$')","a":"ALLOW","r":"c","k":"verdict"},{"t":"string coercion","q":"get: string(123) == '123' && string(true) == 'true'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list concat","q":"get: [1, 2].concat([3]) == [1, 2, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list membership","q":"get: [1, 2, 3].hasAll([1, 3]) && [1, 2, 3].hasAny([9, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list has only","q":"get: [1, 2, 2].hasOnly([2, 1])","a":"ALLOW","r":"c","k":"verdict"},{"t":"list join","q":"get: ['a', 'b', 'c'].join('-') == 'a-b-c'","a":"ALLOW","r":"c","k":"verdict"},{"t":"list remove all","q":"get: [1, 2, 3, 2].removeAll([2]) == [1, 3]","a":"ALLOW","r":"c","k":"verdict"},{"t":"list index range","q":"get: [10, 20, 30][1] == 20 && [10, 20, 30][0:2] == [10, 20]","a":"ALLOW","r":"c","k":"verdict"},{"t":"map get","q":"get: {'a': 1}.get('missing', 7) == 7 && {'a': 1}.get('a', 7) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"map keys values","q":"get: {'a': 1, 'b': 2}.keys().hasOnly(['a', 'b']) && {'a': 1, 'b': 2}.values().hasAll([1, 2])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map size membership","q":"get: {'a': 1, 'b': 2}.size() == 2 && 'a' in {'a': 1}","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).affectedKeys().hasOnly(['b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"map diff sets","q":"get: {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).changedKeys().hasOnly(['b']) && {'a': 1, 'b': 2}.diff({'a': 1, 'b': 3, 'c': 4}).addedKโ€ฆ","a":"ALLOW","r":"c","k":"verdict"},{"t":"set union","q":"get: ['a', 'b'].toSet().union(['b', 'c'].toSet()).hasOnly(['a', 'b', 'c'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set intersection","q":"get: ['a', 'b'].toSet().intersection(['b', 'c'].toSet()).hasOnly(['b'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"set difference","q":"get: ['a', 'b'].toSet().difference(['b'].toSet()).hasOnly(['a'])","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes size hex","q":"get: 'abc'.toUtf8().size() == 3 && 'abc'.toUtf8().toHexString() == '616263'","a":"ALLOW","r":"c","k":"verdict"},{"t":"bytes base64 unicode","q":"get: 'รฉ'.toUtf8().size() == 2 && 'abc'.toUtf8().toBase64() == 'YWJj'","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration seconds","q":"get: duration.value(90, 's').seconds() == 90","a":"ALLOW","r":"c","k":"verdict"},{"t":"duration nanos","q":"get: duration.value(123, 'ns').nanos() == 123","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp date","q":"get: timestamp.date(2024, 2, 29).year() == 2024 && timestamp.date(2024, 2, 29).month() == 2","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp components","q":"get: timestamp.date(2024, 2, 29).day() == 29 && timestamp.date(2024, 2, 29).dayOfWeek() == 4","a":"ALLOW","r":"c","k":"verdict"},{"t":"timestamp arithmetic","q":"get: timestamp.date(2024, 2, 29) + duration.value(1, 'd') == timestamp.date(2024, 3, 1)","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng components","q":"get: latlng.value(1.25, 2.5).latitude() == 1.25 && latlng.value(1.25, 2.5).longitude() == 2.5","a":"ALLOW","r":"c","k":"verdict"},{"t":"latlng distance","q":"get: latlng.value(1, 2).distance(latlng.value(1, 2)) == 0.0","a":"ALLOW","r":"c","k":"verdict"},{"t":"math basic","q":"get: math.abs(-2) == 2 && math.ceil(1.2) == 2 && math.floor(1.8) == 1","a":"ALLOW","r":"c","k":"verdict"},{"t":"math round sqrt","q":"get: math.round(1.6) == 2 && math.sqrt(81) == 9","a":"ALLOW","r":"c","k":"verdict"},{"t":"math pow","q":"get: math.pow(2, 3) == 8","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing md5","q":"get: hashing.md5('abc'.toUtf8()).toHexString() == '900150983CD24FB0D6963F7D28E17F72'","a":"ALLOW","r":"c","k":"verdict"},{"t":"hashing sha256","q":"get: hashing.sha256('abc'.toUtf8()).toHexString() == 'BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request auth","q":"get: request.auth.uid == 'phase3-user' && request.auth.token.role == 'editor'","a":"ALLOW","r":"c","k":"verdict"},{"t":"request method time","q":"get: request.method == 'get' && request.time.year() == 2026","a":"ALLOW","r":"c","k":"verdict"},{"t":"path value","q":"get: resource.__name__ == /databases/$(database)/documents/phase3-language/path-value","a":"ALLOW","r":"c","k":"verdict"},{"t":"function let","q":"get: usesLet(3)","a":"ALLOW","r":"c","k":"verdict"},{"t":"resource update diff","q":"update: resource.data.name == 'before' && request.resource.data.name == 'after' && request.resource.data.diff(resource.data).affectedKeys()โ€ฆ","a":"ALLOW","r":"c","k":"verdict"},{"t":"query limit","q":"list: request.query.limit == 10","a":"ALLOW","r":"c","k":"verdict"},{"t":"nested match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"recursive match","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"overlapping allow","q":"get: true","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 15","q":"projects.test with the function-depth-15 source (643 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 16","q":"projects.test with the function-depth-16 source (678 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 17","q":"projects.test with the function-depth-17 source (713 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 18","q":"projects.test with the function-depth-18 source (748 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 19","q":"projects.test with the function-depth-19 source (783 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 20","q":"projects.test with the function-depth-20 source (818 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 21","q":"projects.test with the function-depth-21 source (853 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"function depth 22","q":"projects.test with the function-depth-22 source (888 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->โ€ฆ","r":"c","k":"verdict"},{"t":"function depth 23","q":"projects.test with the function-depth-23 source (923 bytes)","a":"compile ERROR: Maximum allowed call depth of 20 is reached for [f0->f1->f2->f3->f4->f5->f6->f7->f8->f9->f10->f11->f12->f13->f14->f15->f16->โ€ฆ","r":"c","k":"error"},{"t":"linear expression terms 20","q":"projects.test with the linear-expression-terms-20 source (740 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 30","q":"projects.test with the linear-expression-terms-30 source (1040 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 40","q":"projects.test with the linear-expression-terms-40 source (1340 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 50","q":"projects.test with the linear-expression-terms-50 source (1640 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 100","q":"projects.test with the linear-expression-terms-100 source (3140 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"balanced expression terms 100","q":"projects.test with the balanced-expression-terms-100 source (3933 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced expression terms 125","q":"projects.test with the balanced-expression-terms-125 source (4972 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"verdict"},{"t":"balanced expression terms 150","q":"projects.test with the balanced-expression-terms-150 source (5923 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 175","q":"projects.test with the balanced-expression-terms-175 source (6962 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 200","q":"projects.test with the balanced-expression-terms-200 source (7913 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 225","q":"projects.test with the balanced-expression-terms-225 source (8954 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 250","q":"projects.test with the balanced-expression-terms-250 source (9907 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced expression terms 300","q":"projects.test with the balanced-expression-terms-300 source (11903 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"linear expression terms 51","q":"projects.test with the linear-expression-terms-51 source (1670 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"linear expression terms 99","q":"projects.test with the linear-expression-terms-99 source (3110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 50","q":"projects.test with the true-chain-terms-50 source (550 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 55","q":"projects.test with the true-chain-terms-55 source (590 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 60","q":"projects.test with the true-chain-terms-60 source (630 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"true chain terms 100","q":"projects.test with the true-chain-terms-100 source (950 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 101","q":"projects.test with the true-chain-terms-101 source (958 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 102","q":"projects.test with the true-chain-terms-102 source (966 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 103","q":"projects.test with the true-chain-terms-103 source (974 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 104","q":"projects.test with the true-chain-terms-104 source (982 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 105","q":"projects.test with the true-chain-terms-105 source (990 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 106","q":"projects.test with the true-chain-terms-106 source (998 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 107","q":"projects.test with the true-chain-terms-107 source (1006 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 108","q":"projects.test with the true-chain-terms-108 source (1014 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 109","q":"projects.test with the true-chain-terms-109 source (1022 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 110","q":"projects.test with the true-chain-terms-110 source (1030 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 120","q":"projects.test with the true-chain-terms-120 source (1110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 150","q":"projects.test with the true-chain-terms-150 source (1350 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"true chain terms 200","q":"projects.test with the true-chain-terms-200 source (1750 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 50","q":"projects.test with the time-chain-terms-50 source (1350 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"time chain terms 99","q":"projects.test with the time-chain-terms-99 source (2526 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 100","q":"projects.test with the time-chain-terms-100 source (2550 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 101","q":"projects.test with the time-chain-terms-101 source (2574 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 102","q":"projects.test with the time-chain-terms-102 source (2598 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 103","q":"projects.test with the time-chain-terms-103 source (2622 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 104","q":"projects.test with the time-chain-terms-104 source (2646 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 105","q":"projects.test with the time-chain-terms-105 source (2670 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"time chain terms 120","q":"projects.test with the time-chain-terms-120 source (3030 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"literal left terms 50","q":"projects.test with the literal-left-terms-50 source (1640 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"literal left terms 99","q":"projects.test with the literal-left-terms-99 source (3110 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"literal left terms 100","q":"projects.test with the literal-left-terms-100 source (3140 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 20","q":"projects.test with the right-nested-terms-20 source (778 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"right nested terms 50","q":"projects.test with the right-nested-terms-50 source (1738 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 60","q":"projects.test with the right-nested-terms-60 source (2058 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 90","q":"projects.test with the right-nested-terms-90 source (3018 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"right nested terms 100","q":"projects.test with the right-nested-terms-100 source (3338 bytes)","a":"compile ERROR: Expression is too complex to evaluate safely.","r":"c","k":"error"},{"t":"balanced parenthesised terms 60","q":"projects.test with the balanced-parenthesised-terms-60 source (2176 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced parenthesised terms 100","q":"projects.test with the balanced-parenthesised-terms-100 source (3536 bytes)","a":"ALLOW","r":"c","k":"verdict"},{"t":"balanced parenthesised terms 200","q":"projects.test with the balanced-parenthesised-terms-200 source (7036 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"balanced parenthesised terms 400","q":"projects.test with the balanced-parenthesised-terms-400 source (14036 bytes)","a":"DENY, error: Unable to evaluate the expression as the maximum of 1000 expressions to evaluate has been reached.","r":"c","k":"error"},{"t":"unexpected token","q":"projects.test with the unexpected-token source (154 bytes)","a":"compile ERROR: Missing conditional expression after 'if'.","r":"c","k":"verdict"},{"t":"unclosed block","q":"projects.test with the unclosed-block source (89 bytes)","a":"compile ERROR: Missing 'match' keyword before path.","r":"c","k":"verdict"},{"t":"duplicate let","q":"projects.test with the duplicate-let source (245 bytes)","a":"compile ERROR: The identifier [value] is already bound in the current scope.","r":"c","k":"verdict"},{"t":"undefined name","q":"projects.test with the undefined-name source (170 bytes)","a":"compiled, WARNING: Invalid variable name: missingName.","r":"c","k":"verdict"},{"t":"invalid function arity","q":"projects.test with the invalid-function-arity source (169 bytes)","a":"compiled, WARNING: Incorrect number of arguments supplied to function: math.abs.","r":"c","k":"verdict"},{"t":"recursive function","q":"projects.test with the recursive-function source (210 bytes)","a":"compile ERROR: Recursive call is not allowed.","r":"c","k":"verdict"},{"t":"invalid recursive wildcard","q":"projects.test with the invalid-recursive-wildcard source (163 bytes)","a":"compile ERROR: Invalid glob match expression. Only one glob match is permitted in a match declaration path.","r":"c","k":"verdict"},{"t":"source bytes 255999","q":"projects.test with the source-bytes-255999 source (255999 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256000","q":"projects.test with the source-bytes-256000 source (256000 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 256001","q":"projects.test with the source-bytes-256001 source (256001 bytes)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"source bytes 262145","q":"projects.test with the source-bytes-262145 source (262145 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"c","k":"verdict"},{"t":"production compile","q":"compile complex-firestore.rules (1193 non-blank lines)","a":"compiled with no issues","r":"c","k":"verdict"},{"t":"debug return","q":"get: debug(request.auth.uid) == 'phase3-user'","a":"DENY, error: Function not found error: Name: [debug].","r":"d","k":"verdict","w":"production's projects.test has no debug() (Function not found); Firenook evaluates debug() to its argument, as the emulator does"},{"t":"linear expression terms 60","q":"projects.test with the linear-expression-terms-60 source (1940 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 70","q":"projects.test with the linear-expression-terms-70 source (2240 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 80","q":"projects.test with the linear-expression-terms-80 source (2540 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 90","q":"projects.test with the linear-expression-terms-90 source (2840 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 52","q":"projects.test with the linear-expression-terms-52 source (1700 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 53","q":"projects.test with the linear-expression-terms-53 source (1730 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 54","q":"projects.test with the linear-expression-terms-54 source (1760 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 55","q":"projects.test with the linear-expression-terms-55 source (1790 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 56","q":"projects.test with the linear-expression-terms-56 source (1820 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 57","q":"projects.test with the linear-expression-terms-57 source (1850 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 58","q":"projects.test with the linear-expression-terms-58 source (1880 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 59","q":"projects.test with the linear-expression-terms-59 source (1910 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 91","q":"projects.test with the linear-expression-terms-91 source (2870 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 92","q":"projects.test with the linear-expression-terms-92 source (2900 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 93","q":"projects.test with the linear-expression-terms-93 source (2930 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 94","q":"projects.test with the linear-expression-terms-94 source (2960 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 95","q":"projects.test with the linear-expression-terms-95 source (2990 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 96","q":"projects.test with the linear-expression-terms-96 source (3020 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 97","q":"projects.test with the linear-expression-terms-97 source (3050 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"linear expression terms 98","q":"projects.test with the linear-expression-terms-98 source (3080 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 70","q":"projects.test with the true-chain-terms-70 source (710 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 80","q":"projects.test with the true-chain-terms-80 source (790 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 90","q":"projects.test with the true-chain-terms-90 source (870 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 95","q":"projects.test with the true-chain-terms-95 source (910 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 96","q":"projects.test with the true-chain-terms-96 source (918 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 97","q":"projects.test with the true-chain-terms-97 source (926 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 98","q":"projects.test with the true-chain-terms-98 source (934 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"true chain terms 99","q":"projects.test with the true-chain-terms-99 source (942 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 55","q":"projects.test with the time-chain-terms-55 source (1470 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 60","q":"projects.test with the time-chain-terms-60 source (1590 bytes)","a":"500 INTERNAL: Failed to convert server response to JSON","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 70","q":"projects.test with the time-chain-terms-70 source (1830 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 80","q":"projects.test with the time-chain-terms-80 source (2070 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 90","q":"projects.test with the time-chain-terms-90 source (2310 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 95","q":"projects.test with the time-chain-terms-95 source (2430 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 96","q":"projects.test with the time-chain-terms-96 source (2454 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 97","q":"projects.test with the time-chain-terms-97 source (2478 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"time chain terms 98","q":"projects.test with the time-chain-terms-98 source (2502 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 60","q":"projects.test with the literal-left-terms-60 source (1940 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 90","q":"projects.test with the literal-left-terms-90 source (2840 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 95","q":"projects.test with the literal-left-terms-95 source (2990 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 96","q":"projects.test with the literal-left-terms-96 source (3020 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 97","q":"projects.test with the literal-left-terms-97 source (3050 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"literal left terms 98","q":"projects.test with the literal-left-terms-98 source (3080 bytes)","a":"500 INTERNAL: Internal error encountered.","r":"d","k":"status","w":"production's projects.test fails with 500 INTERNAL on a long chain below its compile-time depth limit, from an edge that moves with what a term is (52 `>=` terms, 61 to 70 `true` terms); Firenook does not model that edge and evaluates the chain"},{"t":"source bytes 262143","q":"projects.test with the source-bytes-262143 source (262143 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"source bytes 262144","q":"projects.test with the source-bytes-262144 source (262144 bytes)","a":"400 INVALID_ARGUMENT: Request contains an invalid argument.","r":"d","k":"verdict","w":"the Rules API's request envelope refuses this source below the documented 256 KiB deployed-rules maximum; Firenook accepts a source up to 262,144 bytes"},{"t":"the ruleset every other input changes, which compiles","q":"PUT :securityRules (the ruleset every other input changes, which compiles)","a":"200 compiled","r":"c","k":"answer"},{"t":"one word and nothing else (developer-tools-coverage-v1 invalid-reload)","q":"PUT :securityRules (one word and nothing else (developer-tools-coverage-v1 invalid-reload))","a":"400 L1:1 mismatched input 'broken' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"an empty source","q":"PUT :securityRules (an empty source)","a":"400 L0:0 Rules content empty. Compilation aborted.","r":"c","k":"answer"},{"t":"only blank lines","q":"PUT :securityRules (only blank lines)","a":"400 L3:1 mismatched input '' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"a comment and nothing else","q":"PUT :securityRules (a comment and nothing else)","a":"400 L2:1 mismatched input '' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"a stray word before rules version","q":"PUT :securityRules (a stray word before rules_version)","a":"400 L1:1 Unexpected 'hello'.","r":"c","k":"answer"},{"t":"a stray word after the service block","q":"PUT :securityRules (a stray word after the service block)","a":"400 L13:1 Unexpected 'extra'.","r":"c","k":"answer"},{"t":"a stray word after a function before the service block","q":"PUT :securityRules (a stray word after a function before the service block)","a":"400 L3:1 Unexpected 'hello'.","r":"c","k":"answer"},{"t":"a match block before the service block","q":"PUT :securityRules (a match block before the service block)","a":"400 L2:1 mismatched input 'match' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"rules_version = 2","q":"PUT :securityRules (rules_version = 2)","a":"400 L1:17 mismatched input '2' expecting STRING","r":"c","k":"answer"},{"t":"rules_version '2'","q":"PUT :securityRules (rules_version '2')","a":"400 L1:15 missing '=' at ''2''","r":"c","k":"answer"},{"t":"rules_version: '2'","q":"PUT :securityRules (rules_version: '2')","a":"400 L1:14 mismatched input ':' expecting '='","r":"c","k":"answer"},{"t":"rules_version = ;","q":"PUT :securityRules (rules_version = ;)","a":"400 L1:17 missing STRING at ';'","r":"c","k":"answer"},{"t":"rules_version = '2; (an unterminated string)","q":"PUT :securityRules (rules_version = '2; (an unterminated string))","a":"400 L1:17 mismatched input ''2;' expecting STRING","r":"c","k":"answer"},{"t":"rules_version after the service block","q":"PUT :securityRules (rules_version after the service block)","a":"400 L12:1 Unexpected 'rules_version'.","r":"c","k":"answer"},{"t":"an allow in the service block after its match","q":"PUT :securityRules (an allow in the service block after its match)","a":"400 L12:3 Unexpected 'allow'.","r":"c","k":"answer"},{"t":"no } after a function body","q":"PUT :securityRules (no } after a function body)","a":"400 L6:5 missing '}' at 'match'","r":"c","k":"answer"},{"t":"no } closing the inner match","q":"PUT :securityRules (no } closing the inner match)","a":"400 L12:1 Unexpected ''. ยท L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"no } closing the service block","q":"PUT :securityRules (no } closing the service block)","a":"400 L12:1 Unexpected ''. ยท L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"no ; after an allow followed by another","q":"PUT :securityRules (no ; after an allow followed by another)","a":"200 compiled","r":"c","k":"answer"},{"t":"no ; after the last allow of a block","q":"PUT :securityRules (no ; after the last allow of a block)","a":"200 compiled","r":"c","k":"answer"},{"t":";; after an allow","q":"PUT :securityRules (;; after an allow)","a":"400 L8:33 Unexpected ';'.","r":"c","k":"answer"},{"t":"a ; after a match block","q":"PUT :securityRules (a ; after a match block)","a":"400 L10:6 Unexpected ';'.","r":"c","k":"answer"},{"t":"no ; after a let","q":"PUT :securityRules (no ; after a let)","a":"400 L6:7 missing ';' at 'return'","r":"c","k":"answer"},{"t":"if (signedIn();","q":"PUT :securityRules (if (signedIn();)","a":"400 L8:33 Unexpected ';'.","r":"c","k":"answer"},{"t":"if signedIn());","q":"PUT :securityRules (if signedIn());)","a":"400 L8:32 Unexpected ')'.","r":"c","k":"answer"},{"t":"if signedIn(;","q":"PUT :securityRules (if signedIn(;)","a":"400 L8:31 Unexpected ';'.","r":"c","k":"answer"},{"t":"function signedIn {","q":"PUT :securityRules (function signedIn {)","a":"400 L4:23 Missing 'function' signature","r":"c","k":"answer"},{"t":"== 'public; (single quote)","q":"PUT :securityRules (== 'public; (single quote))","a":"400 L9:7 Missing a closing '","r":"c","k":"answer"},{"t":"== \"public; (double quote)","q":"PUT :securityRules (== \"public; (double quote))","a":"400 L9:7 Missing a closing \"","r":"c","k":"answer"},{"t":"a line break inside a string","q":"PUT :securityRules (a line break inside a string)","a":"400 L9:1 Missing a closing ' ยท L9:1 Unexpected 'lic'.","r":"c","k":"answer"},{"t":"== 'public\\'; (the closing quote escaped)","q":"PUT :securityRules (== 'public\\'; (the closing quote escaped))","a":"400 L9:7 Missing a closing '","r":"c","k":"answer"},{"t":"match /items/{item=*}","q":"PUT :securityRules (match /items/{item=*})","a":"200 compiled","r":"c","k":"answer"},{"t":"match /items/{item}/","q":"PUT :securityRules (match /items/{item}/)","a":"400 L7:24 Forward slash '/' found where identifier or binding expected.","r":"c","k":"answer"},{"t":"allow read: if ;","q":"PUT :securityRules (allow read: if ;)","a":"400 L8:22 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"allow read: if, then the next allow","q":"PUT :securityRules (allow read: if, then the next allow)","a":"400 L9:7 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"if request.auth !=;","q":"PUT :securityRules (if request.auth !=;)","a":"400 L8:37 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_โ€ฆ","r":"c","k":"answer"},{"t":"if request.auth != then the closing }","q":"PUT :securityRules (if request.auth != then the closing })","a":"400 L10:5 mismatched input '}' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_โ€ฆ","r":"c","k":"answer"},{"t":"if !;","q":"PUT :securityRules (if !;)","a":"400 L8:23 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_โ€ฆ","r":"c","k":"answer"},{"t":"if (;","q":"PUT :securityRules (if (;)","a":"400 L8:23 Unexpected ';'.","r":"c","k":"answer"},{"t":"request.auth.uid = resource.data.owner","q":"PUT :securityRules (request.auth.uid = resource.data.owner)","a":"400 L9:40 Unexpected '='.","r":"c","k":"answer"},{"t":"request.auth.uid === resource.data.owner","q":"PUT :securityRules (request.auth.uid === resource.data.owner)","a":"400 L9:42 Unexpected '='.","r":"c","k":"answer"},{"t":"signedIn() & true","q":"PUT :securityRules (signedIn() & true)","a":"400 L8:35 Unexpected 'true'.","r":"c","k":"answer"},{"t":"a lone & before the ;","q":"PUT :securityRules (a lone & before the ;)","a":"400 L8:34 token recognition error at: '&;'","r":"c","k":"answer"},{"t":"signedIn() | true","q":"PUT :securityRules (signedIn() | true)","a":"400 L8:35 Unexpected 'true'.","r":"c","k":"answer"},{"t":"a ~ before the condition","q":"PUT :securityRules (a ~ before the condition)","a":"400 L8:22 token recognition error at: '~'","r":"c","k":"answer"},{"t":"allow read: signedIn();","q":"PUT :securityRules (allow read: signedIn();)","a":"400 L8:19 Missing 'if' before conditional expression.","r":"c","k":"answer"},{"t":"allow read: ;","q":"PUT :securityRules (allow read: ;)","a":"400 L8:19 Unexpected ';'.","r":"c","k":"answer"},{"t":"allow read if signedIn();","q":"PUT :securityRules (allow read if signedIn();)","a":"400 L8:18 Missing ':' before 'if' condition.","r":"c","k":"answer"},{"t":"allow get list:","q":"PUT :securityRules (allow get list:)","a":"400 L8:17 Unexpected 'list'.","r":"c","k":"answer"},{"t":"allow: if","q":"PUT :securityRules (allow: if)","a":"400 L8:12 Expected at least one 'operation' after 'allow'. ยท L8:12 Unexpected ':'.","r":"c","k":"answer"},{"t":"== resource.data.;","q":"PUT :securityRules (== resource.data.;)","a":"400 L9:57 Unexpected ';'.","r":"c","k":"answer"},{"t":"an @ in a condition","q":"PUT :securityRules (an @ in a condition)","a":"400 L8:22 Missing conditional expression after 'if'. ยท L8:22 Unexpected '@'.","r":"c","k":"answer"},{"t":"a # comment in a condition","q":"PUT :securityRules (a # comment in a condition)","a":"400 L8:36 Unexpected 'signed'.","r":"c","k":"answer"},{"t":"is text","q":"PUT :securityRules (is text)","a":"400 L8:48 An unsupported type identifier was used with the 'is' operator. Received text. Expected one of bool,bytes,constraint,duration,floโ€ฆ","r":"c","k":"answer"},{"t":"function () {","q":"PUT :securityRules (function () {)","a":"400 L4:14 Missing 'function' id","r":"c","k":"answer"},{"t":"return;","q":"PUT :securityRules (return;)","a":"400 L5:13 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_โ€ฆ","r":"c","k":"answer"},{"t":"function signedIn() {}","q":"PUT :securityRules (function signedIn() {})","a":"400 L4:26 Missing 'function' body","r":"c","k":"answer"},{"t":"let = request.auth;","q":"PUT :securityRules (let = request.auth;)","a":"400 L5:11 Unexpected '='. ยท L5:20 mismatched input '.' expecting '='","r":"c","k":"answer"},{"t":"let auth request.auth;","q":"PUT :securityRules (let auth request.auth;)","a":"400 L5:16 missing '=' at 'request'","r":"c","k":"answer"},{"t":"a let and no return","q":"PUT :securityRules (a let and no return)","a":"400 L6:5 Unexpected '}'. ยท L6:5 mismatched input '}' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+', ';',โ€ฆ","r":"c","k":"answer"},{"t":"servce cloud.firestore","q":"PUT :securityRules (servce cloud.firestore)","a":"400 L2:1 mismatched input 'servce' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"rules verison","q":"PUT :securityRules (rules_verison)","a":"400 L1:1 mismatched input 'rules_verison' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"the source ends after rules version","q":"PUT :securityRules (the source ends after rules_version)","a":"400 L1:21 mismatched input '' expecting {'function', 'import', 'service'}","r":"c","k":"answer"},{"t":"the source ends after service","q":"PUT :securityRules (the source ends after service)","a":"400 L2:8 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after the service name","q":"PUT :securityRules (the source ends after the service name)","a":"400 L2:24 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends inside the service block","q":"PUT :securityRules (the source ends inside the service block)","a":"400 L2:26 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after match","q":"PUT :securityRules (the source ends after match)","a":"400 L3:8 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after a match path","q":"PUT :securityRules (the source ends after a match path)","a":"400 L3:9 Missing 'match' keyword before path. ยท L3:40 Unexpected ''. ยท L3:40 mismatched input '' expecting {'{', '/', PATH_SEGMENโ€ฆ","r":"c","k":"answer"},{"t":"the source ends inside a match block","q":"PUT :securityRules (the source ends inside a match block)","a":"400 L7:11 Missing 'match' keyword before path. ยท L7:26 Unexpected ''. ยท L7:26 mismatched input '' expecting {'{', '/', PATH_SEGMEโ€ฆ","r":"c","k":"answer"},{"t":"the source ends inside a parameter list","q":"PUT :securityRules (the source ends inside a parameter list)","a":"400 L4:23 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends inside a function body","q":"PUT :securityRules (the source ends inside a function body)","a":"400 L4:26 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after return","q":"PUT :securityRules (the source ends after return)","a":"400 L5:13 mismatched input '' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER,โ€ฆ","r":"c","k":"answer"},{"t":"the source ends after allow","q":"PUT :securityRules (the source ends after allow)","a":"400 L9:12 Expected at least one 'operation' after 'allow'. ยท L9:12 Unexpected ''. ยท L9:12 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends after an allow method","q":"PUT :securityRules (the source ends after an allow method)","a":"400 L8:17 Unexpected ''. ยท L8:17 mismatched input '' expecting {':', ',', '}', ';', '/', 'allow', 'function', 'if', 'match', PATHโ€ฆ","r":"c","k":"answer"},{"t":"the source ends after if","q":"PUT :securityRules (the source ends after if)","a":"400 L8:21 Missing conditional expression after 'if'. ยท L8:21 Unexpected ''. ยท L8:21 mismatched input '' expecting {'}', ';', '/',โ€ฆ","r":"c","k":"answer"},{"t":"the source ends inside a condition","q":"PUT :securityRules (the source ends inside a condition)","a":"400 L9:42 mismatched input '' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER,โ€ฆ","r":"c","k":"answer"},{"t":"the source ends after a condition","q":"PUT :securityRules (the source ends after a condition)","a":"400 L8:32 Unexpected ''. ยท L8:32 mismatched input '' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||',โ€ฆ","r":"c","k":"answer"},{"t":"the source ends inside call arguments","q":"PUT :securityRules (the source ends inside call arguments)","a":"400 L8:31 Unexpected ''.","r":"c","k":"answer"},{"t":"the source ends after a complete allow","q":"PUT :securityRules (the source ends after a complete allow)","a":"400 L8:33 Unexpected ''. ยท L8:33 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends after a nested match block","q":"PUT :securityRules (the source ends after a nested match block)","a":"400 L10:6 Unexpected ''. ยท L10:6 mismatched input '' expecting '}'","r":"c","k":"answer"},{"t":"the source ends inside a string","q":"PUT :securityRules (the source ends inside a string)","a":"400 L9:49 Missing a closing ' ยท L9:49 Unexpected ''. ยท L9:49 mismatched input '' expecting {'&&', '.', '==', '>', '>=', '[', '<',โ€ฆ","r":"c","k":"answer"},{"t":"the source ends inside a block comment","q":"PUT :securityRules (the source ends inside a block comment)","a":"400 L13:1 Unexpected '/*'.","r":"c","k":"answer"},{"t":"two allows with no condition","q":"PUT :securityRules (two allows with no condition)","a":"400 L8:22 Missing conditional expression after 'if'. ยท L9:23 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"a missing ; and a missing final }","q":"PUT :securityRules (a missing ; and a missing final })","a":"400 L12:1 Unexpected ''. ยท L12:1 missing '}' at ''","r":"c","k":"answer"},{"t":"allow reads and a missing if","q":"PUT :securityRules (allow reads and a missing if)","a":"400 L9:20 Missing 'if' before conditional expression.","r":"c","k":"answer"},{"t":"a package name as a parameter and a cut condition","q":"PUT :securityRules (a package name as a parameter and a cut condition)","a":"400 L9:42 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_โ€ฆ","r":"c","k":"answer"},{"t":"Windows line endings","q":"PUT :securityRules (Windows line endings)","a":"400 L8:22 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"non-ASCII text before the mistake on its line","q":"PUT :securityRules (non-ASCII text before the mistake on its line)","a":"400 L8:31 mismatched input ';' expecting {'--', '++', '{', '[', '(', '-', '!', '/', 'false', 'null', 'true', PATH_SEGMENT, IDENTIFIER, NUM_โ€ฆ","r":"c","k":"answer"},{"t":"a tab before the mistake","q":"PUT :securityRules (a tab before the mistake)","a":"400 L8:17 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors unexpected-token, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors unexpected-token, unchanged)","a":"400 L5:21 Missing conditional expression after 'if'.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors unclosed-block, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors unclosed-block, unchanged)","a":"400 L3:9 Missing 'match' keyword before path. ยท L4:1 Unexpected ''. ยท L4:1 mismatched input '' expecting {'{', '/', PATH_SEGMENT}","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors recursive-function, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors recursive-function, unchanged)","a":"400 L5:16 Recursive call is not allowed.","r":"c","k":"answer"},{"t":"rules-v2 production-parse-errors invalid-recursive-wildcard, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors invalid-recursive-wildcard, unchanged)","a":"400 L4:22 Invalid glob match expression. Only one glob match is permitted in a match declaration path.","r":"c","k":"answer"},{"t":"a second service block","q":"PUT :securityRules (a second service block)","a":"400 L15:3 The 'match' body must contain at least one declaration.","r":"u"},{"t":"service cloud.firestor","q":"PUT :securityRules (service cloud.firestor)","a":"200 compiled with 6 warnings","r":"u"},{"t":"service with no name","q":"PUT :securityRules (service with no name)","a":"400 L3:9 Unexpected '/databases'. ยท L7:5 Unexpected 'match'.","r":"u"},{"t":"rules_version = '1'","q":"PUT :securityRules (rules_version = '1')","a":"200 compiled with 1 warning","r":"u"},{"t":"no { after the service name","q":"PUT :securityRules (no { after the service name)","a":"400 L3:3 Unexpected 'match'. ยท L7:5 Unexpected 'match'.","r":"u"},{"t":"a stray word first in the service block","q":"PUT :securityRules (a stray word first in the service block)","a":"400 L3:3 Unexpected 'hello'. ยท L8:5 Unexpected 'match'.","r":"u"},{"t":"no { after a match path","q":"PUT :securityRules (no { after a match path)","a":"400 L7:11 Missing 'match' keyword before path. ยท L8:7 Unexpected 'allow'. ยท L8:7 mismatched input 'allow' expecting {'{', '/', PATH_SEGMENTโ€ฆ","r":"u"},{"t":"no { before a function body","q":"PUT :securityRules (no { before a function body)","a":"400 L5:7 Unexpected 'return'. ยท L12:1 Unexpected '}'.","r":"u"},{"t":"function signedIn( {","q":"PUT :securityRules (function signedIn( {)","a":"400 L4:24 Unexpected '{'. ยท L12:1 Unexpected '}'.","r":"u"},{"t":"match items/{item}","q":"PUT :securityRules (match items/{item})","a":"400 L7:11 Unexpected 'items'. ยท L7:16 Missing 'match' keyword before path. ยท L8:7 missing '}' at 'allow' ยท L12:1 Unexpected '}'.","r":"u"},{"t":"match /items/{}","q":"PUT :securityRules (match /items/{})","a":"400 L7:17 Forward slash '/' found where identifier or binding expected. ยท L7:19 The 'match' body must contain at least one declaration. ยท Lโ€ฆ","r":"u"},{"t":"match /items//{item}","q":"PUT :securityRules (match /items//{item})","a":"400 L7:11 Missing 'match' keyword before path. ยท L8:7 Unexpected 'allow'. ยท L8:7 mismatched input 'allow' expecting {'{', '/', PATH_SEGMENTโ€ฆ","r":"u"},{"t":"match /items/$(item)","q":"PUT :securityRules (match /items/$(item))","a":"400 L7:11 Missing 'match' keyword before path. ยท L7:17 Forward slash '/' found where identifier or binding expected. ยท L7:18 Unexpected '$'โ€ฆ","r":"u"},{"t":"match with no path","q":"PUT :securityRules (match with no path)","a":"400 L7:11 Unexpected '{'. ยท L12:1 Unexpected '}'.","r":"u"},{"t":"allow reads:","q":"PUT :securityRules (allow reads:)","a":"200 compiled with 2 warnings","r":"u"},{"t":"function signedIn(a b)","q":"PUT :securityRules (function signedIn(a b))","a":"400 L4:25 Unexpected 'b'. ยท L12:1 Unexpected '}'.","r":"u"},{"t":"a body with no return","q":"PUT :securityRules (a body with no return)","a":"400 L5:7 Unexpected 'request'. ยท L12:1 Unexpected '}'.","r":"u"},{"t":"two returns","q":"PUT :securityRules (two returns)","a":"400 L6:7 mismatched input 'return' expecting '}' ยท L13:1 Unexpected '}'.","r":"u"},{"t":"an if statement in a body","q":"PUT :securityRules (an if statement in a body)","a":"400 L5:7 Unexpected 'if'. ยท L6:7 Unexpected 'return'. ยท L8:5 Unexpected 'match'.","r":"u"},{"t":"a word where return belongs after a let","q":"PUT :securityRules (a word where return belongs after a let)","a":"400 L6:7 Unexpected 'retrun'. ยท L7:5 mismatched input '}' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+',โ€ฆ","r":"u"},{"t":"a let in a match block","q":"PUT :securityRules (a let in a match block)","a":"400 L7:11 Missing 'match' keyword before path. ยท L8:7 Unexpected 'let'. ยท L8:7 mismatched input 'let' expecting {'{', '/', PATH_SEGMENT} ยทโ€ฆ","r":"u"},{"t":"fucntion signedIn()","q":"PUT :securityRules (fucntion signedIn())","a":"400 L3:9 Missing 'match' keyword before path. ยท L4:5 Unexpected 'fucntion'. ยท L4:5 mismatched input 'fucntion' expecting {'{', '/', PATH_SEโ€ฆ","r":"u"},{"t":"retrun request.auth","q":"PUT :securityRules (retrun request.auth)","a":"400 L5:7 Unexpected 'retrun'. ยท L12:1 Unexpected '}'.","r":"u"},{"t":"alow read","q":"PUT :securityRules (alow read)","a":"400 L7:11 Missing 'match' keyword before path. ยท L8:7 Unexpected 'alow'. ยท L8:7 mismatched input 'alow' expecting {'{', '/', PATH_SEGMENT}โ€ฆ","r":"u"},{"t":"alow and an unterminated string","q":"PUT :securityRules (alow and an unterminated string)","a":"400 L7:11 Missing 'match' keyword before path. ยท L8:7 Unexpected 'alow'. ยท L8:7 mismatched input 'alow' expecting {'{', '/', PATH_SEGMENT}โ€ฆ","r":"u"},{"t":"rules-v2 production-parse-errors duplicate-let, unchanged","q":"PUT :securityRules (rules-v2 production-parse-errors duplicate-let, unchanged)","a":"400 L5:34 Unused variable: value. ยท L5:49 The identifier [value] is already bound in the current scope.","r":"u"},{"t":"owner seed","q":"PATCH /v1/projects/{project}/databases/(default)/documents/items/one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"constant","q":"reload rules, read twice, GET :ruleCoverage: allow get: if true;","a":"read 200 ยท no report (constant rules)","r":"c","k":"answer"},{"t":"list and map","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].size() == 2 && {'ok': true}.ok;","a":"read 200 ยท coverage report with 6 expressions","r":"c","k":"answer"},{"t":"empty containers","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [].size() == 0 && {}.size() == 0;","a":"read 200 ยท coverage report with 7 expressions","r":"c","k":"answer"},{"t":"slice","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2, 3][1:2] == [2];","a":"read 200 ยท coverage report with 4 expressions","r":"c","k":"answer"},{"t":"method arguments","q":"reload rules, read twice, GET :ruleCoverage: allow get: if 'hello'.matches('h.*');","a":"read 200 ยท coverage report with 1 expression","r":"c","k":"answer"},{"t":"grouped literal","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ('hello').size() == 5;","a":"read 200 ยท coverage report with 2 expressions","r":"c","k":"answer"},{"t":"constant function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept();","a":"read 200 ยท coverage report with 1 expression","r":"c","k":"answer"},{"t":"duration","q":"reload rules, read twice, GET :ruleCoverage: allow get: if duration.value(1, 's') == duration.value(1000, 'ms');","a":"read 200 ยท coverage report with 3 expressions","r":"c","k":"answer"},{"t":"set","q":"reload rules, read twice, GET :ruleCoverage: allow get: if [1, 2].toSet().hasAll([1]);","a":"read 200 ยท coverage report with 4 expressions","r":"c","k":"answer"},{"t":"map diff","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'x': 1}.diff({'x': 2}).changedKeys().hasOnly(['x']);","a":"read 200 ยท coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff statuses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if {'same': 1, 'removed': 1, 'changed': 1}.diff({'same': 1, 'added': 1, 'changed':โ€ฆ","a":"read 200 ยท coverage report with 6 expressions","r":"c","k":"answer"},{"t":"map diff direction size","q":"reload rules, read twice, GET :ruleCoverage: allow get: if check();","a":"read 200 ยท coverage report with 19 expressions","r":"c","k":"answer"},{"t":"bytes","q":"reload rules, read twice, GET :ruleCoverage: allow get: if hashing.sha256('hello'.toUtf8()).size() == 32;","a":"read 200 ยท coverage report with 4 expressions","r":"c","k":"answer"},{"t":"timestamp","q":"reload rules, read twice, GET :ruleCoverage: allow get: if timestamp.date(2020, 1, 2).year() == 2020;","a":"read 200 ยท coverage report with 3 expressions","r":"c","k":"answer"},{"t":"request","q":"reload rules, read twice, GET :ruleCoverage: allow get: if request.auth == null && request.method == \"get\";","a":"read 200 ยท coverage report with 7 expressions","r":"c","k":"answer"},{"t":"invalid reload","q":"PUT /emulator/v1/projects/{project}:securityRules (source \"broken\")","a":"400 INVALID_ARGUMENT: Error compiling rules: L1:1 mismatched input 'broken' expecting {'function', 'import', 'service', 'rules_version'}","r":"c","k":"answer"},{"t":"coverage after the rejected reload","q":"GET :ruleCoverage after the rejected reload","a":"coverage of the last valid rules, 7 expressions","r":"c","k":"answer"},{"t":"namespace name as a function parameter","q":"PUT :securityRules with function accept(duration)","a":"400 INVALID_ARGUMENT: Error compiling rules: L4:19 duration is a package and cannot be used as variable name.","r":"c","k":"answer"},{"t":"short circuit","q":"reload rules, read twice, GET :ruleCoverage: allow get: if false && resource.data.missing;","a":"read 403 ยท coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"field equality","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible == true;","a":"read 200 ยท coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"missing field","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.missing == true;","a":"read 403 ยท coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations); an error value's cause text is Firenook's own message (DESIGN.md, Live bounded coverage observations)"},{"t":"function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 ยท coverage report with 8 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"unicode crlf","q":"reload rules, read twice, GET :ruleCoverage: allow get: if 'ไธญๆ–‡๐Ÿš€' == 'ไธญๆ–‡๐Ÿš€' && resource.data.visible;","a":"read 200 ยท coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"parentheses","q":"reload rules, read twice, GET :ruleCoverage: allow get: if (resource.data.visible == true) || false;","a":"read 200 ยท coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"unary","q":"reload rules, read twice, GET :ruleCoverage: allow get: if !resource.data.visible;","a":"read 403 ยท coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"index","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data['visible'];","a":"read 200 ยท coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"simple function","q":"reload rules, read twice, GET :ruleCoverage: allow get: if accept(resource.data.visible);","a":"read 200 ยท coverage report with 5 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"path interpolation","q":"reload rules, read twice, GET :ruleCoverage: allow get: if exists(/databases/$(database)/documents/items/one);","a":"read 200 ยท coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"type check","q":"reload rules, read twice, GET :ruleCoverage: allow get: if resource.data.visible is bool;","a":"read 200 ยท coverage report with 4 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"nested grouping","q":"reload rules, read twice, GET :ruleCoverage: allow get: if ((resource.data.visible));","a":"read 200 ยท coverage report with 3 expressions","r":"d","k":"answer","w":"coverage counts Firenook's one evaluation of each read, with the document; the official emulator's lazy planner first evaluates without it (bare undefined values and doubled counts) and gives short-circuited expressions empty values (DESIGN.md, Live bounded coverage observations)"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"c","k":"answer"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"c","k":"answer"},{"t":"get mask","q":"GET /values/typed?mask.fieldPaths=yes&mask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"c","k":"answer"},{"t":"batch get mask","q":"POST :batchGet","a":"200 [1 item] ยท 1 evaluation message","r":"c","k":"answer"},{"t":"begin read transaction","q":"POST :beginTransaction","a":"200 {transaction} ยท 0 evaluation messages","r":"c","k":"answer"},{"t":"transaction get","q":"POST :batchGet","a":"200 [1 item] ยท 1 evaluation message","r":"c","k":"answer"},{"t":"rollback","q":"POST :rollback","a":"200 {} ยท 0 evaluation messages","r":"c","k":"answer"},{"t":"begin write transaction","q":"POST :beginTransaction","a":"200 {transaction} ยท 0 evaluation messages","r":"c","k":"answer"},{"t":"write transaction get","q":"POST :batchGet","a":"200 [1 item] ยท 1 evaluation message","r":"c","k":"answer"},{"t":"write rollback","q":"POST :rollback","a":"200 {} ยท 0 evaluation messages","r":"c","k":"answer"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} ยท 1 evaluation message","r":"c","k":"answer"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"c","k":"answer"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"deny list /databases/(default)/documents/**/values/*","r":"c","k":"answer"},{"t":"evaluation request 8","q":"rules evaluation event 8","a":"deny list /databases/(default)/documents/parents/p/values/*","r":"c","k":"answer"},{"t":"evaluation request 9","q":"rules evaluation event 9","a":"deny list /databases/(default)/documents/parents/p/**/values/*","r":"c","k":"answer"},{"t":"evaluation request 25","q":"rules evaluation event 25","a":"allow get /databases/(default)/documents/values/missing","r":"c","k":"answer"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] ยท 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"query unbounded","q":"POST :runQuery","a":"200 [1 item] ยท 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"query group","q":"POST :runQuery","a":"403 PERMISSION_DENIED: No matching allow statements ยท 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"query nested","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements ยท 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"query nested group","q":"POST /parents/p:runQuery","a":"403 PERMISSION_DENIED: No matching allow statements ยท 1 evaluation message","r":"d","k":"error","w":"a refusal's message is production's `Missing or insufficient permissions.` followed by the official emulator's text on the next line (COMPATIBILITY.md)"},{"t":"patch mask","q":"PATCH /values/typed?updateMask.fieldPaths=text","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"patch quoted mask","q":"PATCH /values/typed?updateMask.fieldPaths=%60a.b%60&updateMask.fieldPaths=nested.active","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit transform","q":"POST :commit","a":"200 {writeResults, commitTime} ยท 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit replacement transform","q":"POST :commit","a":"200 {writeResults, commitTime} ยท 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"commit empty mask","q":"POST :commit","a":"200 {writeResults, commitTime} ยท 2 evaluation messages","r":"d","k":"answer","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. ยท 1 evaluation message","r":"d","k":"error","w":"the REST error message is Firenook's own words for the same status and code (COMPATIBILITY.md: most error messages are Firenook's own words)"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 10","q":"rules evaluation event 10","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 11","q":"rules evaluation event 11","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 12","q":"rules evaluation event 12","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 13","q":"rules evaluation event 13","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 14","q":"rules evaluation event 14","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 15","q":"rules evaluation event 15","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 16","q":"rules evaluation event 16","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 17","q":"rules evaluation event 17","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 18","q":"rules evaluation event 18","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 19","q":"rules evaluation event 19","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 20","q":"rules evaluation event 20","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 21","q":"rules evaluation event 21","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 22","q":"rules evaluation event 22","a":"allow create /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 23","q":"rules evaluation event 23","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context); a write's granular outcomes are its own evaluation's; the official emulator's update event also carries its preliminary check's outcome (DESIGN.md, Allow-decision instrumentation: no duplicated entries imitating the jar's shared mutable history)"},{"t":"evaluation request 24","q":"rules evaluation event 24","a":"allow delete /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"create typed","q":"PATCH /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 2 evaluation messages","r":"c","k":"status"},{"t":"get typed","q":"GET /values/typed","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"c","k":"answer"},{"t":"get authenticated","q":"GET /values/typed (signed in)","a":"200 {name, fields, createTime, updateTime} ยท 1 evaluation message","r":"c","k":"answer"},{"t":"delete","q":"DELETE /values/typed","a":"200 {} ยท 1 evaluation message","r":"c","k":"answer"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/values/typed","r":"c","k":"answer"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"allow list /databases/(default)/documents/values/*","r":"c","k":"answer"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"allow get /databases/(default)/documents/values/missing","r":"c","k":"answer"},{"t":"query","q":"POST :runQuery","a":"200 [1 item] ยท 1 evaluation message","r":"d","k":"answer","w":"a runQuery stream ends without \"done\": true, as production's does (COMPATIBILITY.md)"},{"t":"get missing","q":"GET /values/missing","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/values/missing) not found. ยท 1 evaluation message","r":"d","k":"error","w":"the REST error message is Firenook's own words for the same status and code (COMPATIBILITY.md: most error messages are Firenook's own words)"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/values/typed","r":"d","k":"behaviour","w":"Firenook evaluates a write once, as the create or update it is, where the official emulator also sends a preliminary create or update check (DESIGN.md: the producer evaluates once; fixture README: not permission to manufacture additional evaluations)"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"allow get /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow delete /databases/(default)/documents/values/typed","r":"d","k":"answer","w":"Firenook reports the document the evaluation had (`resource`, `request.resource`) where the official emulator's lazy context reports {\"undefined\":{}} for a document it did not load (DESIGN.md, Opt-in evaluation producer and typed context)"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as absent","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as signed","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as absent","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as absent","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-lowercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/deny/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/anon/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as owner-uppercase","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-lowercase-scheme","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-at-zero","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as issued-tomorrow","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-project","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as other-audience","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as sub-only","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as no-alg","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as signed","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as padded-base64","a":"NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/unlisted/documents/alice/x) not found.","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as two-segments","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as array-claims","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as not-a-jwt","a":"INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L8, Null value error. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L9, Null value error. for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-lowercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as owner-uppercase","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-lowercase-scheme","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-at-zero","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as issued-tomorrow","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-project","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as other-audience","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as sub-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as user-id-only","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as user-id-only","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as empty-claims","a":"403 PERMISSION_DENIED: Property sub is undefined on object. for 'get' @ L8, Property sub is undefined on object. for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as empty-claims","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/uid-null/x) not found.","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L8","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as numeric-sub","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as no-alg","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as signed","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L9","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L7","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-sub/x) not found.","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as padded-base64","a":"404 NOT_FOUND: Document (projects/{project}/databases/(default)/documents/token-keys/x) not found.","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as two-segments","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as array-claims","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"uid-null/x","q":"GET uid-null/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-sub/x","q":"GET token-sub/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"token-keys/x","q":"GET token-keys/x as not-a-jwt","a":"400 INVALID_ARGUMENT: invalid jwt","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, absent)","q":"ListCollectionIds as absent (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, absent)","q":"POST :listCollectionIds as absent (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, user)","q":"ListCollectionIds as user (with rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (rules, user)","q":"POST :listCollectionIds as user (with rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (rules, owner)","q":"ListCollectionIds as owner (with rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (rules, owner)","q":"POST :listCollectionIds as owner (with rules)","a":"200","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, absent)","q":"ListCollectionIds as absent (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, absent)","q":"POST :listCollectionIds as absent (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, user)","q":"ListCollectionIds as user (no rules)","a":"PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"error"},{"t":"listCollectionIds over REST (open, user)","q":"POST :listCollectionIds as user (no rules)","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"ListCollectionIds over gRPC (open, owner)","q":"ListCollectionIds as owner (no rules)","a":"OK","r":"c","k":"status"},{"t":"listCollectionIds over REST (open, owner)","q":"POST :listCollectionIds as owner (no rules)","a":"200","r":"c","k":"status"},{"t":"pipeline as owner","q":"Enterprise ExecutePipeline as owner","a":"OK","r":"c","k":"status"},{"t":"query as owner","q":"Enterprise RunQuery as owner","a":"OK","r":"c","k":"status"},{"t":"json","q":"PUT /emulator/v1/projects/โ€ฆ:securityRules (json body)","a":"200 ยท the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"text plain","q":"PUT /emulator/v1/projects/โ€ฆ:securityRules (text-plain body)","a":"200 ยท the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"no content type","q":"PUT /emulator/v1/projects/โ€ฆ:securityRules (no-content-type body)","a":"200 ยท the new rules then govern a read (403)","r":"c","k":"answer"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over gRPC","q":"GetDocument deny/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over gRPC","q":"GetDocument anon/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over gRPC","q":"GetDocument alice/x on (default) as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on (default) over REST","q":"GET /v1/โ€ฆ/databases/(default)/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as absent","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as absent","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as absent","a":"PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as absent","a":"403 PERMISSION_DENIED: Null value error. for 'get' @ L6, Null value error. for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as user","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-lowercase-scheme","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as user-lowercase-scheme","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-at-zero","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as issued-at-zero","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as issued-tomorrow","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as issued-tomorrow","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-project","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as other-project","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as other-audience","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as other-audience","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as sub-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as sub-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as user-id-only","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as user-id-only","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as empty-claims","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as empty-claims","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as numeric-sub","a":"PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as numeric-sub","a":"403 PERMISSION_DENIED: false for 'get' @ L6","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as no-alg","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as no-alg","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as signed","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as signed","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as padded-base64","a":"PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as padded-base64","a":"403 PERMISSION_DENIED: false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as basic","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over gRPC","q":"GetDocument deny/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"deny/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/deny/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over gRPC","q":"GetDocument anon/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"anon/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/anon/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over gRPC","q":"GetDocument alice/x on unlisted as firebase-owner","a":"UNKNOWN","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"alice/x on unlisted over REST","q":"GET /v1/โ€ฆ/databases/unlisted/documents/alice/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as basic","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"uid-null/x","q":"GET uid-null/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-sub/x","q":"GET token-sub/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"token-keys/x","q":"GET token-keys/x as firebase-owner","a":"500 UNKNOWN: {\"error\":{\"code\":500,\"status\":\"UNKNOWN\"}}","r":"d","k":"status","w":"a credential that is not a Bearer token is refused as INVALID_ARGUMENT, where the official emulator answers an empty UNKNOWN"},{"t":"twoAllows over gRPC","q":"read refused by rules (twoAllows)","a":"PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"twoAllows over REST","q":"read refused by rules (twoAllows)","a":"403 PERMISSION_DENIED: false for 'get' @ L11, false for 'get' @ L12","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over gRPC","q":"read refused by rules (noMatchingAllow)","a":"PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"noMatchingAllow over REST","q":"read refused by rules (noMatchingAllow)","a":"403 PERMISSION_DENIED: No matching allow statements","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"create over REST","q":"create refused by rules (create)","a":"403 PERMISSION_DENIED: false for 'create' @ L14","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"PartitionQuery over gRPC (rules, absent)","q":"PartitionQuery as absent (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, user)","q":"PartitionQuery as user (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (rules, owner)","q":"PartitionQuery as owner (with rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, absent)","q":"PartitionQuery as absent (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, user)","q":"PartitionQuery as user (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"PartitionQuery over gRPC (open, owner)","q":"PartitionQuery as owner (no rules)","a":"UNIMPLEMENTED: Method google.firestore.v1.Firestore/PartitionQuery is unimplemented","r":"d","k":"status","w":"the official emulator does not implement PartitionQuery; Firenook answers it for the owner, as the Admin SDKs' getPartitions() asks it"},{"t":"pipeline as user","q":"Enterprise ExecutePipeline as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"query as user","q":"Enterprise RunQuery as user","a":"PERMISSION_DENIED: false for 'list' @ L4","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\"), then names the rule lines the official emulator names"},{"t":"duration as a parameter","q":"install rules using \"duration\" as a parameter: function accept(duration) { return duration; }","a":"400 Error compiling rules: L4:18 duration is a package and cannot be used as variable name. L4:37 duration is a package and cannot be usedโ€ฆ","r":"c","k":"verdict"},{"t":"duration as a binding","q":"install rules using \"duration\" as a binding: function accept() { let duration = true; return duration; }","a":"400 Error compiling rules: L4:26 duration is a package and cannot be used as variable name. L4:50 duration is a package and cannot be usedโ€ฆ","r":"c","k":"verdict"},{"t":"duration as a function","q":"install rules using \"duration\" as a function: function duration() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"duration as a wildcard","q":"install rules using \"duration\" as a wildcard: allow get: if duration == 'one';","a":"400 Error compiling rules: L4:16 duration is a package and cannot be used as variable name. L4:42 duration is a package and cannot be usedโ€ฆ","r":"c","k":"verdict"},{"t":"duration as a field","q":"install rules using \"duration\" as a field: allow get: if {'duration': true}.duration;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a parameter","q":"install rules using \"hashing\" as a parameter: function accept(hashing) { return hashing; }","a":"400 Error compiling rules: L4:18 hashing is a package and cannot be used as variable name. L4:36 hashing is a package and cannot be used asโ€ฆ","r":"c","k":"verdict"},{"t":"hashing as a binding","q":"install rules using \"hashing\" as a binding: function accept() { let hashing = true; return hashing; }","a":"400 Error compiling rules: L4:26 hashing is a package and cannot be used as variable name. L4:49 hashing is a package and cannot be used asโ€ฆ","r":"c","k":"verdict"},{"t":"hashing as a function","q":"install rules using \"hashing\" as a function: function hashing() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"hashing as a wildcard","q":"install rules using \"hashing\" as a wildcard: allow get: if hashing == 'one';","a":"400 Error compiling rules: L4:16 hashing is a package and cannot be used as variable name. L4:41 hashing is a package and cannot be used asโ€ฆ","r":"c","k":"verdict"},{"t":"hashing as a field","q":"install rules using \"hashing\" as a field: allow get: if {'hashing': true}.hashing;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a parameter","q":"install rules using \"latlng\" as a parameter: function accept(latlng) { return latlng; }","a":"400 Error compiling rules: L4:18 latlng is a package and cannot be used as variable name. L4:35 latlng is a package and cannot be used as vโ€ฆ","r":"c","k":"verdict"},{"t":"latlng as a binding","q":"install rules using \"latlng\" as a binding: function accept() { let latlng = true; return latlng; }","a":"400 Error compiling rules: L4:26 latlng is a package and cannot be used as variable name. L4:48 latlng is a package and cannot be used as vโ€ฆ","r":"c","k":"verdict"},{"t":"latlng as a function","q":"install rules using \"latlng\" as a function: function latlng() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"latlng as a wildcard","q":"install rules using \"latlng\" as a wildcard: allow get: if latlng == 'one';","a":"400 Error compiling rules: L4:16 latlng is a package and cannot be used as variable name. L4:40 latlng is a package and cannot be used as vโ€ฆ","r":"c","k":"verdict"},{"t":"latlng as a field","q":"install rules using \"latlng\" as a field: allow get: if {'latlng': true}.latlng;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a parameter","q":"install rules using \"math\" as a parameter: function accept(math) { return math; }","a":"400 Error compiling rules: L4:18 math is a package and cannot be used as variable name. L4:33 math is a package and cannot be used as variaโ€ฆ","r":"c","k":"verdict"},{"t":"math as a binding","q":"install rules using \"math\" as a binding: function accept() { let math = true; return math; }","a":"400 Error compiling rules: L4:26 math is a package and cannot be used as variable name. L4:46 math is a package and cannot be used as variaโ€ฆ","r":"c","k":"verdict"},{"t":"math as a function","q":"install rules using \"math\" as a function: function math() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"math as a wildcard","q":"install rules using \"math\" as a wildcard: allow get: if math == 'one';","a":"400 Error compiling rules: L4:16 math is a package and cannot be used as variable name. L4:38 math is a package and cannot be used as variaโ€ฆ","r":"c","k":"verdict"},{"t":"math as a field","q":"install rules using \"math\" as a field: allow get: if {'math': true}.math;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a parameter","q":"install rules using \"timestamp\" as a parameter: function accept(timestamp) { return timestamp; }","a":"400 Error compiling rules: L4:18 timestamp is a package and cannot be used as variable name. L4:38 timestamp is a package and cannot be useโ€ฆ","r":"c","k":"verdict"},{"t":"timestamp as a binding","q":"install rules using \"timestamp\" as a binding: function accept() { let timestamp = true; return timestamp; }","a":"400 Error compiling rules: L4:26 timestamp is a package and cannot be used as variable name. L4:51 timestamp is a package and cannot be useโ€ฆ","r":"c","k":"verdict"},{"t":"timestamp as a function","q":"install rules using \"timestamp\" as a function: function timestamp() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"timestamp as a wildcard","q":"install rules using \"timestamp\" as a wildcard: allow get: if timestamp == 'one';","a":"400 Error compiling rules: L4:16 timestamp is a package and cannot be used as variable name. L4:43 timestamp is a package and cannot be useโ€ฆ","r":"c","k":"verdict"},{"t":"timestamp as a field","q":"install rules using \"timestamp\" as a field: allow get: if {'timestamp': true}.timestamp;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a parameter","q":"install rules using \"request\" as a parameter: function accept(request) { return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a binding","q":"install rules using \"request\" as a binding: function accept() { let request = true; return request; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a function","q":"install rules using \"request\" as a function: function request() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a wildcard","q":"install rules using \"request\" as a wildcard: allow get: if request == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"request as a field","q":"install rules using \"request\" as a field: allow get: if {'request': true}.request;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a parameter","q":"install rules using \"resource\" as a parameter: function accept(resource) { return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a binding","q":"install rules using \"resource\" as a binding: function accept() { let resource = true; return resource; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a function","q":"install rules using \"resource\" as a function: function resource() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a wildcard","q":"install rules using \"resource\" as a wildcard: allow get: if resource == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"resource as a field","q":"install rules using \"resource\" as a field: allow get: if {'resource': true}.resource;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a parameter","q":"install rules using \"value\" as a parameter: function accept(value) { return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a binding","q":"install rules using \"value\" as a binding: function accept() { let value = true; return value; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a function","q":"install rules using \"value\" as a function: function value() { return true; }","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a wildcard","q":"install rules using \"value\" as a wildcard: allow get: if value == 'one';","a":"200 rules installed","r":"c","k":"verdict"},{"t":"value as a field","q":"install rules using \"value\" as a field: allow get: if {'value': true}.value;","a":"200 rules installed","r":"c","k":"verdict"},{"t":"is a path","q":"get c/x: path('a/b') is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"is not a string","q":"get c/x: path('a/b') is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the same path","q":"get c/x: path('a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"differs from another path","q":"get c/x: path('a/b') != path('a/c')","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal with its slash","q":"get c/x: path('/a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"equals a literal without its slash","q":"get c/x: path('a/b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"not equal to a string","q":"get c/x: path('a/b') == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the text","q":"get c/x: string(path('a/b')) == 'a/b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"string of it keeps the slash","q":"get c/x: string(path('/a/b')) == '/a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment without a slash","q":"get c/x: path('a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"first segment with a slash","q":"get c/x: path('/a/b')[0] == 'a'","a":"200 (expression held)","r":"c","k":"status"},{"t":"last segment","q":"get c/x: path('/a/b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with it","q":"get c/x: exists(path('/databases/' + database + '/documents/c/x'))","a":"200 (expression held)","r":"c","k":"status"},{"t":"get with it","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).data.v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"exists with a string is an error","q":"get c/x: exists('/databases/' + database + '/documents/c/x')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"exists for a missing document","q":"get c/x: exists(path('/databases/' + database + '/documents/c/missing'))","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"equals the document name","q":"get c/x: resource.__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an integer is an error","q":"get c/x: path(1) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a null is an error","q":"get c/x: path(null) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"no argument is an error","q":"get c/x: path() is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two arguments is an error","q":"get c/x: path('a', 'b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"empty text","q":"get c/x: path('') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a doubled slash","q":"get c/x: path('a//b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash","q":"get c/x: path('a/b/') == path('a/b')","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a trailing slash alone","q":"get c/x: path('a/b/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the root alone","q":"get c/x: path('/') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"two leading slashes","q":"get c/x: path('//a') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in a segment","q":"get c/x: path('a b/c') == /a%20b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a space is kept","q":"get c/x: path('a b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a single segment","q":"get c/x: path('a') == /a","a":"200 (expression held)","r":"c","k":"status"},{"t":"an odd number of segments reads too","q":"get c/x: path('/databases/' + database + '/documents/c')[4] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a leading slash is kept","q":"get c/x: path('/a/b') == path('a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolated literal","q":"get c/x: /a/$('b') == path('/a/b')","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string in a literal","q":"get c/x: /a/$('b') == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a string function","q":"get c/x: /a/$(string(1)) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an index","q":"get c/x: /a/$(['b'][0]) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a map key","q":"get c/x: /a/$({'k': 'b'}['k']) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal","q":"get c/x: /databases/$(database)/documents/c/x == resource.__name__","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against a literal reversed","q":"get c/x: resource.__name__ == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name against the request path","q":"get c/x: resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name is a path","q":"get c/x: resource.__name__ is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name as a string","q":"get c/x: string(resource.__name__) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name with a project","q":"get c/x: string(resource.__name__) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name first segment databases","q":"get c/x: resource.__name__[0] == 'databases'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name first segment projects","q":"get c/x: resource.__name__[0] == 'projects'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"the name last segment","q":"get c/x: resource.__name__[4] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path as a string","q":"get c/x: string(request.path) == '/databases/' + database + '/documents/c/x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the request path with a project","q":"get c/x: string(request.path) == '/projects/{project}/databases/' + database + '/documents/c/x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape is read in a literal","q":"get c/x: /a%20b/c[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape is kept as text","q":"get c/x: /a%20b/c[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape in string of a literal","q":"get c/x: string(/a%20b/c) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a space in string of a literal","q":"get c/x: string(/a%20b/c) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a percent escape through path","q":"get c/x: path('a%20b/c')[0] == 'a%20b'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a percent escape through path is read","q":"get c/x: path('a%20b/c')[0] == 'a b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path","q":"get c/x: string(path('a b/c')) == '/a b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a spaced path encoded","q":"get c/x: string(path('a b/c')) == '/a%20b/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape in a literal","q":"get c/x: /a%2Fb/c[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index","q":"get c/x: resource['__name__'] == /databases/$(database)/documents/c/x","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape read","q":"get c/x: string(/a%2Fb/c) == '/a/b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"string of a slash escape kept","q":"get c/x: string(/a%2Fb/c) == '/a%2Fb/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape equals two segments","q":"get c/x: /a%2Fb/c == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a slash escape through path","q":"get c/x: path('a%2Fb/c')[0] == 'a/b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash one segment","q":"get c/x: /a/$('b/c')[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated slash two segments","q":"get c/x: /a/$('b/c')[2] == 'c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated slash equals","q":"get c/x: /a/$('b/c') == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolated escape kept","q":"get c/x: /a/$('b%20c')[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolated escape read","q":"get c/x: /a/$('b%20c')[1] == 'b c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape through path","q":"get c/x: path('a%zz') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape kept through path","q":"get c/x: path('a%zz')[0] == 'a%zz'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"a bad escape in a literal","q":"get c/x: /a%zz/c is path","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"a literal right after if","q":"get c/x: /a/b is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a dot in a literal","q":"get c/x: /a/b.c[1] == 'b.c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"an interpolation then index","q":"get c/x: /a/$('b')[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal indexed","q":"get c/x: /a/b[1] == 'b'","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal range","q":"get c/x: /a/b/c[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a path range","q":"get c/x: path('/a/b/c')[1:3] == /b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind through path","q":"get c/x: path('/a/{x}/c').bind({'x': 'b'}) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind on a literal","q":"get c/x: /a/{x}/c.bind({'x': 'b'}) == /a/b/c","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"bind an integer","q":"get c/x: path('/a/{x}/c').bind({'x': 1}) == /a/1/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a missing key","q":"get c/x: path('/a/{x}/c').bind({'y': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a missing key keeps it","q":"get c/x: string(path('/a/{x}/c').bind({'y': 'b'})) == '/a/{x}/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind an extra key","q":"get c/x: path('/a/{x}/c').bind({'x': 'b', 'y': 'd'}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment","q":"get c/x: path('/a/p{x}q/c').bind({'x': 'b'}) == /a/pbq/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind part of a segment kept","q":"get c/x: string(path('/a/p{x}q/c').bind({'x': 'b'})) == '/a/p{x}q/c'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind two keys","q":"get c/x: path('/{x}/{y}').bind({'x': 'a', 'y': 'b'}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a slash value","q":"get c/x: path('/a/{x}').bind({'x': 'b/c'})[1] == 'b/c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a path value","q":"get c/x: path('/a/{x}').bind({'x': path('b/c')}) == /a/b/c","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind nothing","q":"get c/x: path('/a/b').bind({}) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a non map","q":"get c/x: path('/a/{x}').bind('b') is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind on the request path","q":"get c/x: request.path.bind({}) == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"a size of a path","q":"get c/x: path('/a/b').size() == 2","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a path","q":"get c/x: /a/$(path('b/c')) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a path segment","q":"get c/x: /a/$(path('b/c'))[2] == 'c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a literal","q":"get c/x: /a/$(/b/c) == /a/b/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating an integer","q":"get c/x: /a/$(1) == /a/1","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool is an error","q":"get c/x: /a/$(true) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating the request path","q":"get c/x: /a/$(request.path)[1] == request.path[0]","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating inside a segment","q":"get c/x: /a/p$('b')q == /a/pbq","a":"rules refused (400)","r":"c","k":"verdict"},{"t":"interpolating an empty string","q":"get c/x: /a/$('')/c is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a bool reads as text","q":"get c/x: /a/$(true)[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float","q":"get c/x: /a/$(1.5) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a float reads as text","q":"get c/x: /a/$(1.5)[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a null","q":"get c/x: /a/$(null) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"interpolating a list","q":"get c/x: /a/$([1]) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"interpolating a map","q":"get c/x: /a/$({'k': 1}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a bool","q":"get c/x: path('/a/{x}').bind({'x': true})[1] == 'true'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a float","q":"get c/x: path('/a/{x}').bind({'x': 1.5})[1] == '1.5'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a null","q":"get c/x: path('/a/{x}').bind({'x': null}) is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind a list","q":"get c/x: path('/a/{x}').bind({'x': [1]}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind a recursive template","q":"get c/x: path('/a/{x=**}').bind({'x': 'b'}) is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"bind keeps spaces","q":"get c/x: path('/a/{x}').bind({'x': 'b c'})[1] == 'b c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"bind does not read an escape","q":"get c/x: path('/a/{x}').bind({'x': 'b%20c'})[1] == 'b%20c'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name by index is a path","q":"get c/x: resource['__name__'] is path","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id by index","q":"get c/x: resource['id'] == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the data by index","q":"get c/x: resource['data'].v == 1","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id","q":"get c/x: resource.id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id is a string","q":"get c/x: resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).id == 'x'","a":"200 (expression held)","r":"c","k":"status"},{"t":"the name of a get","q":"get c/x: get(path('/databases/' + database + '/documents/c/x')).__name__ == path('/databases/' + database + '/documents/c/x')","a":"200 (expression held)","r":"c","k":"status"},{"t":"the id against a wildcard","q":"get c/x: resource.id == id","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in parentheses","q":"get c/x: (/a/b) == /a/b","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal negated equal","q":"get c/x: /a/b != /a/c","a":"200 (expression held)","r":"c","k":"status"},{"t":"a literal in a list","q":"get c/x: /a/b in [/a/b]","a":"200 (expression held)","r":"c","k":"status"},{"t":"list the id","q":"list c: resource.id == 'x'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id differs","q":"list c: resource.id != 'nope'","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id is a string","q":"list c: resource.id is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name is a path","q":"list c: resource.__name__ is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name equals","q":"list c: resource.__name__ == /databases/$(database)/documents/c/x","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the name by index","q":"list c: resource['__name__'] is path","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"list the id by index","q":"list c: resource['id'] is string","a":"403 (expression false or an error)","r":"c","k":"status"},{"t":"create the id","q":"create c/new: request.resource.id == 'new'","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the id is a string","q":"create c/new: request.resource.id is string","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name","q":"create c/new: request.resource.__name__ == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name by index","q":"create c/new: request.resource['__name__'] == /databases/$(database)/documents/c/new","a":"200 (expression held)","r":"c","k":"status"},{"t":"create the name against the request path","q":"create c/new: request.resource.__name__ == request.path","a":"200 (expression held)","r":"c","k":"status"},{"t":"member get room","q":"GET documents/rooms/r1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"anonymous get room","q":"GET documents/rooms/r1 signed out","a":"403 PERMISSION_DENIED: false for 'get' @ L26","r":"c","k":"status"},{"t":"lead create room","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"member create room","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"anonymous create room","q":"POST documents:commit signed out","a":"403 PERMISSION_DENIED: false for 'create' @ L29, false for 'update' @ L39","r":"c","k":"status"},{"t":"create room unknown field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"create room missing field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ L29","r":"c","k":"status"},{"t":"create room title not string","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"create room title too long","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"create room visibility not listed","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L29:24 for 'create' @ L29, evaluation error at L39:24 for 'update' @ L39, false for 'create' @ Lโ€ฆ","r":"c","k":"status"},{"t":"update room allowed field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"update room locked field","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: evaluation error at L39:24 for 'update' @ L39, false for 'update' @ L39","r":"c","k":"status"},{"t":"lead delete room","q":"POST documents:commit as u-lead","a":"403 PERMISSION_DENIED: false for 'delete' @ L43","r":"c","k":"status"},{"t":"outsider get entry","q":"GET documents/rooms/r1/entries/e1 as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L52:23 for 'get' @ L52, false for 'get' @ L52","r":"c","k":"status"},{"t":"member get entry","q":"GET documents/rooms/r1/entries/e1 as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"member list foreign members","q":"POST documents/rooms/r2:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L47:24 for 'list' @ L47, false for 'list' @ L47","r":"c","k":"status"},{"t":"outsider query entries with field","q":"POST documents/rooms/r1:runQuery as u-outsider","a":"403 PERMISSION_DENIED: evaluation error at L55:24 for 'list' @ L55, false for 'list' @ L55","r":"c","k":"status"},{"t":"create entry without optional field","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create entry over limit","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"create entry not integer","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L58, evaluation error at L63:26 for 'update' @ L63, false for 'create' @ L58","r":"c","k":"status"},{"t":"update entry in open room","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create room with null field","q":"POST documents:commit as u-lead","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"anonymous query missing document id","q":"POST documents:runQuery signed out","a":"403 PERMISSION_DENIED: false for 'list' @ L27","r":"c","k":"status"},{"t":"member query missing document id","q":"POST documents:runQuery as u-member","a":"403 PERMISSION_DENIED: evaluation error at L27:22 for 'list' @ L27","r":"c","k":"status"},{"t":"get matching document id","q":"GET documents/marks/yellow as u-member","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get non matching document id","q":"GET documents/marks/YELLOW_1 as u-member","a":"403 PERMISSION_DENIED: false for 'get' @ L71","r":"c","k":"status"},{"t":"create mark both fields","q":"POST documents:commit as u-member","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"create mark wrong type","q":"POST documents:commit as u-member","a":"403 PERMISSION_DENIED: false for 'create' @ L73","r":"c","k":"status"},{"t":"member query entries with field","q":"POST documents/rooms/r1:runQuery as u-member","a":"200 [1 item]","r":"d","k":"answer","w":"Firenook ends a runQuery stream without \"done\": true, as production does"},{"t":"probe/access 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/access 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/access-11","a":"403 PERMISSION_DENIED: evaluation error at L17:21 for 'get' @ L17, Service call error. Function: [get], Argument: [path_value { segments {โ€ฆ","r":"c","k":"verdict"},{"t":"probe/cached 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/cached-11","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 10","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-10","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"probe/exists 11","q":"GET /v1/projects/{project}/databases/(default)/documents/probe/exists-11","a":"403 PERMISSION_DENIED: evaluation error at L55:21 for 'get' @ L55, Service call error. Function: [exists], Argument: [path_value { segmentsโ€ฆ","r":"c","k":"verdict"},{"t":"batch 20 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"batch 21 distinct access calls","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L68:32 for 'create' @ L68, evaluation error at L68:32 for 'update' @ L68, evaluation error at L6โ€ฆ","r":"c","k":"verdict"},{"t":"get after sees pending write","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after denies stale invariant","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: evaluation error at L71:24 for 'update' @ L71, evaluation error at L74:24 for 'create' @ L74, false for 'update' @ Lโ€ฆ","r":"c","k":"verdict"},{"t":"runtime/missing field","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-field","a":"403 PERMISSION_DENIED: evaluation error at L77:21 for 'get' @ L77, Property missing is undefined on object. for 'get' @ L77","r":"c","k":"verdict"},{"t":"runtime/division zero","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/division-zero","a":"403 PERMISSION_DENIED: Divide by zero error. for 'get' @ L80, Divide by zero error. for 'get' @ L80","r":"c","k":"verdict"},{"t":"runtime/list out of bounds","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/list-out-of-bounds","a":"403 PERMISSION_DENIED: Index out of bound error. Index: [2] , size: [1]. for 'get' @ L83, Index out of bound error. Index: [2] , size: [1].โ€ฆ","r":"c","k":"verdict"},{"t":"runtime/wrong type method","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/wrong-type-method","a":"403 PERMISSION_DENIED: evaluation error at L86:21 for 'get' @ L86, Function not found error: Name: [size]. for 'get' @ L86","r":"c","k":"verdict"},{"t":"runtime/missing get resource","q":"GET /v1/projects/{project}/databases/(default)/documents/runtime/missing-get-resource","a":"403 PERMISSION_DENIED: evaluation error at L89:21 for 'get' @ L89, Null value error. for 'get' @ L89","r":"c","k":"verdict"},{"t":"public get","q":"GET /v1/projects/{project}/databases/(default)/documents/public/news","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"public list bounded","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"200 [1 item]","r":"c","k":"verdict"},{"t":"public list oversized","q":"POST /v1/projects/{project}/databases/(default)/documents:runQuery","a":"403 PERMISSION_DENIED: false for 'list' @ L67, false for 'list' @ L1190","r":"c","k":"verdict"},{"t":"tenant claim read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant wrong claim","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: evaluation error at L71:21 for 'get' @ L71, false for 'get' @ L1190, false for 'get' @ L71, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"tenant admin update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"tenant editor update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, false for 'update' @ L74, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"member self read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"member other read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/members/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L78, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: evaluation error at L89:23 for 'get' @ L89, false for 'get' @ L1190, false for 'get' @ L89, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"project owner update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"project owner forbidden change","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'create' @ L92, false for 'create' @ L1190, evaluation error at L96:26 for 'update' @ L96, false for 'updaโ€ฆ","r":"c","k":"verdict"},{"t":"project admin delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"200 {}","r":"c","k":"verdict"},{"t":"project member delete","q":"DELETE /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}","a":"403 PERMISSION_DENIED: false for 'delete' @ L102, false for 'delete' @ L1190","r":"c","k":"verdict"},{"t":"task member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task nonmember read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1","a":"403 PERMISSION_DENIED: evaluation error at L104:25 for 'get' @ L104, false for 'get' @ L1190, false for 'get' @ L104, false for 'get' @ L11โ€ฆ","r":"c","k":"verdict"},{"t":"task self create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task other create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-create-bob","a":"403 PERMISSION_DENIED: false for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'update' @ L110, false for 'uโ€ฆ","r":"c","k":"verdict"},{"t":"task assignee update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-allow","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"task forbidden update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-update-deny","a":"403 PERMISSION_DENIED: evaluation error at L107:28 for 'create' @ L107, false for 'create' @ L1190, evaluation error at L110:28 for 'updateโ€ฆ","r":"c","k":"verdict"},{"t":"comment member read","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment author create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-new","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"comment impersonation","q":"PATCH /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/projects/{project}/tasks/task-1/comments/comment-bad","a":"403 PERMISSION_DENIED: false for 'create' @ L121, false for 'create' @ L1190, evaluation error at L125:38 for 'update' @ L125, false for 'uโ€ฆ","r":"c","k":"verdict"},{"t":"profile self read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile other read","q":"GET /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'get' @ L136, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"profile self update","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"profile role injection","q":"PATCH /v1/projects/{project}/databases/(default)/documents/profiles/alice","a":"403 PERMISSION_DENIED: false for 'create' @ L142, false for 'create' @ L1190, evaluation error at L138:24 for 'update' @ L138, false for 'uโ€ฆ","r":"c","k":"verdict"},{"t":"audit admin create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/admin-event","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"audit editor create","q":"PATCH /v1/projects/{project}/databases/(default)/documents/audits/editor-event","a":"403 PERMISSION_DENIED: false for 'create' @ L145, false for 'create' @ L1190, false for 'update' @ L150, false for 'update' @ L1190","r":"c","k":"verdict"},{"t":"recursive asset member","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"recursive asset nonmember","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/assets/folder/deep/file","a":"403 PERMISSION_DENIED: evaluation error at L131:23 for 'get' @ L131, false for 'get' @ L1190, false for 'get' @ L131, false for 'get' @ L11โ€ฆ","r":"c","k":"verdict"},{"t":"stats admin read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"stats editor read","q":"GET /v1/projects/{project}/databases/(default)/documents/stats/overview","a":"403 PERMISSION_DENIED: false for 'get' @ L153, false for 'get' @ L1190","r":"c","k":"verdict"},{"t":"generated entity 00","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 01","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-01/document-01","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 02","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-02/document-02","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 03","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-03/document-03","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 04","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-04/document-04","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 05","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-05/document-05","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 06","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-06/document-06","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity 07","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-07/document-07","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"verdict"},{"t":"generated entity wrong tenant","q":"GET /v1/projects/{project}/databases/(default)/documents/tenants/tenant-a/entity-00/document-00","a":"403 PERMISSION_DENIED: evaluation error at L166:21 for 'get' @ L166, false for 'get' @ L1190, false for 'get' @ L166, false for 'get' @ L11โ€ฆ","r":"c","k":"verdict"},{"t":"get after atomic allow","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"verdict"},{"t":"get after atomic deny","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"403 PERMISSION_DENIED: false for 'create' @ L1190, evaluation error at L157:24 for 'update' @ L157, false for 'update' @ L1190, evaluationโ€ฆ","r":"c","k":"verdict"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy array-contains \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where createdBy >= \"query-owner\"","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"PERMISSION_DENIED: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == trueโ€ฆ","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"PERMISSION_DENIED: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"denied\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId == \"missing\"","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains \"other-owner\"","a":"PERMISSION_DENIED: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"PERMISSION_DENIED: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen shared","a":"PERMISSION_DENIED: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score == 5","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score > 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score >= 4","a":"PERMISSION_DENIED: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings where score in [4,7]","a":"PERMISSION_DENIED: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ratings","a":"PERMISSION_DENIED: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery nonnull where value != null","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited limit 13","a":"PERMISSION_DENIED: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen limited","a":"PERMISSION_DENIED: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 2","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 2","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets offset 2","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen offsets offset 3","a":"PERMISSION_DENIED: false for 'list' @ L16","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery offsets","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering order by updatedAt asc","a":"PERMISSION_DENIED: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen ordering","a":"PERMISSION_DENIED: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedExists","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists where permissionId == \"missing\"","a":"PERMISSION_DENIED: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen dynamicExists","a":"PERMISSION_DENIED: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group groupDocs","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen group records where createdBy == \"query-owner\"","a":"PERMISSION_DENIED: No matching allow statements","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == trueโ€ฆ","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery offsets","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\"","a":"permission-denied: false for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy in [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L8, Property permissionId is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy array-contains \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy >= \"query-owner\"","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy >= \"query-owner\" and createdBy <= \"query-owner\")","a":"permission-denied: evaluation error at L8:42 for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and published == false)","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == true))","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where ((createdBy == \"query-owner\" and published == false) or (createdBy == \"query-owner\" and published == trueโ€ฆ","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" or published == true)","a":"permission-denied: false for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords where createdBy == \"other-owner\"","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where (createdBy == \"query-owner\" and updatedAt == -1)","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"denied\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId == \"missing\"","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"granted2\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where permissionId in [\"granted\",\"denied\"]","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8, Property createdBy is undefined on object. for 'list' @ L8,โ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shortCircuit where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shortCircuit where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains \"other-owner\"","a":"permission-denied: evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared where members array-contains-any [\"query-owner\",\"other-owner\"]","a":"permission-denied: false for 'list' @ L11, evaluation error at L11:41 for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery shared","a":"permission-denied: Property members is undefined on object. for 'list' @ L11","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score == 5","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score == 5","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score > 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score > 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 5","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 5","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score >= 4","a":"permission-denied: evaluation error at L12:42 for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [5,7]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [5,7]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings where score in [4,7]","a":"permission-denied: false for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ratings","a":"permission-denied: Property score is undefined on object. for 'list' @ L12","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen nonnull where value != null","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery nonnull where value != null","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value != \"blocked\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value != \"blocked\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery notblocked where value not-in [\"blocked\",\"also-blocked\"]","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 13","a":"permission-denied: false for 'list' @ L15","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited","a":"permission-denied: Unsupported operation error. Received: null <= int. Expected: string <= string, bytes <= bytes, int <= int, float <= floโ€ฆ","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen offsets","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery offsets","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt desc","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt desc","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering order by updatedAt asc","a":"permission-denied: false for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery ordering","a":"permission-denied: Property updatedAt is undefined on object. for 'list' @ L17","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedExists","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedExists","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"granted\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"granted\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists where permissionId == \"missing\"","a":"permission-denied: evaluation error at L20:48 for 'list' @ L20, false for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery dynamicExists","a":"permission-denied: Property permissionId is undefined on object. for 'list' @ L20","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs where createdBy == \"query-owner\"","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group groupDocs","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L21","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group emptyGroup where createdBy == \"query-owner\"","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery group records where createdBy == \"query-owner\"","a":"permission-denied: No matching allow statements","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery parents/p1/groupDocs where createdBy == \"query-owner\"","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/members","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/getMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/functionMembers","a":"PERMISSION_DENIED: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/reversedMembers","a":"PERMISSION_DENIED: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/unknownOnly","a":"PERMISSION_DENIED: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen over gRPC","q":"Listen queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunQuery over gRPC","q":"RunQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery over gRPC","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen over gRPC","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments records","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments emptyRecords","a":"PERMISSION_DENIED: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/denied/members","a":"PERMISSION_DENIED: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListDocuments over gRPC","q":"ListDocuments queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"ListenChanges over gRPC","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (long-poll WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (long-poll WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (long-poll WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท count 1","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery records","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L8","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery emptyRecords","a":"permission-denied: Property createdBy is undefined on object. for 'list' @ L9","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen limited limit 12","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery limited limit 12","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen fixedGet","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery fixedGet","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/members","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/members","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/members","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/getMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/getMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/getMembers","a":"permission-denied: Null value error. for 'list' @ L31, Null value error. for 'list' @ L31","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/functionMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/functionMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/functionMembers","a":"permission-denied: Null value error. for 'list' @ L33, Null value error. for 'list' @ L33","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/reversedMembers","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/reversedMembers","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/reversedMembers","a":"permission-denied: evaluation error at L35:24 for 'list' @ L35, Null value error. for 'list' @ L35","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/unknownOnly","a":"permission-denied: Null value error. for 'list' @ L37","r":"c","k":"status"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/negatedAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/negatedAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/literalOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/literalOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/concreteErrorAnd","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/concreteErrorAnd","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/granted/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/granted/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/missing/budgetErrorOr","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/missing/budgetErrorOr","a":"OK ยท count 2","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/emptyGranted/members","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/emptyGranted/members","a":"OK ยท count 0","r":"c","k":"answer"},{"t":"Listen from the browser SDK (streaming WebChannel)","q":"Listen queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"RunAggregationQuery from the browser SDK (streaming WebChannel)","q":"RunAggregationQuery queryParents/denied/members where uid == \"query-owner\"","a":"permission-denied: Null value error. for 'list' @ L28, Null value error. for 'list' @ L28","r":"c","k":"status"},{"t":"ListenChanges from the browser SDK (streaming WebChannel)","q":"ListenChanges records where createdBy == \"query-owner\" order by updatedAt desc limit 12","a":"OK ยท 0 documents","r":"c","k":"answer"}]} \ No newline at end of file diff --git a/public/conformance/firestore.json b/public/conformance/firestore.json index 4e5b406..ae781c3 100644 --- a/public/conformance/firestore.json +++ b/public/conformance/firestore.json @@ -1 +1 @@ -{"runs":[[0,1,0,"Browser RunAggregationQuery count request and response envelope"],[1,2,0,"Browser aggregation serializes multiple where clauses as a composite filter"],[3,1,0,"Browser RunAggregationQuery count request and response envelope"],[4,2,0,"Browser observes the maximum-aggregation validation response"],[6,9,0,"Browser transactions pin multi-write validation, verify writes, and quoted update masks"],[15,7,0,"An identical document replacement preserves the document update time"],[22,2,1,"A lost streaming Listen backchannel reopens with replay bookkeeping"],[24,9,1,"A named query loaded from an SDK bundle resumes Listen from a nanosecond-precision expired read time"],[33,2,1,"Listen handshake and backchannel in forced long-polling mode"],[35,1,1,"Listen handshake and backchannel in streaming mode"],[36,6,1,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[42,8,1,"CJK, emoji, combining, and mixed text use UTF-16 frame lengths"],[50,1,1,"An unknown session returns the exact browser-visible HTTP 400 body"],[51,3,1,"Write handshake and acknowledgement in forced long-polling mode"],[54,6,1,"Two writes may be in flight with the last acknowledged stream token"],[60,3,1,"Write handshake and acknowledgement in streaming mode"],[63,1,1,"A lost streaming Listen backchannel reopens with replay bookkeeping"],[64,7,1,"A named query loaded from an SDK bundle resumes Listen from a nanosecond-precision expired read time"],[71,1,1,"Listen handshake and backchannel in forced long-polling mode"],[72,1,1,"Listen handshake and backchannel in streaming mode"],[73,7,1,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[80,44,1,"Signed 64-bit Datastore numeric resource IDs are accepted and sort numerically before ordinary string IDs"],[124,5,1,"A reserved resource ID in a query parent returns the browser-visible INVALID_ARGUMENT contract"],[129,8,1,"CJK, emoji, combining, and mixed text use UTF-16 frame lengths"],[137,35,1,"A second browser client may update a server document absent from its local cache"],[172,2,1,"Write handshake and acknowledgement in forced long-polling mode"],[174,9,1,"A missing-document update returns the browser-visible Firestore Write stream error envelope"],[183,4,1,"Two writes may be in flight with the last acknowledged stream token"],[187,1,1,"Write handshake and acknowledgement in streaming mode"],[188,21,2,"Collection ids, document listing, masks and page tokens"],[209,1,2,"Collection ids, document listing, masks and page tokens"],[210,1,3,"Node SDK get() (BatchGetDocuments) of the \"flat\" document"],[211,1,3,"gRPC GetDocument of the \"flat\" document"],[212,1,3,"gRPC ListDocuments of the \"flat\" document"],[213,1,3,"gRPC RunQuery of the \"flat\" document"],[214,1,3,"REST GET document of the \"flat\" document"],[215,1,3,"Node SDK get() (BatchGetDocuments) of the \"nested\" document"],[216,1,3,"gRPC GetDocument of the \"nested\" document"],[217,1,3,"gRPC ListDocuments of the \"nested\" document"],[218,1,3,"gRPC RunQuery of the \"nested\" document"],[219,1,3,"REST GET document of the \"nested\" document"],[220,1,3,"Node SDK get() (BatchGetDocuments) of the \"unicode\" document"],[221,1,3,"gRPC GetDocument of the \"unicode\" document"],[222,1,3,"gRPC ListDocuments of the \"unicode\" document"],[223,1,3,"gRPC RunQuery of the \"unicode\" document"],[224,1,3,"REST GET document of the \"unicode\" document"],[225,1,3,"Node SDK get() (BatchGetDocuments) of the \"wide-mixed-map\" document"],[226,1,3,"gRPC GetDocument of the \"wide-mixed-map\" document"],[227,1,3,"gRPC ListDocuments of the \"wide-mixed-map\" document"],[228,1,3,"gRPC RunQuery of the \"wide-mixed-map\" document"],[229,1,3,"REST GET document of the \"wide-mixed-map\" document"],[230,1,3,"browser SDK server read (long-poll) of the \"flat\" document"],[231,1,3,"browser SDK server read (long-poll) of the \"nested\" document"],[232,1,3,"browser SDK server read (long-poll) of the \"unicode\" document"],[233,1,3,"browser SDK server read (long-poll) of the \"wide-mixed-map\" document"],[234,1,3,"browser SDK server read (streaming) of the \"flat\" document"],[235,1,3,"browser SDK server read (streaming) of the \"nested\" document"],[236,1,3,"browser SDK server read (streaming) of the \"unicode\" document"],[237,1,3,"browser SDK server read (streaming) of the \"wide-mixed-map\" document"],[238,1,4,"Importing an export split across LevelDB shards"],[239,64,6,"Kindless queries (all descendants, no collection id)"],[303,5,6,"Aggregations over a kindless query"],[308,4,6,"A kindless listener"],[312,9,6,"Rules \"allow-all\" for a kindless query"],[321,9,6,"Rules \"signed-in\" for a kindless query"],[330,9,6,"Rules \"list-only\" for a kindless query"],[339,9,6,"Rules \"get-only\" for a kindless query"],[348,9,6,"Rules \"one-collection\" for a kindless query"],[357,9,6,"Rules \"one-group\" for a kindless query"],[366,9,6,"Rules \"one-subtree\" for a kindless query"],[375,9,6,"Rules \"wildcard-subtree\" for a kindless query"],[384,9,6,"Rules \"deny-all\" for a kindless query"],[393,4,6,"One database never sees another"],[397,8,6,"Admin SDK recursiveDelete"],[405,2,6,"Kindless queries (all descendants, no collection id)"],[407,11,7,"A listener resuming with a token or read time"],[418,1,7,"A listener resuming with a token or read time"],[419,1,8,"emulators:export of four synthetic documents"],[420,16,9,"REST read masks, transactions and read times"],[436,6,9,"REST read masks, transactions and read times"],[442,3,9,"The same transaction over gRPC GetDocument"],[445,1,10,"Browser aggregation serializes multiple where clauses as a composite filter"],[446,1,10,"Browser observes the maximum-aggregation validation response"],[447,3,10,"Browser Firestore REST v1 calls accept JSON carried as text/plain and require origin-echoing credentialed CORS headers"],[450,3,10,"Browser transactions pin multi-write validation, verify writes, and quoted update masks"],[453,1,10,"An identical document replacement preserves the document update time"],[454,1,10,"Browser aggregation serializes multiple where clauses as a composite filter"],[455,2,10,"Browser RunAggregationQuery count request and response envelope"],[457,1,10,"Browser observes the maximum-aggregation validation response"],[458,7,10,"Browser transactions pin multi-write validation, verify writes, and quoted update masks"],[465,6,10,"An identical document replacement preserves the document update time"],[471,2,11,"A lost streaming Listen backchannel reopens with replay bookkeeping"],[473,10,11,"A named query loaded from an SDK bundle resumes Listen from a nanosecond-precision expired read time"],[483,2,11,"Listen handshake and backchannel in forced long-polling mode"],[485,2,11,"Listen handshake and backchannel in streaming mode"],[487,7,11,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[494,10,11,"CJK, emoji, combining, and mixed text use UTF-16 frame lengths"],[504,3,11,"Write handshake and acknowledgement in forced long-polling mode"],[507,6,11,"Two writes may be in flight with the last acknowledged stream token"],[513,3,11,"Write handshake and acknowledgement in streaming mode"],[516,1,11,"A lost streaming Listen backchannel reopens with replay bookkeeping"],[517,7,11,"A named query loaded from an SDK bundle resumes Listen from a nanosecond-precision expired read time"],[524,1,11,"Listen handshake and backchannel in forced long-polling mode"],[525,1,11,"Listen handshake and backchannel in streaming mode"],[526,9,11,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[535,39,11,"Signed 64-bit Datastore numeric resource IDs are accepted and sort numerically before ordinary string IDs"],[574,6,11,"A reserved resource ID in a query parent returns the browser-visible INVALID_ARGUMENT contract"],[580,8,11,"CJK, emoji, combining, and mixed text use UTF-16 frame lengths"],[588,1,11,"An unknown session returns the exact browser-visible HTTP 400 body"],[589,9,11,"A six-mutation browser batch returns one WriteResult per mutation in both WebChannel variants"],[598,37,11,"A second browser client may update a server document absent from its local cache"],[635,2,11,"Write handshake and acknowledgement in forced long-polling mode"],[637,9,11,"A missing-document update returns the browser-visible Firestore Write stream error envelope"],[646,3,11,"Two writes may be in flight with the last acknowledged stream token"],[649,1,11,"Write handshake and acknowledgement in streaming mode"]],"cases":[{"t":"aggregation-count #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200 [1 item]","r":"c","k":"answer"},{"t":"aggregation-composite-filter #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"u"},{"t":"aggregation-composite-filter #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"400 FAILED_PRECONDITION: The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/{project}/fiโ€ฆ","r":"u"},{"t":"aggregation-count #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"u"},{"t":"aggregation-limit-error #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"u"},{"t":"aggregation-limit-error #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"400 INVALID_ARGUMENT: The maximum number of aggregations allowed in an aggregation query is 5. Received: 6","r":"u"},{"t":"transaction-commit #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"u"},{"t":"transaction-commit #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-commit #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"u"},{"t":"transaction-commit #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"400 INVALID_ARGUMENT: Cannot delete then update an entity in the same request.","r":"u"},{"t":"transaction-commit #5","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-commit #6","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"u"},{"t":"transaction-commit #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"u"},{"t":"transaction-commit #8","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"transaction-commit #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"u"},{"t":"transaction-noop-write #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"u"},{"t":"transaction-noop-write #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-noop-write #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"u"},{"t":"transaction-noop-write #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"u"},{"t":"transaction-noop-write #5","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"u"},{"t":"transaction-noop-write #6","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-noop-write #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"u"},{"t":"backchannel-reconnect-replay #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"backchannel-reconnect-replay #3","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #7","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #11","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #12","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #13","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #15","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #16","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #19","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-long-poll #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"listen-long-poll #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-streaming #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"multiple-inequality-query #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"multiple-inequality-query #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #9","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #2","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #6","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #13","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #15","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #18","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #21","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unknown-sid #1","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"400 HTML page \"Error 400 (Bad Request)!!1\"","r":"c","k":"answer"},{"t":"write-long-poll #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-long-poll #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-long-poll #5","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-overlap #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-overlap #7","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #10","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-streaming #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-streaming #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-streaming #4","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"backchannel-reconnect-replay #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—3","r":"u"},{"t":"bundle-nanosecond-read-time #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"bundle-nanosecond-read-time #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"bundle-nanosecond-read-time #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1","r":"u"},{"t":"bundle-nanosecond-read-time #6","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"bundle-nanosecond-read-time #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, targetChange RESET, documentChange, targetChange CURRโ€ฆ","r":"u"},{"t":"bundle-nanosecond-read-time #14","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1 ร—2","r":"u"},{"t":"bundle-nanosecond-read-time #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"listen-long-poll #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"u"},{"t":"listen-streaming #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"u"},{"t":"multiple-inequality-query #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—3, targetChange CURRENT, targetChange NO_CHANGE, existenceFilter, targetChange NO_CHANGE","r":"u"},{"t":"multiple-inequality-query #3","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"u"},{"t":"multiple-inequality-query #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD","r":"u"},{"t":"multiple-inequality-query #7","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"u"},{"t":"multiple-inequality-query #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"u"},{"t":"multiple-inequality-query #10","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD","r":"u"},{"t":"multiple-inequality-query #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"u"},{"t":"numeric-resource-id-ordering #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"numeric-resource-id-ordering #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #5","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #6","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #7","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #11","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #12","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #13","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #15","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE, existenceFilter, targetChange NO_CHANGE","r":"u"},{"t":"numeric-resource-id-ordering #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"u"},{"t":"numeric-resource-id-ordering #17","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #18","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #19","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #20","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #21","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #22","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #23","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"numeric-resource-id-ordering #24","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1 ร—2","r":"u"},{"t":"numeric-resource-id-ordering #25","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1 ร—2","r":"u"},{"t":"numeric-resource-id-ordering #27","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"numeric-resource-id-ordering #28","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"numeric-resource-id-ordering #29","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #30","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1 ร—10","r":"u"},{"t":"numeric-resource-id-ordering #31","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #32","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #33","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #34","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #35","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #36","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #37","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE, existenceFilter, targetChange NO_CHANGE, targetChaโ€ฆ","r":"u"},{"t":"numeric-resource-id-ordering #38","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #39","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #40","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #41","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #42","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #43","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #44","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"numeric-resource-id-ordering #45","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"reserved-resource-id-error #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"reserved-resource-id-error #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange REMOVE","r":"u"},{"t":"reserved-resource-id-error #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"reserved-resource-id-error #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"reserved-resource-id-error #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange REMOVE","r":"u"},{"t":"unicode-framing #3","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"unicode-framing #4","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentDelete, targetChange CURRENT, targetChange NO_CHANGE, documentDelete, targetChange NO_CHANGE","r":"u"},{"t":"unicode-framing #5","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, documentChange","r":"u"},{"t":"unicode-framing #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"unicode-framing #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"unicode-framing #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange NO_CHANGE","r":"u"},{"t":"unicode-framing #16","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"u"},{"t":"unicode-framing #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"u"},{"t":"write-cross-client-update #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-cross-client-update #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"write-cross-client-update #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-cross-client-update #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #9","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"write-cross-client-update #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—3","r":"u"},{"t":"write-cross-client-update #13","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"u"},{"t":"write-cross-client-update #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #15","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—3","r":"u"},{"t":"write-cross-client-update #19","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #21","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #22","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #23","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #24","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #25","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #26","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #27","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #28","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #29","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #30","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #31","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2, targetChange REMOVE","r":"u"},{"t":"write-cross-client-update #32","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #33","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #34","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"u"},{"t":"write-cross-client-update #35","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #37","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #38","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #39","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-long-poll #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-long-poll #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"write-missing-update-error #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-missing-update-error #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-missing-update-error #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-missing-update-error #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, __sm__, close","r":"u"},{"t":"write-missing-update-error #5","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-missing-update-error #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-missing-update-error #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, __sm__, close","r":"u"},{"t":"write-missing-update-error #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-missing-update-error #9","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-overlap #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-overlap #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"write-overlap #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1","r":"u"},{"t":"write-overlap #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1 ร—2","r":"u"},{"t":"write-streaming #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"u"},{"t":"seed-notes/a","q":"PATCH /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"seed-notes/b","q":"PATCH /notes/b (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"seed-notes/missing/children/one","q":"PATCH /notes/missing/children/one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"seed-other/z","q":"PATCH /other/z (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"root ids empty body","q":"POST :listCollectionIds (owner)","a":"200 ยท 2 collection ids","r":"c","k":"answer"},{"t":"nested ids empty body","q":"POST /notes/missing:listCollectionIds (owner)","a":"200 ยท 1 collection id","r":"c","k":"answer"},{"t":"ids anonymous","q":"POST :listCollectionIds","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"list default","q":"GET /notes (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list show missing","q":"GET /notes?showMissing=true (owner)","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"list desc","q":"GET /notes?orderBy=title%20desc (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list mask","q":"GET /notes?mask.fieldPaths=title (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list empty mask","q":"GET /notes?mask.fieldPaths=absent (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list anonymous","q":"GET /notes","a":"403 PERMISSION_DENIED: false for 'list' @ L1","r":"c","k":"status"},{"t":"list empty","q":"GET /empty (owner)","a":"200 {}","r":"c","k":"answer"},{"t":"list conflicting order","q":"GET /notes?showMissing=true&orderBy=title (owner)","a":"400 INVALID_ARGUMENT: cannot specify an order when show_missing is true","r":"c","k":"status"},{"t":"list page 1","q":"GET /notes?pageSize=1 (owner)","a":"200 ยท 1 document, next page token","r":"c","k":"answer"},{"t":"list page 2","q":"GET /notes?pageSize=1&pageToken=CkRwcm9qZWN0cy9kZW1vLWZpcmVzaWRlLWxpc3RpbmcvZGF0YWJhc2VzLyhkZWZhdWx0KS9kb2N1bWVudHMvbm90ZXMvYRIIgq7GejCYclYโ€ฆ","a":"200 ยท 1 document, next page token","r":"c","k":"answer"},{"t":"list page 3","q":"GET /notes?pageSize=1&pageToken=CkRwcm9qZWN0cy9kZW1vLWZpcmVzaWRlLWxpc3RpbmcvZGF0YWJhc2VzLyhkZWZhdWx0KS9kb2N1bWVudHMvbm90ZXMvYhIIVXZZZ%2Bl29โ€ฆ","a":"200 {}","r":"c","k":"answer"},{"t":"ids page 1","q":"POST :listCollectionIds (owner)","a":"200 ยท 1 collection id, next page token","r":"c","k":"answer"},{"t":"ids page 2","q":"POST :listCollectionIds (owner)","a":"200 ยท 1 collection id, next page token","r":"c","k":"answer"},{"t":"ids page 3","q":"POST :listCollectionIds (owner)","a":"200 {}","r":"c","k":"answer"},{"t":"list invalid size","q":"GET /notes?pageSize=invalid (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official emulator never answered this request (recorded as a timeout); Firenook answers 400 INVALID_ARGUMENT instead of hanging"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): flat","a":"{\"zulu\":\"last\",\"alpha\":\"first\",\"middle\":true,\"number\":42,\"nullable\":null}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: flat","a":"{\"zulu\":{\"stringValue\":\"last\",\"valueType\":\"stringValue\"},\"alpha\":{\"stringValue\":\"first\",\"valueType\":\"stringValue\"},\"middle\":{\"booleanValue\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: flat","a":"{\"zulu\":{\"stringValue\":\"last\",\"valueType\":\"stringValue\"},\"alpha\":{\"stringValue\":\"first\",\"valueType\":\"stringValue\"},\"middle\":{\"booleanValue\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: flat","a":"{\"zulu\":{\"stringValue\":\"last\",\"valueType\":\"stringValue\"},\"alpha\":{\"stringValue\":\"first\",\"valueType\":\"stringValue\"},\"middle\":{\"booleanValue\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: flat","a":"{\"zulu\":{\"stringValue\":\"last\"},\"alpha\":{\"stringValue\":\"first\"},\"middle\":{\"booleanValue\":true},\"number\":{\"integerValue\":\"42\"},\"nullable\":{\"nโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): nested","a":"{\"zulu\":{\"third\":3,\"first\":1,\"second\":2},\"array\":[{\"z\":\"z\",\"a\":\"a\",\"m\":\"m\"},{\"nested\":{\"right\":false,\"left\":true}}],\"emptyMap\":{},\"emptyArrโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\",\"valueType\":\"integerValue\"},\"first\":{\"integerValue\":\"1\",\"valueType\":\"integerValuโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\",\"valueType\":\"integerValue\"},\"first\":{\"integerValue\":\"1\",\"valueType\":\"integerValuโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\",\"valueType\":\"integerValue\"},\"first\":{\"integerValue\":\"1\",\"valueType\":\"integerValuโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\"},\"first\":{\"integerValue\":\"1\"},\"second\":{\"integerValue\":\"2\"}}}},\"array\":{\"arrayVaโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): unicode","a":"{\"2\":\"two\",\"10\":\"ten\",\"ๆผขๅญ—\":\"่ณ‡ๆ–™\",\"๐Ÿ˜€\":\"emoji\",\"รฉ\":\"accent\",\"mixed\":{\"๐Ÿงช\":\"ๅฎž้ชŒ\",\"latin\":\"Cafรฉ\",\"ๆ—ฅๆœฌ่ชž\":\"ๅ€ค\"}}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: unicode","a":"{\"2\":{\"stringValue\":\"two\",\"valueType\":\"stringValue\"},\"10\":{\"stringValue\":\"ten\",\"valueType\":\"stringValue\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\",\"valueTyโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: unicode","a":"{\"2\":{\"stringValue\":\"two\",\"valueType\":\"stringValue\"},\"10\":{\"stringValue\":\"ten\",\"valueType\":\"stringValue\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\",\"valueTyโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: unicode","a":"{\"2\":{\"stringValue\":\"two\",\"valueType\":\"stringValue\"},\"10\":{\"stringValue\":\"ten\",\"valueType\":\"stringValue\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\",\"valueTyโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: unicode","a":"{\"2\":{\"stringValue\":\"two\"},\"10\":{\"stringValue\":\"ten\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\"},\"๐Ÿ˜€\":{\"stringValue\":\"emoji\"},\"รฉ\":{\"stringValue\":\"accent\"},\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): wide-mixed-map","a":"{\"stringField\":\"value\",\"stringArray\":[\"item-one\"],\"label\":\"Synthetic record\",\"objectWithEmptyArray\":{\"tag\":\"plain\",\"items\":[]},\"objectWithNโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\",\"valueType\":\"stringValue\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\",\"valueTypโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\",\"valueType\":\"stringValue\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\",\"valueTypโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\",\"valueType\":\"stringValue\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\",\"valueTypโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\"}]}},\"label\":{\"stringValue\":\"Synthetโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): flat","a":"{\"zulu\":\"last\",\"alpha\":\"first\",\"middle\":true,\"number\":42,\"nullable\":null}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): nested","a":"{\"zulu\":{\"third\":3,\"first\":1,\"second\":2},\"array\":[{\"z\":\"z\",\"a\":\"a\",\"m\":\"m\"},{\"nested\":{\"right\":false,\"left\":true}}],\"emptyMap\":{},\"emptyArrโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): unicode","a":"{\"2\":\"two\",\"10\":\"ten\",\"ๆผขๅญ—\":\"่ณ‡ๆ–™\",\"๐Ÿ˜€\":\"emoji\",\"รฉ\":\"accent\",\"mixed\":{\"๐Ÿงช\":\"ๅฎž้ชŒ\",\"latin\":\"Cafรฉ\",\"ๆ—ฅๆœฌ่ชž\":\"ๅ€ค\"}}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): wide-mixed-map","a":"{\"stringField\":\"value\",\"stringArray\":[\"item-one\"],\"label\":\"Synthetic record\",\"objectWithEmptyArray\":{\"tag\":\"plain\",\"items\":[]},\"objectWithNโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): flat","a":"{\"zulu\":\"last\",\"alpha\":\"first\",\"middle\":true,\"number\":42,\"nullable\":null}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): nested","a":"{\"zulu\":{\"third\":3,\"first\":1,\"second\":2},\"array\":[{\"z\":\"z\",\"a\":\"a\",\"m\":\"m\"},{\"nested\":{\"right\":false,\"left\":true}}],\"emptyMap\":{},\"emptyArrโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): unicode","a":"{\"2\":\"two\",\"10\":\"ten\",\"ๆผขๅญ—\":\"่ณ‡ๆ–™\",\"๐Ÿ˜€\":\"emoji\",\"รฉ\":\"accent\",\"mixed\":{\"๐Ÿงช\":\"ๅฎž้ชŒ\",\"latin\":\"Cafรฉ\",\"ๆ—ฅๆœฌ่ชž\":\"ๅ€ค\"}}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): wide-mixed-map","a":"{\"stringField\":\"value\",\"stringArray\":[\"item-one\"],\"label\":\"Synthetic record\",\"objectWithEmptyArray\":{\"tag\":\"plain\",\"items\":[]},\"objectWithNโ€ฆ","r":"c","k":"answer"},{"t":"import","q":"import an export of 4 shards","a":"import accepted ยท 4 documents verified","r":"u"},{"t":"root-all over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"root-all over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 14 documents","r":"c","k":"answer"},{"t":"root-explicit-empty-id over gRPC","q":"RunQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":true}]}","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"root-explicit-empty-id over REST","q":"POST :runQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":true}]}","a":"200 ยท 14 documents","r":"c","k":"answer"},{"t":"under-document over gRPC","q":"RunQuery under top/parent: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 3 documents","r":"c","k":"answer"},{"t":"under-document over REST","q":"POST :runQuery under top/parent: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"under-missing-document over gRPC","q":"RunQuery under rd/ghost: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"under-missing-document over REST","q":"POST :runQuery under rd/ghost: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 1 document","r":"c","k":"answer"},{"t":"under-nothing over gRPC","q":"RunQuery under nope/nope: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"under-nothing over REST","q":"POST :runQuery under nope/nope: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"sdk-range-root over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"op\":\"ANโ€ฆ","a":"OK ยท 6 documents","r":"c","k":"answer"},{"t":"sdk-range-root over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"oโ€ฆ","a":"200 ยท 6 documents","r":"c","k":"answer"},{"t":"sdk-range-sub over gRPC","q":"RunQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"opโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"sdk-range-sub over REST","q":"POST :runQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilterโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"sdk-range-small-limit over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"op\":\"ANโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"sdk-range-small-limit over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"oโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"limit over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":3}}","a":"OK ยท 3 documents","r":"c","k":"answer"},{"t":"limit over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":3}}","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"limit-zero over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":0}}","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"limit-zero over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":0}}","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"offset over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"offset\":2,\"limit\":{\"value\":2}}","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"offset over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"offset\":2,\"limit\":{\"value\":2}}","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"start-after over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startAt\":{\"โ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"start-after over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"start-at over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startAt\":{\"โ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"start-at over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"end-before over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAt\":{\"vaโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"end-before over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAtโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"end-at over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAt\":{\"vaโ€ฆ","a":"OK ยท 3 documents","r":"c","k":"answer"},{"t":"end-at over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAtโ€ฆ","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"name-equal over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"value\":{\"refโ€ฆ","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"name-equal over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"value\"โ€ฆ","a":"200 ยท 1 document","r":"c","k":"answer"},{"t":"name-equal-outside-parent over gRPC","q":"RunQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"value\":โ€ฆ","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"name-equal-outside-parent over REST","q":"POST :runQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"vโ€ฆ","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"name-in over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"IN\",\"value\":{\"arrayVโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-in over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"IN\",\"value\":{\"โ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-equal over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_EQUAL\",\"value\":{โ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-equal over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_EQUAL\",\"vaโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-in over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_IN\",\"value\":{\"arโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-in over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_IN\",\"valueโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-or over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"OR\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fieldPatโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-or over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"OR\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fiโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-greater-than over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",\"valueโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-greater-than over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",โ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-a-reference over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",\"valueโ€ฆ","a":"INVALID_ARGUMENT: __key__ filter value must be a Key","r":"c","k":"error"},{"t":"name-not-a-reference over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",โ€ฆ","a":"400 __key__ filter value must be a Key","r":"c","k":"error"},{"t":"name-descending over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"DESCENDING\"}],\"limit\":{\"vโ€ฆ","a":"FAILED_PRECONDITION: Firestore does not support descending key scans","r":"c","k":"error"},{"t":"name-descending over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"DESCENDING\"}],\"limiโ€ฆ","a":"400 Firestore does not support descending key scans","r":"c","k":"error"},{"t":"field-equal over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"EQUAL\",\"value\":{\"integerValโ€ฆ","a":"INVALID_ARGUMENT: kind is required for filter: n","r":"c","k":"error"},{"t":"field-equal over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"EQUAL\",\"value\":{\"inteโ€ฆ","a":"400 kind is required for filter: n","r":"c","k":"error"},{"t":"field-inequality over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"GREATER_THAN\",\"value\":{\"intโ€ฆ","a":"INVALID_ARGUMENT: kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-inequality over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"GREATER_THAN\",\"value\"โ€ฆ","a":"400 kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-unary over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"unaryFilter\":{\"field\":{\"fieldPath\":\"missing\"},\"op\":\"IS_NULL\"}}}","a":"INVALID_ARGUMENT: kind is required for filter: missing","r":"c","k":"error"},{"t":"field-unary over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"unaryFilter\":{\"field\":{\"fieldPath\":\"missing\"},\"op\":\"IS_NULL\"}}}","a":"400 kind is required for filter: missing","r":"c","k":"error"},{"t":"field-order over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"n\"},\"direction\":\"ASCENDING\"}],\"limit\":{\"value\":2}}","a":"INVALID_ARGUMENT: kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-order over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"n\"},\"direction\":\"ASCENDING\"}],\"limit\":{\"valโ€ฆ","a":"400 kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-in-composite over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"AND\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fieldPaโ€ฆ","a":"INVALID_ARGUMENT: kind is required for filter: n","r":"c","k":"error"},{"t":"field-in-composite over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"AND\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fโ€ฆ","a":"400 kind is required for filter: n","r":"c","k":"error"},{"t":"select-field over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"n\"}]},\"limit\":{\"value\":1}}","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"select-field over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"n\"}]},\"limit\":{\"value\":1}}","a":"200 ยท 1 document","r":"c","k":"answer"},{"t":"nearest over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"findNearest\":{\"vectorField\":{\"fieldPath\":\"v\"},\"queryVector\":{\"mapValue\":{\"fields\":โ€ฆ","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"nearest over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"findNearest\":{\"vectorField\":{\"fieldPath\":\"v\"},\"queryVector\":{\"mapValue\":{\"fiโ€ฆ","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"parent-is-a-collection over gRPC","q":"RunQuery under top: {\"from\":[{\"allDescendants\":true}]}","a":"INVALID_ARGUMENT: Document parent name \"projects/{project}/databases/(default)/documents/top\" lacks \"/\" at index 65.","r":"c","k":"error"},{"t":"parent-is-a-collection over REST","q":"POST :runQuery under top: {\"from\":[{\"allDescendants\":true}]}","a":"400 Document parent name \"projects/{project}/databases/(default)/documents/top\" lacks \"/\" at index 65.","r":"c","k":"error"},{"t":"count root","q":"RunAggregationQuery count-root","a":"OK ยท value 14","r":"c","k":"answer"},{"t":"count under document","q":"RunAggregationQuery count-under-document","a":"OK ยท value 3","r":"c","k":"answer"},{"t":"count sdk range","q":"RunAggregationQuery count-sdk-range","a":"OK ยท value 6","r":"c","k":"answer"},{"t":"count limit","q":"RunAggregationQuery count-limit","a":"OK ยท value 4","r":"c","k":"answer"},{"t":"sum","q":"RunAggregationQuery sum","a":"INVALID_ARGUMENT: kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"root","q":"Listen root","a":"OK ยท 14 documents, 0 changes after","r":"c","k":"answer"},{"t":"sdk range","q":"Listen sdk-range","a":"OK ยท 6 documents, 0 changes after","r":"c","k":"answer"},{"t":"changes under document","q":"Listen changes-under-document","a":"OK ยท 3 documents, 0 changes after","r":"c","k":"answer"},{"t":"control collection","q":"Listen control-collection","a":"OK ยท 1 document, 4 changes after","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules allow-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules allow-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules allow-all)","a":"OK","r":"c","k":"answer"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules allow-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules allow-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules allow-all)","a":"OK","r":"c","k":"answer"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules allow-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules allow-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules allow-all)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules signed-in)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules signed-in)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules signed-in)","a":"OK","r":"c","k":"answer"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules signed-in)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules signed-in)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules signed-in)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules signed-in)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules signed-in)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules signed-in)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules list-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules list-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules list-only)","a":"OK","r":"c","k":"answer"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules list-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules list-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules list-only)","a":"OK","r":"c","k":"answer"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules list-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules list-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules list-only)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules get-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules get-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules get-only)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules one-collection)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules one-collection)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules one-collection)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules one-group)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules one-group)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules one-group)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules one-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules one-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules one-subtree)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules one-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules one-subtree)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules wildcard-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules wildcard-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules wildcard-subtree)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules wildcard-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules wildcard-subtree)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules deny-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules deny-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules deny-all)","a":"OK","r":"c","k":"answer"},{"t":"kindless query on the named database","q":"kindless query on the named database","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"kindless query on (default)","q":"kindless query on (default)","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"named database after recursiveDelete on (default)","q":"named database after recursiveDelete on (default)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"(default) after recursiveDelete on the named database","q":"(default) after recursiveDelete on the named database","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"root collection","q":"recursiveDelete root-collection","a":"completed ยท 8 documents left","r":"c","k":"behaviour"},{"t":"document","q":"recursiveDelete document","a":"completed ยท 10 documents left","r":"c","k":"behaviour"},{"t":"subcollection","q":"recursiveDelete subcollection","a":"completed ยท 12 documents left","r":"c","k":"behaviour"},{"t":"document under collection","q":"recursiveDelete document-under-collection","a":"completed ยท 11 documents left","r":"c","k":"behaviour"},{"t":"missing document with children","q":"recursiveDelete missing-document-with-children","a":"completed ยท 13 documents left","r":"c","k":"behaviour"},{"t":"nothing there","q":"recursiveDelete nothing-there","a":"completed ยท 14 documents left","r":"c","k":"behaviour"},{"t":"more than one page","q":"recursiveDelete more-than-one-page","a":"completed ยท 14 documents left","r":"c","k":"behaviour"},{"t":"custom writer","q":"recursiveDelete custom-writer","a":"completed ยท 12 documents left","r":"c","k":"behaviour"},{"t":"empty-id-direct-children over gRPC","q":"RunQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":false}]}","a":"OK ยท 7 documents","r":"d","k":"status","w":"a selector with an empty id and no allDescendants lists direct children in the official emulator; no SDK sends it and Firenook refuses it as an invalid scope"},{"t":"empty-id-direct-children over REST","q":"POST :runQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":false}]}","a":"200 ยท 7 documents","r":"d","k":"status","w":"a selector with an empty id and no allDescendants lists direct children in the official emulator; no SDK sends it and Firenook refuses it as an invalid scope"},{"t":"no token","q":"Listen with no token","a":"ADD, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"empty token","q":"Listen with empty token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"malformed token","q":"Listen with malformed token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"text token","q":"Listen with text token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"token from the other emulator","q":"Listen with token from the other emulator","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"read time a day ago","q":"Listen with read time a day ago","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"behaviour"},{"t":"read time a day ahead","q":"Listen with read time a day ahead","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"read time with nanoseconds","q":"Listen with read time with nanoseconds","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"behaviour"},{"t":"read time zero","q":"Listen with read time zero","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"behaviour"},{"t":"own token after a restart","q":"Listen with own token after a restart","a":"ADD, RESET, CURRENT, NO_CHANGE ยท 0 documents","r":"c","k":"answer"},{"t":"own token after a restart and a write","q":"Listen with own token after a restart and a write","a":"ADD, RESET, documentChange, CURRENT, NO_CHANGE ยท 1 document","r":"c","k":"answer"},{"t":"own token","q":"Listen with own token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"d","k":"answer","w":"a token this run issued replays only what changed since, where the official emulator resends everything; the client ends up with the same data"},{"t":"official export","q":"firebase emulators:export (firebase-tools 15.28.1) of 4 synthetic documents","a":"export written: one all_namespaces/all_kinds LevelDB log (output-0) and its metadata files","r":"u"},{"t":"seed","q":"PATCH /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get mask","q":"GET /notes/a?mask.fieldPaths=title (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get nested mask","q":"GET /notes/a?mask.fieldPaths=nested.one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get absent mask","q":"GET /notes/a?mask.fieldPaths=absent (owner)","a":"200 {name, createTime, updateTime}","r":"c","k":"answer"},{"t":"get repeated mask","q":"GET /notes/a?mask.fieldPaths=title&mask.fieldPaths=visible (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get invalid mask","q":"GET /notes/a?mask.fieldPaths=a..b (owner)","a":"400 INVALID_ARGUMENT: Invalid property path \"a..b\". Unquoted property paths must match regex ([a-zA-Z_][a-zA-Z_0-9]*), and quoted propertyโ€ฆ","r":"c","k":"status"},{"t":"get anonymous","q":"GET /notes/a?mask.fieldPaths=title","a":"403 PERMISSION_DENIED: false for 'get' @ L1","r":"c","k":"status"},{"t":"begin read only","q":"POST :beginTransaction (owner)","a":"200 {transaction}","r":"c","k":"answer"},{"t":"mutate","q":"PATCH /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get current","q":"GET /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get invalid read time","q":"GET /notes/a?readTime=not-a-timestamp (owner)","a":"400 INVALID_ARGUMENT: Only timestamps past epoch are supported.","r":"c","k":"status"},{"t":"batch mask","q":"POST :batchGet (owner)","a":"200 [2 items]","r":"c","k":"answer"},{"t":"batch read only","q":"POST :batchGet (owner)","a":"200 [2 items]","r":"c","k":"answer"},{"t":"batch new read only","q":"POST :batchGet (owner)","a":"200 [3 items]","r":"c","k":"answer"},{"t":"batch read time","q":"POST :batchGet (owner)","a":"200 [2 items]","r":"c","k":"answer"},{"t":"rollback","q":"POST :rollback (owner)","a":"200 {}","r":"c","k":"answer"},{"t":"get in read only","q":"GET /notes/a?transaction=EQcAAAAAAAAA (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook answers from the transaction's snapshot, as the official gRPC GetDocument does"},{"t":"get read only after mutation","q":"GET /notes/a?transaction=EQcAAAAAAAAA&mask.fieldPaths=title (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook answers from the transaction's snapshot, as the official gRPC GetDocument does"},{"t":"get read time","q":"GET /notes/a?readTime=2026-09-10T20%3A35%3A25.241297Z (owner)","a":"400 INVALID_ARGUMENT: Only timestamps past epoch are supported.","r":"d","k":"status","w":"the official REST GET refuses a valid readTime (400) that its batchGet reads at; Firenook reads at it"},{"t":"get selector conflict","q":"GET /notes/a?transaction=EQcAAAAAAAAA&readTime=2026-09-10T20%3A35%3A25.241297Z (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook refuses it with 400"},{"t":"get invalid transaction","q":"GET /notes/a?transaction=YmFk (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook refuses it with 400"},{"t":"get rolled back","q":"GET /notes/a?transaction=EQcAAAAAAAAA (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook answers 409 ABORTED, as the official gRPC GetDocument answers code 10"},{"t":"get in read only","q":"GetDocument get-in-read-only","a":"OK ยท notes/a with title","r":"u"},{"t":"get read only after mutation","q":"GetDocument get-read-only-after-mutation","a":"OK ยท notes/a with title","r":"u"},{"t":"get rolled back","q":"GetDocument get-rolled-back","a":"ABORTED","r":"u"},{"t":"aggregation-composite-filter #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200 [1 item]","r":"c","k":"answer"},{"t":"aggregation-limit-error #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"400 INVALID_ARGUMENT: The maximum number of aggregations allowed in an aggregation query is 5. Received: 6","r":"c","k":"error"},{"t":"cors-preflight #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"c","k":"answer"},{"t":"cors-preflight #2","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {}","r":"c","k":"status"},{"t":"cors-preflight #3","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {}","r":"c","k":"status"},{"t":"transaction-commit #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"400 INVALID_ARGUMENT: Cannot delete then update an entity in the same request.","r":"c","k":"answer"},{"t":"transaction-commit #6","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"status"},{"t":"transaction-commit #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"behaviour"},{"t":"transaction-noop-write #5","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"status"},{"t":"aggregation-composite-filter #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"u"},{"t":"aggregation-count #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"u"},{"t":"aggregation-count #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200 [1 item]","r":"u"},{"t":"aggregation-limit-error #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"u"},{"t":"transaction-commit #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"u"},{"t":"transaction-commit #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-commit #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"u"},{"t":"transaction-commit #5","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-commit #8","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"transaction-commit #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"transaction-commit #12","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"transaction-noop-write #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"u"},{"t":"transaction-noop-write #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-noop-write #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"u"},{"t":"transaction-noop-write #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"u"},{"t":"transaction-noop-write #6","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"u"},{"t":"transaction-noop-write #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"u"},{"t":"backchannel-reconnect-replay #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"backchannel-reconnect-replay #3","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #7","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #11","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #12","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #13","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #15","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #16","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #19","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #20","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-long-poll #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"listen-long-poll #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-streaming #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"listen-streaming #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"multiple-inequality-query #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"multiple-inequality-query #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #6","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #9","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #17","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #2","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #7","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #13","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #14","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #15","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #16","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #19","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #21","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #22","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-long-poll #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-long-poll #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-long-poll #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-overlap #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-overlap #7","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #10","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-streaming #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-streaming #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-streaming #4","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"backchannel-reconnect-replay #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"u"},{"t":"bundle-nanosecond-read-time #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"bundle-nanosecond-read-time #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"u"},{"t":"bundle-nanosecond-read-time #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1","r":"u"},{"t":"bundle-nanosecond-read-time #6","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2","r":"u"},{"t":"bundle-nanosecond-read-time #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange RESET, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"bundle-nanosecond-read-time #14","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1 ร—2","r":"u"},{"t":"bundle-nanosecond-read-time #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange RESET, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"u"},{"t":"listen-long-poll #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"listen-streaming #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"u"},{"t":"multiple-inequality-query #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—3, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"multiple-inequality-query #3","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"u"},{"t":"multiple-inequality-query #5","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange ADD","r":"u"},{"t":"multiple-inequality-query #7","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท documentChange ร—2, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"multiple-inequality-query #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"u"},{"t":"multiple-inequality-query #10","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange ADD","r":"u"},{"t":"multiple-inequality-query #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"u"},{"t":"multiple-inequality-query #13","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange ADD","r":"u"},{"t":"multiple-inequality-query #15","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"u"},{"t":"numeric-resource-id-ordering #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"numeric-resource-id-ordering #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #6","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #9","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #10","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #11","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #12","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #13","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #15","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"numeric-resource-id-ordering #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"u"},{"t":"numeric-resource-id-ordering #17","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #18","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #19","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"numeric-resource-id-ordering #20","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"u"},{"t":"numeric-resource-id-ordering #21","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #22","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1 ร—3","r":"u"},{"t":"numeric-resource-id-ordering #23","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2","r":"u"},{"t":"numeric-resource-id-ordering #24","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"numeric-resource-id-ordering #25","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"numeric-resource-id-ordering #26","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #27","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1 ร—10","r":"u"},{"t":"numeric-resource-id-ordering #28","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #29","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #30","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #31","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #32","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #33","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"numeric-resource-id-ordering #34","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE, noop, targetChange REMOVE","r":"u"},{"t":"numeric-resource-id-ordering #35","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #36","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #37","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"numeric-resource-id-ordering #38","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"numeric-resource-id-ordering #39","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"reserved-resource-id-error #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"reserved-resource-id-error #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"u"},{"t":"reserved-resource-id-error #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"reserved-resource-id-error #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"reserved-resource-id-error #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE, noop","r":"u"},{"t":"reserved-resource-id-error #7","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"unicode-framing #4","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentDelete, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"unicode-framing #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"unicode-framing #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, documentChange","r":"u"},{"t":"unicode-framing #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"u"},{"t":"unicode-framing #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange NO_CHANGE","r":"u"},{"t":"unicode-framing #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"unicode-framing #17","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"u"},{"t":"unicode-framing #18","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop, documentChange, targetChange NO_CHANGE","r":"u"},{"t":"unknown-sid #1","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"400 (empty body)","r":"u"},{"t":"write-batch-six #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-batch-six #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-batch-six #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-batch-six #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—6","r":"u"},{"t":"write-batch-six #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-batch-six #7","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-batch-six #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—6","r":"u"},{"t":"write-batch-six #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-batch-six #10","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-cross-client-update #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"write-cross-client-update #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-cross-client-update #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #9","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"write-cross-client-update #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"write-cross-client-update #13","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"u"},{"t":"write-cross-client-update #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #15","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop","r":"u"},{"t":"write-cross-client-update #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"u"},{"t":"write-cross-client-update #18","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2","r":"u"},{"t":"write-cross-client-update #20","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #21","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #22","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #23","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #24","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #25","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #26","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #27","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #28","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"u"},{"t":"write-cross-client-update #29","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #30","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #31","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop, targetChange REMOVE","r":"u"},{"t":"write-cross-client-update #32","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-cross-client-update #33","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-cross-client-update #34","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"u"},{"t":"write-cross-client-update #35","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #37","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #38","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-cross-client-update #39","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"u"},{"t":"write-long-poll #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-long-poll #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"u"},{"t":"write-missing-update-error #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-missing-update-error #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-missing-update-error #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-missing-update-error #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, error NOT_FOUND: no entity to update: app: \"{project}\" path < Element { type: \"{project}\" name: \"oracle-missing-update\" } >","r":"u"},{"t":"write-missing-update-error #5","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-missing-update-error #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"u"},{"t":"write-missing-update-error #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, error NOT_FOUND: no entity to update: app: \"{project}\" path < Element { type: \"{project}\" name: \"oracle-missing-โ€ฆ","r":"u"},{"t":"write-missing-update-error #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"u"},{"t":"write-missing-update-error #9","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"u"},{"t":"write-overlap #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"u"},{"t":"write-overlap #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1 ร—2","r":"u"},{"t":"write-overlap #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1 ร—2","r":"u"},{"t":"write-streaming #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"u"}]} \ No newline at end of file +{"runs":[[0,1,0,"Browser aggregation serializes multiple where clauses as a composite filter"],[1,2,0,"Browser RunAggregationQuery count request and response envelope"],[3,2,0,"Browser observes the maximum-aggregation validation response"],[5,9,0,"Browser transactions pin multi-write validation, verify writes, and quoted update masks"],[14,7,0,"An identical document replacement preserves the document update time"],[21,1,0,"Browser aggregation serializes multiple where clauses as a composite filter"],[22,3,1,"A lost streaming Listen backchannel reopens with replay bookkeeping"],[25,16,1,"A named query loaded from an SDK bundle resumes Listen from a nanosecond-precision expired read time"],[41,3,1,"Listen handshake and backchannel in forced long-polling mode"],[44,2,1,"Listen handshake and backchannel in streaming mode"],[46,12,1,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[58,44,1,"Signed 64-bit Datastore numeric resource IDs are accepted and sort numerically before ordinary string IDs"],[102,5,1,"A reserved resource ID in a query parent returns the browser-visible INVALID_ARGUMENT contract"],[107,16,1,"CJK, emoji, combining, and mixed text use UTF-16 frame lengths"],[123,1,1,"An unknown session returns the exact browser-visible HTTP 400 body"],[124,35,1,"A second browser client may update a server document absent from its local cache"],[159,5,1,"Write handshake and acknowledgement in forced long-polling mode"],[164,9,1,"A missing-document update returns the browser-visible Firestore Write stream error envelope"],[173,10,1,"Two writes may be in flight with the last acknowledged stream token"],[183,4,1,"Write handshake and acknowledgement in streaming mode"],[187,1,1,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[188,21,2,"Collection ids, document listing, masks and page tokens"],[209,1,2,"Collection ids, document listing, masks and page tokens"],[210,1,3,"Node SDK get() (BatchGetDocuments) of the \"flat\" document"],[211,1,3,"gRPC GetDocument of the \"flat\" document"],[212,1,3,"gRPC ListDocuments of the \"flat\" document"],[213,1,3,"gRPC RunQuery of the \"flat\" document"],[214,1,3,"REST GET document of the \"flat\" document"],[215,1,3,"Node SDK get() (BatchGetDocuments) of the \"nested\" document"],[216,1,3,"gRPC GetDocument of the \"nested\" document"],[217,1,3,"gRPC ListDocuments of the \"nested\" document"],[218,1,3,"gRPC RunQuery of the \"nested\" document"],[219,1,3,"REST GET document of the \"nested\" document"],[220,1,3,"Node SDK get() (BatchGetDocuments) of the \"unicode\" document"],[221,1,3,"gRPC GetDocument of the \"unicode\" document"],[222,1,3,"gRPC ListDocuments of the \"unicode\" document"],[223,1,3,"gRPC RunQuery of the \"unicode\" document"],[224,1,3,"REST GET document of the \"unicode\" document"],[225,1,3,"Node SDK get() (BatchGetDocuments) of the \"wide-mixed-map\" document"],[226,1,3,"gRPC GetDocument of the \"wide-mixed-map\" document"],[227,1,3,"gRPC ListDocuments of the \"wide-mixed-map\" document"],[228,1,3,"gRPC RunQuery of the \"wide-mixed-map\" document"],[229,1,3,"REST GET document of the \"wide-mixed-map\" document"],[230,1,3,"browser SDK server read (long-poll) of the \"flat\" document"],[231,1,3,"browser SDK server read (long-poll) of the \"nested\" document"],[232,1,3,"browser SDK server read (long-poll) of the \"unicode\" document"],[233,1,3,"browser SDK server read (long-poll) of the \"wide-mixed-map\" document"],[234,1,3,"browser SDK server read (streaming) of the \"flat\" document"],[235,1,3,"browser SDK server read (streaming) of the \"nested\" document"],[236,1,3,"browser SDK server read (streaming) of the \"unicode\" document"],[237,1,3,"browser SDK server read (streaming) of the \"wide-mixed-map\" document"],[238,1,4,"Importing an export split across LevelDB shards"],[239,64,6,"Kindless queries (all descendants, no collection id)"],[303,5,6,"Aggregations over a kindless query"],[308,4,6,"A kindless listener"],[312,9,6,"Rules \"allow-all\" for a kindless query"],[321,9,6,"Rules \"signed-in\" for a kindless query"],[330,9,6,"Rules \"list-only\" for a kindless query"],[339,9,6,"Rules \"get-only\" for a kindless query"],[348,9,6,"Rules \"one-collection\" for a kindless query"],[357,9,6,"Rules \"one-group\" for a kindless query"],[366,9,6,"Rules \"one-subtree\" for a kindless query"],[375,9,6,"Rules \"wildcard-subtree\" for a kindless query"],[384,9,6,"Rules \"deny-all\" for a kindless query"],[393,4,6,"One database never sees another"],[397,8,6,"Admin SDK recursiveDelete"],[405,2,6,"Kindless queries (all descendants, no collection id)"],[407,11,7,"A listener resuming with a token or read time"],[418,1,7,"A listener resuming with a token or read time"],[419,1,8,"emulators:export of four synthetic documents"],[420,16,9,"REST read masks, transactions and read times"],[436,3,9,"The same transaction over gRPC GetDocument"],[439,6,9,"REST read masks, transactions and read times"],[445,1,10,"Browser aggregation serializes multiple where clauses as a composite filter"],[446,1,10,"Browser RunAggregationQuery count request and response envelope"],[447,2,10,"Browser observes the maximum-aggregation validation response"],[449,3,10,"Browser Firestore REST v1 calls accept JSON carried as text/plain and require origin-echoing credentialed CORS headers"],[452,9,10,"Browser transactions pin multi-write validation, verify writes, and quoted update masks"],[461,7,10,"An identical document replacement preserves the document update time"],[468,1,10,"Browser aggregation serializes multiple where clauses as a composite filter"],[469,1,10,"Browser RunAggregationQuery count request and response envelope"],[470,1,10,"Browser transactions pin multi-write validation, verify writes, and quoted update masks"],[471,3,11,"A lost streaming Listen backchannel reopens with replay bookkeeping"],[474,17,11,"A named query loaded from an SDK bundle resumes Listen from a nanosecond-precision expired read time"],[491,3,11,"Listen handshake and backchannel in forced long-polling mode"],[494,3,11,"Listen handshake and backchannel in streaming mode"],[497,14,11,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[511,35,11,"Signed 64-bit Datastore numeric resource IDs are accepted and sort numerically before ordinary string IDs"],[546,2,11,"A reserved resource ID in a query parent returns the browser-visible INVALID_ARGUMENT contract"],[548,17,11,"CJK, emoji, combining, and mixed text use UTF-16 frame lengths"],[565,7,11,"A six-mutation browser batch returns one WriteResult per mutation in both WebChannel variants"],[572,29,11,"A second browser client may update a server document absent from its local cache"],[601,5,11,"Write handshake and acknowledgement in forced long-polling mode"],[606,5,11,"A missing-document update returns the browser-visible Firestore Write stream error envelope"],[611,9,11,"Two writes may be in flight with the last acknowledged stream token"],[620,4,11,"Write handshake and acknowledgement in streaming mode"],[624,2,11,"Browser queries pin special-value range filtering, multiple-inequality ordering, and key-order validation"],[626,4,11,"Signed 64-bit Datastore numeric resource IDs are accepted and sort numerically before ordinary string IDs"],[630,4,11,"A reserved resource ID in a query parent returns the browser-visible INVALID_ARGUMENT contract"],[634,1,11,"CJK, emoji, combining, and mixed text use UTF-16 frame lengths"],[635,1,11,"An unknown session returns the exact browser-visible HTTP 400 body"],[636,2,11,"A six-mutation browser batch returns one WriteResult per mutation in both WebChannel variants"],[638,8,11,"A second browser client may update a server document absent from its local cache"],[646,4,11,"A missing-document update returns the browser-visible Firestore Write stream error envelope"]],"cases":[{"t":"aggregation-composite-filter #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"c","k":"answer"},{"t":"aggregation-count #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"c","k":"answer"},{"t":"aggregation-count #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200 [1 item]","r":"c","k":"answer"},{"t":"aggregation-limit-error #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"c","k":"answer"},{"t":"aggregation-limit-error #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"400 INVALID_ARGUMENT: The maximum number of aggregations allowed in an aggregation query is 5. Received: 6","r":"c","k":"error"},{"t":"transaction-commit #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"c","k":"answer"},{"t":"transaction-commit #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-commit #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"c","k":"answer"},{"t":"transaction-commit #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"400 INVALID_ARGUMENT: Cannot delete then update an entity in the same request.","r":"c","k":"answer"},{"t":"transaction-commit #5","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-commit #6","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"transaction-commit #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"transaction-commit #8","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"transaction-commit #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"c","k":"behaviour"},{"t":"transaction-noop-write #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"c","k":"answer"},{"t":"transaction-noop-write #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-noop-write #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"c","k":"answer"},{"t":"transaction-noop-write #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"transaction-noop-write #5","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"transaction-noop-write #6","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-noop-write #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"aggregation-composite-filter #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"400 FAILED_PRECONDITION: The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/{project}/fiโ€ฆ","r":"d","k":"status","w":"with --strict-indexes an aggregation whose composite index is not declared is refused with FAILED_PRECONDITION as production does, here for a count and sum over two equality filters, which merged single-field indexes do not serve; the message is Firenook's own, naming the entry to add to firestore.indexes.json (COMPATIBILITY.md)"},{"t":"backchannel-reconnect-replay #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"backchannel-reconnect-replay #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—3","r":"c","k":"behaviour"},{"t":"backchannel-reconnect-replay #3","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #6","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #7","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, targetChange RESET, documentChange, targetChange CURRโ€ฆ","r":"c","k":"behaviour"},{"t":"bundle-nanosecond-read-time #11","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #12","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #13","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #14","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1 ร—2","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #15","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #16","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"behaviour"},{"t":"bundle-nanosecond-read-time #19","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-long-poll #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"listen-long-poll #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"c","k":"behaviour"},{"t":"listen-long-poll #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-streaming #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"listen-streaming #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"c","k":"behaviour"},{"t":"multiple-inequality-query #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"multiple-inequality-query #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—3, targetChange CURRENT, targetChange NO_CHANGE, existenceFilter, targetChange NO_CHANGE","r":"c","k":"behaviour"},{"t":"multiple-inequality-query #3","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"c","k":"answer"},{"t":"multiple-inequality-query #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD","r":"c","k":"answer"},{"t":"multiple-inequality-query #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"c","k":"answer"},{"t":"multiple-inequality-query #9","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #10","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD","r":"c","k":"answer"},{"t":"multiple-inequality-query #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"c","k":"answer"},{"t":"multiple-inequality-query #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #5","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #6","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #7","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #11","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #12","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #13","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #15","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE, existenceFilter, targetChange NO_CHANGE","r":"c","k":"behaviour"},{"t":"numeric-resource-id-ordering #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #17","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #18","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #19","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #20","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #21","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #22","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #23","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #24","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1 ร—2","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #25","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1 ร—2","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #27","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #28","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #29","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #30","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1 ร—10","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #31","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #32","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #33","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #34","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #35","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #36","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #37","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE, existenceFilter, targetChange NO_CHANGE, targetChaโ€ฆ","r":"c","k":"behaviour"},{"t":"numeric-resource-id-ordering #38","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #39","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #40","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #41","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #42","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #43","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #44","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #45","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"reserved-resource-id-error #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"reserved-resource-id-error #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange REMOVE","r":"c","k":"answer"},{"t":"reserved-resource-id-error #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"reserved-resource-id-error #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"reserved-resource-id-error #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange REMOVE","r":"c","k":"answer"},{"t":"unicode-framing #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #2","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #3","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"unicode-framing #4","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentDelete, targetChange CURRENT, targetChange NO_CHANGE, documentDelete, targetChange NO_CHANGE","r":"c","k":"behaviour"},{"t":"unicode-framing #5","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, documentChange","r":"c","k":"answer"},{"t":"unicode-framing #6","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"unicode-framing #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"unicode-framing #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"unicode-framing #13","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #15","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #16","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"c","k":"answer"},{"t":"unicode-framing #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"c","k":"behaviour"},{"t":"unicode-framing #18","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #21","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unknown-sid #1","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"400 HTML page \"Error 400 (Bad Request)!!1\"","r":"c","k":"answer"},{"t":"write-cross-client-update #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-cross-client-update #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"write-cross-client-update #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-cross-client-update #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #9","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"write-cross-client-update #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—3","r":"c","k":"behaviour"},{"t":"write-cross-client-update #13","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange REMOVE","r":"c","k":"answer"},{"t":"write-cross-client-update #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #15","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—3","r":"c","k":"behaviour"},{"t":"write-cross-client-update #19","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #21","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #22","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #23","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #24","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #25","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #26","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #27","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #28","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #29","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #30","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #31","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2, targetChange REMOVE","r":"c","k":"behaviour"},{"t":"write-cross-client-update #32","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #33","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-cross-client-update #34","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE ร—2","r":"c","k":"behaviour"},{"t":"write-cross-client-update #35","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #37","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #38","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #39","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-long-poll #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-long-poll #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-long-poll #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-long-poll #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"write-long-poll #5","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-missing-update-error #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-missing-update-error #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-missing-update-error #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-missing-update-error #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, __sm__, close","r":"c","k":"answer"},{"t":"write-missing-update-error #5","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-missing-update-error #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"answer"},{"t":"write-missing-update-error #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, __sm__, close","r":"c","k":"answer"},{"t":"write-missing-update-error #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-missing-update-error #9","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-overlap #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-overlap #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"write-overlap #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1","r":"c","k":"answer"},{"t":"write-overlap #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-overlap #7","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1 ร—2","r":"c","k":"answer"},{"t":"write-overlap #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #10","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-streaming #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-streaming #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, writeResults ร—1","r":"c","k":"answer"},{"t":"write-streaming #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-streaming #4","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"multiple-inequality-query #7","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"d","k":"status","w":"with --strict-indexes a query whose composite index is not declared is refused with FAILED_PRECONDITION as production does; the message is Firenook's own, naming the entry to add to firestore.indexes.json (COMPATIBILITY.md)"},{"t":"seed-notes/a","q":"PATCH /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"seed-notes/b","q":"PATCH /notes/b (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"seed-notes/missing/children/one","q":"PATCH /notes/missing/children/one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"seed-other/z","q":"PATCH /other/z (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"root ids empty body","q":"POST :listCollectionIds (owner)","a":"200 ยท 2 collection ids","r":"c","k":"answer"},{"t":"nested ids empty body","q":"POST /notes/missing:listCollectionIds (owner)","a":"200 ยท 1 collection id","r":"c","k":"answer"},{"t":"ids anonymous","q":"POST :listCollectionIds","a":"403 PERMISSION_DENIED: Metadata operations require admin authentication.","r":"c","k":"status"},{"t":"list default","q":"GET /notes (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list show missing","q":"GET /notes?showMissing=true (owner)","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"list desc","q":"GET /notes?orderBy=title%20desc (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list mask","q":"GET /notes?mask.fieldPaths=title (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list empty mask","q":"GET /notes?mask.fieldPaths=absent (owner)","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"list anonymous","q":"GET /notes","a":"403 PERMISSION_DENIED: false for 'list' @ L1","r":"c","k":"status"},{"t":"list empty","q":"GET /empty (owner)","a":"200 {}","r":"c","k":"answer"},{"t":"list conflicting order","q":"GET /notes?showMissing=true&orderBy=title (owner)","a":"400 INVALID_ARGUMENT: cannot specify an order when show_missing is true","r":"c","k":"status"},{"t":"list page 1","q":"GET /notes?pageSize=1 (owner)","a":"200 ยท 1 document, next page token","r":"c","k":"answer"},{"t":"list page 2","q":"GET /notes?pageSize=1&pageToken=CkRwcm9qZWN0cy9kZW1vLWZpcmVzaWRlLWxpc3RpbmcvZGF0YWJhc2VzLyhkZWZhdWx0KS9kb2N1bWVudHMvbm90ZXMvYRIIgq7GejCYclYโ€ฆ","a":"200 ยท 1 document, next page token","r":"c","k":"answer"},{"t":"list page 3","q":"GET /notes?pageSize=1&pageToken=CkRwcm9qZWN0cy9kZW1vLWZpcmVzaWRlLWxpc3RpbmcvZGF0YWJhc2VzLyhkZWZhdWx0KS9kb2N1bWVudHMvbm90ZXMvYhIIVXZZZ%2Bl29โ€ฆ","a":"200 {}","r":"c","k":"answer"},{"t":"ids page 1","q":"POST :listCollectionIds (owner)","a":"200 ยท 1 collection id, next page token","r":"c","k":"answer"},{"t":"ids page 2","q":"POST :listCollectionIds (owner)","a":"200 ยท 1 collection id, next page token","r":"c","k":"answer"},{"t":"ids page 3","q":"POST :listCollectionIds (owner)","a":"200 {}","r":"c","k":"answer"},{"t":"list invalid size","q":"GET /notes?pageSize=invalid (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official emulator never answered this request (recorded as a timeout); Firenook answers 400 INVALID_ARGUMENT instead of hanging"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): flat","a":"{\"zulu\":\"last\",\"alpha\":\"first\",\"middle\":true,\"number\":42,\"nullable\":null}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: flat","a":"{\"zulu\":{\"stringValue\":\"last\",\"valueType\":\"stringValue\"},\"alpha\":{\"stringValue\":\"first\",\"valueType\":\"stringValue\"},\"middle\":{\"booleanValue\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: flat","a":"{\"zulu\":{\"stringValue\":\"last\",\"valueType\":\"stringValue\"},\"alpha\":{\"stringValue\":\"first\",\"valueType\":\"stringValue\"},\"middle\":{\"booleanValue\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: flat","a":"{\"zulu\":{\"stringValue\":\"last\",\"valueType\":\"stringValue\"},\"alpha\":{\"stringValue\":\"first\",\"valueType\":\"stringValue\"},\"middle\":{\"booleanValue\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: flat","a":"{\"zulu\":{\"stringValue\":\"last\"},\"alpha\":{\"stringValue\":\"first\"},\"middle\":{\"booleanValue\":true},\"number\":{\"integerValue\":\"42\"},\"nullable\":{\"nโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): nested","a":"{\"zulu\":{\"third\":3,\"first\":1,\"second\":2},\"array\":[{\"z\":\"z\",\"a\":\"a\",\"m\":\"m\"},{\"nested\":{\"right\":false,\"left\":true}}],\"emptyMap\":{},\"emptyArrโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\",\"valueType\":\"integerValue\"},\"first\":{\"integerValue\":\"1\",\"valueType\":\"integerValuโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\",\"valueType\":\"integerValue\"},\"first\":{\"integerValue\":\"1\",\"valueType\":\"integerValuโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\",\"valueType\":\"integerValue\"},\"first\":{\"integerValue\":\"1\",\"valueType\":\"integerValuโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: nested","a":"{\"zulu\":{\"mapValue\":{\"fields\":{\"third\":{\"integerValue\":\"3\"},\"first\":{\"integerValue\":\"1\"},\"second\":{\"integerValue\":\"2\"}}}},\"array\":{\"arrayVaโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): unicode","a":"{\"2\":\"two\",\"10\":\"ten\",\"ๆผขๅญ—\":\"่ณ‡ๆ–™\",\"๐Ÿ˜€\":\"emoji\",\"รฉ\":\"accent\",\"mixed\":{\"๐Ÿงช\":\"ๅฎž้ชŒ\",\"latin\":\"Cafรฉ\",\"ๆ—ฅๆœฌ่ชž\":\"ๅ€ค\"}}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: unicode","a":"{\"2\":{\"stringValue\":\"two\",\"valueType\":\"stringValue\"},\"10\":{\"stringValue\":\"ten\",\"valueType\":\"stringValue\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\",\"valueTyโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: unicode","a":"{\"2\":{\"stringValue\":\"two\",\"valueType\":\"stringValue\"},\"10\":{\"stringValue\":\"ten\",\"valueType\":\"stringValue\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\",\"valueTyโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: unicode","a":"{\"2\":{\"stringValue\":\"two\",\"valueType\":\"stringValue\"},\"10\":{\"stringValue\":\"ten\",\"valueType\":\"stringValue\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\",\"valueTyโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: unicode","a":"{\"2\":{\"stringValue\":\"two\"},\"10\":{\"stringValue\":\"ten\"},\"ๆผขๅญ—\":{\"stringValue\":\"่ณ‡ๆ–™\"},\"๐Ÿ˜€\":{\"stringValue\":\"emoji\"},\"รฉ\":{\"stringValue\":\"accent\"},\"โ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"Node SDK get() (BatchGetDocuments): wide-mixed-map","a":"{\"stringField\":\"value\",\"stringArray\":[\"item-one\"],\"label\":\"Synthetic record\",\"objectWithEmptyArray\":{\"tag\":\"plain\",\"items\":[]},\"objectWithNโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC GetDocument: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\",\"valueType\":\"stringValue\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\",\"valueTypโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC ListDocuments: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\",\"valueType\":\"stringValue\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\",\"valueTypโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"gRPC RunQuery: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\",\"valueType\":\"stringValue\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\",\"valueTypโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"REST GET document: wide-mixed-map","a":"{\"stringField\":{\"stringValue\":\"value\"},\"stringArray\":{\"arrayValue\":{\"values\":[{\"stringValue\":\"item-one\"}]}},\"label\":{\"stringValue\":\"Synthetโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): flat","a":"{\"zulu\":\"last\",\"alpha\":\"first\",\"middle\":true,\"number\":42,\"nullable\":null}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): nested","a":"{\"zulu\":{\"third\":3,\"first\":1,\"second\":2},\"array\":[{\"z\":\"z\",\"a\":\"a\",\"m\":\"m\"},{\"nested\":{\"right\":false,\"left\":true}}],\"emptyMap\":{},\"emptyArrโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): unicode","a":"{\"2\":\"two\",\"10\":\"ten\",\"ๆผขๅญ—\":\"่ณ‡ๆ–™\",\"๐Ÿ˜€\":\"emoji\",\"รฉ\":\"accent\",\"mixed\":{\"๐Ÿงช\":\"ๅฎž้ชŒ\",\"latin\":\"Cafรฉ\",\"ๆ—ฅๆœฌ่ชž\":\"ๅ€ค\"}}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (long-poll): wide-mixed-map","a":"{\"stringField\":\"value\",\"stringArray\":[\"item-one\"],\"label\":\"Synthetic record\",\"objectWithEmptyArray\":{\"tag\":\"plain\",\"items\":[]},\"objectWithNโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): flat","a":"{\"zulu\":\"last\",\"alpha\":\"first\",\"middle\":true,\"number\":42,\"nullable\":null}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): nested","a":"{\"zulu\":{\"third\":3,\"first\":1,\"second\":2},\"array\":[{\"z\":\"z\",\"a\":\"a\",\"m\":\"m\"},{\"nested\":{\"right\":false,\"left\":true}}],\"emptyMap\":{},\"emptyArrโ€ฆ","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): unicode","a":"{\"2\":\"two\",\"10\":\"ten\",\"ๆผขๅญ—\":\"่ณ‡ๆ–™\",\"๐Ÿ˜€\":\"emoji\",\"รฉ\":\"accent\",\"mixed\":{\"๐Ÿงช\":\"ๅฎž้ชŒ\",\"latin\":\"Cafรฉ\",\"ๆ—ฅๆœฌ่ชž\":\"ๅ€ค\"}}, the same each time","r":"c","k":"answer"},{"t":"read 8 times","q":"browser SDK server read (streaming): wide-mixed-map","a":"{\"stringField\":\"value\",\"stringArray\":[\"item-one\"],\"label\":\"Synthetic record\",\"objectWithEmptyArray\":{\"tag\":\"plain\",\"items\":[]},\"objectWithNโ€ฆ","r":"c","k":"answer"},{"t":"import","q":"import an export of 4 shards","a":"import accepted ยท 4 documents verified","r":"c","k":"behaviour"},{"t":"root-all over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"root-all over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 14 documents","r":"c","k":"answer"},{"t":"root-explicit-empty-id over gRPC","q":"RunQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":true}]}","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"root-explicit-empty-id over REST","q":"POST :runQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":true}]}","a":"200 ยท 14 documents","r":"c","k":"answer"},{"t":"under-document over gRPC","q":"RunQuery under top/parent: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 3 documents","r":"c","k":"answer"},{"t":"under-document over REST","q":"POST :runQuery under top/parent: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"under-missing-document over gRPC","q":"RunQuery under rd/ghost: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"under-missing-document over REST","q":"POST :runQuery under rd/ghost: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 1 document","r":"c","k":"answer"},{"t":"under-nothing over gRPC","q":"RunQuery under nope/nope: {\"from\":[{\"allDescendants\":true}]}","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"under-nothing over REST","q":"POST :runQuery under nope/nope: {\"from\":[{\"allDescendants\":true}]}","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"sdk-range-root over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"op\":\"ANโ€ฆ","a":"OK ยท 6 documents","r":"c","k":"answer"},{"t":"sdk-range-root over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"oโ€ฆ","a":"200 ยท 6 documents","r":"c","k":"answer"},{"t":"sdk-range-sub over gRPC","q":"RunQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"opโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"sdk-range-sub over REST","q":"POST :runQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilterโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"sdk-range-small-limit over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"op\":\"ANโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"sdk-range-small-limit over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"__name__\"}]},\"where\":{\"compositeFilter\":{\"oโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"limit over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":3}}","a":"OK ยท 3 documents","r":"c","k":"answer"},{"t":"limit over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":3}}","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"limit-zero over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":0}}","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"limit-zero over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"limit\":{\"value\":0}}","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"offset over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"offset\":2,\"limit\":{\"value\":2}}","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"offset over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"offset\":2,\"limit\":{\"value\":2}}","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"start-after over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startAt\":{\"โ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"start-after over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"start-at over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startAt\":{\"โ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"start-at over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"startโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"end-before over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAt\":{\"vaโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"end-before over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAtโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"end-at over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAt\":{\"vaโ€ฆ","a":"OK ยท 3 documents","r":"c","k":"answer"},{"t":"end-at over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"ASCENDING\"}],\"endAtโ€ฆ","a":"200 ยท 3 documents","r":"c","k":"answer"},{"t":"name-equal over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"value\":{\"refโ€ฆ","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"name-equal over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"value\"โ€ฆ","a":"200 ยท 1 document","r":"c","k":"answer"},{"t":"name-equal-outside-parent over gRPC","q":"RunQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"value\":โ€ฆ","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"name-equal-outside-parent over REST","q":"POST :runQuery under top/parent: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"EQUAL\",\"vโ€ฆ","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"name-in over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"IN\",\"value\":{\"arrayVโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-in over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"IN\",\"value\":{\"โ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-equal over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_EQUAL\",\"value\":{โ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-equal over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_EQUAL\",\"vaโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-in over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_IN\",\"value\":{\"arโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-in over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"NOT_IN\",\"valueโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-or over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"OR\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fieldPatโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-or over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"OR\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fiโ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-greater-than over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",\"valueโ€ฆ","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"name-greater-than over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",โ€ฆ","a":"200 ยท 2 documents","r":"c","k":"answer"},{"t":"name-not-a-reference over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",\"valueโ€ฆ","a":"INVALID_ARGUMENT: __key__ filter value must be a Key","r":"c","k":"error"},{"t":"name-not-a-reference over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"__name__\"},\"op\":\"GREATER_THAN\",โ€ฆ","a":"400 __key__ filter value must be a Key","r":"c","k":"error"},{"t":"name-descending over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"DESCENDING\"}],\"limit\":{\"vโ€ฆ","a":"FAILED_PRECONDITION: Firestore does not support descending key scans","r":"c","k":"error"},{"t":"name-descending over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"__name__\"},\"direction\":\"DESCENDING\"}],\"limiโ€ฆ","a":"400 Firestore does not support descending key scans","r":"c","k":"error"},{"t":"field-equal over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"EQUAL\",\"value\":{\"integerValโ€ฆ","a":"INVALID_ARGUMENT: kind is required for filter: n","r":"c","k":"error"},{"t":"field-equal over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"EQUAL\",\"value\":{\"inteโ€ฆ","a":"400 kind is required for filter: n","r":"c","k":"error"},{"t":"field-inequality over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"GREATER_THAN\",\"value\":{\"intโ€ฆ","a":"INVALID_ARGUMENT: kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-inequality over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"fieldFilter\":{\"field\":{\"fieldPath\":\"n\"},\"op\":\"GREATER_THAN\",\"value\"โ€ฆ","a":"400 kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-unary over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"unaryFilter\":{\"field\":{\"fieldPath\":\"missing\"},\"op\":\"IS_NULL\"}}}","a":"INVALID_ARGUMENT: kind is required for filter: missing","r":"c","k":"error"},{"t":"field-unary over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"unaryFilter\":{\"field\":{\"fieldPath\":\"missing\"},\"op\":\"IS_NULL\"}}}","a":"400 kind is required for filter: missing","r":"c","k":"error"},{"t":"field-order over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"n\"},\"direction\":\"ASCENDING\"}],\"limit\":{\"value\":2}}","a":"INVALID_ARGUMENT: kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-order over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"orderBy\":[{\"field\":{\"fieldPath\":\"n\"},\"direction\":\"ASCENDING\"}],\"limit\":{\"valโ€ฆ","a":"400 kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"field-in-composite over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"AND\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fieldPaโ€ฆ","a":"INVALID_ARGUMENT: kind is required for filter: n","r":"c","k":"error"},{"t":"field-in-composite over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"where\":{\"compositeFilter\":{\"op\":\"AND\",\"filters\":[{\"fieldFilter\":{\"field\":{\"fโ€ฆ","a":"400 kind is required for filter: n","r":"c","k":"error"},{"t":"select-field over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"n\"}]},\"limit\":{\"value\":1}}","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"select-field over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"select\":{\"fields\":[{\"fieldPath\":\"n\"}]},\"limit\":{\"value\":1}}","a":"200 ยท 1 document","r":"c","k":"answer"},{"t":"nearest over gRPC","q":"RunQuery at the root: {\"from\":[{\"allDescendants\":true}],\"findNearest\":{\"vectorField\":{\"fieldPath\":\"v\"},\"queryVector\":{\"mapValue\":{\"fields\":โ€ฆ","a":"OK ยท 0 documents","r":"c","k":"answer"},{"t":"nearest over REST","q":"POST :runQuery at the root: {\"from\":[{\"allDescendants\":true}],\"findNearest\":{\"vectorField\":{\"fieldPath\":\"v\"},\"queryVector\":{\"mapValue\":{\"fiโ€ฆ","a":"200 ยท 0 documents","r":"c","k":"answer"},{"t":"parent-is-a-collection over gRPC","q":"RunQuery under top: {\"from\":[{\"allDescendants\":true}]}","a":"INVALID_ARGUMENT: Document parent name \"projects/{project}/databases/(default)/documents/top\" lacks \"/\" at index 65.","r":"c","k":"error"},{"t":"parent-is-a-collection over REST","q":"POST :runQuery under top: {\"from\":[{\"allDescendants\":true}]}","a":"400 Document parent name \"projects/{project}/databases/(default)/documents/top\" lacks \"/\" at index 65.","r":"c","k":"error"},{"t":"count root","q":"RunAggregationQuery count-root","a":"OK ยท value 14","r":"c","k":"answer"},{"t":"count under document","q":"RunAggregationQuery count-under-document","a":"OK ยท value 3","r":"c","k":"answer"},{"t":"count sdk range","q":"RunAggregationQuery count-sdk-range","a":"OK ยท value 6","r":"c","k":"answer"},{"t":"count limit","q":"RunAggregationQuery count-limit","a":"OK ยท value 4","r":"c","k":"answer"},{"t":"sum","q":"RunAggregationQuery sum","a":"INVALID_ARGUMENT: kind is required for all orders except __key__ ascending","r":"c","k":"error"},{"t":"root","q":"Listen root","a":"OK ยท 14 documents, 0 changes after","r":"c","k":"answer"},{"t":"sdk range","q":"Listen sdk-range","a":"OK ยท 6 documents, 0 changes after","r":"c","k":"answer"},{"t":"changes under document","q":"Listen changes-under-document","a":"OK ยท 3 documents, 0 changes after","r":"c","k":"answer"},{"t":"control collection","q":"Listen control-collection","a":"OK ยท 1 document, 4 changes after","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules allow-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules allow-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules allow-all)","a":"OK","r":"c","k":"answer"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules allow-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules allow-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules allow-all)","a":"OK","r":"c","k":"answer"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules allow-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules allow-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules allow-all)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules signed-in)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules signed-in)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules signed-in)","a":"OK","r":"c","k":"answer"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules signed-in)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules signed-in)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules signed-in)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules signed-in)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules signed-in)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules signed-in)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules list-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules list-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules list-only)","a":"OK","r":"c","k":"answer"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules list-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules list-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules list-only)","a":"OK","r":"c","k":"answer"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules list-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules list-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules list-only)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules get-only)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules get-only)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules get-only)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules get-only)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules one-collection)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules one-collection)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules one-collection)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules one-collection)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules one-group)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules one-group)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules one-group)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules one-group)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules one-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules one-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules one-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules one-subtree)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules one-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules one-subtree)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules wildcard-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules wildcard-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules wildcard-subtree)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules wildcard-subtree)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules wildcard-subtree)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules wildcard-subtree)","a":"OK","r":"c","k":"answer"},{"t":"user: RunQuery at the root","q":"RunQuery at the root as user (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: RunQuery under top/parent","q":"RunQuery under top/parent as user (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"user: Listen at the root","q":"Listen at the root as user (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery at the root","q":"RunQuery at the root as signed-out (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: RunQuery under top/parent","q":"RunQuery under top/parent as signed-out (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"signed-out: Listen at the root","q":"Listen at the root as signed-out (rules deny-all)","a":"PERMISSION_DENIED","r":"c","k":"status"},{"t":"owner: RunQuery at the root","q":"RunQuery at the root as owner (rules deny-all)","a":"OK ยท first documents rc/a, rd/__id5__","r":"c","k":"answer"},{"t":"owner: RunQuery under top/parent","q":"RunQuery under top/parent as owner (rules deny-all)","a":"OK ยท first documents top/parent/c1/one, top/parent/c1/one/c2/two","r":"c","k":"answer"},{"t":"owner: Listen at the root","q":"Listen at the root as owner (rules deny-all)","a":"OK","r":"c","k":"answer"},{"t":"kindless query on the named database","q":"kindless query on the named database","a":"OK ยท 2 documents","r":"c","k":"answer"},{"t":"kindless query on (default)","q":"kindless query on (default)","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"named database after recursiveDelete on (default)","q":"named database after recursiveDelete on (default)","a":"OK ยท 1 document","r":"c","k":"answer"},{"t":"(default) after recursiveDelete on the named database","q":"(default) after recursiveDelete on the named database","a":"OK ยท 14 documents","r":"c","k":"answer"},{"t":"root collection","q":"recursiveDelete root-collection","a":"completed ยท 8 documents left","r":"c","k":"behaviour"},{"t":"document","q":"recursiveDelete document","a":"completed ยท 10 documents left","r":"c","k":"behaviour"},{"t":"subcollection","q":"recursiveDelete subcollection","a":"completed ยท 12 documents left","r":"c","k":"behaviour"},{"t":"document under collection","q":"recursiveDelete document-under-collection","a":"completed ยท 11 documents left","r":"c","k":"behaviour"},{"t":"missing document with children","q":"recursiveDelete missing-document-with-children","a":"completed ยท 13 documents left","r":"c","k":"behaviour"},{"t":"nothing there","q":"recursiveDelete nothing-there","a":"completed ยท 14 documents left","r":"c","k":"behaviour"},{"t":"more than one page","q":"recursiveDelete more-than-one-page","a":"completed ยท 14 documents left","r":"c","k":"behaviour"},{"t":"custom writer","q":"recursiveDelete custom-writer","a":"completed ยท 12 documents left","r":"c","k":"behaviour"},{"t":"empty-id-direct-children over gRPC","q":"RunQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":false}]}","a":"OK ยท 7 documents","r":"d","k":"status","w":"a selector with an empty id and no allDescendants lists direct children in the official emulator; no SDK sends it and Firenook refuses it as an invalid scope"},{"t":"empty-id-direct-children over REST","q":"POST :runQuery at the root: {\"from\":[{\"collectionId\":\"\",\"allDescendants\":false}]}","a":"200 ยท 7 documents","r":"d","k":"status","w":"a selector with an empty id and no allDescendants lists direct children in the official emulator; no SDK sends it and Firenook refuses it as an invalid scope"},{"t":"no token","q":"Listen with no token","a":"ADD, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"empty token","q":"Listen with empty token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"malformed token","q":"Listen with malformed token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"text token","q":"Listen with text token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"token from the other emulator","q":"Listen with token from the other emulator","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"read time a day ago","q":"Listen with read time a day ago","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"behaviour"},{"t":"read time a day ahead","q":"Listen with read time a day ahead","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"answer"},{"t":"read time with nanoseconds","q":"Listen with read time with nanoseconds","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"behaviour"},{"t":"read time zero","q":"Listen with read time zero","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"c","k":"behaviour"},{"t":"own token after a restart","q":"Listen with own token after a restart","a":"ADD, RESET, CURRENT, NO_CHANGE ยท 0 documents","r":"c","k":"answer"},{"t":"own token after a restart and a write","q":"Listen with own token after a restart and a write","a":"ADD, RESET, documentChange, CURRENT, NO_CHANGE ยท 1 document","r":"c","k":"answer"},{"t":"own token","q":"Listen with own token","a":"ADD, RESET, documentChange ร—3, CURRENT, NO_CHANGE ยท 3 documents","r":"d","k":"answer","w":"a token this run issued replays only what changed since, where the official emulator resends everything; the client ends up with the same data"},{"t":"official export","q":"firebase emulators:export (firebase-tools 15.28.1) of 4 synthetic documents","a":"export written: one all_namespaces/all_kinds LevelDB log (output-0) and its metadata files","r":"c","k":"behaviour"},{"t":"seed","q":"PATCH /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get mask","q":"GET /notes/a?mask.fieldPaths=title (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get nested mask","q":"GET /notes/a?mask.fieldPaths=nested.one (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get absent mask","q":"GET /notes/a?mask.fieldPaths=absent (owner)","a":"200 {name, createTime, updateTime}","r":"c","k":"answer"},{"t":"get repeated mask","q":"GET /notes/a?mask.fieldPaths=title&mask.fieldPaths=visible (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get invalid mask","q":"GET /notes/a?mask.fieldPaths=a..b (owner)","a":"400 INVALID_ARGUMENT: Invalid property path \"a..b\". Unquoted property paths must match regex ([a-zA-Z_][a-zA-Z_0-9]*), and quoted propertyโ€ฆ","r":"c","k":"status"},{"t":"get anonymous","q":"GET /notes/a?mask.fieldPaths=title","a":"403 PERMISSION_DENIED: false for 'get' @ L1","r":"c","k":"status"},{"t":"begin read only","q":"POST :beginTransaction (owner)","a":"200 {transaction}","r":"c","k":"answer"},{"t":"mutate","q":"PATCH /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get current","q":"GET /notes/a (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"get invalid read time","q":"GET /notes/a?readTime=not-a-timestamp (owner)","a":"400 INVALID_ARGUMENT: Only timestamps past epoch are supported.","r":"c","k":"status"},{"t":"batch mask","q":"POST :batchGet (owner)","a":"200 [2 items]","r":"c","k":"answer"},{"t":"batch read only","q":"POST :batchGet (owner)","a":"200 [2 items]","r":"c","k":"answer"},{"t":"batch new read only","q":"POST :batchGet (owner)","a":"200 [3 items]","r":"c","k":"answer"},{"t":"batch read time","q":"POST :batchGet (owner)","a":"200 [2 items]","r":"c","k":"answer"},{"t":"rollback","q":"POST :rollback (owner)","a":"200 {}","r":"c","k":"answer"},{"t":"get in read only","q":"GetDocument get-in-read-only","a":"OK ยท notes/a with title","r":"c","k":"answer"},{"t":"get read only after mutation","q":"GetDocument get-read-only-after-mutation","a":"OK ยท notes/a with title","r":"c","k":"answer"},{"t":"get rolled back","q":"GetDocument get-rolled-back","a":"ABORTED","r":"c","k":"error"},{"t":"get in read only","q":"GET /notes/a?transaction=EQcAAAAAAAAA (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook answers from the transaction's snapshot, as the official gRPC GetDocument does"},{"t":"get read only after mutation","q":"GET /notes/a?transaction=EQcAAAAAAAAA&mask.fieldPaths=title (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook answers from the transaction's snapshot, as the official gRPC GetDocument does"},{"t":"get read time","q":"GET /notes/a?readTime=2026-09-10T20%3A35%3A25.241297Z (owner)","a":"400 INVALID_ARGUMENT: Only timestamps past epoch are supported.","r":"d","k":"status","w":"the official REST GET refuses a valid readTime (400) that its batchGet reads at; Firenook reads at it"},{"t":"get selector conflict","q":"GET /notes/a?transaction=EQcAAAAAAAAA&readTime=2026-09-10T20%3A35%3A25.241297Z (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook refuses it with 400"},{"t":"get invalid transaction","q":"GET /notes/a?transaction=YmFk (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook refuses it with 400"},{"t":"get rolled back","q":"GET /notes/a?transaction=EQcAAAAAAAAA (owner)","a":"no answer (timed out)","r":"d","k":"status","w":"the official REST GET never answered this read (recorded as a timeout); Firenook answers 409 ABORTED, as the official gRPC GetDocument answers code 10"},{"t":"aggregation-composite-filter #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"c","k":"answer"},{"t":"aggregation-count #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"c","k":"answer"},{"t":"aggregation-limit-error #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200","r":"c","k":"answer"},{"t":"aggregation-limit-error #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"400 INVALID_ARGUMENT: The maximum number of aggregations allowed in an aggregation query is 5. Received: 6","r":"c","k":"error"},{"t":"cors-preflight #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"c","k":"answer"},{"t":"cors-preflight #2","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {}","r":"c","k":"status"},{"t":"cors-preflight #3","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {}","r":"c","k":"status"},{"t":"transaction-commit #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"c","k":"answer"},{"t":"transaction-commit #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-commit #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"c","k":"answer"},{"t":"transaction-commit #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"400 INVALID_ARGUMENT: Cannot delete then update an entity in the same request.","r":"c","k":"answer"},{"t":"transaction-commit #5","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-commit #6","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"status"},{"t":"transaction-commit #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"behaviour"},{"t":"transaction-commit #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"transaction-commit #12","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"transaction-noop-write #1","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200","r":"c","k":"answer"},{"t":"transaction-noop-write #2","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-noop-write #3","q":"OPTIONS /v1/projects/{project}/databases/(default)/documents:commit","a":"200","r":"c","k":"answer"},{"t":"transaction-noop-write #4","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"transaction-noop-write #5","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"status"},{"t":"transaction-noop-write #6","q":"POST /v1/projects/{project}/databases/(default)/documents:batchGet","a":"200 [1 item]","r":"c","k":"answer"},{"t":"transaction-noop-write #7","q":"POST /v1/projects/{project}/databases/(default)/documents:commit","a":"200 {writeResults, commitTime}","r":"c","k":"answer"},{"t":"aggregation-composite-filter #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200 [1 item]","r":"d","k":"answer","w":"an aggregation answer ends without `\"done\": true`, as production answers an aggregation (rest-v1/production-cloud-firestore aggregation-count/2); Java 1.22.0 adds it"},{"t":"aggregation-count #2","q":"POST /v1/projects/{project}/databases/(default)/documents:runAggregationQuery","a":"200 [1 item]","r":"d","k":"answer","w":"an aggregation answer ends without `\"done\": true`, as production (rest-v1/production-cloud-firestore aggregation-count/2); Java 1.22.0 adds it"},{"t":"transaction-commit #8","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"backchannel-reconnect-replay #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"backchannel-reconnect-replay #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"c","k":"answer"},{"t":"backchannel-reconnect-replay #3","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #6","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #7","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange RESET, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"behaviour"},{"t":"bundle-nanosecond-read-time #11","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #12","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #13","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #14","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1 ร—2","r":"c","k":"answer"},{"t":"bundle-nanosecond-read-time #15","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #16","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, targetChange RESET, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"c","k":"behaviour"},{"t":"bundle-nanosecond-read-time #19","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"bundle-nanosecond-read-time #20","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-long-poll #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"listen-long-poll #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"listen-long-poll #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"listen-streaming #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"listen-streaming #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"c","k":"answer"},{"t":"listen-streaming #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"multiple-inequality-query #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"multiple-inequality-query #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—3, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"multiple-inequality-query #3","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"c","k":"answer"},{"t":"multiple-inequality-query #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #5","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange ADD","r":"c","k":"answer"},{"t":"multiple-inequality-query #6","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #7","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท documentChange ร—2, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"multiple-inequality-query #8","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"c","k":"answer"},{"t":"multiple-inequality-query #9","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #13","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange ADD","r":"c","k":"answer"},{"t":"multiple-inequality-query #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"multiple-inequality-query #15","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"c","k":"answer"},{"t":"multiple-inequality-query #17","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #6","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #9","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #10","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #11","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #12","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #13","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #15","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #17","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #18","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #19","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #20","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop, writeResults ร—1","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #21","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #22","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท writeResults ร—1 ร—3","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #23","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #24","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #25","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #27","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1 ร—10","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #28","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #29","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #30","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #31","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #32","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #34","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange ร—5, targetChange CURRENT, targetChange NO_CHANGE, noop, targetChange REMOVE","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #35","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #36","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #37","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"numeric-resource-id-ordering #38","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"numeric-resource-id-ordering #39","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"reserved-resource-id-error #4","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"reserved-resource-id-error #7","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"unicode-framing #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #2","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #4","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentDelete, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"unicode-framing #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"unicode-framing #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, documentChange","r":"c","k":"answer"},{"t":"unicode-framing #7","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"c","k":"answer"},{"t":"unicode-framing #9","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"unicode-framing #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"unicode-framing #13","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #14","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #15","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #16","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"unicode-framing #17","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"c","k":"answer"},{"t":"unicode-framing #19","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"unicode-framing #21","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"unicode-framing #22","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-batch-six #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-batch-six #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-batch-six #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—6","r":"c","k":"answer"},{"t":"write-batch-six #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-batch-six #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—6","r":"c","k":"answer"},{"t":"write-batch-six #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-batch-six #10","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-cross-client-update #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #5","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"write-cross-client-update #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-cross-client-update #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #9","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #10","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"write-cross-client-update #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"write-cross-client-update #13","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2, targetChange REMOVE","r":"c","k":"answer"},{"t":"write-cross-client-update #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #16","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop","r":"c","k":"status"},{"t":"write-cross-client-update #17","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE","r":"c","k":"answer"},{"t":"write-cross-client-update #18","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop ร—2","r":"c","k":"status"},{"t":"write-cross-client-update #20","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #21","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #22","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #23","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #25","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #26","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #28","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"c","k":"answer"},{"t":"write-cross-client-update #29","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #31","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop, targetChange REMOVE","r":"c","k":"answer"},{"t":"write-cross-client-update #32","q":"POST /google.firestore.v1.Firestore/Listen/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-cross-client-update #34","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop","r":"c","k":"answer"},{"t":"write-cross-client-update #35","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #37","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #38","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-cross-client-update #39","q":"POST /google.firestore.v1.Firestore/Listen/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-long-poll #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-long-poll #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-long-poll #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-long-poll #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1","r":"c","k":"answer"},{"t":"write-long-poll #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-missing-update-error #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-missing-update-error #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-missing-update-error #5","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-missing-update-error #8","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-missing-update-error #9","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"answer"},{"t":"write-overlap #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened","r":"c","k":"answer"},{"t":"write-overlap #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, writeResults ร—1 ร—2","r":"c","k":"answer"},{"t":"write-overlap #6","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-overlap #7","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-overlap #8","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1 ร—2","r":"c","k":"answer"},{"t":"write-overlap #9","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-overlap #10","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"write-streaming #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"c","k":"status"},{"t":"write-streaming #2","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, writeResults ร—1","r":"c","k":"answer"},{"t":"write-streaming #3","q":"POST /google.firestore.v1.Firestore/Write/channel (send)","a":"200 ยท forward-channel ack","r":"c","k":"status"},{"t":"write-streaming #4","q":"POST /google.firestore.v1.Firestore/Write/channel (terminate)","a":"200","r":"c","k":"status"},{"t":"multiple-inequality-query #10","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท noop, targetChange ADD","r":"d","k":"answer","w":"a query ordered by more fields after `__name__` is refused without adding the target first, as production (webchannel-v8/production-cloud-firestore multiple-inequality-query/8 removes target 1006 it never added); Java 1.22.0 adds it, then removes it"},{"t":"multiple-inequality-query #12","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"d","k":"answer","w":"a query ordered by more fields after `__name__` is refused with production's message, `Order by clause cannot contain more fields after the key key` (webchannel-v8/production-cloud-firestore multiple-inequality-query/8); Java 1.22.0 says `order by clause cannot contain more fields after the key`"},{"t":"numeric-resource-id-ordering #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"numeric-resource-id-ordering #14","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"numeric-resource-id-ordering #26","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"numeric-resource-id-ordering #33","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"reserved-resource-id-error #1","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"reserved-resource-id-error #2","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE","r":"d","k":"answer","w":"a query target whose parent is under a reserved resource id is added, then removed with INVALID_ARGUMENT, as production (webchannel-v8/production-cloud-firestore reserved-resource-id-error/2 adds target 1002 before removing it); Java 1.22.0 removes it without adding it"},{"t":"reserved-resource-id-error #5","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"reserved-resource-id-error #6","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange REMOVE, noop","r":"d","k":"answer","w":"a query target whose parent is under a reserved resource id is added, then removed with INVALID_ARGUMENT, as production (webchannel-v8/production-cloud-firestore reserved-resource-id-error/6 adds target 1002 before removing it); Java 1.22.0 removes it without adding it"},{"t":"unicode-framing #18","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"200 ยท targetChange ADD, documentChange, targetChange CURRENT, targetChange NO_CHANGE, noop, documentChange, targetChange NO_CHANGE","r":"d","k":"answer","w":"a write that leaves the document as it was sends the listener nothing, as production (webchannel-v8/production-cloud-firestore unicode-framing/17); Java 1.22.0 sends the unchanged document again"},{"t":"unknown-sid #1","q":"GET /google.firestore.v1.Firestore/Listen/channel (backchannel)","a":"400 (empty body)","r":"d","k":"answer","w":"an unknown session is answered with production's HTTP 400 body containing `Unknown SID` (webchannel-v8/production-cloud-firestore unknown-sid/1); Java 1.22.0 sends an empty body (conformance/fixtures/webchannel-v8/README.md)"},{"t":"write-batch-six #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-batch-six #7","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #11","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #15","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #24","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #27","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #30","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-cross-client-update #33","q":"POST /google.firestore.v1.Firestore/Listen/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-missing-update-error #1","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-missing-update-error #4","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท noop ร—2, error NOT_FOUND: no entity to update: app: \"{project}\" path < Element { type: \"{project}\" name: \"oracle-missing-update\" } >","r":"d","k":"answer","w":"a Write stream update of a missing document ends the stream as production does, with `{__sm__: {status: [[{error: {code: 404, message: No document to update: , status: NOT_FOUND}}]]}}` and then a `close` array (webchannel-v8/production-cloud-firestore write-missing-update-error/4); Java 1.22.0 sends one `{error: {status, message}}` array, worded `NOT_FOUND: no entity to update: `"},{"t":"write-missing-update-error #6","q":"POST /google.firestore.v1.Firestore/Write/channel (open)","a":"200 ยท session created","r":"d","k":"answer","w":"the handshake advertises production's server version 14 (conformance/fixtures/webchannel-v8/README.md, production handshake; every production handshake replayed here matches); Java 1.22.0 sends 12"},{"t":"write-missing-update-error #7","q":"GET /google.firestore.v1.Firestore/Write/channel (backchannel)","a":"200 ยท stream opened, noop, error NOT_FOUND: no entity to update: app: \"{project}\" path < Element { type: \"{project}\" name: \"oracle-missing-โ€ฆ","r":"d","k":"answer","w":"a Write stream update of a missing document ends the stream as production does, with `{__sm__: {status: [[{error: {code: 404, message: No document to update: , status: NOT_FOUND}}]]}}` and then a `close` array (webchannel-v8/production-cloud-firestore write-missing-update-error/7); Java 1.22.0 sends one `{error: {status, message}}` array, worded `NOT_FOUND: no entity to update: `"}]} \ No newline at end of file diff --git a/public/conformance/functions.json b/public/conformance/functions.json index 9f69d22..e8acf47 100644 --- a/public/conformance/functions.json +++ b/public/conformance/functions.json @@ -1 +1 @@ -{"runs":[[0,4,0,"v1 and v2 Firestore create triggers use distinct registration bodies and dispatch exact legacy-event and CloudEvent envelopes to the Functions emulator"],[4,1,0,"v1 and v2 Firestore create triggers use distinct registration bodies and dispatch exact legacy-event and CloudEvent envelopes to the Functions emulator"],[5,7,1,"Callable and HTTP functions: envelopes, typed errors and unknown functions"],[12,2,1,"Functions discovery at startup and after a source change"],[14,6,2,"Functions startup: inventory and trigger records"],[20,2,2,"Registration with the auxiliary emulators at startup"],[22,3,3,"GET /backends after readiness: every codebase, the static manifest, the broken codebases and the local extension backend."],[25,7,3,"404 bodies for an unknown function id (lists every registered trigger key), an unknown region, an unknown project and an unknown path."],[32,6,3,"Explicit and multi-region deployments answer on their region path only."],[38,9,3,"Secondary, ESM and static-manifest codebases serve; the broken and invalid-dotenv codebases export nothing."],[47,3,3,"A Realtime Database export is discovered but ignored; its trigger route still exists. The task-queue export registers with the Tasks emulator."],[50,13,3,"Every HTTP method reaches the v2 onRequest handler; the handler records url, path, query, headers, ip and body parsing."],[63,8,3,"Sub-paths, query strings, trailing slashes, encoded characters and dot segments under the function route."],[71,8,3,"Status codes, custom headers, redirects, empty bodies, text bodies and chunked streaming responses pass through the proxy."],[79,6,3,"Synchronous throw, asynchronous rejection, throw after headers, a handler that never responds, and a per-function timeout."],[85,8,3,"SDK-level CORS on onRequest({cors}) for preflights and simple requests with allowed, disallowed and absent origins."],[93,4,3,"First-generation https.onRequest, region and runWith options on the secondary codebase."],[97,2,3,"The handler's Admin SDK reaches the emulated Firestore through the injected environment."],[99,14,3,"Data shapes, missing data, invalid bodies and wrong methods on a v2 onCall."],[113,21,3,"HttpsError status mapping for every canonical code, details passthrough, and unhandled failures."],[134,14,3,"Authorization headers as seen by onCall: valid, sub-only, expired, malformed, wrong scheme, plus instance id and App Check headers."],[148,5,3,"First-generation https.onCall envelope, context and errors."],[153,9,3,"Server-sent chunks with Accept: text/event-stream, non-streaming clients on a streaming function, and an error after a chunk."],[162,5,3,"Preflight and simple requests on v1 and v2 callables from any origin (the SDK enables CORS for callables)."],[167,5,3,"Create, update and delete one document; created/updated/deleted/written handlers observe CloudEvents with snapshots, params and attributes."],[172,4,3,"WithAuthContext handlers observe authType and authId for an owner write, a user-token REST write and an admin write."],[176,3,3,"First-generation onCreate/onUpdate/onDelete/onWrite envelopes: change snapshots and context."],[179,9,3,"Nested wildcards, multi-segment wildcards, exact documents, non-matching paths and a regional trigger."],[188,5,3,"One commit with three writes yields three events; handler failures and slow handlers do not block delivery."],[193,4,3,"Upload, metadata patch and delete on the default bucket; finalized/metadataUpdated/deleted CloudEvents with StorageObjectData."],[197,3,3,"A trigger bound to a second bucket fires only for that bucket; default-bucket triggers ignore it."],[200,5,3,"Published messages with JSON data, plain data, attributes and ordering keys reach two v2 handlers on the same topic."],[205,4,3,"First-generation onPublish message accessors and context."],[209,5,3,"Manual firing of v2 and v1 schedules through the trigger route, and the schedule metadata in the inventory."],[214,3,3,"Sign-up and deletion fan out to two onCreate handlers, one onDelete handler and the extension's auth resource."],[217,7,3,"beforeUserCreated: pass-through, claims and display name applied by the handler, rejection with HttpsError, and the seven-second deadline."],[224,4,3,"beforeUserSignedIn: session claims returned by the handler and a rejection with details."],[228,7,3,"The dotenv chain, .secret.local, declared secrets, reserved system variables and emulator host variables as observed by handlers."],[235,4,3,"A handler that exits its process: the in-flight response, the next invocation of the same and of another function in the codebase."],[239,2,3,"Two slow requests to the same function overlap; a third to another function is not queued behind them."],[241,12,3,"Editing the primary codebase adds a function, removes one and changes a trigger path; the inventory, routes and trigger keys after the reload."],[253,4,3,"The local extension's backend in /backends: resolved resources, substituted spec, injected params, secrets and the dropped task-queue resource."],[257,9,3,"HTTPS, Firestore v1, v2function Firestore, schedule and custom-event delivery for the local extension."],[266,8,3,"The hub's disable/enable background trigger switches and their effect on event delivery and trigger keys."],[274,5,3,"First-generation beforeCreate/beforeSignIn handlers: user and context shapes, applied claims and rejection."],[279,5,3,"--inspect-functions: the debug port log, sequential execution and the per-request debug target in a shared worker."],[284,1,3,"An extension instance whose env files omit a required parameter without default: the startup failure and its message."],[285,1,3,"The dotenv chain, .secret.local, declared secrets, reserved system variables and emulator host variables as observed by handlers."],[286,1,3,"A handler that exits its process: the in-flight response, the next invocation of the same and of another function in the codebase."],[287,1,3,"GET /backends after readiness: every codebase, the static manifest, the broken codebases and the local extension backend."],[288,3,3,"Two registry extensions resolved from the shared cache: backends, substituted specs, secrets as Secret Manager names, and the dropped task-queue resources."],[291,7,3,"Deliveries reach the registry extensions' handlers: a Firestore create into Stripe's checkout session handler, a user sign-up into createCustomer, a Firestore write into Algolia's indexer; their outbound calls fail deliberately."],[298,3,4,"Pub/Sub delivery across a Functions source reload"]],"cases":[{"t":"v1 document create","q":"PUT /emulator/v1/projects/{project}/triggers/us-central1-v1Created","a":"200 {}","r":"c","k":"status"},{"t":"v2 document created","q":"POST /emulator/v1/projects/{project}/eventarcTrigger?eventarcTriggerId=us-central1-v2Created","a":"200 {eventType, database, namespace, document}","r":"c","k":"answer"},{"t":"dispatch 1","q":"the document write, as dispatched to Functions","a":"POST /functions/projects/{project}/triggers/us-central1-v1Created with {data, context}","r":"c","k":"behaviour"},{"t":"dispatch 2","q":"the document write, as dispatched to Functions","a":"POST /functions/projects/{project}/triggers/us-central1-v2Created with binary body (189 bytes)","r":"c","k":"behaviour"},{"t":"document write","q":"PATCH /v1/projects/{project}/databases/(default)/documents/phase4Triggers/oracle?currentDocument.exists=false","a":"200 {name, fields, createTime, updateTime}","r":"u"},{"t":"functions backends","q":"GET /backends","a":"200 {backends}","r":"u"},{"t":"http function get","q":"GET /{project}/us-central1/httpEcho?mode=get","a":"200 {method, query, body, unicode}","r":"u"},{"t":"http function post","q":"POST /{project}/us-central1/httpEcho","a":"200 {method, query, body, unicode}","r":"u"},{"t":"callable success","q":"POST /{project}/us-central1/callableEcho","a":"200 {result}","r":"u"},{"t":"callable typed error","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: phase4 invalid","r":"u"},{"t":"callable invalid get","q":"GET /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"u"},{"t":"unknown function","q":"POST /{project}/us-central1/missingFunction","a":"404 Function us-central1-missingFunction does not exist, valid functions are: us-central1-httpEcho, us-central1-callableEcho, us-central1-sโ€ฆ","r":"u"},{"t":"official connect","q":"start Functions and change the source (official connect)","a":"1 startup discovery call ยท after reload us-central1-alpha, us-central1-beta (rediscovered)","r":"u"},{"t":"prior adapter double discovery","q":"start Functions and change the source (prior adapter double discovery)","a":"2 startup discovery calls ยท after reload us-central1-alpha, us-central1-beta (rediscovered)","r":"u"},{"t":"healthy","q":"start Functions (healthy), then GET /backends","a":"200 ยท 2 backends, 4 trigger records","r":"u"},{"t":"failed codebase","q":"start Functions (failed codebase), then GET /backends","a":"200 ยท 2 backends, 2 trigger records","r":"u"},{"t":"missing auxiliary","q":"start Functions (missing auxiliary), then GET /backends","a":"200 ยท 2 backends, 4 trigger records (2 ignored)","r":"u"},{"t":"predefined backend","q":"start Functions (predefined backend), then GET /backends","a":"200 ยท 1 backend, 1 trigger record","r":"u"},{"t":"colliding backends","q":"start Functions (colliding backends), then GET /backends","a":"200 ยท 2 backends, 2 trigger records","r":"u"},{"t":"unsupported predefined","q":"start Functions (unsupported predefined), then GET /backends","a":"200 ยท 1 backend, 2 trigger records (1 ignored)","r":"u"},{"t":"eventarc registration","q":"POST /emulator/v1/projects/{project}/triggers/us-central1-event-0-projects/{project}/locations/us-central1/channels/firebase","a":"200 {res}","r":"u"},{"t":"tasks registration","q":"POST /projects/{project}/locations/us-central1/queues/task","a":"200 {taskQueueConfig}","r":"u"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"backends cors","q":"OPTIONS /backends","a":"404 Not Found","r":"c","k":"answer"},{"t":"startup logs","q":"emulator log lines matching \"functions\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"unknown function","q":"GET /{project}/us-central1/nope","a":"404 Function us-central1-nope does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestoreFn-โ€ฆ","r":"c","k":"answer"},{"t":"unknown region","q":"GET /{project}/mars-north1/httpEcho","a":"404 Function mars-north1-httpEcho does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestorโ€ฆ","r":"c","k":"answer"},{"t":"unknown project","q":"GET /other-project/us-central1/httpEcho","a":"404 Not Found","r":"c","k":"answer"},{"t":"unknown path","q":"GET /nope","a":"404 Not Found","r":"c","k":"answer"},{"t":"root","q":"GET /","a":"404 Not Found","r":"c","k":"answer"},{"t":"trigger route get","q":"GET /functions/projects/{project}/triggers/us-central1-docWritten-0","a":"404 Not Found","r":"c","k":"answer"},{"t":"trigger unknown","q":"POST /functions/projects/{project}/triggers/us-central1-missing-0","a":"404 Function us-central1-missing-0 does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestoโ€ฆ","r":"c","k":"answer"},{"t":"alt region","q":"GET /{project}/europe-west1/httpRegion","a":"200 {region} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"alt region on default","q":"GET /{project}/us-central1/httpRegion","a":"404 Function us-central1-httpRegion does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestโ€ฆ","r":"c","k":"answer"},{"t":"multi default","q":"GET /{project}/us-central1/httpMultiRegion","a":"200 {multi} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"multi alt","q":"GET /{project}/europe-west1/httpMultiRegion","a":"200 {multi} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 region","q":"GET /{project}/europe-west1/v1Region","a":"200 {v1Region} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"callable region","q":"POST /{project}/europe-west1/callableRegion","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secondary http","q":"GET /{project}/us-central1/secondaryHttp","a":"200 {codebase} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secondary callable","q":"POST /{project}/us-central1/secondaryCallable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"esm http","q":"GET /{project}/us-central1/esmHttp/sub","a":"200 {esm, path} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"esm callable","q":"POST /{project}/us-central1/esmCallable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"yaml http","q":"GET /{project}/us-central1/yamlHttp/static?x=1","a":"200 {manifest, path} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"yaml event","q":"Firestore set manifested/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"broken never loads","q":"GET /{project}/us-central1/neverLoads","a":"404 Function us-central1-neverLoads does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestโ€ฆ","r":"c","k":"answer"},{"t":"bad env http","q":"GET /{project}/us-central1/badEnvHttp","a":"404 Function us-central1-badEnvHttp does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestโ€ฆ","r":"c","k":"answer"},{"t":"load failure logs","q":"emulator log lines matching \"Failed to load\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"ignored logs","q":"emulator log lines matching \"ignored because\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"db trigger post","q":"POST /functions/projects/{project}/triggers/us-central1-dbIgnored-0","a":"200 {status} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"task queue http","q":"POST /{project}/us-central1/taskQueue","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"get","q":"GET /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post json","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"put text","q":"PUT /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"patch form","q":"PATCH /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"delete","q":"DELETE /{project}/us-central1/httpEcho?soft=true","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"head","q":"HEAD /{project}/us-central1/httpEcho","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"options no cors","q":"OPTIONS /{project}/us-central1/httpEcho","a":"204","r":"c","k":"answer"},{"t":"post bytes","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post invalid json","q":"POST /{project}/us-central1/httpEcho","a":"400 SyntaxError: Expected property name or '}' in JSON at position 1 (line 1 column 2)    at {{stack}}","r":"c","k":"answer"},{"t":"post empty json","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post xml","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post large","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"custom headers","q":"GET /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"subpath","q":"GET /{project}/us-central1/httpEcho/a/b/c","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"subpath query","q":"GET /{project}/us-central1/httpEcho/a?x=1&y=2&y=3&empty=&flag","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"trailing slash","q":"GET /{project}/us-central1/httpEcho/","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"double slash","q":"GET /{project}/us-central1/httpEcho//double","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"encoded","q":"GET /{project}/us-central1/httpEcho/sp%20ace/%E7%81%AB?q=%F0%9F%94%A5","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"dot segments","q":"GET /{project}/us-central1/httpEcho/a/../b","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"query only","q":"GET /{project}/us-central1/httpEcho?only=query","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"name prefix","q":"GET /{project}/us-central1/httpEchoNot","a":"404 Function us-central1-httpEchoNot does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firesโ€ฆ","r":"c","k":"answer"},{"t":"status 201","q":"GET /{project}/us-central1/httpEcho?mode=status","a":"201 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"status 404","q":"GET /{project}/us-central1/httpEcho?mode=status","a":"404 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"status 500","q":"GET /{project}/us-central1/httpEcho?mode=status","a":"500 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"redirect","q":"GET /{project}/us-central1/httpEcho?mode=redirect","a":"302 Found. Redirecting to /redirected ยท handler saw 1 event","r":"c","k":"answer"},{"t":"empty 204","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"text","q":"GET /{project}/us-central1/httpEcho?mode=text","a":"200 plain text ็ซ๐Ÿ”ฅ ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream","q":"GET /{project}/us-central1/httpEcho?mode=stream","a":"200 chunk-1 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"header mode","q":"GET /{project}/us-central1/httpEcho","a":"201 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"throw","q":"GET /{project}/us-central1/httpEcho?mode=throw","a":"500 Internal Server Error ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reject","q":"GET /{project}/us-central1/httpEcho?mode=reject","a":"500 Internal Server Error ยท handler saw 1 event","r":"c","k":"answer"},{"t":"throw after headers","q":"GET /{project}/us-central1/httpEcho?mode=throw-after-headers","a":"client error: client timeout after 4000ms ยท handler saw 1 event","r":"c","k":"answer"},{"t":"timeout","q":"GET /{project}/us-central1/httpTimeout","a":"500 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"after timeout","q":"GET /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"timeout logs","q":"emulator log lines matching \"timed out\"","a":"1 log line matched","r":"c","k":"behaviour"},{"t":"all preflight","q":"OPTIONS /{project}/us-central1/httpCorsAll","a":"204","r":"c","k":"answer"},{"t":"all get","q":"GET /{project}/us-central1/httpCorsAll","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"origin preflight allowed","q":"OPTIONS /{project}/us-central1/httpCorsOrigin","a":"204","r":"c","k":"answer"},{"t":"origin preflight denied","q":"OPTIONS /{project}/us-central1/httpCorsOrigin","a":"204","r":"c","k":"answer"},{"t":"origin get allowed","q":"GET /{project}/us-central1/httpCorsOrigin","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"origin get denied","q":"GET /{project}/us-central1/httpCorsOrigin","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"no origin","q":"GET /{project}/us-central1/httpCorsOrigin","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain preflight","q":"OPTIONS /{project}/us-central1/httpEcho","a":"204","r":"c","k":"answer"},{"t":"v1 get","q":"GET /{project}/us-central1/v1Http/legacy?x=1","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 post","q":"POST /{project}/us-central1/v1Http","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 options","q":"GET /{project}/us-central1/v1Options","a":"200 {options} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 preflight","q":"OPTIONS /{project}/us-central1/v1Http","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"round trip","q":"GET /{project}/us-central1/adminRoundTrip?id=wired","a":"200 {wrote, data} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"read back","q":"Firestore update probe/wired","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"object","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"null","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"string","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"number","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"array","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"long encoded","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"missing data","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"empty object","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"invalid json","q":"POST /{project}/us-central1/callableEcho","a":"400 SyntaxError: Expected property name or '}' in JSON at position 1 (line 1 column 2)    at {{stack}}","r":"c","k":"answer"},{"t":"text body","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"get method","q":"GET /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"put method","q":"PUT /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"return undefined","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"extra keys","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"code ok","q":"POST /{project}/us-central1/callableEcho","a":"200 OK: synthetic ok ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code cancelled","q":"POST /{project}/us-central1/callableEcho","a":"499 CANCELLED: synthetic cancelled ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unknown","q":"POST /{project}/us-central1/callableEcho","a":"500 UNKNOWN: synthetic unknown ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code invalid argument","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: synthetic invalid-argument ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code deadline exceeded","q":"POST /{project}/us-central1/callableEcho","a":"504 DEADLINE_EXCEEDED: synthetic deadline-exceeded ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code not found","q":"POST /{project}/us-central1/callableEcho","a":"404 NOT_FOUND: synthetic not-found ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code already exists","q":"POST /{project}/us-central1/callableEcho","a":"409 ALREADY_EXISTS: synthetic already-exists ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code permission denied","q":"POST /{project}/us-central1/callableEcho","a":"403 PERMISSION_DENIED: synthetic permission-denied ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code resource exhausted","q":"POST /{project}/us-central1/callableEcho","a":"429 RESOURCE_EXHAUSTED: synthetic resource-exhausted ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code failed precondition","q":"POST /{project}/us-central1/callableEcho","a":"400 FAILED_PRECONDITION: synthetic failed-precondition ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code aborted","q":"POST /{project}/us-central1/callableEcho","a":"409 ABORTED: synthetic aborted ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code out of range","q":"POST /{project}/us-central1/callableEcho","a":"400 OUT_OF_RANGE: synthetic out-of-range ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unimplemented","q":"POST /{project}/us-central1/callableEcho","a":"501 UNIMPLEMENTED: synthetic unimplemented ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code internal","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL: synthetic internal ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unavailable","q":"POST /{project}/us-central1/callableEcho","a":"503 UNAVAILABLE: synthetic unavailable ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code data loss","q":"POST /{project}/us-central1/callableEcho","a":"500 DATA_LOSS: synthetic data-loss ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unauthenticated","q":"POST /{project}/us-central1/callableEcho","a":"401 UNAUTHENTICATED: synthetic unauthenticated ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bad code","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain throw","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain reject","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL ยท handler saw 1 event","r":"c","k":"answer"},{"t":"no details","q":"POST /{project}/us-central1/callableEcho","a":"404 NOT_FOUND: custom message ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer alice","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer admin claim","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer subonly","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer expired","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer garbage","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer empty","q":"POST /{project}/us-central1/callableEcho","a":"401 UNAUTHENTICATED: Unauthenticated","r":"c","k":"answer"},{"t":"basic scheme","q":"POST /{project}/us-central1/callableEcho","a":"401 UNAUTHENTICATED: Unauthenticated","r":"c","k":"answer"},{"t":"lowercase bearer","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"auth required without","q":"POST /{project}/us-central1/callableAuthRequired","a":"401 UNAUTHENTICATED: sign in first ยท handler saw 1 event","r":"c","k":"answer"},{"t":"auth required with","q":"POST /{project}/us-central1/callableAuthRequired","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"instance id token","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"app check header","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"app check enforced without","q":"POST /{project}/us-central1/callableAppCheck","a":"401 UNAUTHENTICATED: Unauthenticated","r":"c","k":"answer"},{"t":"app check enforced with","q":"POST /{project}/us-central1/callableAppCheck","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 data","q":"POST /{project}/us-central1/v1Callable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 auth","q":"POST /{project}/us-central1/v1Callable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 error","q":"POST /{project}/us-central1/v1Callable","a":"400 FAILED_PRECONDITION: v1 failed-precondition ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 missing data","q":"POST /{project}/us-central1/v1Callable","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"v1 get","q":"GET /{project}/us-central1/v1Callable","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"stream three","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream zero","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream error after chunk","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream error before chunk","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"no accept","q":"POST /{project}/us-central1/callableStream","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"accept json","q":"POST /{project}/us-central1/callableStream","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream auth","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream non streaming function","q":"POST /{project}/us-central1/callableEcho","a":"200 data: {\"result\":{\"echo\":{\"data\":1,\"auth\":null,\"app\":{\"$undefined\":true},\"instanceIdToken\":{\"$undefined\":true},\"acceptsStreaming\":true,\"โ€ฆ","r":"c","k":"answer"},{"t":"stream preflight","q":"OPTIONS /{project}/us-central1/callableStream","a":"204","r":"c","k":"answer"},{"t":"v2 preflight","q":"OPTIONS /{project}/us-central1/callableEcho","a":"204","r":"c","k":"answer"},{"t":"v2 post origin","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 preflight","q":"OPTIONS /{project}/us-central1/v1Callable","a":"204","r":"c","k":"answer"},{"t":"v1 post origin","q":"POST /{project}/us-central1/v1Callable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"preflight no method","q":"OPTIONS /{project}/us-central1/callableEcho","a":"204","r":"c","k":"answer"},{"t":"create","q":"Firestore set items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"update","q":"Firestore update items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"delete","q":"Firestore delete items/alpha","a":"200 {} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"recreate","q":"Firestore set items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"noop update","q":"Firestore update items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"owner write","q":"Firestore set audited/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"user write","q":"Firestore set audited/two","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"user update","q":"Firestore update audited/two","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete","q":"Firestore delete audited/two","a":"200 {} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"create","q":"Firestore set legacy/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"update","q":"Firestore update legacy/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"delete","q":"Firestore delete legacy/one","a":"200 {} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"nested","q":"Firestore set tenants/t1/rooms/r1/messages/m1","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"nested shallow miss","q":"Firestore set tenants/t1/rooms/r1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"deep one","q":"Firestore set deep/a","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"deep three","q":"Firestore set deep/a/b/c","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"deep five","q":"Firestore set deep/a/b/c/d/e","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"exact","q":"Firestore set config/settings","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"exact miss","q":"Firestore set config/other","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"regional","q":"Firestore set regional/r","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"unrelated","q":"Firestore set unrelated/u","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"commit","q":"Firestore commit (3 writes)","a":"200 {writeResults, commitTime} ยท handler saw 6 events","r":"c","k":"answer"},{"t":"throwing","q":"Firestore set throwing/t1","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"throwing again","q":"Firestore set throwing/t2","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"slow","q":"Firestore set slow/s1","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"handler error logs","q":"emulator log lines matching \"handler failure\"","a":"2 log lines matched","r":"c","k":"behaviour"},{"t":"upload","q":"Storage upload {project}/folder/object one.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"patch","q":"Storage patch {project}/folder/object one.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"overwrite","q":"Storage upload {project}/folder/object one.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"delete","q":"Storage delete {project}/folder/object one.txt","a":"204 ยท handler saw 2 events","r":"c","k":"answer"},{"t":"second upload","q":"Storage upload synthetic-second-bucket.example.test/second.bin","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"second delete","q":"Storage delete synthetic-second-bucket.example.test/second.bin","a":"204","r":"c","k":"answer"},{"t":"default upload","q":"Storage upload {project}/default.bin","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"json message","q":"Pub/Sub publish to synthetic-topic (1 message)","a":"200 {messageIds} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"plain message","q":"Pub/Sub publish to synthetic-topic (1 message)","a":"200 {messageIds} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"attributes only","q":"Pub/Sub publish to synthetic-topic (1 message)","a":"200 {messageIds} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"two messages","q":"Pub/Sub publish to synthetic-topic (2 messages)","a":"200 {messageIds} ยท handler saw 4 events","r":"c","k":"answer"},{"t":"unknown topic","q":"Pub/Sub publish to no-such-topic (1 message)","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"json","q":"Pub/Sub publish to legacy-topic (1 message)","a":"200 {messageIds} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain","q":"Pub/Sub publish to legacy-topic (1 message)","a":"200 {messageIds} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"topics","q":"Pub/Sub list topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"subscriptions","q":"Pub/Sub list subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"v2 tick","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v2 cron","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledCron-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 run","q":"POST /functions/projects/{project}/triggers/us-central1-v1Scheduled-0","a":"200 {status} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v2 tick empty body","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v2 tick https route","q":"POST /{project}/us-central1/scheduledTick","a":"404 Function us-central1-scheduledTick does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firโ€ฆ","r":"c","k":"answer"},{"t":"sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 5 events","r":"c","k":"answer"},{"t":"lookup","q":"Auth lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete","q":"Auth delete","a":"200 identitytoolkit#DeleteAccountResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"claims sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 5 events","r":"c","k":"answer"},{"t":"claims lookup","q":"Auth lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"claims sign in","q":"Auth signIn","a":"200 identitytoolkit#VerifyPasswordResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reject sign up","q":"Auth signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/blockCreate returned HTTP error 403: {\"โ€ฆ","r":"c","k":"answer"},{"t":"reject lookup absent","q":"Auth signIn","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"slow sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 5 events","r":"c","k":"answer"},{"t":"blocking logs","q":"emulator log lines matching \"blocking\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"plain sign up","q":"Auth signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/blockSignIn returned HTTP error 403: {\"โ€ฆ","r":"c","k":"answer"},{"t":"rejected sign in","q":"Auth signIn","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/blockSignIn returned HTTP error 403: {\"โ€ฆ","r":"c","k":"answer"},{"t":"wrong password","q":"Auth signIn","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"claims sign in again","q":"Auth signIn","a":"200 identitytoolkit#VerifyPasswordResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"primary env","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secrets","q":"GET /{project}/us-central1/httpSecrets","a":"200 {declared, undeclared} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secondary env","q":"GET /{project}/us-central1/secondaryHttp","a":"200 {codebase} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 env","q":"GET /{project}/us-central1/v1Http","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"event env","q":"Firestore set items/env","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"callable env","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"extension env","q":"GET /{project}/us-central1/ext-synthetic-httpFn","a":"200 {extension, mode, note} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"crash","q":"GET /{project}/us-central1/httpEcho?mode=crash","a":"200 {crashing} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"same function after","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"other function after","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"event after","q":"Firestore set items/after-crash","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"overlap","q":"3 parallel GET /{project}/us-central1/httpEcho?mode=slow&ms=1500","a":"statuses 200, 200, 200 ยท handler saw 3 events","r":"c","k":"answer"},{"t":"slow plus other","q":"3 parallel GET /{project}/us-central1/httpEcho?mode=slow&ms=1500","a":"statuses 200, 200, 200 ยท handler saw 3 events","r":"c","k":"answer"},{"t":"before removable","q":"GET /{project}/us-central1/removable","a":"200 {removable} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"before change","q":"Firestore set before-change/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reload logs","q":"emulator log lines matching \"Loaded functions definitions\"","a":"1 log line matched","r":"c","k":"behaviour"},{"t":"backends after","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"added","q":"GET /{project}/us-central1/addedLater","a":"200 {added} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"removed","q":"GET /{project}/us-central1/removable","a":"500 {code}","r":"c","k":"answer"},{"t":"old path miss","q":"Firestore set before-change/two","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"new path hit","q":"Firestore set after-change/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"existing still works","q":"Firestore set items/after-reload","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"trigger key generation","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"trigger key generation 1","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-1","a":"404 Function us-central1-scheduledTick-1 does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-fโ€ฆ","r":"c","k":"answer"},{"t":"restored","q":"GET /{project}/us-central1/removable","a":"200 {removable} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"extension logs","q":"emulator log lines matching \"extensions\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"missing trigger logs","q":"emulator log lines matching \"missing a trigger\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"queue route","q":"GET /{project}/us-central1/ext-synthetic-queueFn","a":"500 {code}","r":"c","k":"answer"},{"t":"https","q":"GET /{project}/us-central1/ext-synthetic-httpFn/tail?x=1","a":"200 {extension, mode, note} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"firestore v1","q":"Firestore set synthetic-items/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"firestore v1 miss","q":"Firestore set other-items/one","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"firestore v2","q":"Firestore set synthetic-items-v2/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"schedule","q":"POST /functions/projects/{project}/triggers/us-central1-ext-synthetic-scheduledFn-0","a":"200 {status} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"publish listened","q":"GET /{project}/us-central1/ext-synthetic-httpFn?publish=test-publisher.synthetic.v1.complete","a":"200 {published} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"publish unlistened","q":"GET /{project}/us-central1/ext-synthetic-httpFn?publish=test-publisher.synthetic.v1.ignored","a":"200 {published} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"publish undeclared","q":"GET /{project}/us-central1/ext-synthetic-httpFn?publish=test-publisher.synthetic.v1.undeclared","a":"200 {published} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"eventarc logs","q":"emulator log lines matching \"eventarc\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"disable","q":"hub PUT /functions/disableBackgroundTriggers","a":"200 {enabled}","r":"c","k":"answer"},{"t":"write while disabled","q":"Firestore set items/disabled","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"http while disabled","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"trigger while disabled","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"204","r":"c","k":"answer"},{"t":"enable","q":"hub PUT /functions/enableBackgroundTriggers","a":"200 {enabled}","r":"c","k":"answer"},{"t":"write after enable","q":"Firestore set items/enabled","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"trigger generation after enable","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-1","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"backends after enable","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 3 events","r":"c","k":"answer"},{"t":"lookup","q":"Auth lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"sign in","q":"Auth signIn","a":"200 identitytoolkit#VerifyPasswordResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reject","q":"Auth signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/v1BeforeCreate returned HTTP error 400:โ€ฆ","r":"c","k":"answer"},{"t":"debug logs","q":"emulator log lines matching \"debug port\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"http","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"callable","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"event","q":"Firestore set items/debug","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"secondary","q":"GET /{project}/us-central1/secondaryHttp","a":"200 {codebase} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"startup logs","q":"emulator log lines matching \"\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"env logs","q":"emulator log lines matching \"environment variables\"","a":"1 log line matched","r":"d","k":"behaviour","w":"the official emulator logs env loading at every lazy worker start (here after an earlier timeout killed the worker); Firenook loads env once per (re)load and keeps its worker"},{"t":"crash logs","q":"emulator log lines matching \"exited\"","a":"0 log lines matched","r":"d","k":"behaviour","w":"Firenook logs the worker exit it recovers from (\"functions worker exited; starting a new one\"); the official runtime's kill message has no such line"},{"t":"hub emulators","q":"hub GET /emulators","a":"200 {hub, logging, extensions, auth, โ€ฆ}","r":"u"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"u"},{"t":"extension logs","q":"emulator log lines matching \"extension\"","a":"0 log lines matched","r":"u"},{"t":"missing trigger logs","q":"emulator log lines matching \"missing a trigger\"","a":"0 log lines matched","r":"u"},{"t":"checkout session","q":"Firestore set customers/synthetic-user/checkout_sessions/one","a":"200 {name, fields, createTime, updateTime}","r":"u"},{"t":"checkout session read","q":"Firestore update customers/synthetic-user/checkout_sessions/one","a":"200 {name, fields, createTime, updateTime}","r":"u"},{"t":"sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 4 events","r":"u"},{"t":"algolia write","q":"Firestore set searchable/one","a":"200 {name, fields, createTime, updateTime}","r":"u"},{"t":"delivery logs","q":"emulator log lines matching \"ext-\"","a":"4 log lines matched","r":"u"},{"t":"portal link","q":"POST /{project}/us-central1/ext-stripe-createPortalLink","a":"401 UNAUTHENTICATED: The function must be called while authenticated!","r":"u"},{"t":"webhook","q":"POST /{project}/us-central1/ext-stripe-handleWebhookEvents","a":"401 Webhook Error: Invalid Secret","r":"u"},{"t":"initial","q":"publish to alpha-topic (initial)","a":"delivered to alpha v1 ยท 1 registered function","r":"c","k":"behaviour"},{"t":"added handler","q":"publish to beta-topic (added handler)","a":"delivered to beta v2 ยท 2 registered functions","r":"c","k":"behaviour"},{"t":"updated handler","q":"publish to alpha-topic (updated handler)","a":"delivered to alpha v2 ยท 2 registered functions","r":"c","k":"behaviour"}]} \ No newline at end of file +{"runs":[[0,5,0,"v1 and v2 Firestore create triggers use distinct registration bodies and dispatch exact legacy-event and CloudEvent envelopes to the Functions emulator"],[5,7,1,"Callable and HTTP functions: envelopes, typed errors and unknown functions"],[12,1,1,"Functions discovery at startup and after a source change"],[13,1,1,"Functions discovery at startup and after a source change"],[14,5,2,"Functions startup: inventory and trigger records"],[19,2,2,"Registration with the auxiliary emulators at startup"],[21,1,2,"Functions startup: inventory and trigger records"],[22,4,3,"GET /backends after readiness: every codebase, the static manifest, the broken codebases and the local extension backend."],[26,7,3,"404 bodies for an unknown function id (lists every registered trigger key), an unknown region, an unknown project and an unknown path."],[33,6,3,"Explicit and multi-region deployments answer on their region path only."],[39,9,3,"Secondary, ESM and static-manifest codebases serve; the broken and invalid-dotenv codebases export nothing."],[48,3,3,"A Realtime Database export is discovered but ignored; its trigger route still exists. The task-queue export registers with the Tasks emulator."],[51,13,3,"Every HTTP method reaches the v2 onRequest handler; the handler records url, path, query, headers, ip and body parsing."],[64,8,3,"Sub-paths, query strings, trailing slashes, encoded characters and dot segments under the function route."],[72,8,3,"Status codes, custom headers, redirects, empty bodies, text bodies and chunked streaming responses pass through the proxy."],[80,6,3,"Synchronous throw, asynchronous rejection, throw after headers, a handler that never responds, and a per-function timeout."],[86,8,3,"SDK-level CORS on onRequest({cors}) for preflights and simple requests with allowed, disallowed and absent origins."],[94,4,3,"First-generation https.onRequest, region and runWith options on the secondary codebase."],[98,2,3,"The handler's Admin SDK reaches the emulated Firestore through the injected environment."],[100,14,3,"Data shapes, missing data, invalid bodies and wrong methods on a v2 onCall."],[114,21,3,"HttpsError status mapping for every canonical code, details passthrough, and unhandled failures."],[135,14,3,"Authorization headers as seen by onCall: valid, sub-only, expired, malformed, wrong scheme, plus instance id and App Check headers."],[149,5,3,"First-generation https.onCall envelope, context and errors."],[154,9,3,"Server-sent chunks with Accept: text/event-stream, non-streaming clients on a streaming function, and an error after a chunk."],[163,5,3,"Preflight and simple requests on v1 and v2 callables from any origin (the SDK enables CORS for callables)."],[168,5,3,"Create, update and delete one document; created/updated/deleted/written handlers observe CloudEvents with snapshots, params and attributes."],[173,4,3,"WithAuthContext handlers observe authType and authId for an owner write, a user-token REST write and an admin write."],[177,3,3,"First-generation onCreate/onUpdate/onDelete/onWrite envelopes: change snapshots and context."],[180,9,3,"Nested wildcards, multi-segment wildcards, exact documents, non-matching paths and a regional trigger."],[189,5,3,"One commit with three writes yields three events; handler failures and slow handlers do not block delivery."],[194,4,3,"Upload, metadata patch and delete on the default bucket; finalized/metadataUpdated/deleted CloudEvents with StorageObjectData."],[198,3,3,"A trigger bound to a second bucket fires only for that bucket; default-bucket triggers ignore it."],[201,5,3,"Published messages with JSON data, plain data, attributes and ordering keys reach two v2 handlers on the same topic."],[206,4,3,"First-generation onPublish message accessors and context."],[210,5,3,"Manual firing of v2 and v1 schedules through the trigger route, and the schedule metadata in the inventory."],[215,3,3,"Sign-up and deletion fan out to two onCreate handlers, one onDelete handler and the extension's auth resource."],[218,7,3,"beforeUserCreated: pass-through, claims and display name applied by the handler, rejection with HttpsError, and the seven-second deadline."],[225,4,3,"beforeUserSignedIn: session claims returned by the handler and a rejection with details."],[229,7,3,"The dotenv chain, .secret.local, declared secrets, reserved system variables and emulator host variables as observed by handlers."],[236,4,3,"A handler that exits its process: the in-flight response, the next invocation of the same and of another function in the codebase."],[240,2,3,"Two slow requests to the same function overlap; a third to another function is not queued behind them."],[242,12,3,"Editing the primary codebase adds a function, removes one and changes a trigger path; the inventory, routes and trigger keys after the reload."],[254,4,3,"The local extension's backend in /backends: resolved resources, substituted spec, injected params, secrets and the dropped task-queue resource."],[258,9,3,"HTTPS, Firestore v1, v2function Firestore, schedule and custom-event delivery for the local extension."],[267,8,3,"The hub's disable/enable background trigger switches and their effect on event delivery and trigger keys."],[275,5,3,"First-generation beforeCreate/beforeSignIn handlers: user and context shapes, applied claims and rejection."],[280,5,3,"--inspect-functions: the debug port log, sequential execution and the per-request debug target in a shared worker."],[285,1,3,"An extension instance whose env files omit a required parameter without default: the startup failure and its message."],[286,3,3,"Two registry extensions resolved from the shared cache: backends, substituted specs, secrets as Secret Manager names, and the dropped task-queue resources."],[289,7,3,"Deliveries reach the registry extensions' handlers: a Firestore create into Stripe's checkout session handler, a user sign-up into createCustomer, a Firestore write into Algolia's indexer; their outbound calls fail deliberately."],[296,1,3,"The dotenv chain, .secret.local, declared secrets, reserved system variables and emulator host variables as observed by handlers."],[297,1,3,"A handler that exits its process: the in-flight response, the next invocation of the same and of another function in the codebase."],[298,3,4,"Pub/Sub delivery across a Functions source reload"]],"cases":[{"t":"v1 document create","q":"PUT /emulator/v1/projects/{project}/triggers/us-central1-v1Created","a":"200 {}","r":"c","k":"status"},{"t":"v2 document created","q":"POST /emulator/v1/projects/{project}/eventarcTrigger?eventarcTriggerId=us-central1-v2Created","a":"200 {eventType, database, namespace, document}","r":"c","k":"answer"},{"t":"document write","q":"PATCH /v1/projects/{project}/databases/(default)/documents/phase4Triggers/oracle?currentDocument.exists=false","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"dispatch 1","q":"the document write, as dispatched to Functions","a":"POST /functions/projects/{project}/triggers/us-central1-v1Created with {data, context}","r":"c","k":"behaviour"},{"t":"dispatch 2","q":"the document write, as dispatched to Functions","a":"POST /functions/projects/{project}/triggers/us-central1-v2Created with binary body (189 bytes)","r":"c","k":"behaviour"},{"t":"functions backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"http function get","q":"GET /{project}/us-central1/httpEcho?mode=get","a":"200 {method, query, body, unicode}","r":"c","k":"answer"},{"t":"http function post","q":"POST /{project}/us-central1/httpEcho","a":"200 {method, query, body, unicode}","r":"c","k":"answer"},{"t":"callable success","q":"POST /{project}/us-central1/callableEcho","a":"200 {result}","r":"c","k":"answer"},{"t":"callable typed error","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: phase4 invalid","r":"c","k":"answer"},{"t":"callable invalid get","q":"GET /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"unknown function","q":"POST /{project}/us-central1/missingFunction","a":"404 Function us-central1-missingFunction does not exist, valid functions are: us-central1-httpEcho, us-central1-callableEcho, us-central1-sโ€ฆ","r":"c","k":"answer"},{"t":"official connect","q":"start Functions and change the source (official connect)","a":"1 startup discovery call ยท after reload us-central1-alpha, us-central1-beta (rediscovered)","r":"c","k":"behaviour"},{"t":"prior adapter double discovery","q":"start Functions and change the source (prior adapter double discovery)","a":"2 startup discovery calls ยท after reload us-central1-alpha, us-central1-beta (rediscovered)","r":"d","k":"behaviour","w":"Firenook discovers a codebase once at start-up (DESIGN.md: the single discovery owned by connect(), not a second execution of user code); the recorded mode is the prior adapter calling discovery a second time"},{"t":"healthy","q":"start Functions (healthy), then GET /backends","a":"200 ยท 2 backends, 4 trigger records","r":"c","k":"answer"},{"t":"failed codebase","q":"start Functions (failed codebase), then GET /backends","a":"200 ยท 2 backends, 2 trigger records","r":"c","k":"answer"},{"t":"predefined backend","q":"start Functions (predefined backend), then GET /backends","a":"200 ยท 1 backend, 1 trigger record","r":"c","k":"behaviour"},{"t":"colliding backends","q":"start Functions (colliding backends), then GET /backends","a":"200 ยท 2 backends, 2 trigger records","r":"c","k":"answer"},{"t":"unsupported predefined","q":"start Functions (unsupported predefined), then GET /backends","a":"200 ยท 1 backend, 2 trigger records (1 ignored)","r":"c","k":"behaviour"},{"t":"eventarc registration","q":"POST /emulator/v1/projects/{project}/triggers/us-central1-event-0-projects/{project}/locations/us-central1/channels/firebase","a":"200 {res}","r":"c","k":"answer"},{"t":"tasks registration","q":"POST /projects/{project}/locations/us-central1/queues/task","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"missing auxiliary","q":"start Functions (missing auxiliary), then GET /backends","a":"200 ยท 2 backends, 4 trigger records (2 ignored)","r":"d","k":"answer","w":"Eventarc and Tasks always run with Functions (DESIGN.md, Service selection), so the task and event handlers are registered where the official host without those peers ignored them; the inventory matches"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"backends cors","q":"OPTIONS /backends","a":"404 Not Found","r":"c","k":"answer"},{"t":"hub emulators","q":"hub GET /emulators","a":"200 {hub, logging, extensions, auth, โ€ฆ}","r":"c","k":"answer"},{"t":"startup logs","q":"emulator log lines matching \"functions\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"unknown function","q":"GET /{project}/us-central1/nope","a":"404 Function us-central1-nope does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestoreFn-โ€ฆ","r":"c","k":"answer"},{"t":"unknown region","q":"GET /{project}/mars-north1/httpEcho","a":"404 Function mars-north1-httpEcho does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestorโ€ฆ","r":"c","k":"answer"},{"t":"unknown project","q":"GET /other-project/us-central1/httpEcho","a":"404 Not Found","r":"c","k":"answer"},{"t":"unknown path","q":"GET /nope","a":"404 Not Found","r":"c","k":"answer"},{"t":"root","q":"GET /","a":"404 Not Found","r":"c","k":"answer"},{"t":"trigger route get","q":"GET /functions/projects/{project}/triggers/us-central1-docWritten-0","a":"404 Not Found","r":"c","k":"answer"},{"t":"trigger unknown","q":"POST /functions/projects/{project}/triggers/us-central1-missing-0","a":"404 Function us-central1-missing-0 does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestoโ€ฆ","r":"c","k":"answer"},{"t":"alt region","q":"GET /{project}/europe-west1/httpRegion","a":"200 {region} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"alt region on default","q":"GET /{project}/us-central1/httpRegion","a":"404 Function us-central1-httpRegion does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestโ€ฆ","r":"c","k":"answer"},{"t":"multi default","q":"GET /{project}/us-central1/httpMultiRegion","a":"200 {multi} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"multi alt","q":"GET /{project}/europe-west1/httpMultiRegion","a":"200 {multi} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 region","q":"GET /{project}/europe-west1/v1Region","a":"200 {v1Region} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"callable region","q":"POST /{project}/europe-west1/callableRegion","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secondary http","q":"GET /{project}/us-central1/secondaryHttp","a":"200 {codebase} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secondary callable","q":"POST /{project}/us-central1/secondaryCallable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"esm http","q":"GET /{project}/us-central1/esmHttp/sub","a":"200 {esm, path} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"esm callable","q":"POST /{project}/us-central1/esmCallable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"yaml http","q":"GET /{project}/us-central1/yamlHttp/static?x=1","a":"200 {manifest, path} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"yaml event","q":"Firestore set manifested/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"broken never loads","q":"GET /{project}/us-central1/neverLoads","a":"404 Function us-central1-neverLoads does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestโ€ฆ","r":"c","k":"answer"},{"t":"bad env http","q":"GET /{project}/us-central1/badEnvHttp","a":"404 Function us-central1-badEnvHttp does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firestโ€ฆ","r":"c","k":"answer"},{"t":"load failure logs","q":"emulator log lines matching \"Failed to load\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"ignored logs","q":"emulator log lines matching \"ignored because\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"db trigger post","q":"POST /functions/projects/{project}/triggers/us-central1-dbIgnored-0","a":"200 {status} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"task queue http","q":"POST /{project}/us-central1/taskQueue","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"get","q":"GET /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post json","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"put text","q":"PUT /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"patch form","q":"PATCH /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"delete","q":"DELETE /{project}/us-central1/httpEcho?soft=true","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"head","q":"HEAD /{project}/us-central1/httpEcho","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"options no cors","q":"OPTIONS /{project}/us-central1/httpEcho","a":"204","r":"c","k":"answer"},{"t":"post bytes","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post invalid json","q":"POST /{project}/us-central1/httpEcho","a":"400 SyntaxError: Expected property name or '}' in JSON at position 1 (line 1 column 2)    at {{stack}}","r":"c","k":"answer"},{"t":"post empty json","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post xml","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"post large","q":"POST /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"custom headers","q":"GET /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"subpath","q":"GET /{project}/us-central1/httpEcho/a/b/c","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"subpath query","q":"GET /{project}/us-central1/httpEcho/a?x=1&y=2&y=3&empty=&flag","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"trailing slash","q":"GET /{project}/us-central1/httpEcho/","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"double slash","q":"GET /{project}/us-central1/httpEcho//double","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"encoded","q":"GET /{project}/us-central1/httpEcho/sp%20ace/%E7%81%AB?q=%F0%9F%94%A5","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"dot segments","q":"GET /{project}/us-central1/httpEcho/a/../b","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"query only","q":"GET /{project}/us-central1/httpEcho?only=query","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"name prefix","q":"GET /{project}/us-central1/httpEchoNot","a":"404 Function us-central1-httpEchoNot does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firesโ€ฆ","r":"c","k":"answer"},{"t":"status 201","q":"GET /{project}/us-central1/httpEcho?mode=status","a":"201 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"status 404","q":"GET /{project}/us-central1/httpEcho?mode=status","a":"404 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"status 500","q":"GET /{project}/us-central1/httpEcho?mode=status","a":"500 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"redirect","q":"GET /{project}/us-central1/httpEcho?mode=redirect","a":"302 Found. Redirecting to /redirected ยท handler saw 1 event","r":"c","k":"answer"},{"t":"empty 204","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"text","q":"GET /{project}/us-central1/httpEcho?mode=text","a":"200 plain text ็ซ๐Ÿ”ฅ ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream","q":"GET /{project}/us-central1/httpEcho?mode=stream","a":"200 chunk-1 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"header mode","q":"GET /{project}/us-central1/httpEcho","a":"201 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"throw","q":"GET /{project}/us-central1/httpEcho?mode=throw","a":"500 Internal Server Error ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reject","q":"GET /{project}/us-central1/httpEcho?mode=reject","a":"500 Internal Server Error ยท handler saw 1 event","r":"c","k":"answer"},{"t":"throw after headers","q":"GET /{project}/us-central1/httpEcho?mode=throw-after-headers","a":"client error: client timeout after 4000ms ยท handler saw 1 event","r":"c","k":"answer"},{"t":"timeout","q":"GET /{project}/us-central1/httpTimeout","a":"500 {code} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"after timeout","q":"GET /{project}/us-central1/httpEcho","a":"200 {echo, unicode} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"timeout logs","q":"emulator log lines matching \"timed out\"","a":"1 log line matched","r":"c","k":"behaviour"},{"t":"all preflight","q":"OPTIONS /{project}/us-central1/httpCorsAll","a":"204","r":"c","k":"answer"},{"t":"all get","q":"GET /{project}/us-central1/httpCorsAll","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"origin preflight allowed","q":"OPTIONS /{project}/us-central1/httpCorsOrigin","a":"204","r":"c","k":"answer"},{"t":"origin preflight denied","q":"OPTIONS /{project}/us-central1/httpCorsOrigin","a":"204","r":"c","k":"answer"},{"t":"origin get allowed","q":"GET /{project}/us-central1/httpCorsOrigin","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"origin get denied","q":"GET /{project}/us-central1/httpCorsOrigin","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"no origin","q":"GET /{project}/us-central1/httpCorsOrigin","a":"200 {cors} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain preflight","q":"OPTIONS /{project}/us-central1/httpEcho","a":"204","r":"c","k":"answer"},{"t":"v1 get","q":"GET /{project}/us-central1/v1Http/legacy?x=1","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 post","q":"POST /{project}/us-central1/v1Http","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 options","q":"GET /{project}/us-central1/v1Options","a":"200 {options} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 preflight","q":"OPTIONS /{project}/us-central1/v1Http","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"round trip","q":"GET /{project}/us-central1/adminRoundTrip?id=wired","a":"200 {wrote, data} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"read back","q":"Firestore update probe/wired","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"object","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"null","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"string","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"number","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"array","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"long encoded","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"missing data","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"empty object","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"invalid json","q":"POST /{project}/us-central1/callableEcho","a":"400 SyntaxError: Expected property name or '}' in JSON at position 1 (line 1 column 2)    at {{stack}}","r":"c","k":"answer"},{"t":"text body","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"get method","q":"GET /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"put method","q":"PUT /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"return undefined","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"extra keys","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"code ok","q":"POST /{project}/us-central1/callableEcho","a":"200 OK: synthetic ok ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code cancelled","q":"POST /{project}/us-central1/callableEcho","a":"499 CANCELLED: synthetic cancelled ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unknown","q":"POST /{project}/us-central1/callableEcho","a":"500 UNKNOWN: synthetic unknown ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code invalid argument","q":"POST /{project}/us-central1/callableEcho","a":"400 INVALID_ARGUMENT: synthetic invalid-argument ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code deadline exceeded","q":"POST /{project}/us-central1/callableEcho","a":"504 DEADLINE_EXCEEDED: synthetic deadline-exceeded ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code not found","q":"POST /{project}/us-central1/callableEcho","a":"404 NOT_FOUND: synthetic not-found ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code already exists","q":"POST /{project}/us-central1/callableEcho","a":"409 ALREADY_EXISTS: synthetic already-exists ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code permission denied","q":"POST /{project}/us-central1/callableEcho","a":"403 PERMISSION_DENIED: synthetic permission-denied ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code resource exhausted","q":"POST /{project}/us-central1/callableEcho","a":"429 RESOURCE_EXHAUSTED: synthetic resource-exhausted ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code failed precondition","q":"POST /{project}/us-central1/callableEcho","a":"400 FAILED_PRECONDITION: synthetic failed-precondition ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code aborted","q":"POST /{project}/us-central1/callableEcho","a":"409 ABORTED: synthetic aborted ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code out of range","q":"POST /{project}/us-central1/callableEcho","a":"400 OUT_OF_RANGE: synthetic out-of-range ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unimplemented","q":"POST /{project}/us-central1/callableEcho","a":"501 UNIMPLEMENTED: synthetic unimplemented ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code internal","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL: synthetic internal ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unavailable","q":"POST /{project}/us-central1/callableEcho","a":"503 UNAVAILABLE: synthetic unavailable ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code data loss","q":"POST /{project}/us-central1/callableEcho","a":"500 DATA_LOSS: synthetic data-loss ยท handler saw 1 event","r":"c","k":"answer"},{"t":"code unauthenticated","q":"POST /{project}/us-central1/callableEcho","a":"401 UNAUTHENTICATED: synthetic unauthenticated ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bad code","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain throw","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain reject","q":"POST /{project}/us-central1/callableEcho","a":"500 INTERNAL ยท handler saw 1 event","r":"c","k":"answer"},{"t":"no details","q":"POST /{project}/us-central1/callableEcho","a":"404 NOT_FOUND: custom message ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer alice","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer admin claim","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer subonly","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer expired","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer garbage","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"bearer empty","q":"POST /{project}/us-central1/callableEcho","a":"401 UNAUTHENTICATED: Unauthenticated","r":"c","k":"answer"},{"t":"basic scheme","q":"POST /{project}/us-central1/callableEcho","a":"401 UNAUTHENTICATED: Unauthenticated","r":"c","k":"answer"},{"t":"lowercase bearer","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"auth required without","q":"POST /{project}/us-central1/callableAuthRequired","a":"401 UNAUTHENTICATED: sign in first ยท handler saw 1 event","r":"c","k":"answer"},{"t":"auth required with","q":"POST /{project}/us-central1/callableAuthRequired","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"instance id token","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"app check header","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"app check enforced without","q":"POST /{project}/us-central1/callableAppCheck","a":"401 UNAUTHENTICATED: Unauthenticated","r":"c","k":"answer"},{"t":"app check enforced with","q":"POST /{project}/us-central1/callableAppCheck","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 data","q":"POST /{project}/us-central1/v1Callable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 auth","q":"POST /{project}/us-central1/v1Callable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 error","q":"POST /{project}/us-central1/v1Callable","a":"400 FAILED_PRECONDITION: v1 failed-precondition ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 missing data","q":"POST /{project}/us-central1/v1Callable","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"v1 get","q":"GET /{project}/us-central1/v1Callable","a":"400 INVALID_ARGUMENT: Bad Request","r":"c","k":"answer"},{"t":"stream three","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream zero","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream error after chunk","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream error before chunk","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"no accept","q":"POST /{project}/us-central1/callableStream","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"accept json","q":"POST /{project}/us-central1/callableStream","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream auth","q":"POST /{project}/us-central1/callableStream","a":"200 data: {\"message\":{\"chunk\":1,\"unicode\":\"็ซ๐Ÿ”ฅ\"}} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stream non streaming function","q":"POST /{project}/us-central1/callableEcho","a":"200 data: {\"result\":{\"echo\":{\"data\":1,\"auth\":null,\"app\":{\"$undefined\":true},\"instanceIdToken\":{\"$undefined\":true},\"acceptsStreaming\":true,\"โ€ฆ","r":"c","k":"answer"},{"t":"stream preflight","q":"OPTIONS /{project}/us-central1/callableStream","a":"204","r":"c","k":"answer"},{"t":"v2 preflight","q":"OPTIONS /{project}/us-central1/callableEcho","a":"204","r":"c","k":"answer"},{"t":"v2 post origin","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 preflight","q":"OPTIONS /{project}/us-central1/v1Callable","a":"204","r":"c","k":"answer"},{"t":"v1 post origin","q":"POST /{project}/us-central1/v1Callable","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"preflight no method","q":"OPTIONS /{project}/us-central1/callableEcho","a":"204","r":"c","k":"answer"},{"t":"create","q":"Firestore set items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"update","q":"Firestore update items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"delete","q":"Firestore delete items/alpha","a":"200 {} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"recreate","q":"Firestore set items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"noop update","q":"Firestore update items/alpha","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"owner write","q":"Firestore set audited/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"user write","q":"Firestore set audited/two","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"user update","q":"Firestore update audited/two","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete","q":"Firestore delete audited/two","a":"200 {} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"create","q":"Firestore set legacy/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"update","q":"Firestore update legacy/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"delete","q":"Firestore delete legacy/one","a":"200 {} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"nested","q":"Firestore set tenants/t1/rooms/r1/messages/m1","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"nested shallow miss","q":"Firestore set tenants/t1/rooms/r1","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"deep one","q":"Firestore set deep/a","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"deep three","q":"Firestore set deep/a/b/c","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"deep five","q":"Firestore set deep/a/b/c/d/e","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"exact","q":"Firestore set config/settings","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"exact miss","q":"Firestore set config/other","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"regional","q":"Firestore set regional/r","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"unrelated","q":"Firestore set unrelated/u","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"commit","q":"Firestore commit (3 writes)","a":"200 {writeResults, commitTime} ยท handler saw 6 events","r":"c","k":"answer"},{"t":"throwing","q":"Firestore set throwing/t1","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"throwing again","q":"Firestore set throwing/t2","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"slow","q":"Firestore set slow/s1","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"handler error logs","q":"emulator log lines matching \"handler failure\"","a":"2 log lines matched","r":"c","k":"behaviour"},{"t":"upload","q":"Storage upload {project}/folder/object one.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"patch","q":"Storage patch {project}/folder/object one.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"overwrite","q":"Storage upload {project}/folder/object one.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"delete","q":"Storage delete {project}/folder/object one.txt","a":"204 ยท handler saw 2 events","r":"c","k":"answer"},{"t":"second upload","q":"Storage upload synthetic-second-bucket.example.test/second.bin","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"second delete","q":"Storage delete synthetic-second-bucket.example.test/second.bin","a":"204","r":"c","k":"answer"},{"t":"default upload","q":"Storage upload {project}/default.bin","a":"200 {name, bucket, generation, metageneration, โ€ฆ} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"json message","q":"Pub/Sub publish to synthetic-topic (1 message)","a":"200 {messageIds} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"plain message","q":"Pub/Sub publish to synthetic-topic (1 message)","a":"200 {messageIds} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"attributes only","q":"Pub/Sub publish to synthetic-topic (1 message)","a":"200 {messageIds} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"two messages","q":"Pub/Sub publish to synthetic-topic (2 messages)","a":"200 {messageIds} ยท handler saw 4 events","r":"c","k":"answer"},{"t":"unknown topic","q":"Pub/Sub publish to no-such-topic (1 message)","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"json","q":"Pub/Sub publish to legacy-topic (1 message)","a":"200 {messageIds} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"plain","q":"Pub/Sub publish to legacy-topic (1 message)","a":"200 {messageIds} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"topics","q":"Pub/Sub list topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"subscriptions","q":"Pub/Sub list subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"v2 tick","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v2 cron","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledCron-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 run","q":"POST /functions/projects/{project}/triggers/us-central1-v1Scheduled-0","a":"200 {status} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v2 tick empty body","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v2 tick https route","q":"POST /{project}/us-central1/scheduledTick","a":"404 Function us-central1-scheduledTick does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-firโ€ฆ","r":"c","k":"answer"},{"t":"sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 5 events","r":"c","k":"answer"},{"t":"lookup","q":"Auth lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"delete","q":"Auth delete","a":"200 identitytoolkit#DeleteAccountResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"claims sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 5 events","r":"c","k":"answer"},{"t":"claims lookup","q":"Auth lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"claims sign in","q":"Auth signIn","a":"200 identitytoolkit#VerifyPasswordResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reject sign up","q":"Auth signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/blockCreate returned HTTP error 403: {\"โ€ฆ","r":"c","k":"answer"},{"t":"reject lookup absent","q":"Auth signIn","a":"400 EMAIL_NOT_FOUND","r":"c","k":"answer"},{"t":"slow sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 5 events","r":"c","k":"answer"},{"t":"blocking logs","q":"emulator log lines matching \"blocking\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"plain sign up","q":"Auth signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/blockSignIn returned HTTP error 403: {\"โ€ฆ","r":"c","k":"answer"},{"t":"rejected sign in","q":"Auth signIn","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/blockSignIn returned HTTP error 403: {\"โ€ฆ","r":"c","k":"answer"},{"t":"wrong password","q":"Auth signIn","a":"400 INVALID_PASSWORD","r":"c","k":"answer"},{"t":"claims sign in again","q":"Auth signIn","a":"200 identitytoolkit#VerifyPasswordResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"primary env","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secrets","q":"GET /{project}/us-central1/httpSecrets","a":"200 {declared, undeclared} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"secondary env","q":"GET /{project}/us-central1/secondaryHttp","a":"200 {codebase} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"v1 env","q":"GET /{project}/us-central1/v1Http","a":"200 {v1, echo} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"event env","q":"Firestore set items/env","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"callable env","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"extension env","q":"GET /{project}/us-central1/ext-synthetic-httpFn","a":"200 {extension, mode, note} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"crash","q":"GET /{project}/us-central1/httpEcho?mode=crash","a":"200 {crashing} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"same function after","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"other function after","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"event after","q":"Firestore set items/after-crash","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"overlap","q":"3 parallel GET /{project}/us-central1/httpEcho?mode=slow&ms=1500","a":"statuses 200, 200, 200 ยท handler saw 3 events","r":"c","k":"answer"},{"t":"slow plus other","q":"3 parallel GET /{project}/us-central1/httpEcho?mode=slow&ms=1500","a":"statuses 200, 200, 200 ยท handler saw 3 events","r":"c","k":"answer"},{"t":"before removable","q":"GET /{project}/us-central1/removable","a":"200 {removable} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"before change","q":"Firestore set before-change/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reload logs","q":"emulator log lines matching \"Loaded functions definitions\"","a":"1 log line matched","r":"c","k":"behaviour"},{"t":"backends after","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"added","q":"GET /{project}/us-central1/addedLater","a":"200 {added} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"removed","q":"GET /{project}/us-central1/removable","a":"500 {code}","r":"c","k":"answer"},{"t":"old path miss","q":"Firestore set before-change/two","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"new path hit","q":"Firestore set after-change/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"existing still works","q":"Firestore set items/after-reload","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"trigger key generation","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"trigger key generation 1","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-1","a":"404 Function us-central1-scheduledTick-1 does not exist, valid functions are: us-central1-ext-synthetic-httpFn, us-central1-ext-synthetic-fโ€ฆ","r":"c","k":"answer"},{"t":"restored","q":"GET /{project}/us-central1/removable","a":"200 {removable} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"extension logs","q":"emulator log lines matching \"extensions\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"missing trigger logs","q":"emulator log lines matching \"missing a trigger\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"queue route","q":"GET /{project}/us-central1/ext-synthetic-queueFn","a":"500 {code}","r":"c","k":"answer"},{"t":"https","q":"GET /{project}/us-central1/ext-synthetic-httpFn/tail?x=1","a":"200 {extension, mode, note} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"firestore v1","q":"Firestore set synthetic-items/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"firestore v1 miss","q":"Firestore set other-items/one","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"firestore v2","q":"Firestore set synthetic-items-v2/one","a":"200 {name, fields, createTime, updateTime} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"schedule","q":"POST /functions/projects/{project}/triggers/us-central1-ext-synthetic-scheduledFn-0","a":"200 {status} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"publish listened","q":"GET /{project}/us-central1/ext-synthetic-httpFn?publish=test-publisher.synthetic.v1.complete","a":"200 {published} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"publish unlistened","q":"GET /{project}/us-central1/ext-synthetic-httpFn?publish=test-publisher.synthetic.v1.ignored","a":"200 {published} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"publish undeclared","q":"GET /{project}/us-central1/ext-synthetic-httpFn?publish=test-publisher.synthetic.v1.undeclared","a":"200 {published} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"eventarc logs","q":"emulator log lines matching \"eventarc\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"disable","q":"hub PUT /functions/disableBackgroundTriggers","a":"200 {enabled}","r":"c","k":"answer"},{"t":"write while disabled","q":"Firestore set items/disabled","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"http while disabled","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"trigger while disabled","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"204","r":"c","k":"answer"},{"t":"enable","q":"hub PUT /functions/enableBackgroundTriggers","a":"200 {enabled}","r":"c","k":"answer"},{"t":"write after enable","q":"Firestore set items/enabled","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"trigger generation after enable","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-1","a":"200 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"backends after enable","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 3 events","r":"c","k":"answer"},{"t":"lookup","q":"Auth lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"sign in","q":"Auth signIn","a":"200 identitytoolkit#VerifyPasswordResponse ยท handler saw 1 event","r":"c","k":"answer"},{"t":"reject","q":"Auth signUp","a":"400 BLOCKING_FUNCTION_ERROR_RESPONSE : ((HTTP request to {{origin:functions}}/{project}/us-central1/v1BeforeCreate returned HTTP error 400:โ€ฆ","r":"c","k":"answer"},{"t":"debug logs","q":"emulator log lines matching \"debug port\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"http","q":"GET /{project}/us-central1/httpEcho?mode=empty","a":"204 ยท handler saw 1 event","r":"c","k":"answer"},{"t":"callable","q":"POST /{project}/us-central1/callableEcho","a":"200 {result} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"event","q":"Firestore set items/debug","a":"200 {name, fields, createTime, updateTime} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"secondary","q":"GET /{project}/us-central1/secondaryHttp","a":"200 {codebase} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"startup logs","q":"emulator log lines matching \"\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"extension logs","q":"emulator log lines matching \"extension\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"missing trigger logs","q":"emulator log lines matching \"missing a trigger\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"checkout session","q":"Firestore set customers/synthetic-user/checkout_sessions/one","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"checkout session read","q":"Firestore update customers/synthetic-user/checkout_sessions/one","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"sign up","q":"Auth signUp","a":"200 identitytoolkit#SignupNewUserResponse ยท handler saw 4 events","r":"c","k":"answer"},{"t":"algolia write","q":"Firestore set searchable/one","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"delivery logs","q":"emulator log lines matching \"ext-\"","a":"4 log lines matched","r":"c","k":"behaviour"},{"t":"portal link","q":"POST /{project}/us-central1/ext-stripe-createPortalLink","a":"401 UNAUTHENTICATED: The function must be called while authenticated!","r":"c","k":"answer"},{"t":"webhook","q":"POST /{project}/us-central1/ext-stripe-handleWebhookEvents","a":"401 Webhook Error: Invalid Secret","r":"c","k":"answer"},{"t":"env logs","q":"emulator log lines matching \"environment variables\"","a":"1 log line matched","r":"d","k":"behaviour","w":"the official emulator logs env loading at every lazy worker start (here after an earlier timeout killed the worker); Firenook loads env once per (re)load and keeps its worker"},{"t":"crash logs","q":"emulator log lines matching \"exited\"","a":"0 log lines matched","r":"d","k":"behaviour","w":"Firenook logs the worker exit it recovers from (\"functions worker exited; starting a new one\"); the official runtime's kill message has no such line"},{"t":"initial","q":"publish to alpha-topic (initial)","a":"delivered to alpha v1 ยท 1 registered function","r":"c","k":"behaviour"},{"t":"added handler","q":"publish to beta-topic (added handler)","a":"delivered to beta v2 ยท 2 registered functions","r":"c","k":"behaviour"},{"t":"updated handler","q":"publish to alpha-topic (updated handler)","a":"delivered to alpha v2 ยท 2 registered functions","r":"c","k":"behaviour"}]} \ No newline at end of file diff --git a/public/conformance/pubsub.json b/public/conformance/pubsub.json index 7eed276..3b4793b 100644 --- a/public/conformance/pubsub.json +++ b/public/conformance/pubsub.json @@ -1 +1 @@ -{"runs":[[0,4,0,"Function topics, schedules and background-trigger controls"],[4,4,0,"Function topics, schedules and background-trigger controls"],[8,20,1,"topic name validation on create, get and delete"],[28,31,1,"topic create/get/list/update/delete over gRPC"],[59,20,1,"topic create/get/list/update/delete over HTTP/JSON"],[79,24,1,"listTopicSubscriptions, listTopicSnapshots and detachSubscription"],[103,22,1,"publish request validation and message id allocation"],[125,14,1,"publish over HTTP/JSON including malformed bodies"],[139,55,1,"createSubscription names, bounds and policies"],[194,20,1,"subscription create/get/list/update/delete over HTTP/JSON"],[214,34,1,"updateSubscription masks and modifyPushConfig"],[248,17,1,"a deleted topic leaves _deleted-topic_ subscriptions behind"],[265,33,1,"pull, acknowledge and modifyAckDeadline over gRPC"],[298,15,1,"pull, acknowledge and modifyAckDeadline over HTTP/JSON"],[313,13,1,"maxMessages batching across a larger backlog"],[326,12,1,"an unacknowledged message is redelivered after its ack deadline"],[338,7,1,"pull without returnImmediately waits for redelivery"],[345,19,1,"deliveryAttempt and dead-letter forwarding after maxDeliveryAttempts"],[364,22,1,"retainAckedMessages, seek to a time and seek to the future"],[386,42,1,"snapshot create/get/list/delete and seek to a snapshot"],[428,23,1,"ordering keys: one key delivers in order and blocks on its outstanding message; the unordered mirror"],[451,26,1,"attribute filters: equality, existence, hasPrefix, NOT/AND/OR"],[477,9,1,"streamingPull delivery, in-stream ack and modifyAckDeadline"],[486,9,1,"messages outstanding on a closed stream and delivery to a live stream"],[495,6,1,"one ordering key over streamingPull"],[501,16,1,"push envelope, attributes header, pull on a push subscription and switching"],[517,12,1,"push retries on non-2xx endpoint answers"],[529,60,1,"Avro schema create/get/list/commit/rollback/delete and validation"],[589,25,1,"schema operations over HTTP/JSON"],[614,30,1,"topics bound to a schema validate published messages"],[644,12,1,"IAM policy calls on topics, subscriptions and schemas"],[656,40,1,"unknown paths, methods and bodies on the HTTP surface"],[696,18,1,"resources are scoped by project and cross-project references"],[714,10,1,"exactly-once delivery flags on pull and acknowledge"],[724,11,1,"topic and subscription message retention settings"],[735,22,1,"pagination parameters over HTTP/JSON for every list"],[757,18,1,"every subscription gets its own copy; subscriptions created later start empty"],[775,24,1,"deliveryAttempt, dead-letter forwarding, filters and error mapping over HTTP/JSON"],[799,21,1,"push envelopes for every message shape and push subscriptions' lifecycle"],[820,12,1,"two streams on one subscription share the backlog; ids belong to the subscription"],[832,18,1,"topic fields over HTTP/JSON: labels, storage policy, KMS, schema settings, masks"],[850,17,1,"detached subscriptions and expiration policies"],[867,28,1,"snapshot contents across subscriptions, acked messages and later publishes"],[895,13,1,"modifyAckDeadline extends, shortens and expires leases"]],"cases":[{"t":"list function topics","q":"GET /v1/projects/{project}/topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"publish custom topic","q":"POST /v1/projects/{project}/topics/phase4-topic:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish schedule topic","q":"POST /v1/projects/{project}/topics/firebase-schedule-scheduledTick:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish while disabled","q":"POST /v1/projects/{project}/topics/phase4-topic:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"invoke schedule cloudevent directly","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200","r":"u"},{"t":"disable background triggers","q":"PUT /functions/disableBackgroundTriggers","a":"200 {enabled}","r":"u"},{"t":"enable background triggers","q":"PUT /functions/enableBackgroundTriggers","a":"200 {enabled}","r":"u"},{"t":"publish after reenable","q":"POST /v1/projects/{project}/topics/phase4-topic:publish","a":"200 {messageIds}","r":"u"},{"t":"two chars","q":"Publisher.createTopic topics/ab","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/ab)","r":"c","k":"answer"},{"t":"three chars","q":"Publisher.createTopic topics/abc","a":"OK {name}","r":"c","k":"answer"},{"t":"starts with digit","q":"Publisher.createTopic topics/1abc","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/1abc)","r":"c","k":"answer"},{"t":"starts with goog","q":"Publisher.createTopic topics/goog-topic","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/goog-topic)","r":"c","k":"answer"},{"t":"contains goog","q":"Publisher.createTopic topics/my-goog-topic","a":"OK {name}","r":"c","k":"answer"},{"t":"uppercase goog","q":"Publisher.createTopic topics/GoogTopic","a":"OK {name}","r":"c","k":"answer"},{"t":"allowed chars","q":"Publisher.createTopic topics/Topic_1.two~three+four%five-six","a":"OK {name}","r":"c","k":"answer"},{"t":"invalid char","q":"Publisher.createTopic topics/topic with space","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/topic with space)","r":"c","k":"answer"},{"t":"invalid slash","q":"Publisher.createTopic topics/topic/extra","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/topic/extra)","r":"c","k":"answer"},{"t":"max length","q":"Publisher.createTopic topics/txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxโ€ฆ","a":"OK {name}","r":"c","k":"answer"},{"t":"too long","q":"Publisher.createTopic topics/txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxโ€ฆ","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxโ€ฆ","r":"c","k":"answer"},{"t":"empty name","q":"Publisher.createTopic","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=)","r":"c","k":"answer"},{"t":"bare name","q":"Publisher.createTopic just-a-name","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=just-a-name)","r":"c","k":"answer"},{"t":"wrong collection","q":"Publisher.createTopic subscriptions/not-a-topic","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/subscriptions/not-a-topic)","r":"c","k":"answer"},{"t":"no project","q":"Publisher.createTopic projects//topics/abc","a":"OK {name}","r":"c","k":"answer"},{"t":"get invalid","q":"Publisher.getTopic abc","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=abc)","r":"c","k":"answer"},{"t":"get missing","q":"Publisher.getTopic topics/missing-topic","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"delete invalid","q":"Publisher.deleteTopic abc","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=abc)","r":"c","k":"answer"},{"t":"delete missing","q":"Publisher.deleteTopic topics/missing-topic","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"list","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"create plain","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"create labels","q":"Publisher.createTopic topics/events","a":"OK {labels, name}","r":"c","k":"answer"},{"t":"create retention","q":"Publisher.createTopic topics/audit","a":"OK {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"create retention short","q":"Publisher.createTopic topics/short-retention","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"create retention long","q":"Publisher.createTopic topics/long-retention","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"create kms","q":"Publisher.createTopic topics/kms","a":"OK {kmsKeyName, name}","r":"c","k":"answer"},{"t":"create policy","q":"Publisher.createTopic topics/policy","a":"OK {messageStoragePolicy, name}","r":"c","k":"answer"},{"t":"create schema missing","q":"Publisher.createTopic topics/with-schema","a":"NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"create duplicate","q":"Publisher.createTopic topics/orders","a":"ALREADY_EXISTS: Topic already exists","r":"c","k":"answer"},{"t":"get","q":"Publisher.getTopic topics/events","a":"OK {labels, name}","r":"c","k":"answer"},{"t":"list all","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list page 1","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list page 2","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list bad token","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list page size zero","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list negative","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list other project","q":"Publisher.listTopics projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"list bad project","q":"Publisher.listTopics nope","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"update labels","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: labels is not a known Topic field. Note that field paths must beโ€ฆ","r":"c","k":"answer"},{"t":"update retention","q":"Publisher.updateTopic topics/events","a":"OK {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"update camel mask","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: messageRetentionDuration is not a known Topic field. Note that fiโ€ฆ","r":"c","k":"answer"},{"t":"update no mask","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: The update_mask in the UpdateTopicRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"update empty mask","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: The update_mask in the UpdateTopicRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"update missing","q":"Publisher.updateTopic topics/missing-topic","a":"NOT_FOUND: Topic not found.","r":"c","k":"answer"},{"t":"update kms","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: kms_key_name is not a known Topic field. Note that field paths muโ€ฆ","r":"c","k":"answer"},{"t":"update policy","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: message_storage_policy is not a known Topic field. Note that fielโ€ฆ","r":"c","k":"answer"},{"t":"get after update","q":"Publisher.getTopic topics/events","a":"OK {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"delete","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"delete again","q":"Publisher.deleteTopic topics/orders","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"get deleted","q":"Publisher.getTopic topics/orders","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"list after delete","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"put","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"put labels","q":"PUT /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"put duplicate","q":"PUT /v1/projects/{project}/topics/orders","a":"409 ALREADY_EXISTS: Topic already exists","r":"c","k":"answer"},{"t":"put invalid name","q":"PUT /v1/projects/{project}/topics/ab","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/ab)","r":"c","k":"answer"},{"t":"put no body","q":"PUT /v1/projects/{project}/topics/nobody","a":"200 {name}","r":"c","k":"answer"},{"t":"get","q":"GET /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"get missing","q":"GET /v1/projects/{project}/topics/missing-topic","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"list","q":"GET /v1/projects/{project}/topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"list page","q":"GET /v1/projects/{project}/topics?pageSize=1","a":"200 {topics}","r":"c","k":"answer"},{"t":"list page token","q":"GET /v1/projects/{project}/topics?pageSize=1&pageToken=projects%{project}%2Ftopics%2Fnobody","a":"200 {topics}","r":"c","k":"answer"},{"t":"list other project","q":"GET /v1/projects/{project}/topics","a":"200 {}","r":"c","k":"answer"},{"t":"patch retention","q":"PATCH /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"patch labels","q":"PATCH /v1/projects/{project}/topics/events","a":"400 INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: labels is not a known Topic field. Note that field paths mustโ€ฆ","r":"c","k":"answer"},{"t":"patch no mask","q":"PATCH /v1/projects/{project}/topics/events","a":"400 INVALID_ARGUMENT: The update_mask in the UpdateTopicRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"patch query mask","q":"PATCH /v1/projects/{project}/topics/events?updateMask=message_retention_duration","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"get after patch","q":"GET /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"delete","q":"DELETE /v1/projects/{project}/topics/orders","a":"200 {}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /v1/projects/{project}/topics/orders","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"delete invalid","q":"DELETE /v1/projects/{project}/topics/ab","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/ab)","r":"c","k":"answer"},{"t":"list after","q":"GET /v1/projects/{project}/topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"subscriptions empty","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"subscriptions missing","q":"Publisher.listTopicSubscriptions topics/missing-topic","a":"OK {}","r":"c","k":"answer"},{"t":"snapshots empty","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"snapshots missing","q":"Publisher.listTopicSnapshots topics/missing-topic","a":"OK {}","r":"c","k":"answer"},{"t":"sub a","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub b","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub c","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"snap a","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"snap b","q":"Subscriber.createSnapshot subscriptions/sub-b","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"subscriptions","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"subscriptions page 1","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"subscriptions page 2","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"snapshots","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"snapshots page 1","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"snapshots page 2","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"detach","q":"Publisher.detachSubscription subscriptions/sub-a","a":"UNIMPLEMENTED: Method google.pubsub.v1.Publisher/DetachSubscription is unimplemented","r":"c","k":"answer"},{"t":"detach missing","q":"Publisher.detachSubscription subscriptions/missing-sub","a":"UNIMPLEMENTED: Method google.pubsub.v1.Publisher/DetachSubscription is unimplemented","r":"c","k":"answer"},{"t":"subscriptions http","q":"GET /v1/projects/{project}/topics/orders/subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"snapshots http","q":"GET /v1/projects/{project}/topics/orders/snapshots?pageSize=1","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"detach http","q":"POST /v1/projects/{project}/subscriptions/sub-a:detach","a":"501 UNIMPLEMENTED: Method google.pubsub.v1.Publisher/DetachSubscription is unimplemented","r":"c","k":"answer"},{"t":"delete sub b","q":"Subscriber.deleteSubscription subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"subscriptions after delete","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"snapshots outlive their subscription","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"missing topic","q":"Publisher.publish topics/missing-topic","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"invalid topic","q":"Publisher.publish orders","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=orders)","r":"c","k":"answer"},{"t":"no messages","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: No messages to publish","r":"c","k":"answer"},{"t":"empty message","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"empty data only","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"attributes only","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"ordering key only","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"data only","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"batch","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"one empty message rejects the whole batch","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"the server assigns ids regardless","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"client publish time","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"many attributes","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"long attribute key","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"long attribute value","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"empty attribute key","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"goog attribute","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"long ordering key","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"10 MB + 1 byte","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"large data ok","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"after all","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"publish","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish batch","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish missing","q":"POST /v1/projects/{project}/topics/missing-topic:publish","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"publish empty","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: No messages to publish","r":"c","k":"answer"},{"t":"publish no body","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: No messages to publish","r":"c","k":"answer"},{"t":"publish bad base64","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"publish bad json","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"publish unknown field","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"publish wrong type","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"proto JSON accepts snake case","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish get","q":"GET /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/orders:publish)","r":"c","k":"answer"},{"t":"publish attributes only","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish empty message","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"Publisher.createTopic topics/dead-letters","a":"OK {name}","r":"c","k":"answer"},{"t":"defaults","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"duplicate","q":"Subscriber.createSubscription topics/orders","a":"ALREADY_EXISTS: Subscription already exists","r":"c","k":"answer"},{"t":"missing topic","q":"Subscriber.createSubscription topics/missing-topic","a":"NOT_FOUND: Subscription topic does not exist","r":"c","k":"answer"},{"t":"invalid topic name","q":"Subscriber.createSubscription orders","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=orders)","r":"c","k":"answer"},{"t":"no topic","q":"Subscriber.createSubscription subscriptions/no-topic-field","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=)","r":"c","k":"answer"},{"t":"short name","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=projects/{project}/subscriptions/ab)","r":"c","k":"answer"},{"t":"goog name","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=projects/{project}/subscriptions/goog-sub)","r":"c","k":"answer"},{"t":"bare name","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=bare)","r":"c","k":"answer"},{"t":"cross-project subscription","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline zero","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline nine","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline ten","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline max","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline over","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: ack_deadline_secs out of bounds","r":"c","k":"answer"},{"t":"deadline negative","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: ack_deadline_secs out of bounds","r":"c","k":"answer"},{"t":"retention short","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"retention min","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retention long","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"retention max","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"retain acked","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"ordering","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"exactly once","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableExactlyOnceDelivery, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"labels","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, labels, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"detached","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, detached, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiration ttl","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiration never","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiration short","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"dead letter","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"dead letter default attempts","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"dead letter few attempts","q":"Subscriber.createSubscription topics/orders","a":"OUT_OF_RANGE: The value for max_delivery_attempts is too small. You passed 4 in the request, but the minimum value is 5.","r":"c","k":"answer"},{"t":"dead letter many attempts","q":"Subscriber.createSubscription topics/orders","a":"OUT_OF_RANGE: The value for max_delivery_attempts is too large. You passed 101 in the request, but the maximum value is 100.","r":"c","k":"answer"},{"t":"dead letter missing topic","q":"Subscriber.createSubscription topics/orders","a":"NOT_FOUND: Dead letter topic not found","r":"c","k":"answer"},{"t":"dead letter same topic","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"retry policy","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retry policy inverted","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: The value for maximum_backoff is too small. You passed 1s in the request, but the minimum value is 60s.","r":"c","k":"answer"},{"t":"retry policy empty","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"filter","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"filter invalid","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"filter unknown function","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"push","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push attributes","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push oidc","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push invalid endpoint","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Unsupported push_endpoint","r":"c","k":"answer"},{"t":"push attributes only","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"everything","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, enableMessageOrdering, โ€ฆ}","r":"c","k":"answer"},{"t":"get everything","q":"Subscriber.getSubscription subscriptions/everything","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, enableMessageOrdering, โ€ฆ}","r":"c","k":"answer"},{"t":"get missing","q":"Subscriber.getSubscription subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"get invalid","q":"Subscriber.getSubscription everything","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=everything)","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list page 1","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list page 2","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list other project","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list bad project","q":"Subscriber.listSubscriptions nope","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"put","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"put duplicate","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"409 ALREADY_EXISTS: Subscription already exists","r":"c","k":"answer"},{"t":"put missing topic","q":"PUT /v1/projects/{project}/subscriptions/sub-b","a":"404 NOT_FOUND: Subscription topic does not exist","r":"c","k":"answer"},{"t":"put no topic","q":"PUT /v1/projects/{project}/subscriptions/sub-b","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=)","r":"c","k":"answer"},{"t":"put durations","q":"PUT /v1/projects/{project}/subscriptions/sub-c","a":"200 {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"put bad duration","q":"PUT /v1/projects/{project}/subscriptions/sub-d","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"get","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"get missing","q":"GET /v1/projects/{project}/subscriptions/missing-sub","a":"404 NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"list","q":"GET /v1/projects/{project}/subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"list page","q":"GET /v1/projects/{project}/subscriptions?pageSize=1","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"patch deadline","q":"PATCH /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"patch camel","q":"PATCH /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"patch push","q":"PATCH /v1/projects/{project}/subscriptions/sub-a?updateMask=push_config","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"get after patch","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"modify push config","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyPushConfig","a":"200 {}","r":"c","k":"answer"},{"t":"get after modify","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"delete","q":"DELETE /v1/projects/{project}/subscriptions/sub-a","a":"200 {}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /v1/projects/{project}/subscriptions/sub-a","a":"404 NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"list after","q":"GET /v1/projects/{project}/subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"other topic","q":"Publisher.createTopic topics/other","a":"OK {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"Publisher.createTopic topics/dead-letters","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"no mask","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: The update_mask in the UpdateSubscriptionRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"empty mask","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: The update_mask in the UpdateSubscriptionRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"ack deadline","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"ack deadline out of bounds","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: ack_deadline_secs out of bounds","r":"c","k":"answer"},{"t":"camel mask","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: ackDeadlineSeconds is not a known Subscription field. Noteโ€ฆ","r":"c","k":"answer"},{"t":"unknown field","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: bogus is not a known Subscription field. Note that field pโ€ฆ","r":"c","k":"answer"},{"t":"labels","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: labels is not a known Subscription field. Note that fieldโ€ฆ","r":"c","k":"answer"},{"t":"topic field","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the topic field in the Subscription is not mutable.","r":"c","k":"answer"},{"t":"push config","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push config clear","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retain acked","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retention","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retention out of bounds","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"ordering","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the enable_message_ordering field in the Subscription is nโ€ฆ","r":"c","k":"answer"},{"t":"filter","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Updating the filter field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"expiration","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Updating the expiration_policy field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"dead letter","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"retry","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"exactly once","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"detached","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the detached field in the Subscription is not mutable.","r":"c","k":"answer"},{"t":"multiple","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"missing","q":"Subscriber.updateSubscription subscriptions/missing-sub","a":"NOT_FOUND: Subscription not found.","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"modify push","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"modify push oidc","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get after modify","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"modify push clear","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"modify push missing","q":"Subscriber.modifyPushConfig subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"modify push no config","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get final","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"delete topic","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"publish after","q":"Publisher.publish topics/orders","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"recreate","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"publish recreated","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull recreated","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get recreated","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"children","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"delete sub","q":"Subscriber.deleteSubscription subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"delete sub again","q":"Subscriber.deleteSubscription subscriptions/sub-a","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"delete invalid","q":"Subscriber.deleteSubscription sub-a","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=sub-a)","r":"c","k":"answer"},{"t":"list after","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"pull no max","q":"Subscriber.pull subscriptions/sub-a","a":"INVALID_ARGUMENT: No max_messages specified","r":"c","k":"answer"},{"t":"pull zero max","q":"Subscriber.pull subscriptions/sub-a","a":"INVALID_ARGUMENT: No max_messages specified","r":"c","k":"answer"},{"t":"pull negative max","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull missing","q":"Subscriber.pull subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"pull invalid","q":"Subscriber.pull sub-a","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=sub-a)","r":"c","k":"answer"},{"t":"pull empty","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull two","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull rest","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull outstanding","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack one","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack again","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack unknown","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack garbage","q":"Subscriber.acknowledge subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"ack empty","q":"Subscriber.acknowledge subscriptions/sub-a","a":"INVALID_ARGUMENT: No ack ids specified.","r":"c","k":"answer"},{"t":"ack missing sub","q":"Subscriber.acknowledge subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"ack other subscription id","q":"Subscriber.acknowledge subscriptions/sub-a","a":"INVALID_ARGUMENT: Subscription projects/{project}/subscriptions/sub-a received an invalid ack ID projects/{project}/subscriptions/other-subโ€ฆ","r":"c","k":"answer"},{"t":"extend","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"extend over","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"extend negative","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: Ack deadline cannot be negative","r":"c","k":"answer"},{"t":"modify empty","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: No ack ids specified","r":"c","k":"answer"},{"t":"modify garbage","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"modify missing sub","q":"Subscriber.modifyAckDeadline subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"nack","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after nack","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack acked","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after nack acked","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish more","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull blocking","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull one more","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull none left","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"put sub","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"pull empty","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {}","r":"c","k":"answer"},{"t":"pull no max","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"400 INVALID_ARGUMENT: No max_messages specified","r":"c","k":"answer"},{"t":"pull missing","q":"POST /v1/projects/{project}/subscriptions/missing-sub:pull","a":"404 NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"publish","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"modify","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"pull after nack","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"ack","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"200 {}","r":"c","k":"answer"},{"t":"ack empty","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"400 INVALID_ARGUMENT: No ack ids specified.","r":"c","k":"answer"},{"t":"ack garbage","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"400 INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"ack no body","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"400 INVALID_ARGUMENT: No ack ids specified.","r":"c","k":"answer"},{"t":"modify over","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"pull none","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish a","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish b","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull 5 a","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 b","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 c","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 d","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 e","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull 1000","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack all","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"nack rest","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull redelivered","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull leased","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull redelivered","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"extend","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull still leased","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack expired id","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after stale ack","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack current","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after ack","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull blocks until redelivery","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"the client deadline expires before the emulator's long poll","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"Publisher.createTopic topics/dead-letters","a":"OK {name}","r":"c","k":"answer"},{"t":"dlq sub","q":"Subscriber.createSubscription topics/dead-letters","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"plain sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"attempt 1","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 1","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 2","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 2","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 3","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 3","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 4","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 4","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 5","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 5","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 6","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"dead letters","q":"Subscriber.pull subscriptions/dlq-sub","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"plain","q":"Subscriber.pull subscriptions/plain","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"retaining","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"plain","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish 1","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish 2","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull retaining","q":"Subscriber.pull subscriptions/retaining","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack retaining","q":"Subscriber.acknowledge subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull plain","q":"Subscriber.pull subscriptions/plain","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack plain","q":"Subscriber.acknowledge subscriptions/plain","a":"OK {}","r":"c","k":"answer"},{"t":"seek retaining epoch","q":"Subscriber.seek subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull retaining after seek","q":"Subscriber.pull subscriptions/retaining","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek plain epoch","q":"Subscriber.seek subscriptions/plain","a":"OK {}","r":"c","k":"answer"},{"t":"pull plain after seek","q":"Subscriber.pull subscriptions/plain","a":"OK {}","r":"c","k":"answer"},{"t":"seek retaining between","q":"Subscriber.seek subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull retaining between","q":"Subscriber.pull subscriptions/retaining","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek future","q":"Subscriber.seek subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull retaining future","q":"Subscriber.pull subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"seek none","q":"Subscriber.seek subscriptions/retaining","a":"INVALID_ARGUMENT: No target was specified in the SeekRequest. Must specify either a time or a snapshot","r":"c","k":"answer"},{"t":"seek both","q":"Subscriber.seek subscriptions/retaining","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"seek missing","q":"Subscriber.seek subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"seek http","q":"POST /v1/projects/{project}/subscriptions/retaining:seek","a":"200 {}","r":"c","k":"answer"},{"t":"pull http after seek","q":"POST /v1/projects/{project}/subscriptions/retaining:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish 1","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"create","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"create duplicate","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"ALREADY_EXISTS: Snapshot already exists","r":"c","k":"answer"},{"t":"create missing sub","q":"Subscriber.createSnapshot subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"create invalid name","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid [snapshots] name: (name=snap)","r":"c","k":"answer"},{"t":"create short name","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid [snapshots] name: (name=projects/{project}/snapshots/ab)","r":"c","k":"answer"},{"t":"create no sub","q":"Subscriber.createSnapshot snapshots/snap-c","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSnapshot snapshots/snap-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"get missing","q":"Subscriber.getSnapshot snapshots/missing-snap","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"get invalid","q":"Subscriber.getSnapshot snap-a","a":"INVALID_ARGUMENT: Invalid [snapshots] name: (name=snap-a)","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"list other project","q":"Subscriber.listSnapshots projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"pull 1","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack 1","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish 2","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull 2","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack 2","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull empty","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"seek","q":"Subscriber.seek subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after seek","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek missing snapshot","q":"Subscriber.seek subscriptions/sub-a","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"create second","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"list page 1","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"list page 2","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"update","q":"Subscriber.updateSnapshot snapshots/snap-a","a":"UNIMPLEMENTED: Method google.pubsub.v1.Subscriber/UpdateSnapshot is unimplemented","r":"c","k":"answer"},{"t":"delete","q":"Subscriber.deleteSnapshot snapshots/snap-a","a":"OK {}","r":"c","k":"answer"},{"t":"delete again","q":"Subscriber.deleteSnapshot snapshots/snap-a","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"seek deleted","q":"Subscriber.seek subscriptions/sub-a","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"delete sub","q":"Subscriber.deleteSubscription subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get after sub delete","q":"Subscriber.getSnapshot snapshots/snap-b","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"sub again","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"seek other sub","q":"Subscriber.seek subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"pull sub b","q":"Subscriber.pull subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"put http","q":"PUT /v1/projects/{project}/snapshots/snap-http","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"get http","q":"GET /v1/projects/{project}/snapshots/snap-http","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"list http","q":"GET /v1/projects/{project}/snapshots","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"seek http","q":"POST /v1/projects/{project}/subscriptions/sub-b:seek","a":"200 {}","r":"c","k":"answer"},{"t":"patch http","q":"PATCH /v1/projects/{project}/snapshots/snap-http","a":"501 UNIMPLEMENTED: Method google.pubsub.v1.Subscriber/UpdateSnapshot is unimplemented","r":"c","k":"answer"},{"t":"delete http","q":"DELETE /v1/projects/{project}/snapshots/snap-http","a":"200 {}","r":"c","k":"answer"},{"t":"get http deleted","q":"GET /v1/projects/{project}/snapshots/snap-http","a":"404 NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"single topic","q":"Publisher.createTopic topics/single-key","a":"OK {name}","r":"c","k":"answer"},{"t":"ordered","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"unordered","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"single","q":"Subscriber.createSubscription topics/single-key","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"the set of messages an ordered subscription delivers at once; the official emulator interleaves keys differently from run to run","q":"Subscriber.pull subscriptions/ordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull unordered","q":"Subscriber.pull subscriptions/unordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack ordered","q":"Subscriber.acknowledge subscriptions/ordered","a":"OK {}","r":"c","k":"answer"},{"t":"pull ordered drained","q":"Subscriber.pull subscriptions/ordered","a":"OK {}","r":"c","k":"answer"},{"t":"publish more","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull more","q":"Subscriber.pull subscriptions/ordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull unordered more","q":"Subscriber.pull subscriptions/unordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"publish single key","q":"Publisher.publish topics/single-key","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull max one","q":"Subscriber.pull subscriptions/single","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull max one again","q":"Subscriber.pull subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"ack first single","q":"Subscriber.acknowledge subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"pull max one after ack","q":"Subscriber.pull subscriptions/single","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull single rest","q":"Subscriber.pull subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"nack second single","q":"Subscriber.modifyAckDeadline subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"pull single after nack","q":"Subscriber.pull subscriptions/single","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack second single","q":"Subscriber.acknowledge subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"pull single third","q":"Subscriber.pull subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"equality","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"inequality","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"existence","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"prefix","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"not","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"and","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"or","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"parentheses","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"unfiltered","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"invalid","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"unknown function","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"data filter","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"ordering key filter","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull equality","q":"Subscriber.pull subscriptions/equality","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull inequality","q":"Subscriber.pull subscriptions/inequality","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull existence","q":"Subscriber.pull subscriptions/existence","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull prefix","q":"Subscriber.pull subscriptions/prefix","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull not","q":"Subscriber.pull subscriptions/negated","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull and","q":"Subscriber.pull subscriptions/conjunction","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull or","q":"Subscriber.pull subscriptions/disjunction","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull parentheses","q":"Subscriber.pull subscriptions/parenthesised","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull unfiltered","q":"Subscriber.pull subscriptions/unfiltered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"update filter","q":"Subscriber.updateSubscription subscriptions/equality","a":"INVALID_ARGUMENT: Updating the filter field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"get equality","q":"Subscriber.getSubscription subscriptions/equality","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream","q":"Subscriber.streamingPull (stream, 2 writes)","a":"OK ยท 4 messages received","r":"c","k":"answer"},{"t":"pull after stream","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"stream missing","q":"Subscriber.streamingPull (stream, 1 write)","a":"NOT_FOUND: Subscription does not exist (resource=missing-sub) ยท 0 messages received","r":"c","k":"answer"},{"t":"stream no subscription","q":"Subscriber.streamingPull (stream, 1 write)","a":"INVALID_ARGUMENT: first message must set subscription ยท 0 messages received","r":"c","k":"answer"},{"t":"stream bad deadline","q":"Subscriber.streamingPull (stream, 1 write)","a":"INVALID_ARGUMENT: stream_ack_deadline_seconds must be between 10 and 600 seconds ยท 0 messages received","r":"c","k":"answer"},{"t":"stream invalid name","q":"Subscriber.streamingPull (stream, 1 write)","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=sub-a) ยท 0 messages received","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream then close","q":"Subscriber.streamingPull (stream, 1 write)","a":"CANCELLED: Cancelled on client ยท 1 message received","r":"c","k":"answer"},{"t":"pull right after close","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after deadline","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"stream live publish","q":"Subscriber.streamingPull (stream, 2 writes)","a":"OK ยท 1 message received","r":"c","k":"answer"},{"t":"pull drained","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream","q":"Subscriber.streamingPull (stream, 2 writes)","a":"OK ยท 3 messages received","r":"c","k":"answer"},{"t":"publish more","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/ordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"push sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed","q":"push endpoint: wait up to 3000 ms for 2 or more pushes","a":"2 distinct pushes received","r":"c","k":"behaviour"},{"t":"pull on push sub","q":"Subscriber.pull subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"to pull","q":"Subscriber.modifyPushConfig subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"publish pull mode","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"no pushes","q":"push endpoint: wait up to 500 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"pull in pull mode","q":"Subscriber.pull subscriptions/push-sub","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"to push with outstanding","q":"Subscriber.modifyPushConfig subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"still leased","q":"push endpoint: wait up to 800 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"publish push again","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed again","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"nack outstanding","q":"Subscriber.modifyAckDeadline subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"pushed after nack","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"get","q":"Subscriber.getSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"push sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"retried 500","q":"push endpoint: wait up to 4000 ms for 3 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"retried 404","q":"push endpoint: wait up to 3000 ms for 2 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"delivered","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"stops","q":"push endpoint: wait up to 1500 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"publish 204","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"delivered 204","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"publish 302","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"retried 302","q":"push endpoint: wait up to 3000 ms for 2 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"delivered after 302","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"create","q":"SchemaService.createSchema projects/{project}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"create duplicate","q":"SchemaService.createSchema projects/{project}","a":"ALREADY_EXISTS: Schema already exists","r":"c","k":"answer"},{"t":"create invalid json","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create invalid avro","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create empty definition","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create no type","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"create protobuf","q":"SchemaService.createSchema projects/{project}","a":"UNIMPLEMENTED: Protocol buffer support not implemented in emulator","r":"c","k":"answer"},{"t":"create no id","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/)","r":"c","k":"answer"},{"t":"create name only","q":"SchemaService.createSchema schemas/named","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/)","r":"c","k":"answer"},{"t":"create short id","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/ab)","r":"c","k":"answer"},{"t":"create goog id","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/goog-schema)","r":"c","k":"answer"},{"t":"create bad parent","q":"SchemaService.createSchema nope","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=nope/schemas/readings2)","r":"c","k":"answer"},{"t":"create primitive","q":"SchemaService.createSchema projects/{project}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get","q":"SchemaService.getSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get basic","q":"SchemaService.getSchema schemas/readings","a":"OK {name, revisionCreateTime, revisionId, type}","r":"c","k":"answer"},{"t":"get full","q":"SchemaService.getSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get missing","q":"SchemaService.getSchema schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"get invalid","q":"SchemaService.getSchema readings","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=readings)","r":"c","k":"answer"},{"t":"list","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list full","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list page 1","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list page 2","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list other project","q":"SchemaService.listSchemas projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"commit","q":"SchemaService.commitSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"commit invalid","q":"SchemaService.commitSchema schemas/readings","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"commit missing","q":"SchemaService.commitSchema schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"commit no schema","q":"SchemaService.commitSchema schemas/readings","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"revisions","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"revisions basic","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"revisions page","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"revisions missing","q":"SchemaService.listSchemaRevisions schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"get at revision","q":"SchemaService.getSchema schemas/readings@{{revisionId:create}}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get at missing revision","q":"SchemaService.getSchema schemas/readings@deadbeef","a":"NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"get latest","q":"SchemaService.getSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"rollback","q":"SchemaService.rollbackSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"rollback missing revision","q":"SchemaService.rollbackSchema schemas/readings","a":"NOT_FOUND: Revision not found","r":"c","k":"answer"},{"t":"rollback missing schema","q":"SchemaService.rollbackSchema schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"revisions after rollback","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"delete revision","q":"SchemaService.deleteSchemaRevision schemas/readings","a":"NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"delete revision at name","q":"SchemaService.deleteSchemaRevision schemas/readings@{{revisionId:commit}}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"delete revision missing","q":"SchemaService.deleteSchemaRevision schemas/readings","a":"NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"revisions after delete","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"delete last revision","q":"SchemaService.deleteSchemaRevision schemas/primitive@{{revisionId:create-primitive}}","a":"INVALID_ARGUMENT: Cannot delete last revision. Please use DeleteSchema.","r":"c","k":"answer"},{"t":"validate ok","q":"SchemaService.validateSchema projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"validate bad","q":"SchemaService.validateSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"validate no type","q":"SchemaService.validateSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"validate protobuf","q":"SchemaService.validateSchema projects/{project}","a":"UNIMPLEMENTED: Protocol buffer support not implemented in emulator","r":"c","k":"answer"},{"t":"validate message by name","q":"SchemaService.validateMessage schemas/readings","a":"OK {}","r":"c","k":"answer"},{"t":"validate message by name bad","q":"SchemaService.validateMessage schemas/readings","a":"INVALID_ARGUMENT: Could not parse JSON Avro message","r":"c","k":"answer"},{"t":"validate message by schema","q":"SchemaService.validateMessage projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"validate message binary","q":"SchemaService.validateMessage projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"validate message binary bad","q":"SchemaService.validateMessage projects/{project}","a":"INVALID_ARGUMENT: Could not parse binary Avro message","r":"c","k":"answer"},{"t":"validate message no encoding","q":"SchemaService.validateMessage projects/{project}","a":"INVALID_ARGUMENT: No encoding provided.","r":"c","k":"answer"},{"t":"validate message no schema","q":"SchemaService.validateMessage projects/{project}","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"validate message missing schema","q":"SchemaService.validateMessage schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"validate message at revision","q":"SchemaService.validateMessage schemas/readings@{{revisionId:create}}","a":"OK {}","r":"c","k":"answer"},{"t":"delete","q":"SchemaService.deleteSchema schemas/readings","a":"OK {}","r":"c","k":"answer"},{"t":"delete again","q":"SchemaService.deleteSchema schemas/readings","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"get deleted","q":"SchemaService.getSchema schemas/readings","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"list after delete","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"create","q":"POST /v1/projects/{project}/schemas?schemaId=readings","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"create duplicate","q":"POST /v1/projects/{project}/schemas?schemaId=readings","a":"409 ALREADY_EXISTS: Schema already exists","r":"c","k":"answer"},{"t":"create no id","q":"POST /v1/projects/{project}/schemas","a":"400 INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/)","r":"c","k":"answer"},{"t":"create invalid","q":"POST /v1/projects/{project}/schemas?schemaId=broken","a":"400 INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create protobuf","q":"POST /v1/projects/{project}/schemas?schemaId=proto","a":"501 UNIMPLEMENTED: Protocol buffer support not implemented in emulator","r":"c","k":"answer"},{"t":"get","q":"GET /v1/projects/{project}/schemas/readings","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get basic","q":"GET /v1/projects/{project}/schemas/readings?view=BASIC","a":"200 {name, revisionCreateTime, revisionId, type}","r":"c","k":"answer"},{"t":"get missing","q":"GET /v1/projects/{project}/schemas/missing-schema","a":"404 NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"list","q":"GET /v1/projects/{project}/schemas","a":"200 {schemas}","r":"c","k":"answer"},{"t":"list full","q":"GET /v1/projects/{project}/schemas?view=FULL","a":"200 {schemas}","r":"c","k":"answer"},{"t":"commit","q":"POST /v1/projects/{project}/schemas/readings:commit","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"revisions","q":"GET /v1/projects/{project}/schemas/readings:listRevisions","a":"200 {schemas}","r":"c","k":"answer"},{"t":"revisions basic","q":"GET /v1/projects/{project}/schemas/readings:listRevisions?view=BASIC","a":"200 {schemas}","r":"c","k":"answer"},{"t":"get at revision","q":"GET /v1/projects/{project}/schemas/readings@{{revisionId:create}}","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"rollback","q":"POST /v1/projects/{project}/schemas/readings:rollback","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"delete revision","q":"DELETE /v1/projects/{project}/schemas/readings@{{revisionId:commit}}:deleteRevision","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"delete revision query","q":"DELETE /v1/projects/{project}/schemas/readings:deleteRevision?revisionId={{revisionId:rollback}}","a":"404 NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"revisions after","q":"GET /v1/projects/{project}/schemas/readings:listRevisions","a":"200 {schemas}","r":"c","k":"answer"},{"t":"validate","q":"POST /v1/projects/{project}/schemas:validate","a":"200 {}","r":"c","k":"answer"},{"t":"validate bad","q":"POST /v1/projects/{project}/schemas:validate","a":"400 INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"validate message","q":"POST /v1/projects/{project}/schemas:validateMessage","a":"200 {}","r":"c","k":"answer"},{"t":"validate message bad","q":"POST /v1/projects/{project}/schemas:validateMessage","a":"400 INVALID_ARGUMENT: Could not parse JSON Avro message","r":"c","k":"answer"},{"t":"delete","q":"DELETE /v1/projects/{project}/schemas/readings","a":"200 {}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /v1/projects/{project}/schemas/readings","a":"404 NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"list after","q":"GET /v1/projects/{project}/schemas","a":"200 {}","r":"c","k":"answer"},{"t":"create","q":"SchemaService.createSchema projects/{project}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"topic json","q":"Publisher.createTopic topics/readings-json","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic binary","q":"Publisher.createTopic topics/readings-binary","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic no encoding","q":"Publisher.createTopic topics/readings-unspecified","a":"INVALID_ARGUMENT: Invalid schema encoding provided","r":"c","k":"answer"},{"t":"topic missing schema","q":"Publisher.createTopic topics/readings-missing","a":"NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"topic invalid schema name","q":"Publisher.createTopic topics/readings-invalid","a":"NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"topic revision range","q":"Publisher.createTopic topics/readings-range","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic bad revision range","q":"Publisher.createTopic topics/readings-bad-range","a":"NOT_FOUND: First revision could not be found","r":"c","k":"answer"},{"t":"sub json","q":"Subscriber.createSubscription topics/readings-json","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub binary","q":"Subscriber.createSubscription topics/readings-binary","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish json ok","q":"Publisher.publish topics/readings-json","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish json bad","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish json not json","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish json mixed","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish json empty data attributes","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish binary ok","q":"Publisher.publish topics/readings-binary","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish binary bad","q":"Publisher.publish topics/readings-binary","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish unspecified","q":"Publisher.publish topics/readings-unspecified","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"pull json","q":"Subscriber.pull subscriptions/sub-json","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull binary","q":"Subscriber.pull subscriptions/sub-binary","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"get topic","q":"Publisher.getTopic topics/readings-json","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"update encoding","q":"Publisher.updateTopic topics/readings-json","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"update clear schema","q":"Publisher.updateTopic topics/readings-json","a":"INVALID_ARGUMENT: No schema name provided","r":"c","k":"answer"},{"t":"publish after clear","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"commit","q":"SchemaService.commitSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"publish after commit","q":"Publisher.publish topics/readings-binary","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"delete schema","q":"SchemaService.deleteSchema schemas/readings","a":"OK {}","r":"c","k":"answer"},{"t":"publish after schema delete","q":"Publisher.publish topics/readings-binary","a":"NOT_FOUND: Schema associated with topic deleted.","r":"c","k":"answer"},{"t":"get topic after schema delete","q":"Publisher.getTopic topics/readings-binary","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"publish http json bad","q":"POST /v1/projects/{project}/topics/readings-range:publish","a":"404 NOT_FOUND: Schema associated with topic deleted.","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get topic","q":"IAMPolicy.getIamPolicy topics/orders","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"set topic","q":"IAMPolicy.setIamPolicy topics/orders","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"test topic","q":"IAMPolicy.testIamPermissions topics/orders","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get subscription","q":"IAMPolicy.getIamPolicy subscriptions/sub-a","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get missing","q":"IAMPolicy.getIamPolicy topics/missing-topic","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get topic http","q":"GET /v1/projects/{project}/topics/orders:getIamPolicy","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"set topic http","q":"POST /v1/projects/{project}/topics/orders:setIamPolicy","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"test topic http","q":"POST /v1/projects/{project}/topics/orders:testIamPermissions","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get subscription http","q":"GET /v1/projects/{project}/subscriptions/sub-a:getIamPolicy","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get schema http","q":"GET /v1/projects/{project}/schemas/x:getIamPolicy","a":"400 INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/x:getIamPolicy)","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"root","q":"GET /","a":"200 Ok","r":"c","k":"answer"},{"t":"v1 root","q":"GET /v1","a":"404 Not Found","r":"c","k":"answer"},{"t":"projects","q":"GET /v1/projects","a":"404 Not Found","r":"c","k":"answer"},{"t":"project","q":"GET /v1/projects/{project}","a":"404 Not Found","r":"c","k":"answer"},{"t":"unknown collection","q":"GET /v1/projects/{project}/nothing","a":"404 Not Found","r":"c","k":"answer"},{"t":"unknown verb","q":"POST /v1/projects/{project}/topics/orders:frobnicate","a":"404 Not Found","r":"c","k":"answer"},{"t":"post topic","q":"POST /v1/projects/{project}/topics/orders","a":"404 Not Found","r":"c","k":"answer"},{"t":"get publish","q":"GET /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/orders:publish)","r":"c","k":"answer"},{"t":"put publish","q":"PUT /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"delete publish","q":"DELETE /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/orders:publish)","r":"c","k":"answer"},{"t":"trailing slash","q":"GET /v1/projects/{project}/topics/orders/","a":"404 Not Found","r":"c","k":"answer"},{"t":"double slash","q":"GET /v1//projects/{project}/topics/orders","a":"404 Not Found","r":"c","k":"answer"},{"t":"encoded colon","q":"POST /v1/projects/{project}/topics/orders%3Apublish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"query alt","q":"GET /v1/projects/{project}/topics/orders?alt=json","a":"200 {name}","r":"c","k":"answer"},{"t":"query pretty","q":"GET /v1/projects/{project}/topics/orders?prettyPrint=false","a":"200 {name}","r":"c","k":"answer"},{"t":"query unknown","q":"GET /v1/projects/{project}/topics/orders?bogus=1","a":"200 {name}","r":"c","k":"answer"},{"t":"v2","q":"GET /v2/projects/{project}/topics/orders","a":"404 Not Found (Unsupported API version \"v2\")","r":"c","k":"answer"},{"t":"no version","q":"GET /projects/{project}/topics/orders","a":"404 Not Found","r":"c","k":"answer"},{"t":"head","q":"HEAD /v1/projects/{project}/topics/orders","a":"404 (empty body)","r":"c","k":"answer"},{"t":"options","q":"OPTIONS /v1/projects/{project}/topics/orders","a":"200","r":"c","k":"answer"},{"t":"bad json","q":"PUT /v1/projects/{project}/topics/broken","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"json array","q":"PUT /v1/projects/{project}/topics/broken","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"json string","q":"PUT /v1/projects/{project}/topics/broken","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"empty body","q":"PUT /v1/projects/{project}/topics/emptybody","a":"200 {name}","r":"c","k":"answer"},{"t":"unknown field","q":"PUT /v1/projects/{project}/topics/unknown-field","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"wrong type","q":"PUT /v1/projects/{project}/topics/wrong-type","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"snake case field","q":"PUT /v1/projects/{project}/topics/snake","a":"200 {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"get snake","q":"GET /v1/projects/{project}/topics/snake","a":"200 {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"int as string","q":"PUT /v1/projects/{project}/subscriptions/sub-int","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"bool as string","q":"PUT /v1/projects/{project}/subscriptions/sub-bool","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"null field","q":"PUT /v1/projects/{project}/subscriptions/sub-null","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"duration fraction","q":"PUT /v1/projects/{project}/subscriptions/sub-fraction","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"duration no unit","q":"PUT /v1/projects/{project}/subscriptions/sub-no-unit","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"enum unknown","q":"POST /v1/projects/{project}/schemas?schemaId=enum-unknown","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"timestamp seek","q":"POST /v1/projects/{project}/subscriptions/sub-int:seek","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"bytes invalid","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"URL-safe base64","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"bytes unpadded","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"content type text","q":"PUT /v1/projects/{project}/topics/text-body","a":"200 {name}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"other topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"list a","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list b","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"cross subscription","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"local subscription","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull cross","q":"Subscriber.pull subscriptions/cross","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull local","q":"Subscriber.pull subscriptions/local","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"list subs a","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list subs b","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"topic subscriptions","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"get other","q":"Publisher.getTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"delete other","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get local after","q":"Publisher.getTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"cross snapshot","q":"Subscriber.createSnapshot subscriptions/local","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"list snapshots a","q":"Subscriber.listSnapshots projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"list snapshots b","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableExactlyOnceDelivery, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/exactly-once","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack","q":"Subscriber.acknowledge subscriptions/exactly-once","a":"OK {}","r":"c","k":"answer"},{"t":"ack again","q":"Subscriber.acknowledge subscriptions/exactly-once","a":"INVALID_ARGUMENT","r":"c","k":"answer"},{"t":"modify","q":"Subscriber.modifyAckDeadline subscriptions/exactly-once","a":"OK {}","r":"c","k":"answer"},{"t":"stream","q":"Subscriber.streamingPull (stream, 1 write)","a":"OK ยท 0 messages received","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/exactly-once","a":"OK {}","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSubscription subscriptions/exactly-once","a":"OK {ackDeadlineSeconds, enableExactlyOnceDelivery, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"topic retained","q":"Publisher.createTopic topics/retained","a":"OK {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"sub late","q":"Subscriber.createSubscription topics/retained","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish before sub","q":"Publisher.publish topics/retained","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"sub after publish","q":"Subscriber.createSubscription topics/retained","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish after sub","q":"Publisher.publish topics/retained","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull late","q":"Subscriber.pull subscriptions/late","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/after","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek after epoch","q":"Subscriber.seek subscriptions/after","a":"OK {}","r":"c","k":"answer"},{"t":"pull after seek","q":"Subscriber.pull subscriptions/after","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"update retention","q":"Subscriber.updateSubscription subscriptions/late","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"get late","q":"Subscriber.getSubscription subscriptions/late","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"t1","q":"PUT /v1/projects/{project}/topics/alpha","a":"200 {name}","r":"c","k":"answer"},{"t":"t2","q":"PUT /v1/projects/{project}/topics/beta","a":"200 {name}","r":"c","k":"answer"},{"t":"t3","q":"PUT /v1/projects/{project}/topics/gamma","a":"200 {name}","r":"c","k":"answer"},{"t":"s1","q":"PUT /v1/projects/{project}/subscriptions/alpha-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"s2","q":"PUT /v1/projects/{project}/subscriptions/beta-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"s3","q":"PUT /v1/projects/{project}/subscriptions/gamma-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"snap1","q":"PUT /v1/projects/{project}/snapshots/alpha-snap","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"snap2","q":"PUT /v1/projects/{project}/snapshots/beta-snap","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"sch1","q":"POST /v1/projects/{project}/schemas?schemaId=alpha-schema","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"sch2","q":"POST /v1/projects/{project}/schemas?schemaId=beta-schema","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"topics 1","q":"GET /v1/projects/{project}/topics?pageSize=2","a":"200 {topics}","r":"c","k":"answer"},{"t":"topics 2","q":"GET /v1/projects/{project}/topics?pageSize=2&pageToken=projects%{project}%2Ftopics%2Fgamma","a":"200 {topics}","r":"c","k":"answer"},{"t":"topics negative","q":"GET /v1/projects/{project}/topics?pageSize=-5","a":"200 {topics}","r":"c","k":"answer"},{"t":"subs 1","q":"GET /v1/projects/{project}/subscriptions?pageSize=2","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"subs 2","q":"GET /v1/projects/{project}/subscriptions?pageSize=2&pageToken=projects%{project}%2Fsubscriptions%2Fgamma-sub","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"topic subs 1","q":"GET /v1/projects/{project}/topics/alpha/subscriptions?pageSize=1","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"topic subs 2","q":"GET /v1/projects/{project}/topics/alpha/subscriptions?pageSize=1&pageToken=projects%{project}%2Fsubscriptions%2Fbeta-sub","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"snapshots 1","q":"GET /v1/projects/{project}/snapshots?pageSize=1","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"snapshots 2","q":"GET /v1/projects/{project}/snapshots?pageSize=1&pageToken=projects%{project}%2Fsnapshots%2Fbeta-snap","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"topic snapshots","q":"GET /v1/projects/{project}/topics/alpha/snapshots?pageSize=1","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"schemas 1","q":"GET /v1/projects/{project}/schemas?pageSize=1&view=BASIC","a":"200 {schemas}","r":"c","k":"answer"},{"t":"schemas 2","q":"GET /v1/projects/{project}/schemas?pageSize=1&pageToken=projects%{project}%2Fschemas%2Fbeta-schema","a":"200 {schemas}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub a","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub b","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"sub late","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish later","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull b","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull late","q":"Subscriber.pull subscriptions/sub-late","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack a one","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"nack b one","q":"Subscriber.modifyAckDeadline subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"pull a again","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull b again","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"delete b","q":"Subscriber.deleteSubscription subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"publish after delete","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a final","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull late final","q":"Subscriber.pull subscriptions/sub-late","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"PUT /v1/projects/{project}/topics/dead-letters","a":"200 {name}","r":"c","k":"answer"},{"t":"dlq sub","q":"PUT /v1/projects/{project}/subscriptions/dlq-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, deadLetterPolicy, filter, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"sub bad filter","q":"PUT /v1/projects/{project}/subscriptions/sub-b","a":"500 UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"sub few attempts","q":"PUT /v1/projects/{project}/subscriptions/sub-c","a":"400 OUT_OF_RANGE: The value for max_delivery_attempts is too small. You passed 2 in the request, but the minimum value is 5.","r":"c","k":"answer"},{"t":"sub dlq missing","q":"PUT /v1/projects/{project}/subscriptions/sub-d","a":"404 NOT_FOUND: Dead letter topic not found","r":"c","k":"answer"},{"t":"publish","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"attempt 1","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 1","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 2","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 2","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 3","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 3","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 4","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 4","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 5","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 5","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 6","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {}","r":"c","k":"answer"},{"t":"dead letters","q":"POST /v1/projects/{project}/subscriptions/dlq-sub:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"delete topic","q":"DELETE /v1/projects/{project}/topics/orders","a":"200 {}","r":"c","k":"answer"},{"t":"get sub after topic delete","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, deadLetterPolicy, filter, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"publish deleted","q":"POST /v1/projects/{project}/topics/orders:publish","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"snapshot of deleted topic sub","q":"PUT /v1/projects/{project}/snapshots/orphan","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"publish before sub","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"push sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"no backfill","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"publish shapes","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed shapes","q":"push endpoint: wait up to 3000 ms for 3 or more pushes","a":"3 distinct pushes received","r":"c","k":"behaviour"},{"t":"update to pull","q":"Subscriber.updateSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish pull mode","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"no push in pull mode","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"pull in pull mode","q":"Subscriber.pull subscriptions/push-sub","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack pull mode","q":"Subscriber.acknowledge subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"update to push","q":"Subscriber.updateSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish push mode","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed with attributes","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"delete sub","q":"Subscriber.deleteSubscription subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"publish after delete","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"no push after delete","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"push sub again","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"no push for earlier","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"delete topic","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get after topic delete","q":"Subscriber.getSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"other","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream a","q":"Subscriber.streamingPull (stream, 1 write)","a":"OK ยท 2 messages received","r":"c","k":"answer"},{"t":"acknowledging sub-a's ids on sub-b's stream","q":"Subscriber.streamingPull (stream, 2 writes)","a":"INVALID_ARGUMENT: Subscription projects/{project}/subscriptions/sub-b received an invalid ack ID projects/{project}/subscriptions/sub-a:1,โ€ฆ","r":"c","k":"answer"},{"t":"ack by pull path","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"modify by pull path","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull b","q":"Subscriber.pull subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"modifying a pull ack id from a stream","q":"Subscriber.streamingPull (stream, 1 write)","a":"OK ยท 1 message received","r":"c","k":"answer"},{"t":"pull final","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"create full","q":"PUT /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"get full","q":"GET /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"create schema missing","q":"PUT /v1/projects/{project}/topics/with-schema","a":"404 NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"create schema","q":"POST /v1/projects/{project}/schemas?schemaId=readings","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"create with schema","q":"PUT /v1/projects/{project}/topics/with-schema","a":"200 {name, schemaSettings}","r":"c","k":"answer"},{"t":"publish schema ok","q":"POST /v1/projects/{project}/topics/with-schema:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish schema bad","q":"POST /v1/projects/{project}/topics/with-schema:publish","a":"400 INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"patch mask in body and query","q":"PATCH /v1/projects/{project}/topics/full?updateMask=message_retention_duration","a":"400 INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: labels is not a known Topic field. Note that field paths mustโ€ฆ","r":"c","k":"answer"},{"t":"patch schema","q":"PATCH /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"patch unknown field","q":"PATCH /v1/projects/{project}/topics/full","a":"400 INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: bogus is not a known Topic field. Note that field paths mustโ€ฆ","r":"c","k":"answer"},{"t":"patch missing","q":"PATCH /v1/projects/{project}/topics/missing-topic","a":"404 NOT_FOUND: Topic not found.","r":"c","k":"answer"},{"t":"get after patch","q":"GET /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"sub","q":"PUT /v1/projects/{project}/subscriptions/full-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"delete topic","q":"DELETE /v1/projects/{project}/topics/full","a":"200 {}","r":"c","k":"answer"},{"t":"get sub","q":"GET /v1/projects/{project}/subscriptions/full-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"topic subscriptions deleted","q":"GET /v1/projects/{project}/topics/full/subscriptions","a":"200 {}","r":"c","k":"answer"},{"t":"delete schema","q":"DELETE /v1/projects/{project}/schemas/readings","a":"200 {}","r":"c","k":"answer"},{"t":"get with schema after","q":"GET /v1/projects/{project}/topics/with-schema","a":"200 {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"detached","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, detached, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"attached","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"expiring","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiring short","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiring zero","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"never expiring","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull detached","q":"Subscriber.pull subscriptions/detached","a":"FAILED_PRECONDITION: Subscription is detached.","r":"c","k":"answer"},{"t":"pull attached","q":"Subscriber.pull subscriptions/attached","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull expiring short","q":"Subscriber.pull subscriptions/expiring-short","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"get detached","q":"Subscriber.getSubscription subscriptions/detached","a":"OK {ackDeadlineSeconds, detached, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"topic subscriptions","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"attach","q":"Subscriber.updateSubscription subscriptions/detached","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the detached field in the Subscription is not mutable.","r":"c","k":"answer"},{"t":"update expiration never","q":"Subscriber.updateSubscription subscriptions/expiring","a":"INVALID_ARGUMENT: Updating the expiration_policy field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"update expiration ttl","q":"Subscriber.updateSubscription subscriptions/never","a":"INVALID_ARGUMENT: Updating the expiration_policy field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"other topic","q":"Publisher.createTopic topics/other","a":"OK {name}","r":"c","k":"answer"},{"t":"sub a","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub b","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub other","q":"Subscriber.createSubscription topics/other","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish 1","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack a one","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"snapshot","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"ack a two","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish 2","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a three","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack a three","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"seek a","q":"Subscriber.seek subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull a after seek","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull b before seek","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack b all","q":"Subscriber.acknowledge subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"seek b","q":"Subscriber.seek subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"pull b after seek","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek other topic","q":"Subscriber.seek subscriptions/sub-other","a":"FAILED_PRECONDITION: The subscription's topic projects/{project}/topics/other is different from that of the snapshot projects/{project}/topโ€ฆ","r":"c","k":"answer"},{"t":"snapshot other topic name clash","q":"Subscriber.createSnapshot subscriptions/sub-other","a":"ALREADY_EXISTS: Snapshot already exists","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSnapshot snapshots/snap","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"topic snapshots","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"other topic snapshots","q":"Publisher.listTopicSnapshots topics/other","a":"OK {}","r":"c","k":"answer"},{"t":"delete topic","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get after topic delete","q":"Subscriber.getSnapshot snapshots/snap","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"seek after topic delete","q":"Subscriber.seek subscriptions/sub-a","a":"FAILED_PRECONDITION: The subscription's topic _deleted-topic_ is different from that of the snapshot projects/{project}/topics/orders; theyโ€ฆ","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"shorten to one second","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"extend second","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"mixed ids","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"pull after short lease","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull after default","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack everything seen","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after extension","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack last","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull empty","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"}]} \ No newline at end of file +{"runs":[[0,8,0,"Function topics, schedules and background-trigger controls"],[8,20,1,"topic name validation on create, get and delete"],[28,31,1,"topic create/get/list/update/delete over gRPC"],[59,20,1,"topic create/get/list/update/delete over HTTP/JSON"],[79,24,1,"listTopicSubscriptions, listTopicSnapshots and detachSubscription"],[103,22,1,"publish request validation and message id allocation"],[125,14,1,"publish over HTTP/JSON including malformed bodies"],[139,55,1,"createSubscription names, bounds and policies"],[194,20,1,"subscription create/get/list/update/delete over HTTP/JSON"],[214,34,1,"updateSubscription masks and modifyPushConfig"],[248,17,1,"a deleted topic leaves _deleted-topic_ subscriptions behind"],[265,33,1,"pull, acknowledge and modifyAckDeadline over gRPC"],[298,15,1,"pull, acknowledge and modifyAckDeadline over HTTP/JSON"],[313,13,1,"maxMessages batching across a larger backlog"],[326,12,1,"an unacknowledged message is redelivered after its ack deadline"],[338,7,1,"pull without returnImmediately waits for redelivery"],[345,19,1,"deliveryAttempt and dead-letter forwarding after maxDeliveryAttempts"],[364,22,1,"retainAckedMessages, seek to a time and seek to the future"],[386,42,1,"snapshot create/get/list/delete and seek to a snapshot"],[428,23,1,"ordering keys: one key delivers in order and blocks on its outstanding message; the unordered mirror"],[451,26,1,"attribute filters: equality, existence, hasPrefix, NOT/AND/OR"],[477,9,1,"streamingPull delivery, in-stream ack and modifyAckDeadline"],[486,9,1,"messages outstanding on a closed stream and delivery to a live stream"],[495,6,1,"one ordering key over streamingPull"],[501,16,1,"push envelope, attributes header, pull on a push subscription and switching"],[517,12,1,"push retries on non-2xx endpoint answers"],[529,60,1,"Avro schema create/get/list/commit/rollback/delete and validation"],[589,25,1,"schema operations over HTTP/JSON"],[614,30,1,"topics bound to a schema validate published messages"],[644,12,1,"IAM policy calls on topics, subscriptions and schemas"],[656,40,1,"unknown paths, methods and bodies on the HTTP surface"],[696,18,1,"resources are scoped by project and cross-project references"],[714,10,1,"exactly-once delivery flags on pull and acknowledge"],[724,11,1,"topic and subscription message retention settings"],[735,22,1,"pagination parameters over HTTP/JSON for every list"],[757,18,1,"every subscription gets its own copy; subscriptions created later start empty"],[775,24,1,"deliveryAttempt, dead-letter forwarding, filters and error mapping over HTTP/JSON"],[799,21,1,"push envelopes for every message shape and push subscriptions' lifecycle"],[820,12,1,"two streams on one subscription share the backlog; ids belong to the subscription"],[832,18,1,"topic fields over HTTP/JSON: labels, storage policy, KMS, schema settings, masks"],[850,17,1,"detached subscriptions and expiration policies"],[867,28,1,"snapshot contents across subscriptions, acked messages and later publishes"],[895,13,1,"modifyAckDeadline extends, shortens and expires leases"]],"cases":[{"t":"list function topics","q":"GET /v1/projects/{project}/topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"publish custom topic","q":"POST /v1/projects/{project}/topics/phase4-topic:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish schedule topic","q":"POST /v1/projects/{project}/topics/firebase-schedule-scheduledTick:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"invoke schedule cloudevent directly","q":"POST /functions/projects/{project}/triggers/us-central1-scheduledTick-0","a":"200","r":"c","k":"answer"},{"t":"disable background triggers","q":"PUT /functions/disableBackgroundTriggers","a":"200 {enabled}","r":"c","k":"answer"},{"t":"publish while disabled","q":"POST /v1/projects/{project}/topics/phase4-topic:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"enable background triggers","q":"PUT /functions/enableBackgroundTriggers","a":"200 {enabled}","r":"c","k":"answer"},{"t":"publish after reenable","q":"POST /v1/projects/{project}/topics/phase4-topic:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"two chars","q":"Publisher.createTopic topics/ab","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/ab)","r":"c","k":"answer"},{"t":"three chars","q":"Publisher.createTopic topics/abc","a":"OK {name}","r":"c","k":"answer"},{"t":"starts with digit","q":"Publisher.createTopic topics/1abc","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/1abc)","r":"c","k":"answer"},{"t":"starts with goog","q":"Publisher.createTopic topics/goog-topic","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/goog-topic)","r":"c","k":"answer"},{"t":"contains goog","q":"Publisher.createTopic topics/my-goog-topic","a":"OK {name}","r":"c","k":"answer"},{"t":"uppercase goog","q":"Publisher.createTopic topics/GoogTopic","a":"OK {name}","r":"c","k":"answer"},{"t":"allowed chars","q":"Publisher.createTopic topics/Topic_1.two~three+four%five-six","a":"OK {name}","r":"c","k":"answer"},{"t":"invalid char","q":"Publisher.createTopic topics/topic with space","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/topic with space)","r":"c","k":"answer"},{"t":"invalid slash","q":"Publisher.createTopic topics/topic/extra","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/topic/extra)","r":"c","k":"answer"},{"t":"max length","q":"Publisher.createTopic topics/txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxโ€ฆ","a":"OK {name}","r":"c","k":"answer"},{"t":"too long","q":"Publisher.createTopic topics/txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxโ€ฆ","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxโ€ฆ","r":"c","k":"answer"},{"t":"empty name","q":"Publisher.createTopic","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=)","r":"c","k":"answer"},{"t":"bare name","q":"Publisher.createTopic just-a-name","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=just-a-name)","r":"c","k":"answer"},{"t":"wrong collection","q":"Publisher.createTopic subscriptions/not-a-topic","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/subscriptions/not-a-topic)","r":"c","k":"answer"},{"t":"no project","q":"Publisher.createTopic projects//topics/abc","a":"OK {name}","r":"c","k":"answer"},{"t":"get invalid","q":"Publisher.getTopic abc","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=abc)","r":"c","k":"answer"},{"t":"get missing","q":"Publisher.getTopic topics/missing-topic","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"delete invalid","q":"Publisher.deleteTopic abc","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=abc)","r":"c","k":"answer"},{"t":"delete missing","q":"Publisher.deleteTopic topics/missing-topic","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"list","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"create plain","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"create labels","q":"Publisher.createTopic topics/events","a":"OK {labels, name}","r":"c","k":"answer"},{"t":"create retention","q":"Publisher.createTopic topics/audit","a":"OK {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"create retention short","q":"Publisher.createTopic topics/short-retention","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"create retention long","q":"Publisher.createTopic topics/long-retention","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"create kms","q":"Publisher.createTopic topics/kms","a":"OK {kmsKeyName, name}","r":"c","k":"answer"},{"t":"create policy","q":"Publisher.createTopic topics/policy","a":"OK {messageStoragePolicy, name}","r":"c","k":"answer"},{"t":"create schema missing","q":"Publisher.createTopic topics/with-schema","a":"NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"create duplicate","q":"Publisher.createTopic topics/orders","a":"ALREADY_EXISTS: Topic already exists","r":"c","k":"answer"},{"t":"get","q":"Publisher.getTopic topics/events","a":"OK {labels, name}","r":"c","k":"answer"},{"t":"list all","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list page 1","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list page 2","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list bad token","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list page size zero","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list negative","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list other project","q":"Publisher.listTopics projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"list bad project","q":"Publisher.listTopics nope","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"update labels","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: labels is not a known Topic field. Note that field paths must beโ€ฆ","r":"c","k":"answer"},{"t":"update retention","q":"Publisher.updateTopic topics/events","a":"OK {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"update camel mask","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: messageRetentionDuration is not a known Topic field. Note that fiโ€ฆ","r":"c","k":"answer"},{"t":"update no mask","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: The update_mask in the UpdateTopicRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"update empty mask","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: The update_mask in the UpdateTopicRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"update missing","q":"Publisher.updateTopic topics/missing-topic","a":"NOT_FOUND: Topic not found.","r":"c","k":"answer"},{"t":"update kms","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: kms_key_name is not a known Topic field. Note that field paths muโ€ฆ","r":"c","k":"answer"},{"t":"update policy","q":"Publisher.updateTopic topics/events","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: message_storage_policy is not a known Topic field. Note that fielโ€ฆ","r":"c","k":"answer"},{"t":"get after update","q":"Publisher.getTopic topics/events","a":"OK {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"delete","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"delete again","q":"Publisher.deleteTopic topics/orders","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"get deleted","q":"Publisher.getTopic topics/orders","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"list after delete","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"put","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"put labels","q":"PUT /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"put duplicate","q":"PUT /v1/projects/{project}/topics/orders","a":"409 ALREADY_EXISTS: Topic already exists","r":"c","k":"answer"},{"t":"put invalid name","q":"PUT /v1/projects/{project}/topics/ab","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/ab)","r":"c","k":"answer"},{"t":"put no body","q":"PUT /v1/projects/{project}/topics/nobody","a":"200 {name}","r":"c","k":"answer"},{"t":"get","q":"GET /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"get missing","q":"GET /v1/projects/{project}/topics/missing-topic","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"list","q":"GET /v1/projects/{project}/topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"list page","q":"GET /v1/projects/{project}/topics?pageSize=1","a":"200 {topics}","r":"c","k":"answer"},{"t":"list page token","q":"GET /v1/projects/{project}/topics?pageSize=1&pageToken=projects%{project}%2Ftopics%2Fnobody","a":"200 {topics}","r":"c","k":"answer"},{"t":"list other project","q":"GET /v1/projects/{project}/topics","a":"200 {}","r":"c","k":"answer"},{"t":"patch retention","q":"PATCH /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"patch labels","q":"PATCH /v1/projects/{project}/topics/events","a":"400 INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: labels is not a known Topic field. Note that field paths mustโ€ฆ","r":"c","k":"answer"},{"t":"patch no mask","q":"PATCH /v1/projects/{project}/topics/events","a":"400 INVALID_ARGUMENT: The update_mask in the UpdateTopicRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"patch query mask","q":"PATCH /v1/projects/{project}/topics/events?updateMask=message_retention_duration","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"get after patch","q":"GET /v1/projects/{project}/topics/events","a":"200 {labels, messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"delete","q":"DELETE /v1/projects/{project}/topics/orders","a":"200 {}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /v1/projects/{project}/topics/orders","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"delete invalid","q":"DELETE /v1/projects/{project}/topics/ab","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/ab)","r":"c","k":"answer"},{"t":"list after","q":"GET /v1/projects/{project}/topics","a":"200 {topics}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"subscriptions empty","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"subscriptions missing","q":"Publisher.listTopicSubscriptions topics/missing-topic","a":"OK {}","r":"c","k":"answer"},{"t":"snapshots empty","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"snapshots missing","q":"Publisher.listTopicSnapshots topics/missing-topic","a":"OK {}","r":"c","k":"answer"},{"t":"sub a","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub b","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub c","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"snap a","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"snap b","q":"Subscriber.createSnapshot subscriptions/sub-b","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"subscriptions","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"subscriptions page 1","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"subscriptions page 2","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"snapshots","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"snapshots page 1","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"snapshots page 2","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"detach","q":"Publisher.detachSubscription subscriptions/sub-a","a":"UNIMPLEMENTED: Method google.pubsub.v1.Publisher/DetachSubscription is unimplemented","r":"c","k":"answer"},{"t":"detach missing","q":"Publisher.detachSubscription subscriptions/missing-sub","a":"UNIMPLEMENTED: Method google.pubsub.v1.Publisher/DetachSubscription is unimplemented","r":"c","k":"answer"},{"t":"subscriptions http","q":"GET /v1/projects/{project}/topics/orders/subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"snapshots http","q":"GET /v1/projects/{project}/topics/orders/snapshots?pageSize=1","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"detach http","q":"POST /v1/projects/{project}/subscriptions/sub-a:detach","a":"501 UNIMPLEMENTED: Method google.pubsub.v1.Publisher/DetachSubscription is unimplemented","r":"c","k":"answer"},{"t":"delete sub b","q":"Subscriber.deleteSubscription subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"subscriptions after delete","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"snapshots outlive their subscription","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"missing topic","q":"Publisher.publish topics/missing-topic","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"invalid topic","q":"Publisher.publish orders","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=orders)","r":"c","k":"answer"},{"t":"no messages","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: No messages to publish","r":"c","k":"answer"},{"t":"empty message","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"empty data only","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"attributes only","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"ordering key only","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"data only","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"batch","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"one empty message rejects the whole batch","q":"Publisher.publish topics/orders","a":"INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"the server assigns ids regardless","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"client publish time","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"many attributes","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"long attribute key","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"long attribute value","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"empty attribute key","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"goog attribute","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"long ordering key","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"10 MB + 1 byte","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"large data ok","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"after all","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"publish","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish batch","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish missing","q":"POST /v1/projects/{project}/topics/missing-topic:publish","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"publish empty","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: No messages to publish","r":"c","k":"answer"},{"t":"publish no body","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: No messages to publish","r":"c","k":"answer"},{"t":"publish bad base64","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"publish bad json","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"publish unknown field","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"publish wrong type","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"proto JSON accepts snake case","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish get","q":"GET /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/orders:publish)","r":"c","k":"answer"},{"t":"publish attributes only","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish empty message","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Some messages are empty","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"Publisher.createTopic topics/dead-letters","a":"OK {name}","r":"c","k":"answer"},{"t":"defaults","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"duplicate","q":"Subscriber.createSubscription topics/orders","a":"ALREADY_EXISTS: Subscription already exists","r":"c","k":"answer"},{"t":"missing topic","q":"Subscriber.createSubscription topics/missing-topic","a":"NOT_FOUND: Subscription topic does not exist","r":"c","k":"answer"},{"t":"invalid topic name","q":"Subscriber.createSubscription orders","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=orders)","r":"c","k":"answer"},{"t":"no topic","q":"Subscriber.createSubscription subscriptions/no-topic-field","a":"INVALID_ARGUMENT: Invalid [topics] name: (name=)","r":"c","k":"answer"},{"t":"short name","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=projects/{project}/subscriptions/ab)","r":"c","k":"answer"},{"t":"goog name","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=projects/{project}/subscriptions/goog-sub)","r":"c","k":"answer"},{"t":"bare name","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=bare)","r":"c","k":"answer"},{"t":"cross-project subscription","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline zero","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline nine","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline ten","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline max","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"deadline over","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: ack_deadline_secs out of bounds","r":"c","k":"answer"},{"t":"deadline negative","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: ack_deadline_secs out of bounds","r":"c","k":"answer"},{"t":"retention short","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"retention min","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retention long","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"retention max","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"retain acked","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"ordering","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"exactly once","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableExactlyOnceDelivery, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"labels","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, labels, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"detached","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, detached, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiration ttl","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiration never","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiration short","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"dead letter","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"dead letter default attempts","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"dead letter few attempts","q":"Subscriber.createSubscription topics/orders","a":"OUT_OF_RANGE: The value for max_delivery_attempts is too small. You passed 4 in the request, but the minimum value is 5.","r":"c","k":"answer"},{"t":"dead letter many attempts","q":"Subscriber.createSubscription topics/orders","a":"OUT_OF_RANGE: The value for max_delivery_attempts is too large. You passed 101 in the request, but the maximum value is 100.","r":"c","k":"answer"},{"t":"dead letter missing topic","q":"Subscriber.createSubscription topics/orders","a":"NOT_FOUND: Dead letter topic not found","r":"c","k":"answer"},{"t":"dead letter same topic","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"retry policy","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retry policy inverted","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: The value for maximum_backoff is too small. You passed 1s in the request, but the minimum value is 60s.","r":"c","k":"answer"},{"t":"retry policy empty","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"filter","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"filter invalid","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"filter unknown function","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"push","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push attributes","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push oidc","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push invalid endpoint","q":"Subscriber.createSubscription topics/orders","a":"INVALID_ARGUMENT: Unsupported push_endpoint","r":"c","k":"answer"},{"t":"push attributes only","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"everything","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, enableMessageOrdering, โ€ฆ}","r":"c","k":"answer"},{"t":"get everything","q":"Subscriber.getSubscription subscriptions/everything","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, enableMessageOrdering, โ€ฆ}","r":"c","k":"answer"},{"t":"get missing","q":"Subscriber.getSubscription subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"get invalid","q":"Subscriber.getSubscription everything","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=everything)","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list page 1","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list page 2","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list other project","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list bad project","q":"Subscriber.listSubscriptions nope","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"put","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"put duplicate","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"409 ALREADY_EXISTS: Subscription already exists","r":"c","k":"answer"},{"t":"put missing topic","q":"PUT /v1/projects/{project}/subscriptions/sub-b","a":"404 NOT_FOUND: Subscription topic does not exist","r":"c","k":"answer"},{"t":"put no topic","q":"PUT /v1/projects/{project}/subscriptions/sub-b","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=)","r":"c","k":"answer"},{"t":"put durations","q":"PUT /v1/projects/{project}/subscriptions/sub-c","a":"200 {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"put bad duration","q":"PUT /v1/projects/{project}/subscriptions/sub-d","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"get","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"get missing","q":"GET /v1/projects/{project}/subscriptions/missing-sub","a":"404 NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"list","q":"GET /v1/projects/{project}/subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"list page","q":"GET /v1/projects/{project}/subscriptions?pageSize=1","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"patch deadline","q":"PATCH /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"patch camel","q":"PATCH /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"patch push","q":"PATCH /v1/projects/{project}/subscriptions/sub-a?updateMask=push_config","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"get after patch","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"modify push config","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyPushConfig","a":"200 {}","r":"c","k":"answer"},{"t":"get after modify","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"delete","q":"DELETE /v1/projects/{project}/subscriptions/sub-a","a":"200 {}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /v1/projects/{project}/subscriptions/sub-a","a":"404 NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"list after","q":"GET /v1/projects/{project}/subscriptions","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"other topic","q":"Publisher.createTopic topics/other","a":"OK {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"Publisher.createTopic topics/dead-letters","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"no mask","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: The update_mask in the UpdateSubscriptionRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"empty mask","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: The update_mask in the UpdateSubscriptionRequest must be set, and must contain a non-empty paths list.","r":"c","k":"answer"},{"t":"ack deadline","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"ack deadline out of bounds","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: ack_deadline_secs out of bounds","r":"c","k":"answer"},{"t":"camel mask","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: ackDeadlineSeconds is not a known Subscription field. Noteโ€ฆ","r":"c","k":"answer"},{"t":"unknown field","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: bogus is not a known Subscription field. Note that field pโ€ฆ","r":"c","k":"answer"},{"t":"labels","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: labels is not a known Subscription field. Note that fieldโ€ฆ","r":"c","k":"answer"},{"t":"topic field","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the topic field in the Subscription is not mutable.","r":"c","k":"answer"},{"t":"push config","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"push config clear","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retain acked","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retention","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"retention out of bounds","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"ordering","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the enable_message_ordering field in the Subscription is nโ€ฆ","r":"c","k":"answer"},{"t":"filter","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Updating the filter field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"expiration","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Updating the expiration_policy field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"dead letter","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"retry","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"exactly once","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"detached","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the detached field in the Subscription is not mutable.","r":"c","k":"answer"},{"t":"multiple","q":"Subscriber.updateSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"missing","q":"Subscriber.updateSubscription subscriptions/missing-sub","a":"NOT_FOUND: Subscription not found.","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"modify push","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"modify push oidc","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get after modify","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"modify push clear","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"modify push missing","q":"Subscriber.modifyPushConfig subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"modify push no config","q":"Subscriber.modifyPushConfig subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get final","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, deadLetterPolicy, enableExactlyOnceDelivery, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"delete topic","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"publish after","q":"Publisher.publish topics/orders","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"recreate","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"publish recreated","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull recreated","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get recreated","q":"Subscriber.getSubscription subscriptions/sub-a","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"children","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"delete sub","q":"Subscriber.deleteSubscription subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"delete sub again","q":"Subscriber.deleteSubscription subscriptions/sub-a","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"delete invalid","q":"Subscriber.deleteSubscription sub-a","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=sub-a)","r":"c","k":"answer"},{"t":"list after","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"pull no max","q":"Subscriber.pull subscriptions/sub-a","a":"INVALID_ARGUMENT: No max_messages specified","r":"c","k":"answer"},{"t":"pull zero max","q":"Subscriber.pull subscriptions/sub-a","a":"INVALID_ARGUMENT: No max_messages specified","r":"c","k":"answer"},{"t":"pull negative max","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull missing","q":"Subscriber.pull subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"pull invalid","q":"Subscriber.pull sub-a","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=sub-a)","r":"c","k":"answer"},{"t":"pull empty","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull two","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull rest","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull outstanding","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack one","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack again","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack unknown","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack garbage","q":"Subscriber.acknowledge subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"ack empty","q":"Subscriber.acknowledge subscriptions/sub-a","a":"INVALID_ARGUMENT: No ack ids specified.","r":"c","k":"answer"},{"t":"ack missing sub","q":"Subscriber.acknowledge subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"ack other subscription id","q":"Subscriber.acknowledge subscriptions/sub-a","a":"INVALID_ARGUMENT: Subscription projects/{project}/subscriptions/sub-a received an invalid ack ID projects/{project}/subscriptions/other-subโ€ฆ","r":"c","k":"answer"},{"t":"extend","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"extend over","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"extend negative","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: Ack deadline cannot be negative","r":"c","k":"answer"},{"t":"modify empty","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: No ack ids specified","r":"c","k":"answer"},{"t":"modify garbage","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"modify missing sub","q":"Subscriber.modifyAckDeadline subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"nack","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after nack","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack acked","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after nack acked","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish more","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull blocking","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull one more","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull none left","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"put sub","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"pull empty","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {}","r":"c","k":"answer"},{"t":"pull no max","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"400 INVALID_ARGUMENT: No max_messages specified","r":"c","k":"answer"},{"t":"pull missing","q":"POST /v1/projects/{project}/subscriptions/missing-sub:pull","a":"404 NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"publish","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"modify","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"pull after nack","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"ack","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"200 {}","r":"c","k":"answer"},{"t":"ack empty","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"400 INVALID_ARGUMENT: No ack ids specified.","r":"c","k":"answer"},{"t":"ack garbage","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"400 INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"ack no body","q":"POST /v1/projects/{project}/subscriptions/sub-a:acknowledge","a":"400 INVALID_ARGUMENT: No ack ids specified.","r":"c","k":"answer"},{"t":"modify over","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"pull none","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish a","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish b","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull 5 a","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 b","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 c","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 d","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull 5 e","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull 1000","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack all","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"nack rest","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull redelivered","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull leased","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull redelivered","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"extend","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull still leased","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack expired id","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after stale ack","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"ack current","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after ack","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull blocks until redelivery","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"the client deadline expires before the emulator's long poll","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"Publisher.createTopic topics/dead-letters","a":"OK {name}","r":"c","k":"answer"},{"t":"dlq sub","q":"Subscriber.createSubscription topics/dead-letters","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, deadLetterPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"plain sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"attempt 1","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 1","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 2","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 2","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 3","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 3","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 4","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 4","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 5","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack 5","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"attempt 6","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"dead letters","q":"Subscriber.pull subscriptions/dlq-sub","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"plain","q":"Subscriber.pull subscriptions/plain","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"retaining","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"plain","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish 1","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish 2","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull retaining","q":"Subscriber.pull subscriptions/retaining","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack retaining","q":"Subscriber.acknowledge subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull plain","q":"Subscriber.pull subscriptions/plain","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack plain","q":"Subscriber.acknowledge subscriptions/plain","a":"OK {}","r":"c","k":"answer"},{"t":"seek retaining epoch","q":"Subscriber.seek subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull retaining after seek","q":"Subscriber.pull subscriptions/retaining","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek plain epoch","q":"Subscriber.seek subscriptions/plain","a":"OK {}","r":"c","k":"answer"},{"t":"pull plain after seek","q":"Subscriber.pull subscriptions/plain","a":"OK {}","r":"c","k":"answer"},{"t":"seek retaining between","q":"Subscriber.seek subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull retaining between","q":"Subscriber.pull subscriptions/retaining","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek future","q":"Subscriber.seek subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"pull retaining future","q":"Subscriber.pull subscriptions/retaining","a":"OK {}","r":"c","k":"answer"},{"t":"seek none","q":"Subscriber.seek subscriptions/retaining","a":"INVALID_ARGUMENT: No target was specified in the SeekRequest. Must specify either a time or a snapshot","r":"c","k":"answer"},{"t":"seek both","q":"Subscriber.seek subscriptions/retaining","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"seek missing","q":"Subscriber.seek subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"seek http","q":"POST /v1/projects/{project}/subscriptions/retaining:seek","a":"200 {}","r":"c","k":"answer"},{"t":"pull http after seek","q":"POST /v1/projects/{project}/subscriptions/retaining:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish 1","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"create","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"create duplicate","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"ALREADY_EXISTS: Snapshot already exists","r":"c","k":"answer"},{"t":"create missing sub","q":"Subscriber.createSnapshot subscriptions/missing-sub","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"create invalid name","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid [snapshots] name: (name=snap)","r":"c","k":"answer"},{"t":"create short name","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid [snapshots] name: (name=projects/{project}/snapshots/ab)","r":"c","k":"answer"},{"t":"create no sub","q":"Subscriber.createSnapshot snapshots/snap-c","a":"NOT_FOUND: Subscription does not exist","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSnapshot snapshots/snap-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"get missing","q":"Subscriber.getSnapshot snapshots/missing-snap","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"get invalid","q":"Subscriber.getSnapshot snap-a","a":"INVALID_ARGUMENT: Invalid [snapshots] name: (name=snap-a)","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"list other project","q":"Subscriber.listSnapshots projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"pull 1","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack 1","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish 2","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull 2","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack 2","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull empty","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"seek","q":"Subscriber.seek subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after seek","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek missing snapshot","q":"Subscriber.seek subscriptions/sub-a","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"create second","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"list page 1","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"list page 2","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"update","q":"Subscriber.updateSnapshot snapshots/snap-a","a":"UNIMPLEMENTED: Method google.pubsub.v1.Subscriber/UpdateSnapshot is unimplemented","r":"c","k":"answer"},{"t":"delete","q":"Subscriber.deleteSnapshot snapshots/snap-a","a":"OK {}","r":"c","k":"answer"},{"t":"delete again","q":"Subscriber.deleteSnapshot snapshots/snap-a","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"seek deleted","q":"Subscriber.seek subscriptions/sub-a","a":"NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"delete sub","q":"Subscriber.deleteSubscription subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"get after sub delete","q":"Subscriber.getSnapshot snapshots/snap-b","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"sub again","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"seek other sub","q":"Subscriber.seek subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"pull sub b","q":"Subscriber.pull subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"put http","q":"PUT /v1/projects/{project}/snapshots/snap-http","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"get http","q":"GET /v1/projects/{project}/snapshots/snap-http","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"list http","q":"GET /v1/projects/{project}/snapshots","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"seek http","q":"POST /v1/projects/{project}/subscriptions/sub-b:seek","a":"200 {}","r":"c","k":"answer"},{"t":"patch http","q":"PATCH /v1/projects/{project}/snapshots/snap-http","a":"501 UNIMPLEMENTED: Method google.pubsub.v1.Subscriber/UpdateSnapshot is unimplemented","r":"c","k":"answer"},{"t":"delete http","q":"DELETE /v1/projects/{project}/snapshots/snap-http","a":"200 {}","r":"c","k":"answer"},{"t":"get http deleted","q":"GET /v1/projects/{project}/snapshots/snap-http","a":"404 NOT_FOUND: Snapshot does not exist","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"single topic","q":"Publisher.createTopic topics/single-key","a":"OK {name}","r":"c","k":"answer"},{"t":"ordered","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"unordered","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"single","q":"Subscriber.createSubscription topics/single-key","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"the set of messages an ordered subscription delivers at once; the official emulator interleaves keys differently from run to run","q":"Subscriber.pull subscriptions/ordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull unordered","q":"Subscriber.pull subscriptions/unordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack ordered","q":"Subscriber.acknowledge subscriptions/ordered","a":"OK {}","r":"c","k":"answer"},{"t":"pull ordered drained","q":"Subscriber.pull subscriptions/ordered","a":"OK {}","r":"c","k":"answer"},{"t":"publish more","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull more","q":"Subscriber.pull subscriptions/ordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull unordered more","q":"Subscriber.pull subscriptions/unordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"publish single key","q":"Publisher.publish topics/single-key","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull max one","q":"Subscriber.pull subscriptions/single","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull max one again","q":"Subscriber.pull subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"ack first single","q":"Subscriber.acknowledge subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"pull max one after ack","q":"Subscriber.pull subscriptions/single","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull single rest","q":"Subscriber.pull subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"nack second single","q":"Subscriber.modifyAckDeadline subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"pull single after nack","q":"Subscriber.pull subscriptions/single","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack second single","q":"Subscriber.acknowledge subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"pull single third","q":"Subscriber.pull subscriptions/single","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"equality","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"inequality","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"existence","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"prefix","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"not","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"and","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"or","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"parentheses","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"unfiltered","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"invalid","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"unknown function","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"data filter","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"ordering key filter","q":"Subscriber.createSubscription topics/orders","a":"UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull equality","q":"Subscriber.pull subscriptions/equality","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull inequality","q":"Subscriber.pull subscriptions/inequality","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull existence","q":"Subscriber.pull subscriptions/existence","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull prefix","q":"Subscriber.pull subscriptions/prefix","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull not","q":"Subscriber.pull subscriptions/negated","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull and","q":"Subscriber.pull subscriptions/conjunction","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull or","q":"Subscriber.pull subscriptions/disjunction","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull parentheses","q":"Subscriber.pull subscriptions/parenthesised","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull unfiltered","q":"Subscriber.pull subscriptions/unfiltered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"update filter","q":"Subscriber.updateSubscription subscriptions/equality","a":"INVALID_ARGUMENT: Updating the filter field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"get equality","q":"Subscriber.getSubscription subscriptions/equality","a":"OK {ackDeadlineSeconds, filter, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream","q":"Subscriber.streamingPull (stream, 2 writes)","a":"OK ยท 4 messages received","r":"c","k":"answer"},{"t":"pull after stream","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"stream missing","q":"Subscriber.streamingPull (stream, 1 write)","a":"NOT_FOUND: Subscription does not exist (resource=missing-sub) ยท 0 messages received","r":"c","k":"answer"},{"t":"stream no subscription","q":"Subscriber.streamingPull (stream, 1 write)","a":"INVALID_ARGUMENT: first message must set subscription ยท 0 messages received","r":"c","k":"answer"},{"t":"stream bad deadline","q":"Subscriber.streamingPull (stream, 1 write)","a":"INVALID_ARGUMENT: stream_ack_deadline_seconds must be between 10 and 600 seconds ยท 0 messages received","r":"c","k":"answer"},{"t":"stream invalid name","q":"Subscriber.streamingPull (stream, 1 write)","a":"INVALID_ARGUMENT: Invalid [subscriptions] name: (name=sub-a) ยท 0 messages received","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream then close","q":"Subscriber.streamingPull (stream, 1 write)","a":"CANCELLED: Cancelled on client ยท 1 message received","r":"c","k":"answer"},{"t":"pull right after close","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after deadline","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"nack","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"stream live publish","q":"Subscriber.streamingPull (stream, 2 writes)","a":"OK ยท 1 message received","r":"c","k":"answer"},{"t":"pull drained","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableMessageOrdering, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream","q":"Subscriber.streamingPull (stream, 2 writes)","a":"OK ยท 3 messages received","r":"c","k":"answer"},{"t":"publish more","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/ordered","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"push sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed","q":"push endpoint: wait up to 3000 ms for 2 or more pushes","a":"2 distinct pushes received","r":"c","k":"behaviour"},{"t":"pull on push sub","q":"Subscriber.pull subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"to pull","q":"Subscriber.modifyPushConfig subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"publish pull mode","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"no pushes","q":"push endpoint: wait up to 500 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"pull in pull mode","q":"Subscriber.pull subscriptions/push-sub","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"to push with outstanding","q":"Subscriber.modifyPushConfig subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"still leased","q":"push endpoint: wait up to 800 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"publish push again","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed again","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"nack outstanding","q":"Subscriber.modifyAckDeadline subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"pushed after nack","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"get","q":"Subscriber.getSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"push sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"retried 500","q":"push endpoint: wait up to 4000 ms for 3 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"retried 404","q":"push endpoint: wait up to 3000 ms for 2 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"delivered","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"stops","q":"push endpoint: wait up to 1500 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"publish 204","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"delivered 204","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"publish 302","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"retried 302","q":"push endpoint: wait up to 3000 ms for 2 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"delivered after 302","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"create","q":"SchemaService.createSchema projects/{project}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"create duplicate","q":"SchemaService.createSchema projects/{project}","a":"ALREADY_EXISTS: Schema already exists","r":"c","k":"answer"},{"t":"create invalid json","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create invalid avro","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create empty definition","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create no type","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"create protobuf","q":"SchemaService.createSchema projects/{project}","a":"UNIMPLEMENTED: Protocol buffer support not implemented in emulator","r":"c","k":"answer"},{"t":"create no id","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/)","r":"c","k":"answer"},{"t":"create name only","q":"SchemaService.createSchema schemas/named","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/)","r":"c","k":"answer"},{"t":"create short id","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/ab)","r":"c","k":"answer"},{"t":"create goog id","q":"SchemaService.createSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/goog-schema)","r":"c","k":"answer"},{"t":"create bad parent","q":"SchemaService.createSchema nope","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=nope/schemas/readings2)","r":"c","k":"answer"},{"t":"create primitive","q":"SchemaService.createSchema projects/{project}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get","q":"SchemaService.getSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get basic","q":"SchemaService.getSchema schemas/readings","a":"OK {name, revisionCreateTime, revisionId, type}","r":"c","k":"answer"},{"t":"get full","q":"SchemaService.getSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get missing","q":"SchemaService.getSchema schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"get invalid","q":"SchemaService.getSchema readings","a":"INVALID_ARGUMENT: Invalid [schemas] name: (name=readings)","r":"c","k":"answer"},{"t":"list","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list full","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list page 1","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list page 2","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"list other project","q":"SchemaService.listSchemas projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"commit","q":"SchemaService.commitSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"commit invalid","q":"SchemaService.commitSchema schemas/readings","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"commit missing","q":"SchemaService.commitSchema schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"commit no schema","q":"SchemaService.commitSchema schemas/readings","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"revisions","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"revisions basic","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"revisions page","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"revisions missing","q":"SchemaService.listSchemaRevisions schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"get at revision","q":"SchemaService.getSchema schemas/readings@{{revisionId:create}}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get at missing revision","q":"SchemaService.getSchema schemas/readings@deadbeef","a":"NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"get latest","q":"SchemaService.getSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"rollback","q":"SchemaService.rollbackSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"rollback missing revision","q":"SchemaService.rollbackSchema schemas/readings","a":"NOT_FOUND: Revision not found","r":"c","k":"answer"},{"t":"rollback missing schema","q":"SchemaService.rollbackSchema schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"revisions after rollback","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"delete revision","q":"SchemaService.deleteSchemaRevision schemas/readings","a":"NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"delete revision at name","q":"SchemaService.deleteSchemaRevision schemas/readings@{{revisionId:commit}}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"delete revision missing","q":"SchemaService.deleteSchemaRevision schemas/readings","a":"NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"revisions after delete","q":"SchemaService.listSchemaRevisions schemas/readings","a":"OK {schemas}","r":"c","k":"answer"},{"t":"delete last revision","q":"SchemaService.deleteSchemaRevision schemas/primitive@{{revisionId:create-primitive}}","a":"INVALID_ARGUMENT: Cannot delete last revision. Please use DeleteSchema.","r":"c","k":"answer"},{"t":"validate ok","q":"SchemaService.validateSchema projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"validate bad","q":"SchemaService.validateSchema projects/{project}","a":"INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"validate no type","q":"SchemaService.validateSchema projects/{project}","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"validate protobuf","q":"SchemaService.validateSchema projects/{project}","a":"UNIMPLEMENTED: Protocol buffer support not implemented in emulator","r":"c","k":"answer"},{"t":"validate message by name","q":"SchemaService.validateMessage schemas/readings","a":"OK {}","r":"c","k":"answer"},{"t":"validate message by name bad","q":"SchemaService.validateMessage schemas/readings","a":"INVALID_ARGUMENT: Could not parse JSON Avro message","r":"c","k":"answer"},{"t":"validate message by schema","q":"SchemaService.validateMessage projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"validate message binary","q":"SchemaService.validateMessage projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"validate message binary bad","q":"SchemaService.validateMessage projects/{project}","a":"INVALID_ARGUMENT: Could not parse binary Avro message","r":"c","k":"answer"},{"t":"validate message no encoding","q":"SchemaService.validateMessage projects/{project}","a":"INVALID_ARGUMENT: No encoding provided.","r":"c","k":"answer"},{"t":"validate message no schema","q":"SchemaService.validateMessage projects/{project}","a":"INVALID_ARGUMENT: Invalid schema type","r":"c","k":"answer"},{"t":"validate message missing schema","q":"SchemaService.validateMessage schemas/missing-schema","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"validate message at revision","q":"SchemaService.validateMessage schemas/readings@{{revisionId:create}}","a":"OK {}","r":"c","k":"answer"},{"t":"delete","q":"SchemaService.deleteSchema schemas/readings","a":"OK {}","r":"c","k":"answer"},{"t":"delete again","q":"SchemaService.deleteSchema schemas/readings","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"get deleted","q":"SchemaService.getSchema schemas/readings","a":"NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"list after delete","q":"SchemaService.listSchemas projects/{project}","a":"OK {schemas}","r":"c","k":"answer"},{"t":"create","q":"POST /v1/projects/{project}/schemas?schemaId=readings","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"create duplicate","q":"POST /v1/projects/{project}/schemas?schemaId=readings","a":"409 ALREADY_EXISTS: Schema already exists","r":"c","k":"answer"},{"t":"create no id","q":"POST /v1/projects/{project}/schemas","a":"400 INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/)","r":"c","k":"answer"},{"t":"create invalid","q":"POST /v1/projects/{project}/schemas?schemaId=broken","a":"400 INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"create protobuf","q":"POST /v1/projects/{project}/schemas?schemaId=proto","a":"501 UNIMPLEMENTED: Protocol buffer support not implemented in emulator","r":"c","k":"answer"},{"t":"get","q":"GET /v1/projects/{project}/schemas/readings","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"get basic","q":"GET /v1/projects/{project}/schemas/readings?view=BASIC","a":"200 {name, revisionCreateTime, revisionId, type}","r":"c","k":"answer"},{"t":"get missing","q":"GET /v1/projects/{project}/schemas/missing-schema","a":"404 NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"list","q":"GET /v1/projects/{project}/schemas","a":"200 {schemas}","r":"c","k":"answer"},{"t":"list full","q":"GET /v1/projects/{project}/schemas?view=FULL","a":"200 {schemas}","r":"c","k":"answer"},{"t":"commit","q":"POST /v1/projects/{project}/schemas/readings:commit","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"revisions","q":"GET /v1/projects/{project}/schemas/readings:listRevisions","a":"200 {schemas}","r":"c","k":"answer"},{"t":"revisions basic","q":"GET /v1/projects/{project}/schemas/readings:listRevisions?view=BASIC","a":"200 {schemas}","r":"c","k":"answer"},{"t":"get at revision","q":"GET /v1/projects/{project}/schemas/readings@{{revisionId:create}}","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"rollback","q":"POST /v1/projects/{project}/schemas/readings:rollback","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"delete revision","q":"DELETE /v1/projects/{project}/schemas/readings@{{revisionId:commit}}:deleteRevision","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"delete revision query","q":"DELETE /v1/projects/{project}/schemas/readings:deleteRevision?revisionId={{revisionId:rollback}}","a":"404 NOT_FOUND: Schema revision not found","r":"c","k":"answer"},{"t":"revisions after","q":"GET /v1/projects/{project}/schemas/readings:listRevisions","a":"200 {schemas}","r":"c","k":"answer"},{"t":"validate","q":"POST /v1/projects/{project}/schemas:validate","a":"200 {}","r":"c","k":"answer"},{"t":"validate bad","q":"POST /v1/projects/{project}/schemas:validate","a":"400 INVALID_ARGUMENT: Could not parse schema definition","r":"c","k":"answer"},{"t":"validate message","q":"POST /v1/projects/{project}/schemas:validateMessage","a":"200 {}","r":"c","k":"answer"},{"t":"validate message bad","q":"POST /v1/projects/{project}/schemas:validateMessage","a":"400 INVALID_ARGUMENT: Could not parse JSON Avro message","r":"c","k":"answer"},{"t":"delete","q":"DELETE /v1/projects/{project}/schemas/readings","a":"200 {}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /v1/projects/{project}/schemas/readings","a":"404 NOT_FOUND: Schema not found","r":"c","k":"answer"},{"t":"list after","q":"GET /v1/projects/{project}/schemas","a":"200 {}","r":"c","k":"answer"},{"t":"create","q":"SchemaService.createSchema projects/{project}","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"topic json","q":"Publisher.createTopic topics/readings-json","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic binary","q":"Publisher.createTopic topics/readings-binary","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic no encoding","q":"Publisher.createTopic topics/readings-unspecified","a":"INVALID_ARGUMENT: Invalid schema encoding provided","r":"c","k":"answer"},{"t":"topic missing schema","q":"Publisher.createTopic topics/readings-missing","a":"NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"topic invalid schema name","q":"Publisher.createTopic topics/readings-invalid","a":"NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"topic revision range","q":"Publisher.createTopic topics/readings-range","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic bad revision range","q":"Publisher.createTopic topics/readings-bad-range","a":"NOT_FOUND: First revision could not be found","r":"c","k":"answer"},{"t":"sub json","q":"Subscriber.createSubscription topics/readings-json","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub binary","q":"Subscriber.createSubscription topics/readings-binary","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish json ok","q":"Publisher.publish topics/readings-json","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish json bad","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish json not json","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish json mixed","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish json empty data attributes","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish binary ok","q":"Publisher.publish topics/readings-binary","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"publish binary bad","q":"Publisher.publish topics/readings-binary","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"publish unspecified","q":"Publisher.publish topics/readings-unspecified","a":"NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"pull json","q":"Subscriber.pull subscriptions/sub-json","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull binary","q":"Subscriber.pull subscriptions/sub-binary","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"get topic","q":"Publisher.getTopic topics/readings-json","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"update encoding","q":"Publisher.updateTopic topics/readings-json","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"update clear schema","q":"Publisher.updateTopic topics/readings-json","a":"INVALID_ARGUMENT: No schema name provided","r":"c","k":"answer"},{"t":"publish after clear","q":"Publisher.publish topics/readings-json","a":"INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"commit","q":"SchemaService.commitSchema schemas/readings","a":"OK {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"publish after commit","q":"Publisher.publish topics/readings-binary","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"delete schema","q":"SchemaService.deleteSchema schemas/readings","a":"OK {}","r":"c","k":"answer"},{"t":"publish after schema delete","q":"Publisher.publish topics/readings-binary","a":"NOT_FOUND: Schema associated with topic deleted.","r":"c","k":"answer"},{"t":"get topic after schema delete","q":"Publisher.getTopic topics/readings-binary","a":"OK {name, schemaSettings}","r":"c","k":"answer"},{"t":"publish http json bad","q":"POST /v1/projects/{project}/topics/readings-range:publish","a":"404 NOT_FOUND: Schema associated with topic deleted.","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"get topic","q":"IAMPolicy.getIamPolicy topics/orders","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"set topic","q":"IAMPolicy.setIamPolicy topics/orders","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"test topic","q":"IAMPolicy.testIamPermissions topics/orders","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get subscription","q":"IAMPolicy.getIamPolicy subscriptions/sub-a","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get missing","q":"IAMPolicy.getIamPolicy topics/missing-topic","a":"UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get topic http","q":"GET /v1/projects/{project}/topics/orders:getIamPolicy","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"set topic http","q":"POST /v1/projects/{project}/topics/orders:setIamPolicy","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"test topic http","q":"POST /v1/projects/{project}/topics/orders:testIamPermissions","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get subscription http","q":"GET /v1/projects/{project}/subscriptions/sub-a:getIamPolicy","a":"501 UNIMPLEMENTED","r":"c","k":"answer"},{"t":"get schema http","q":"GET /v1/projects/{project}/schemas/x:getIamPolicy","a":"400 INVALID_ARGUMENT: Invalid [schemas] name: (name=projects/{project}/schemas/x:getIamPolicy)","r":"c","k":"answer"},{"t":"put topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"root","q":"GET /","a":"200 Ok","r":"c","k":"answer"},{"t":"v1 root","q":"GET /v1","a":"404 Not Found","r":"c","k":"answer"},{"t":"projects","q":"GET /v1/projects","a":"404 Not Found","r":"c","k":"answer"},{"t":"project","q":"GET /v1/projects/{project}","a":"404 Not Found","r":"c","k":"answer"},{"t":"unknown collection","q":"GET /v1/projects/{project}/nothing","a":"404 Not Found","r":"c","k":"answer"},{"t":"unknown verb","q":"POST /v1/projects/{project}/topics/orders:frobnicate","a":"404 Not Found","r":"c","k":"answer"},{"t":"post topic","q":"POST /v1/projects/{project}/topics/orders","a":"404 Not Found","r":"c","k":"answer"},{"t":"get publish","q":"GET /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/orders:publish)","r":"c","k":"answer"},{"t":"put publish","q":"PUT /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"delete publish","q":"DELETE /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Invalid [topics] name: (name=projects/{project}/topics/orders:publish)","r":"c","k":"answer"},{"t":"trailing slash","q":"GET /v1/projects/{project}/topics/orders/","a":"404 Not Found","r":"c","k":"answer"},{"t":"double slash","q":"GET /v1//projects/{project}/topics/orders","a":"404 Not Found","r":"c","k":"answer"},{"t":"encoded colon","q":"POST /v1/projects/{project}/topics/orders%3Apublish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"query alt","q":"GET /v1/projects/{project}/topics/orders?alt=json","a":"200 {name}","r":"c","k":"answer"},{"t":"query pretty","q":"GET /v1/projects/{project}/topics/orders?prettyPrint=false","a":"200 {name}","r":"c","k":"answer"},{"t":"query unknown","q":"GET /v1/projects/{project}/topics/orders?bogus=1","a":"200 {name}","r":"c","k":"answer"},{"t":"v2","q":"GET /v2/projects/{project}/topics/orders","a":"404 Not Found (Unsupported API version \"v2\")","r":"c","k":"answer"},{"t":"no version","q":"GET /projects/{project}/topics/orders","a":"404 Not Found","r":"c","k":"answer"},{"t":"head","q":"HEAD /v1/projects/{project}/topics/orders","a":"404 (empty body)","r":"c","k":"answer"},{"t":"options","q":"OPTIONS /v1/projects/{project}/topics/orders","a":"200","r":"c","k":"answer"},{"t":"bad json","q":"PUT /v1/projects/{project}/topics/broken","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"json array","q":"PUT /v1/projects/{project}/topics/broken","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"json string","q":"PUT /v1/projects/{project}/topics/broken","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"empty body","q":"PUT /v1/projects/{project}/topics/emptybody","a":"200 {name}","r":"c","k":"answer"},{"t":"unknown field","q":"PUT /v1/projects/{project}/topics/unknown-field","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"wrong type","q":"PUT /v1/projects/{project}/topics/wrong-type","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"snake case field","q":"PUT /v1/projects/{project}/topics/snake","a":"200 {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"get snake","q":"GET /v1/projects/{project}/topics/snake","a":"200 {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"int as string","q":"PUT /v1/projects/{project}/subscriptions/sub-int","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"bool as string","q":"PUT /v1/projects/{project}/subscriptions/sub-bool","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"null field","q":"PUT /v1/projects/{project}/subscriptions/sub-null","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"duration fraction","q":"PUT /v1/projects/{project}/subscriptions/sub-fraction","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"duration no unit","q":"PUT /v1/projects/{project}/subscriptions/sub-no-unit","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"enum unknown","q":"POST /v1/projects/{project}/schemas?schemaId=enum-unknown","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"timestamp seek","q":"POST /v1/projects/{project}/subscriptions/sub-int:seek","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"bytes invalid","q":"POST /v1/projects/{project}/topics/orders:publish","a":"400 INVALID_ARGUMENT: Payload isn't valid for request.","r":"c","k":"answer"},{"t":"URL-safe base64","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"bytes unpadded","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"content type text","q":"PUT /v1/projects/{project}/topics/text-body","a":"200 {name}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"other topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"list a","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"list b","q":"Publisher.listTopics projects/{project}","a":"OK {topics}","r":"c","k":"answer"},{"t":"cross subscription","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"local subscription","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull cross","q":"Subscriber.pull subscriptions/cross","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull local","q":"Subscriber.pull subscriptions/local","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"list subs a","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"list subs b","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"topic subscriptions","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"get other","q":"Publisher.getTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"delete other","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get local after","q":"Publisher.getTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"cross snapshot","q":"Subscriber.createSnapshot subscriptions/local","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"list snapshots a","q":"Subscriber.listSnapshots projects/{project}","a":"OK {}","r":"c","k":"answer"},{"t":"list snapshots b","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, enableExactlyOnceDelivery, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/exactly-once","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack","q":"Subscriber.acknowledge subscriptions/exactly-once","a":"OK {}","r":"c","k":"answer"},{"t":"ack again","q":"Subscriber.acknowledge subscriptions/exactly-once","a":"INVALID_ARGUMENT","r":"c","k":"answer"},{"t":"modify","q":"Subscriber.modifyAckDeadline subscriptions/exactly-once","a":"OK {}","r":"c","k":"answer"},{"t":"stream","q":"Subscriber.streamingPull (stream, 1 write)","a":"OK ยท 0 messages received","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/exactly-once","a":"OK {}","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSubscription subscriptions/exactly-once","a":"OK {ackDeadlineSeconds, enableExactlyOnceDelivery, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"topic retained","q":"Publisher.createTopic topics/retained","a":"OK {messageRetentionDuration, name}","r":"c","k":"answer"},{"t":"sub late","q":"Subscriber.createSubscription topics/retained","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish before sub","q":"Publisher.publish topics/retained","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"sub after publish","q":"Subscriber.createSubscription topics/retained","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish after sub","q":"Publisher.publish topics/retained","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull late","q":"Subscriber.pull subscriptions/late","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/after","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek after epoch","q":"Subscriber.seek subscriptions/after","a":"OK {}","r":"c","k":"answer"},{"t":"pull after seek","q":"Subscriber.pull subscriptions/after","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"update retention","q":"Subscriber.updateSubscription subscriptions/late","a":"INVALID_ARGUMENT: message_retention_duration out of bounds","r":"c","k":"answer"},{"t":"get late","q":"Subscriber.getSubscription subscriptions/late","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"t1","q":"PUT /v1/projects/{project}/topics/alpha","a":"200 {name}","r":"c","k":"answer"},{"t":"t2","q":"PUT /v1/projects/{project}/topics/beta","a":"200 {name}","r":"c","k":"answer"},{"t":"t3","q":"PUT /v1/projects/{project}/topics/gamma","a":"200 {name}","r":"c","k":"answer"},{"t":"s1","q":"PUT /v1/projects/{project}/subscriptions/alpha-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"s2","q":"PUT /v1/projects/{project}/subscriptions/beta-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"s3","q":"PUT /v1/projects/{project}/subscriptions/gamma-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"snap1","q":"PUT /v1/projects/{project}/snapshots/alpha-snap","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"snap2","q":"PUT /v1/projects/{project}/snapshots/beta-snap","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"sch1","q":"POST /v1/projects/{project}/schemas?schemaId=alpha-schema","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"sch2","q":"POST /v1/projects/{project}/schemas?schemaId=beta-schema","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"topics 1","q":"GET /v1/projects/{project}/topics?pageSize=2","a":"200 {topics}","r":"c","k":"answer"},{"t":"topics 2","q":"GET /v1/projects/{project}/topics?pageSize=2&pageToken=projects%{project}%2Ftopics%2Fgamma","a":"200 {topics}","r":"c","k":"answer"},{"t":"topics negative","q":"GET /v1/projects/{project}/topics?pageSize=-5","a":"200 {topics}","r":"c","k":"answer"},{"t":"subs 1","q":"GET /v1/projects/{project}/subscriptions?pageSize=2","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"subs 2","q":"GET /v1/projects/{project}/subscriptions?pageSize=2&pageToken=projects%{project}%2Fsubscriptions%2Fgamma-sub","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"topic subs 1","q":"GET /v1/projects/{project}/topics/alpha/subscriptions?pageSize=1","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"topic subs 2","q":"GET /v1/projects/{project}/topics/alpha/subscriptions?pageSize=1&pageToken=projects%{project}%2Fsubscriptions%2Fbeta-sub","a":"200 {subscriptions}","r":"c","k":"answer"},{"t":"snapshots 1","q":"GET /v1/projects/{project}/snapshots?pageSize=1","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"snapshots 2","q":"GET /v1/projects/{project}/snapshots?pageSize=1&pageToken=projects%{project}%2Fsnapshots%2Fbeta-snap","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"topic snapshots","q":"GET /v1/projects/{project}/topics/alpha/snapshots?pageSize=1","a":"200 {snapshots}","r":"c","k":"answer"},{"t":"schemas 1","q":"GET /v1/projects/{project}/schemas?pageSize=1&view=BASIC","a":"200 {schemas}","r":"c","k":"answer"},{"t":"schemas 2","q":"GET /v1/projects/{project}/schemas?pageSize=1&pageToken=projects%{project}%2Fschemas%2Fbeta-schema","a":"200 {schemas}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub a","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub b","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"sub late","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish later","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull b","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull late","q":"Subscriber.pull subscriptions/sub-late","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack a one","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"nack b one","q":"Subscriber.modifyAckDeadline subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"pull a again","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull b again","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"delete b","q":"Subscriber.deleteSubscription subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"publish after delete","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a final","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull late final","q":"Subscriber.pull subscriptions/sub-late","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"topic","q":"PUT /v1/projects/{project}/topics/orders","a":"200 {name}","r":"c","k":"answer"},{"t":"dead letter topic","q":"PUT /v1/projects/{project}/topics/dead-letters","a":"200 {name}","r":"c","k":"answer"},{"t":"dlq sub","q":"PUT /v1/projects/{project}/subscriptions/dlq-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub","q":"PUT /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, deadLetterPolicy, filter, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"sub bad filter","q":"PUT /v1/projects/{project}/subscriptions/sub-b","a":"500 UNKNOWN: Application error processing RPC","r":"c","k":"answer"},{"t":"sub few attempts","q":"PUT /v1/projects/{project}/subscriptions/sub-c","a":"400 OUT_OF_RANGE: The value for max_delivery_attempts is too small. You passed 2 in the request, but the minimum value is 5.","r":"c","k":"answer"},{"t":"sub dlq missing","q":"PUT /v1/projects/{project}/subscriptions/sub-d","a":"404 NOT_FOUND: Dead letter topic not found","r":"c","k":"answer"},{"t":"publish","q":"POST /v1/projects/{project}/topics/orders:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"attempt 1","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 1","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 2","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 2","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 3","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 3","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 4","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 4","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 5","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"nack 5","q":"POST /v1/projects/{project}/subscriptions/sub-a:modifyAckDeadline","a":"200 {}","r":"c","k":"answer"},{"t":"attempt 6","q":"POST /v1/projects/{project}/subscriptions/sub-a:pull","a":"200 {}","r":"c","k":"answer"},{"t":"dead letters","q":"POST /v1/projects/{project}/subscriptions/dlq-sub:pull","a":"200 {receivedMessages}","r":"c","k":"answer"},{"t":"delete topic","q":"DELETE /v1/projects/{project}/topics/orders","a":"200 {}","r":"c","k":"answer"},{"t":"get sub after topic delete","q":"GET /v1/projects/{project}/subscriptions/sub-a","a":"200 {ackDeadlineSeconds, deadLetterPolicy, filter, messageRetentionDuration, โ€ฆ}","r":"c","k":"answer"},{"t":"publish deleted","q":"POST /v1/projects/{project}/topics/orders:publish","a":"404 NOT_FOUND: Topic not found","r":"c","k":"answer"},{"t":"snapshot of deleted topic sub","q":"PUT /v1/projects/{project}/snapshots/orphan","a":"200 {expireTime, name, topic}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"publish before sub","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"push sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"no backfill","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"publish shapes","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed shapes","q":"push endpoint: wait up to 3000 ms for 3 or more pushes","a":"3 distinct pushes received","r":"c","k":"behaviour"},{"t":"update to pull","q":"Subscriber.updateSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish pull mode","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"no push in pull mode","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"pull in pull mode","q":"Subscriber.pull subscriptions/push-sub","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack pull mode","q":"Subscriber.acknowledge subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"update to push","q":"Subscriber.updateSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish push mode","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pushed with attributes","q":"push endpoint: wait up to 3000 ms for 1 or more pushes","a":"1 distinct push received","r":"c","k":"behaviour"},{"t":"delete sub","q":"Subscriber.deleteSubscription subscriptions/push-sub","a":"OK {}","r":"c","k":"answer"},{"t":"publish after delete","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"no push after delete","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"push sub again","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"no push for earlier","q":"push endpoint: wait up to 600 ms for 0 or more pushes","a":"0 distinct pushes received","r":"c","k":"behaviour"},{"t":"delete topic","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get after topic delete","q":"Subscriber.getSubscription subscriptions/push-sub","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"other","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"stream a","q":"Subscriber.streamingPull (stream, 1 write)","a":"OK ยท 2 messages received","r":"c","k":"answer"},{"t":"acknowledging sub-a's ids on sub-b's stream","q":"Subscriber.streamingPull (stream, 2 writes)","a":"INVALID_ARGUMENT: Subscription projects/{project}/subscriptions/sub-b received an invalid ack ID projects/{project}/subscriptions/sub-a:1,โ€ฆ","r":"c","k":"answer"},{"t":"ack by pull path","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"modify by pull path","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull b","q":"Subscriber.pull subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"modifying a pull ack id from a stream","q":"Subscriber.streamingPull (stream, 1 write)","a":"OK ยท 1 message received","r":"c","k":"answer"},{"t":"pull final","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"create full","q":"PUT /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"get full","q":"GET /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"create schema missing","q":"PUT /v1/projects/{project}/topics/with-schema","a":"404 NOT_FOUND: Schema could not be found","r":"c","k":"answer"},{"t":"create schema","q":"POST /v1/projects/{project}/schemas?schemaId=readings","a":"200 {definition, name, revisionCreateTime, revisionId, โ€ฆ}","r":"c","k":"answer"},{"t":"create with schema","q":"PUT /v1/projects/{project}/topics/with-schema","a":"200 {name, schemaSettings}","r":"c","k":"answer"},{"t":"publish schema ok","q":"POST /v1/projects/{project}/topics/with-schema:publish","a":"200 {messageIds}","r":"c","k":"answer"},{"t":"publish schema bad","q":"POST /v1/projects/{project}/topics/with-schema:publish","a":"400 INVALID_ARGUMENT: Could not parse message","r":"c","k":"answer"},{"t":"patch mask in body and query","q":"PATCH /v1/projects/{project}/topics/full?updateMask=message_retention_duration","a":"400 INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: labels is not a known Topic field. Note that field paths mustโ€ฆ","r":"c","k":"answer"},{"t":"patch schema","q":"PATCH /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"patch unknown field","q":"PATCH /v1/projects/{project}/topics/full","a":"400 INVALID_ARGUMENT: Invalid update_mask provided in the UpdateTopicRequest: bogus is not a known Topic field. Note that field paths mustโ€ฆ","r":"c","k":"answer"},{"t":"patch missing","q":"PATCH /v1/projects/{project}/topics/missing-topic","a":"404 NOT_FOUND: Topic not found.","r":"c","k":"answer"},{"t":"get after patch","q":"GET /v1/projects/{project}/topics/full","a":"200 {kmsKeyName, labels, messageRetentionDuration, messageStoragePolicy, โ€ฆ}","r":"c","k":"answer"},{"t":"sub","q":"PUT /v1/projects/{project}/subscriptions/full-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"delete topic","q":"DELETE /v1/projects/{project}/topics/full","a":"200 {}","r":"c","k":"answer"},{"t":"get sub","q":"GET /v1/projects/{project}/subscriptions/full-sub","a":"200 {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"topic subscriptions deleted","q":"GET /v1/projects/{project}/topics/full/subscriptions","a":"200 {}","r":"c","k":"answer"},{"t":"delete schema","q":"DELETE /v1/projects/{project}/schemas/readings","a":"200 {}","r":"c","k":"answer"},{"t":"get with schema after","q":"GET /v1/projects/{project}/topics/with-schema","a":"200 {name, schemaSettings}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"detached","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, detached, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"attached","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"expiring","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiring short","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"expiring zero","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"never expiring","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, expirationPolicy, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull detached","q":"Subscriber.pull subscriptions/detached","a":"FAILED_PRECONDITION: Subscription is detached.","r":"c","k":"answer"},{"t":"pull attached","q":"Subscriber.pull subscriptions/attached","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull expiring short","q":"Subscriber.pull subscriptions/expiring-short","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"get detached","q":"Subscriber.getSubscription subscriptions/detached","a":"OK {ackDeadlineSeconds, detached, messageRetentionDuration, name, โ€ฆ}","r":"c","k":"answer"},{"t":"topic subscriptions","q":"Publisher.listTopicSubscriptions topics/orders","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"attach","q":"Subscriber.updateSubscription subscriptions/detached","a":"INVALID_ARGUMENT: Invalid update_mask provided in the UpdateSubscriptionRequest: the detached field in the Subscription is not mutable.","r":"c","k":"answer"},{"t":"update expiration never","q":"Subscriber.updateSubscription subscriptions/expiring","a":"INVALID_ARGUMENT: Updating the expiration_policy field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"update expiration ttl","q":"Subscriber.updateSubscription subscriptions/never","a":"INVALID_ARGUMENT: Updating the expiration_policy field is currently unsupported in the Pub/Sub Emulator.","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSubscriptions projects/{project}","a":"OK {subscriptions}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"other topic","q":"Publisher.createTopic topics/other","a":"OK {name}","r":"c","k":"answer"},{"t":"sub a","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub b","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"sub other","q":"Subscriber.createSubscription topics/other","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish 1","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack a one","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"snapshot","q":"Subscriber.createSnapshot subscriptions/sub-a","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"ack a two","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"publish 2","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull a three","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack a three","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"seek a","q":"Subscriber.seek subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull a after seek","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull b before seek","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack b all","q":"Subscriber.acknowledge subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"seek b","q":"Subscriber.seek subscriptions/sub-b","a":"OK {}","r":"c","k":"answer"},{"t":"pull b after seek","q":"Subscriber.pull subscriptions/sub-b","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"seek other topic","q":"Subscriber.seek subscriptions/sub-other","a":"FAILED_PRECONDITION: The subscription's topic projects/{project}/topics/other is different from that of the snapshot projects/{project}/topโ€ฆ","r":"c","k":"answer"},{"t":"snapshot other topic name clash","q":"Subscriber.createSnapshot subscriptions/sub-other","a":"ALREADY_EXISTS: Snapshot already exists","r":"c","k":"answer"},{"t":"get","q":"Subscriber.getSnapshot snapshots/snap","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"topic snapshots","q":"Publisher.listTopicSnapshots topics/orders","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"other topic snapshots","q":"Publisher.listTopicSnapshots topics/other","a":"OK {}","r":"c","k":"answer"},{"t":"delete topic","q":"Publisher.deleteTopic topics/orders","a":"OK {}","r":"c","k":"answer"},{"t":"get after topic delete","q":"Subscriber.getSnapshot snapshots/snap","a":"OK {expireTime, name, topic}","r":"c","k":"answer"},{"t":"seek after topic delete","q":"Subscriber.seek subscriptions/sub-a","a":"FAILED_PRECONDITION: The subscription's topic _deleted-topic_ is different from that of the snapshot projects/{project}/topics/orders; theyโ€ฆ","r":"c","k":"answer"},{"t":"list","q":"Subscriber.listSnapshots projects/{project}","a":"OK {snapshots}","r":"c","k":"answer"},{"t":"topic","q":"Publisher.createTopic topics/orders","a":"OK {name}","r":"c","k":"answer"},{"t":"sub","q":"Subscriber.createSubscription topics/orders","a":"OK {ackDeadlineSeconds, messageRetentionDuration, name, pushConfig, โ€ฆ}","r":"c","k":"answer"},{"t":"publish","q":"Publisher.publish topics/orders","a":"OK {messageIds}","r":"c","k":"answer"},{"t":"pull","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"shorten to one second","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"extend second","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"mixed ids","q":"Subscriber.modifyAckDeadline subscriptions/sub-a","a":"INVALID_ARGUMENT: Invalid ack id (ack_id=garbage)","r":"c","k":"answer"},{"t":"pull after short lease","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"pull after default","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack everything seen","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull after extension","q":"Subscriber.pull subscriptions/sub-a","a":"OK {receivedMessages}","r":"c","k":"answer"},{"t":"ack last","q":"Subscriber.acknowledge subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"},{"t":"pull empty","q":"Subscriber.pull subscriptions/sub-a","a":"OK {}","r":"c","k":"answer"}]} \ No newline at end of file diff --git a/public/conformance/storage.json b/public/conformance/storage.json index 2f7a7f5..79ceccb 100644 --- a/public/conformance/storage.json +++ b/public/conformance/storage.json @@ -1 +1 @@ -{"runs":[[0,1,0,"Default bucket discovery"],[1,1,0,"Default bucket discovery"],[2,2,1,"gzip content encoding: gcs resumable"],[4,1,1,"gzip content encoding: gcs multipart"],[5,1,1,"gzip content encoding: firebase multipart"],[6,2,1,"gzip content encoding: firebase resumable"],[8,1,1,"gzip content encoding: gcs copy"],[9,12,1,"gzip content encoding: gcs resumable"],[21,12,1,"gzip content encoding: gcs multipart"],[33,12,1,"gzip content encoding: firebase multipart"],[45,12,1,"gzip content encoding: firebase resumable"],[57,12,1,"gzip content encoding: gcs copy"],[69,9,1,"List pagination over 1002 objects"],[78,4,1,"A missing object"],[82,9,1,"Firebase Storage v0 metadata, token bypass, list, media, metadata update, and token mutation routes match the browser SDK contract"],[91,8,1,"GCS JSON media and resumable uploads, query/finalize idempotence, metadata/list/download, and object copy routes match Admin SDK behavior"],[99,2,1,"List pagination over 1002 objects"],[101,1,1,"A missing object"],[102,9,1,"Two independent synthetic bucket policies remain distinct, and the official buckets/blobs/metadata export layout re-imports byte-identically without lifecycle events"],[111,4,2,"Storage targets: no firebaserc"],[115,4,2,"Storage targets: mapped then unmapped"],[119,4,2,"Storage targets: unmapped then mapped"],[123,4,2,"Storage targets: every target mapped"],[127,1,2,"Storage targets: real project unmapped"],[128,29,3,"Resumable, multipart and media uploads as the native SDKs send them"],[157,2,3,"Downloads as the native SDKs send them"],[159,4,3,"Download token routes"],[163,3,3,"CORS for native and web clients"],[166,5,3,"List rules: single wildcard"],[171,5,3,"List rules: single wildcard read"],[176,5,3,"List rules: single wildcard get only"],[181,5,3,"List rules: recursive wildcard"],[186,5,3,"List rules: root single wildcard"],[191,5,3,"List rules: root recursive wildcard"],[196,5,3,"List rules: exact folder"],[201,5,3,"List rules: deeper single wildcard"],[206,5,3,"List rules: two wildcards"],[211,5,3,"List rules: three wildcards"],[216,5,3,"List rules: nested match"],[221,5,3,"List rules: wildcard then literal"],[226,5,3,"List rules: binds the folder"],[231,5,3,"List rules: name is empty"],[236,5,3,"List rules: name is a string"],[241,5,3,"List rules: name unknown denies"],[246,5,3,"List rules: name not equal"],[251,5,3,"List rules: name negated"],[256,5,3,"List rules: name or true"],[261,5,3,"List rules: name and true"],[266,5,3,"List rules: recursive binding is path"],[271,5,3,"List rules: recursive binding negated"],[276,5,3,"List rules: recursive value empty"],[281,5,3,"List rules: recursive value slash"],[286,5,3,"List rules: recursive value sub"],[291,5,3,"List rules: recursive value slash sub"],[296,5,3,"List rules: recursive value deep"],[301,5,3,"List rules: recursive value is string"],[306,5,3,"List rules: recursive then wildcard"],[311,5,3,"List rules: recursive equals sub"],[316,5,3,"List rules: recursive equals slash sub"],[321,5,3,"List rules: request path"]],"cases":[{"t":"bucket list 1","q":"GET /b","a":"200 ยท 1 bucket: {project}","r":"c","k":"answer"},{"t":"bucket list 2","q":"GET /b","a":"200 ยท 1 bucket: {project}","r":"u"},{"t":"gcs resumable","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?name=gcs-resumable.json&uploadType=resumable","a":"200 ยท 2 bytes","r":"c","k":"status"},{"t":"gcs resumable","q":"PUT /upload/storage/v1/b/synthetic-objects.example.test/o?name=gcs-resumable.json&uploadType=resumable&upload_id=","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"gcs multipart","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?uploadType=multipart&name=gcs-multipart.json","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"firebase multipart","q":"POST /v0/b/synthetic-objects.example.test/o?name=firebase-multipart.json","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"firebase resumable","q":"POST /v0/b/synthetic-objects.example.test/o?name=firebase-resumable.json","a":"200 ยท 2 bytes","r":"c","k":"status"},{"t":"firebase resumable","q":"POST /v0/b/synthetic-objects.example.test/o?name=firebase-resumable.json&upload_id=&upload_protocol=resumable","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"gcs copy","q":"POST /b/synthetic-objects.example.test/o/gcs-resumable.json/copyTo/b/synthetic-objects.example.test/o/gcs-copy.json","a":"200 ยท 917 bytes","r":"c","k":"status"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json","a":"200 ยท 600 bytes","r":"c","k":"status"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json","a":"200 ยท 600 bytes","r":"c","k":"status"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json","a":"200 ยท 1028 bytes","r":"c","k":"status"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json","a":"200 ยท 1028 bytes","r":"c","k":"status"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json","a":"200 ยท 917 bytes","r":"c","k":"status"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json","a":"200 ยท 595 bytes","r":"c","k":"status"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"gcs default first","q":"GET /storage/v1/b/โ€ฆ/o (default first)","a":"200 ยท 1000 items, next page token objects/1000.json","r":"c","k":"answer"},{"t":"gcs default second","q":"GET /storage/v1/b/โ€ฆ/o (default second)","a":"200 ยท 2 items, no next page","r":"c","k":"answer"},{"t":"firebase default first","q":"GET /v0/b/โ€ฆ/o (default first)","a":"200 ยท 1000 items, next page token objects/1000.json","r":"c","k":"answer"},{"t":"firebase default second","q":"GET /v0/b/โ€ฆ/o (default second)","a":"200 ยท 2 items, no next page","r":"c","k":"answer"},{"t":"gcs small first","q":"GET /storage/v1/b/โ€ฆ/o (small first)","a":"200 ยท 2 items, next page token objects/0002.json","r":"c","k":"answer"},{"t":"gcs small second","q":"GET /storage/v1/b/โ€ฆ/o (small second)","a":"200 ยท 2 items, next page token objects/0004.json","r":"c","k":"answer"},{"t":"firebase small first","q":"GET /v0/b/โ€ฆ/o (small first)","a":"200 ยท 2 items, next page token objects/0002.json","r":"c","k":"answer"},{"t":"firebase small second","q":"GET /v0/b/โ€ฆ/o (small second)","a":"200 ยท 2 items, next page token objects/0004.json","r":"c","k":"answer"},{"t":"gcs unknown token","q":"GET /storage/v1/b/โ€ฆ/o (unknown token)","a":"200 ยท 2 items, next page token objects/0002.json","r":"c","k":"answer"},{"t":"firebase metadata","q":"GET /v0/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png","a":"404 ยท text/plain; charset=utf-8 \"Not Found\"","r":"c","k":"answer"},{"t":"firebase media","q":"GET /v0/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png?alt=media","a":"404 ยท text/plain; charset=utf-8 \"Not Found\"","r":"c","k":"answer"},{"t":"gcs metadata","q":"GET /storage/v1/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png","a":"404 ยท application/json; charset=utf-8 \"No such object: synthetic-objects.example.test/samples/missing/picture.png\"","r":"c","k":"answer"},{"t":"gcs media","q":"GET /download/storage/v1/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png?alt=media","a":"404 ยท text/html; charset=utf-8 \"No such object: synthetic-objects.example.test/samples/missing/picture.png\"","r":"c","k":"answer"},{"t":"readiness","q":"GET /v0/","a":"200 {emulator}","r":"u"},{"t":"firebase v0 media upload","q":"POST /v0/b/demo-synthetic-app.appspot.com/o?name=users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"default bucket public read denied","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?alt=media","a":"403 Permission denied. No READ permission.","r":"u"},{"t":"download token bypasses rules","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"u"},{"t":"firebase v0 get metadata","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"firebase v0 list prefix","q":"GET /v0/b/demo-synthetic-app.appspot.com/o?prefix=users%2Falice%2F&delimiter=%2F&maxResults=100","a":"200 {prefixes, items}","r":"u"},{"t":"firebase v0 update metadata","q":"PATCH /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"firebase v0 create download token","q":"POST /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?create_token=true","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"firebase v0 delete download token","q":"POST /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?delete_token=","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"gcs json media upload","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?uploadType=media&name=admin%2Fgcs-media-%E7%81%AB.txt","a":"200 storage#object","r":"u"},{"t":"gcs resumable start","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?uploadType=resumable&name=admin%2Fresumable-%F0%9F%94%A5.bin","a":"200 OK","r":"u"},{"t":"gcs resumable upload and finalize","q":"PUT /upload/storage/v1/b/synthetic-objects.example.test/o?name=admin%2Fresumable-%F0%9F%94%A5.bin&uploadType=resumable&upload_id=","a":"200 storage#object","r":"u"},{"t":"gcs resumable duplicate finalize","q":"PUT /upload/storage/v1/b/synthetic-objects.example.test/o?name=admin%2Fresumable-%F0%9F%94%A5.bin&uploadType=resumable&upload_id=","a":"400 Bad Request","r":"u"},{"t":"gcs list objects","q":"GET /storage/v1/b/synthetic-objects.example.test/o?prefix=admin%2F&maxResults=100","a":"200 storage#objects","r":"u"},{"t":"gcs download resumable object","q":"GET /download/storage/v1/b/synthetic-objects.example.test/o/admin%2Fresumable-%F0%9F%94%A5.bin?alt=media","a":"200 {byteLength, sha256, utf8}","r":"u"},{"t":"gcs canonical copy path not implemented","q":"POST /storage/v1/b/synthetic-objects.example.test/o/admin%2Fgcs-media-%E7%81%AB.txt/copyTo/b/synthetic-objects.example.test/o/admin%2Fcopieโ€ฆ","a":"501 Not Implemented","r":"u"},{"t":"gcs emulator copy alias","q":"POST /b/synthetic-objects.example.test/o/admin%2Fgcs-media-%E7%81%AB.txt/copyTo/b/synthetic-objects.example.test/o/admin%2Fcopied-%E7%81%ABโ€ฆ","a":"200 storage#object","r":"u"},{"t":"gcs delimiter","q":"GET /storage/v1/b/โ€ฆ/o (delimiter)","a":"200 ยท 2 items, next page token objects/0002.json","r":"u"},{"t":"SDK autopagination","q":"@google-cloud/storage 7.22.0 getFiles() with autopagination","a":"1002 objects, objects/0000.json to objects/1001.json","r":"u"},{"t":"browser load","q":"a cross-origin of the missing object","a":"browser response 404 Not Found, then the element's error event","r":"u"},{"t":"default bucket owner upload","q":"POST /v0/b/demo-synthetic-app.appspot.com/o?name=users%2Falice%2Fprivate.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"default bucket owner read","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2Fprivate.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"u"},{"t":"default bucket other user denied","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2Fprivate.txt?alt=media","a":"403 Permission denied. No READ permission.","r":"u"},{"t":"assets bucket admin upload","q":"POST /v0/b/synthetic-objects.example.test/o?name=catalog%2Fpublic-%E7%81%AB.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"assets bucket public read","q":"GET /v0/b/synthetic-objects.example.test/o/catalog%2Fpublic-%E7%81%AB.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"u"},{"t":"internal export","q":"POST /internal/export","a":"200 OK","r":"u"},{"t":"internal reset","q":"POST /internal/reset","a":"200 OK","r":"u"},{"t":"reimported default object byte check","q":"GET /download/storage/v1/b/demo-synthetic-app.appspot.com/o/users%2Falice%2Fprivate.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"u"},{"t":"reimported assets object byte check","q":"GET /download/storage/v1/b/synthetic-objects.example.test/o/catalog%2Fpublic-%E7%81%AB.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"u"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets media)","a":"started ยท Detected demo project ID \"demo-media\", using a default (open) rules configuration. Storage targets in firebase.json will be ignorโ€ฆ","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"200","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets media, other)","a":"started ยท Detected demo project ID \"demo-media\", using a default (open) rules configuration. Storage targets in firebase.json will be ignorโ€ฆ","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"200","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets other, media)","a":"started ยท Detected demo project ID \"demo-media\", using a default (open) rules configuration. Storage targets in firebase.json will be ignorโ€ฆ","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"200","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets media)","a":"started","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"403","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"403","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"403","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for real-media-project (targets media)","a":"did not start, exit 1: Error: Deploy target media not configured for project real-media-project. Configure with: firebase target:apply storโ€ฆ","r":"d","k":"error","w":"the official requireTarget error, naming this CLI's command (firenook target:apply) and adding its --storage-bucket flag"},{"t":"ios start","q":"upload ios start","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"ios query","q":"upload ios query","a":"200 ยท upload active ยท 0 bytes received","r":"c","k":"answer"},{"t":"ios put upload","q":"upload ios put upload","a":"200 ยท upload active","r":"c","k":"answer"},{"t":"ios query after upload","q":"upload ios query after upload","a":"200 ยท upload active ยท 3 bytes received","r":"c","k":"answer"},{"t":"ios put finalize","q":"upload ios put finalize","a":"200 ยท upload final ยท object open/hello.txt","r":"c","k":"answer"},{"t":"ios denied start","q":"upload ios denied start","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"ios denied finalize","q":"upload ios denied finalize","a":"403 ยท upload final ยท Permission denied. No WRITE permission.","r":"c","k":"answer"},{"t":"ios denied finalize again","q":"upload ios denied finalize again","a":"403 ยท upload final","r":"c","k":"answer"},{"t":"ios own finalize","q":"upload ios own finalize","a":"200 ยท upload final ยท object users/someone/a.txt","r":"c","k":"answer"},{"t":"path beats query start","q":"upload path beats query start","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"path beats query finalize","q":"upload path beats query finalize","a":"200 ยท upload final ยท object open/path.txt","r":"c","k":"answer"},{"t":"ios cancel","q":"upload ios cancel","a":"200","r":"c","k":"answer"},{"t":"ios after cancel","q":"upload ios after cancel","a":"400","r":"c","k":"answer"},{"t":"android start no body","q":"upload android start no body","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"android chunk","q":"upload android chunk","a":"200 ยท upload active","r":"c","k":"answer"},{"t":"android empty finalize","q":"upload android empty finalize","a":"200 ยท upload final ยท object open/android.bin","r":"c","k":"answer"},{"t":"android typed finalize","q":"upload android typed finalize","a":"200 ยท upload final ยท object open/typed.png","r":"c","k":"answer"},{"t":"android untyped finalize","q":"upload android untyped finalize","a":"200 ยท upload final ยท object open/untyped.png","r":"c","k":"answer"},{"t":"start names the host asked for","q":"upload start names the host asked for","a":"200","r":"c","k":"answer"},{"t":"web finalize","q":"upload web finalize","a":"200 ยท upload final ยท object open/web.txt","r":"c","k":"answer"},{"t":"object path media","q":"upload object path media","a":"200 ยท object open/media.txt","r":"c","k":"answer"},{"t":"object path media put","q":"upload object path media put","a":"200 ยท object open/media-put.txt","r":"c","k":"answer"},{"t":"bucket path media put","q":"upload bucket path media put","a":"200 ยท object open/bucket-put.txt","r":"c","k":"answer"},{"t":"object path multipart","q":"upload object path multipart","a":"200 ยท object open/multi.txt","r":"c","k":"answer"},{"t":"object path denied media","q":"upload object path denied media","a":"403 ยท upload final ยท Permission denied. No WRITE permission.","r":"c","k":"answer"},{"t":"start without a name","q":"upload start without a name","a":"400","r":"c","k":"status"},{"t":"command without an id","q":"upload command without an id","a":"400","r":"c","k":"status"},{"t":"protocol without a command","q":"upload protocol without a command","a":"400","r":"c","k":"answer"},{"t":"put as patch","q":"upload put as patch","a":"200 ยท object open/hello.txt","r":"c","k":"answer"},{"t":"ios read","q":"download ios read","a":"200","r":"c","k":"answer"},{"t":"android read","q":"download android read","a":"200","r":"c","k":"answer"},{"t":"create token signed out","q":"token create token signed out","a":"403 ยท Missing admin credentials.","r":"c","k":"answer"},{"t":"delete token signed out","q":"token delete token signed out","a":"403 ยท Missing admin credentials.","r":"c","k":"answer"},{"t":"create token owner","q":"token create token owner","a":"200 ยท object open/hello.txt","r":"c","k":"answer"},{"t":"create token not true","q":"token create token not true","a":"400","r":"c","k":"status"},{"t":"preflight","q":"OPTIONS preflight with every upload header","a":"allowed ยท methods delete, get, head, patch, post, put","r":"c","k":"answer"},{"t":"private network","q":"OPTIONS preflight asking for private network access","a":"access-control-allow-private-network: true","r":"c","k":"answer"},{"t":"exposed headers","q":"response headers a browser may read","a":"exposes content-type, x-firebase-storage-version, x-goog-upload-chunk-granularity, x-goog-upload-command, x-goog-upload-control-url, x-googโ€ฆ","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow read: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{name} { allow list: if true; }","a":"200 ยท 1 item, 3 prefixes","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 3 prefixes","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/sub/{name} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{a}/{b} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{a}/{b} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{a}/{b} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{a}/{b} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{a}/{b} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open { match /{name} { allow list: if true; } }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 3 prefixes","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/open; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/open; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/โ€ฆ","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspotโ€ฆ","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/open;โ€ฆ","a":"403","r":"c","k":"answer"}]} \ No newline at end of file +{"runs":[[0,2,0,"Default bucket discovery"],[2,2,1,"gzip content encoding: gcs resumable"],[4,1,1,"gzip content encoding: gcs multipart"],[5,1,1,"gzip content encoding: firebase multipart"],[6,2,1,"gzip content encoding: firebase resumable"],[8,1,1,"gzip content encoding: gcs copy"],[9,12,1,"gzip content encoding: gcs resumable"],[21,12,1,"gzip content encoding: gcs multipart"],[33,12,1,"gzip content encoding: firebase multipart"],[45,12,1,"gzip content encoding: firebase resumable"],[57,12,1,"gzip content encoding: gcs copy"],[69,3,1,"Firebase Storage v0 metadata, token bypass, list, media, metadata update, and token mutation routes match the browser SDK contract"],[72,5,1,"GCS JSON media and resumable uploads, query/finalize idempotence, metadata/list/download, and object copy routes match Admin SDK behavior"],[77,11,1,"List pagination over 1002 objects"],[88,5,1,"A missing object"],[93,3,1,"Two independent synthetic bucket policies remain distinct, and the official buckets/blobs/metadata export layout re-imports byte-identically without lifecycle events"],[96,6,1,"Firebase Storage v0 metadata, token bypass, list, media, metadata update, and token mutation routes match the browser SDK contract"],[102,3,1,"GCS JSON media and resumable uploads, query/finalize idempotence, metadata/list/download, and object copy routes match Admin SDK behavior"],[105,6,1,"Two independent synthetic bucket policies remain distinct, and the official buckets/blobs/metadata export layout re-imports byte-identically without lifecycle events"],[111,4,2,"Storage targets: no firebaserc"],[115,4,2,"Storage targets: mapped then unmapped"],[119,4,2,"Storage targets: unmapped then mapped"],[123,4,2,"Storage targets: every target mapped"],[127,1,2,"Storage targets: real project unmapped"],[128,29,3,"Resumable, multipart and media uploads as the native SDKs send them"],[157,2,3,"Downloads as the native SDKs send them"],[159,4,3,"Download token routes"],[163,3,3,"CORS for native and web clients"],[166,5,3,"List rules: single wildcard"],[171,5,3,"List rules: single wildcard read"],[176,5,3,"List rules: single wildcard get only"],[181,5,3,"List rules: recursive wildcard"],[186,5,3,"List rules: root single wildcard"],[191,5,3,"List rules: root recursive wildcard"],[196,5,3,"List rules: exact folder"],[201,5,3,"List rules: deeper single wildcard"],[206,5,3,"List rules: two wildcards"],[211,5,3,"List rules: three wildcards"],[216,5,3,"List rules: nested match"],[221,5,3,"List rules: wildcard then literal"],[226,5,3,"List rules: binds the folder"],[231,5,3,"List rules: name is empty"],[236,5,3,"List rules: name is a string"],[241,5,3,"List rules: name unknown denies"],[246,5,3,"List rules: name not equal"],[251,5,3,"List rules: name negated"],[256,5,3,"List rules: name or true"],[261,5,3,"List rules: name and true"],[266,5,3,"List rules: recursive binding is path"],[271,5,3,"List rules: recursive binding negated"],[276,5,3,"List rules: recursive value empty"],[281,5,3,"List rules: recursive value slash"],[286,5,3,"List rules: recursive value sub"],[291,5,3,"List rules: recursive value slash sub"],[296,5,3,"List rules: recursive value deep"],[301,5,3,"List rules: recursive value is string"],[306,5,3,"List rules: recursive then wildcard"],[311,5,3,"List rules: recursive equals sub"],[316,5,3,"List rules: recursive equals slash sub"],[321,5,3,"List rules: request path"]],"cases":[{"t":"bucket list 1","q":"GET /b","a":"200 ยท 1 bucket: {project}","r":"c","k":"answer"},{"t":"bucket list 2","q":"GET /b","a":"200 ยท 1 bucket: {project}","r":"c","k":"answer"},{"t":"gcs resumable","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?name=gcs-resumable.json&uploadType=resumable","a":"200 ยท 2 bytes","r":"c","k":"status"},{"t":"gcs resumable","q":"PUT /upload/storage/v1/b/synthetic-objects.example.test/o?name=gcs-resumable.json&uploadType=resumable&upload_id=","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"gcs multipart","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?uploadType=multipart&name=gcs-multipart.json","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"firebase multipart","q":"POST /v0/b/synthetic-objects.example.test/o?name=firebase-multipart.json","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"firebase resumable","q":"POST /v0/b/synthetic-objects.example.test/o?name=firebase-resumable.json","a":"200 ยท 2 bytes","r":"c","k":"status"},{"t":"firebase resumable","q":"POST /v0/b/synthetic-objects.example.test/o?name=firebase-resumable.json&upload_id=&upload_protocol=resumable","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"gcs copy","q":"POST /b/synthetic-objects.example.test/o/gcs-resumable.json/copyTo/b/synthetic-objects.example.test/o/gcs-copy.json","a":"200 ยท 917 bytes","r":"c","k":"status"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json","a":"200 ยท 600 bytes","r":"c","k":"status"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs resumable","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json","a":"200 ยท 937 bytes","r":"c","k":"status"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json","a":"200 ยท 600 bytes","r":"c","k":"status"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs multipart","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json","a":"200 ยท 1028 bytes","r":"c","k":"status"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase multipart","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-multipart.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json","a":"200 ยท 1028 bytes","r":"c","k":"status"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /storage/v1/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json","a":"200 ยท 605 bytes","r":"c","k":"status"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:firebase resumable","q":"GET /v0/b/synthetic-objects.example.test/o/firebase-resumable.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json","a":"200 ยท 917 bytes","r":"c","k":"status"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /storage/v1/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json","a":"200 ยท 595 bytes","r":"c","k":"status"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"206 ยท content-encoding gzip ยท 10 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท 53 bytes","r":"c","k":"answer"},{"t":"probe:gcs copy","q":"GET /v0/b/synthetic-objects.example.test/o/gcs-copy.json?alt=media","a":"200 ยท content-encoding gzip ยท 74 bytes","r":"c","k":"answer"},{"t":"readiness","q":"GET /v0/","a":"200 {emulator}","r":"c","k":"answer"},{"t":"default bucket public read denied","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?alt=media","a":"403 Permission denied. No READ permission.","r":"c","k":"answer"},{"t":"firebase v0 list prefix","q":"GET /v0/b/demo-synthetic-app.appspot.com/o?prefix=users%2Falice%2F&delimiter=%2F&maxResults=100","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"gcs resumable start","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?uploadType=resumable&name=admin%2Fresumable-%F0%9F%94%A5.bin","a":"200 OK","r":"c","k":"answer"},{"t":"gcs resumable upload and finalize","q":"PUT /upload/storage/v1/b/synthetic-objects.example.test/o?name=admin%2Fresumable-%F0%9F%94%A5.bin&uploadType=resumable&upload_id=","a":"200 storage#object","r":"c","k":"answer"},{"t":"gcs resumable duplicate finalize","q":"PUT /upload/storage/v1/b/synthetic-objects.example.test/o?name=admin%2Fresumable-%F0%9F%94%A5.bin&uploadType=resumable&upload_id=","a":"400 Bad Request","r":"c","k":"answer"},{"t":"gcs download resumable object","q":"GET /download/storage/v1/b/synthetic-objects.example.test/o/admin%2Fresumable-%F0%9F%94%A5.bin?alt=media","a":"200 {byteLength, sha256, utf8}","r":"c","k":"answer"},{"t":"gcs canonical copy path not implemented","q":"POST /storage/v1/b/synthetic-objects.example.test/o/admin%2Fgcs-media-%E7%81%AB.txt/copyTo/b/synthetic-objects.example.test/o/admin%2Fcopieโ€ฆ","a":"501 Not Implemented","r":"c","k":"answer"},{"t":"gcs default first","q":"GET /storage/v1/b/โ€ฆ/o (default first)","a":"200 ยท 1000 items, next page token objects/1000.json","r":"c","k":"answer"},{"t":"gcs default second","q":"GET /storage/v1/b/โ€ฆ/o (default second)","a":"200 ยท 2 items, no next page","r":"c","k":"answer"},{"t":"firebase default first","q":"GET /v0/b/โ€ฆ/o (default first)","a":"200 ยท 1000 items, next page token objects/1000.json","r":"c","k":"answer"},{"t":"firebase default second","q":"GET /v0/b/โ€ฆ/o (default second)","a":"200 ยท 2 items, no next page","r":"c","k":"answer"},{"t":"gcs small first","q":"GET /storage/v1/b/โ€ฆ/o (small first)","a":"200 ยท 2 items, next page token objects/0002.json","r":"c","k":"answer"},{"t":"gcs small second","q":"GET /storage/v1/b/โ€ฆ/o (small second)","a":"200 ยท 2 items, next page token objects/0004.json","r":"c","k":"answer"},{"t":"firebase small first","q":"GET /v0/b/โ€ฆ/o (small first)","a":"200 ยท 2 items, next page token objects/0002.json","r":"c","k":"answer"},{"t":"firebase small second","q":"GET /v0/b/โ€ฆ/o (small second)","a":"200 ยท 2 items, next page token objects/0004.json","r":"c","k":"answer"},{"t":"gcs unknown token","q":"GET /storage/v1/b/โ€ฆ/o (unknown token)","a":"200 ยท 2 items, next page token objects/0002.json","r":"c","k":"answer"},{"t":"gcs delimiter","q":"GET /storage/v1/b/โ€ฆ/o (delimiter)","a":"200 ยท 2 items, next page token objects/0002.json","r":"c","k":"answer"},{"t":"SDK autopagination","q":"@google-cloud/storage 7.22.0 getFiles() with autopagination","a":"1002 objects, objects/0000.json to objects/1001.json","r":"c","k":"behaviour"},{"t":"firebase metadata","q":"GET /v0/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png","a":"404 ยท text/plain; charset=utf-8 \"Not Found\"","r":"c","k":"answer"},{"t":"firebase media","q":"GET /v0/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png?alt=media","a":"404 ยท text/plain; charset=utf-8 \"Not Found\"","r":"c","k":"answer"},{"t":"gcs metadata","q":"GET /storage/v1/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png","a":"404 ยท application/json; charset=utf-8 \"No such object: synthetic-objects.example.test/samples/missing/picture.png\"","r":"c","k":"answer"},{"t":"gcs media","q":"GET /download/storage/v1/b/synthetic-objects.example.test/o/samples%2Fmissing%2Fpicture.png?alt=media","a":"404 ยท text/html; charset=utf-8 \"No such object: synthetic-objects.example.test/samples/missing/picture.png\"","r":"c","k":"answer"},{"t":"browser load","q":"a cross-origin of the missing object","a":"browser response 404 Not Found, then the element's error event","r":"c","k":"behaviour"},{"t":"default bucket other user denied","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2Fprivate.txt?alt=media","a":"403 Permission denied. No READ permission.","r":"c","k":"answer"},{"t":"internal export","q":"POST /internal/export","a":"200 OK","r":"c","k":"answer"},{"t":"internal reset","q":"POST /internal/reset","a":"200 OK","r":"c","k":"answer"},{"t":"firebase v0 media upload","q":"POST /v0/b/demo-synthetic-app.appspot.com/o?name=users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"download token bypasses rules","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"firebase v0 get metadata","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"firebase v0 update metadata","q":"PATCH /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"firebase v0 create download token","q":"POST /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?create_token=true","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"firebase v0 delete download token","q":"POST /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2F%E7%81%AB%F0%9F%94%A5.txt?delete_token=","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"gcs json media upload","q":"POST /upload/storage/v1/b/synthetic-objects.example.test/o?uploadType=media&name=admin%2Fgcs-media-%E7%81%AB.txt","a":"200 storage#object","r":"d","k":"answer","w":"a GCS uploadType=media upload's Content-Type is the object's content type, as Cloud Storage documents it (docs.cloud.google.com/storage/docs/uploading-objects, JSON API), and as firebase-tools 15.34.0 does for a v0 one-shot upload; 15.22.0 stored application/octet-stream"},{"t":"gcs list objects","q":"GET /storage/v1/b/synthetic-objects.example.test/o?prefix=admin%2F&maxResults=100","a":"200 storage#objects","r":"d","k":"answer","w":"a GCS uploadType=media upload's Content-Type is the object's content type, as Cloud Storage documents it (docs.cloud.google.com/storage/docs/uploading-objects, JSON API), and as firebase-tools 15.34.0 does for a v0 one-shot upload; 15.22.0 stored application/octet-stream"},{"t":"gcs emulator copy alias","q":"POST /b/synthetic-objects.example.test/o/admin%2Fgcs-media-%E7%81%AB.txt/copyTo/b/synthetic-objects.example.test/o/admin%2Fcopied-%E7%81%ABโ€ฆ","a":"200 storage#object","r":"d","k":"answer","w":"a GCS uploadType=media upload's Content-Type is the object's content type, as Cloud Storage documents it (docs.cloud.google.com/storage/docs/uploading-objects, JSON API), and as firebase-tools 15.34.0 does for a v0 one-shot upload; 15.22.0 stored application/octet-stream"},{"t":"default bucket owner upload","q":"POST /v0/b/demo-synthetic-app.appspot.com/o?name=users%2Falice%2Fprivate.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"default bucket owner read","q":"GET /v0/b/demo-synthetic-app.appspot.com/o/users%2Falice%2Fprivate.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"assets bucket admin upload","q":"POST /v0/b/synthetic-objects.example.test/o?name=catalog%2Fpublic-%E7%81%AB.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"assets bucket public read","q":"GET /v0/b/synthetic-objects.example.test/o/catalog%2Fpublic-%E7%81%AB.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"reimported default object byte check","q":"GET /download/storage/v1/b/demo-synthetic-app.appspot.com/o/users%2Falice%2Fprivate.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"reimported assets object byte check","q":"GET /download/storage/v1/b/synthetic-objects.example.test/o/catalog%2Fpublic-%E7%81%AB.txt?alt=media","a":"200 {byteLength, sha256, utf8}","r":"d","k":"answer","w":"a v0 one-shot upload takes its content type from the request Content-Type, as firebase-tools 15.34.0 stores it (storage-native-clients-v1 uploads/object-path-media, bucket-path-media-put); 15.22.0 stored application/octet-stream"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets media)","a":"started ยท Detected demo project ID \"demo-media\", using a default (open) rules configuration. Storage targets in firebase.json will be ignorโ€ฆ","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"200","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets media, other)","a":"started ยท Detected demo project ID \"demo-media\", using a default (open) rules configuration. Storage targets in firebase.json will be ignorโ€ฆ","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"200","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets other, media)","a":"started ยท Detected demo project ID \"demo-media\", using a default (open) rules configuration. Storage targets in firebase.json will be ignorโ€ฆ","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"200","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"200","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for demo-media (targets media)","a":"started","r":"c","k":"answer"},{"t":"upload to demo media images","q":"POST /v0/b/demo-media-images/o (signed out)","a":"403","r":"c","k":"status"},{"t":"upload to demo-media.appspot.com","q":"POST /v0/b/demo-media.appspot.com/o (signed out)","a":"403","r":"c","k":"status"},{"t":"upload to anything else","q":"POST /v0/b/anything-else/o (signed out)","a":"403","r":"c","k":"status"},{"t":"start","q":"firebase emulators:start --only storage for real-media-project (targets media)","a":"did not start, exit 1: Error: Deploy target media not configured for project real-media-project. Configure with: firebase target:apply storโ€ฆ","r":"d","k":"error","w":"the official requireTarget error, naming this CLI's command (firenook target:apply) and adding its --storage-bucket flag"},{"t":"ios start","q":"upload ios start","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"ios query","q":"upload ios query","a":"200 ยท upload active ยท 0 bytes received","r":"c","k":"answer"},{"t":"ios put upload","q":"upload ios put upload","a":"200 ยท upload active","r":"c","k":"answer"},{"t":"ios query after upload","q":"upload ios query after upload","a":"200 ยท upload active ยท 3 bytes received","r":"c","k":"answer"},{"t":"ios put finalize","q":"upload ios put finalize","a":"200 ยท upload final ยท object open/hello.txt","r":"c","k":"answer"},{"t":"ios denied start","q":"upload ios denied start","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"ios denied finalize","q":"upload ios denied finalize","a":"403 ยท upload final ยท Permission denied. No WRITE permission.","r":"c","k":"answer"},{"t":"ios denied finalize again","q":"upload ios denied finalize again","a":"403 ยท upload final","r":"c","k":"answer"},{"t":"ios own finalize","q":"upload ios own finalize","a":"200 ยท upload final ยท object users/someone/a.txt","r":"c","k":"answer"},{"t":"path beats query start","q":"upload path beats query start","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"path beats query finalize","q":"upload path beats query finalize","a":"200 ยท upload final ยท object open/path.txt","r":"c","k":"answer"},{"t":"ios cancel","q":"upload ios cancel","a":"200","r":"c","k":"answer"},{"t":"ios after cancel","q":"upload ios after cancel","a":"400","r":"c","k":"answer"},{"t":"android start no body","q":"upload android start no body","a":"200 ยท upload active ยท chunk granularity 10000","r":"c","k":"answer"},{"t":"android chunk","q":"upload android chunk","a":"200 ยท upload active","r":"c","k":"answer"},{"t":"android empty finalize","q":"upload android empty finalize","a":"200 ยท upload final ยท object open/android.bin","r":"c","k":"answer"},{"t":"android typed finalize","q":"upload android typed finalize","a":"200 ยท upload final ยท object open/typed.png","r":"c","k":"answer"},{"t":"android untyped finalize","q":"upload android untyped finalize","a":"200 ยท upload final ยท object open/untyped.png","r":"c","k":"answer"},{"t":"start names the host asked for","q":"upload start names the host asked for","a":"200","r":"c","k":"answer"},{"t":"web finalize","q":"upload web finalize","a":"200 ยท upload final ยท object open/web.txt","r":"c","k":"answer"},{"t":"object path media","q":"upload object path media","a":"200 ยท object open/media.txt","r":"c","k":"answer"},{"t":"object path media put","q":"upload object path media put","a":"200 ยท object open/media-put.txt","r":"c","k":"answer"},{"t":"bucket path media put","q":"upload bucket path media put","a":"200 ยท object open/bucket-put.txt","r":"c","k":"answer"},{"t":"object path multipart","q":"upload object path multipart","a":"200 ยท object open/multi.txt","r":"c","k":"answer"},{"t":"object path denied media","q":"upload object path denied media","a":"403 ยท upload final ยท Permission denied. No WRITE permission.","r":"c","k":"answer"},{"t":"start without a name","q":"upload start without a name","a":"400","r":"c","k":"status"},{"t":"command without an id","q":"upload command without an id","a":"400","r":"c","k":"status"},{"t":"protocol without a command","q":"upload protocol without a command","a":"400","r":"c","k":"answer"},{"t":"put as patch","q":"upload put as patch","a":"200 ยท object open/hello.txt","r":"c","k":"answer"},{"t":"ios read","q":"download ios read","a":"200","r":"c","k":"answer"},{"t":"android read","q":"download android read","a":"200","r":"c","k":"answer"},{"t":"create token signed out","q":"token create token signed out","a":"403 ยท Missing admin credentials.","r":"c","k":"answer"},{"t":"delete token signed out","q":"token delete token signed out","a":"403 ยท Missing admin credentials.","r":"c","k":"answer"},{"t":"create token owner","q":"token create token owner","a":"200 ยท object open/hello.txt","r":"c","k":"answer"},{"t":"create token not true","q":"token create token not true","a":"400","r":"c","k":"status"},{"t":"preflight","q":"OPTIONS preflight with every upload header","a":"allowed ยท methods delete, get, head, patch, post, put","r":"c","k":"answer"},{"t":"private network","q":"OPTIONS preflight asking for private network access","a":"access-control-allow-private-network: true","r":"c","k":"answer"},{"t":"exposed headers","q":"response headers a browser may read","a":"exposes content-type, x-firebase-storage-version, x-goog-upload-chunk-granularity, x-goog-upload-command, x-goog-upload-control-url, x-googโ€ฆ","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow read: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow read: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow get: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{name} { allow list: if true; }","a":"200 ยท 1 item, 3 prefixes","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 3 prefixes","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{allPaths=**} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/sub/{name} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{a}/{b} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{a}/{b} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{a}/{b} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{a}/{b} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{a}/{b} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{a}/{b}/{c} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open { match /{name} { allow list: if true; } }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open { match /{name} { allow list: if true; } }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{folder}/sub/{name} { allow list: if true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{folder}/{name} { allow list: if folder == 'open'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name == ''; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name is string; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name != 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if !(name == 'x'); }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if name == 'x' || true; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if true && name == 'x'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths is path; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if !(allPaths == path('x')); }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == ''; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == '/sub'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if string(allPaths) == 'sub/deep'; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths is string; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 3 prefixes","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /{rest=**}/{name} { allow list: if true; }","a":"200 ยท 1 item, 0 prefixes","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths == path('sub'); }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{allPaths=**} { allow list: if allPaths == /sub; }","a":"403","r":"c","k":"answer"},{"t":"list (root)","q":"GET /v0/b/โ€ฆ/o?prefix= under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/open; }","a":"403","r":"c","k":"answer"},{"t":"list open/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/open; }","a":"200 ยท 11 items, 1 prefix","r":"c","k":"answer"},{"t":"list open/sub/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/โ€ฆ","a":"403","r":"c","k":"answer"},{"t":"list open/sub/deep/","q":"GET /v0/b/โ€ฆ/o?prefix=open%2Fsub%2Fdeep%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspotโ€ฆ","a":"403","r":"c","k":"answer"},{"t":"list other/","q":"GET /v0/b/โ€ฆ/o?prefix=other%2F under match /open/{name} { allow list: if request.path == /b/demo-firenook-native-clients.appspot.com/o/open;โ€ฆ","a":"403","r":"c","k":"answer"}]} \ No newline at end of file diff --git a/public/conformance/suite.json b/public/conformance/suite.json index 4cfe8e1..fe2ab76 100644 --- a/public/conformance/suite.json +++ b/public/conformance/suite.json @@ -1 +1 @@ -{"runs":[[0,1,0,"Functions emulator shutdown after one HTTP invocation"],[1,1,0,"Functions emulator shutdown after one HTTP invocation"],[2,3,1,"Rules coverage and requests over HTTP"],[5,11,1,"Requests websocket: history and live evaluations"],[16,1,1,"Emulator UI pages driving each emulator"],[17,8,1,"Rules coverage and requests over HTTP"],[25,1,1,"Requests websocket: history and live evaluations"],[26,21,1,"Emulator UI pages driving each emulator"],[47,5,2,"Hub locator, emulator map, export and the origin guard"],[52,5,2,"Suite startup, shutdown and restart on the same ports"],[57,5,2,"UI config, index page and the logging websocket"]],"cases":[{"t":"one HTTP invocation","q":"GET /{project}/us-central1/ping","a":"200 {synthetic}","r":"c","k":"answer"},{"t":"SIGINT","q":"SIGINT to firebase emulators:start","a":"stopped in 34 ms, exit code 0","r":"u"},{"t":"write visible","q":"PATCH /v1/projects/{project}/databases/(default)/documents/notes/visible","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"status"},{"t":"write denied","q":"PATCH /v1/projects/{project}/databases/(default)/documents/notes/denied","a":"403 PERMISSION_DENIED: false for 'create' @ L6, false for 'update' @ L6","r":"c","k":"status"},{"t":"write hidden","q":"PATCH /v1/projects/{project}/databases/(default)/documents/notes/hidden (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"status"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"deny create /databases/(default)/documents/notes/denied","r":"c","k":"verdict"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"deny update /databases/(default)/documents/notes/denied","r":"c","k":"verdict"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"error get /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow get /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"error get /databases/(default)/documents/notes/hidden","r":"c","k":"verdict"},{"t":"evaluation request 8","q":"rules evaluation event 8","a":"deny get /databases/(default)/documents/notes/hidden","r":"c","k":"verdict"},{"t":"evaluation request 9","q":"rules evaluation event 9","a":"error get /databases/(default)/documents/notes/missing","r":"c","k":"verdict"},{"t":"evaluation request 10","q":"rules evaluation event 10","a":"error get /databases/(default)/documents/notes/missing","r":"c","k":"verdict"},{"t":"auth GET","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"coverage before","q":"GET /emulator/v1/projects/{project}:ruleCoverage","a":"200 {rules, report}","r":"u"},{"t":"read visible","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/visible","a":"200 {name, fields, createTime, updateTime}","r":"u"},{"t":"read hidden","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/hidden","a":"403 PERMISSION_DENIED: evaluation error at L5:19 for 'get' @ L5, false for 'get' @ L5","r":"u"},{"t":"read missing","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/missing","a":"403 PERMISSION_DENIED: evaluation error at L5:19 for 'get' @ L5, Null value error. for 'get' @ L5","r":"u"},{"t":"read hidden admin","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/hidden (owner)","a":"200 {name, fields, createTime, updateTime}","r":"u"},{"t":"list documents admin","q":"GET /v1/projects/{project}/databases/(default)/documents/notes?pageSize=1000 (owner)","a":"200 {documents}","r":"u"},{"t":"coverage after","q":"GET /emulator/v1/projects/{project}:ruleCoverage","a":"200 {rules, report}","r":"u"},{"t":"coverage html","q":"GET /emulator/v1/projects/{project}:ruleCoverage.html","a":"200 {byteLength, sha256, title, embeddedCoverage}","r":"u"},{"t":"after reconnecting","q":"reconnect to the requests websocket","a":"history replay of 10 evaluations","r":"u"},{"t":"firestore GET","q":"GET /emulator/v1/projects/{project}:ruleCoverage.html","a":"200","r":"u"},{"t":"firestore DELETE","q":"DELETE /emulator/v1/projects/{project}/databases/(default)/documents","a":"200 {}","r":"u"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"u"},{"t":"auth GET","q":"GET /emulator/v1/projects/{project}/config","a":"200 {signIn, emailPrivacyConfig}","r":"u"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"u"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"u"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"u"},{"t":"auth DELETE","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"u"},{"t":"storage POST","q":"POST /v0/b/{project}/o (query: name)","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o/synthetic.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o/synthetic.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"u"},{"t":"storage DELETE","q":"DELETE /v0/b/{project}/o/%252f","a":"404 (empty body)","r":"u"},{"t":"storage DELETE","q":"DELETE /v0/b/{project}/o/synthetic.txt","a":"204","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"u"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"u"},{"t":"UI config","q":"GET /api/config","a":"200 ยท project {project}, 6 services listed","r":"u"},{"t":"hub locator","q":"GET /","a":"200 {version, origins, pid, host, โ€ฆ}","r":"u"},{"t":"hub emulator map","q":"GET /emulators","a":"200 {hub, ui, logging, auth, โ€ฆ}","r":"u"},{"t":"create export user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"u"},{"t":"hub auth export","q":"POST /_admin/export","a":"200 {message}","r":"u"},{"t":"hub export origin blocked","q":"POST /_admin/export","a":"403 {message}","r":"u"},{"t":"first start","q":"firebase emulators:start (auth, functions, pubsub)","a":"ready after 18 s ยท hub 200, functions 200, auth 200, pubsub 200, ui 200","r":"u"},{"t":"first stop","q":"stop the suite (origin-guarded run)","a":"not clean, exit 2 ยท locator deleted, ports closed","r":"u"},{"t":"restart","q":"start the suite again on the same ports","a":"ready after 18 s ยท hub 200, functions 200, auth 200, pubsub 200, ui 200","r":"u"},{"t":"restart hub readiness","q":"GET / on the hub","a":"200 {version, origins, pid, host, โ€ฆ}","r":"u"},{"t":"second stop","q":"stop the suite (control run)","a":"clean, exit 0 ยท locator deleted, ports closed","r":"u"},{"t":"ui api config","q":"GET /api/config","a":"200 {projectId, experiments, hub, ui, โ€ฆ}","r":"u"},{"t":"ui index html","q":"GET /","a":"200 {byteLength, sha256, containsRootElement}","r":"u"},{"t":"logging websocket message 1","q":"connect to the logging websocket","a":"info: Watching \"/functions\" for Cloud Functions...","r":"u"},{"t":"logging websocket message 2","q":"connect to the logging websocket","a":"warn: โš  functions: package.json indicates an outdated version of firebase-functions. Please upgrade using npm install --save firebase-functโ€ฆ","r":"u"},{"t":"logging websocket message 3","q":"connect to the logging websocket","a":"info: โœ” functions: Using node@24 from host.","r":"u"}]} \ No newline at end of file +{"runs":[[0,2,0,"Functions emulator shutdown after one HTTP invocation"],[2,7,1,"Rules coverage and requests over HTTP"],[9,11,1,"Requests websocket: history and live evaluations"],[20,22,1,"Emulator UI pages driving each emulator"],[42,4,1,"Rules coverage and requests over HTTP"],[46,1,1,"Requests websocket: history and live evaluations"],[47,5,2,"Hub locator, emulator map, export and the origin guard"],[52,4,2,"Suite startup, shutdown and restart on the same ports"],[56,3,2,"UI config, index page and the logging websocket"],[59,1,2,"Suite startup, shutdown and restart on the same ports"],[60,2,2,"UI config, index page and the logging websocket"]],"cases":[{"t":"one HTTP invocation","q":"GET /{project}/us-central1/ping","a":"200 {synthetic}","r":"c","k":"answer"},{"t":"SIGINT","q":"SIGINT to firebase emulators:start","a":"stopped in 34 ms, exit code 0","r":"c","k":"behaviour"},{"t":"coverage before","q":"GET /emulator/v1/projects/{project}:ruleCoverage","a":"200 {rules, report}","r":"c","k":"answer"},{"t":"write visible","q":"PATCH /v1/projects/{project}/databases/(default)/documents/notes/visible","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"status"},{"t":"write denied","q":"PATCH /v1/projects/{project}/databases/(default)/documents/notes/denied","a":"403 PERMISSION_DENIED: false for 'create' @ L6, false for 'update' @ L6","r":"c","k":"status"},{"t":"write hidden","q":"PATCH /v1/projects/{project}/databases/(default)/documents/notes/hidden (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"status"},{"t":"read visible","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/visible","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"read hidden admin","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/hidden (owner)","a":"200 {name, fields, createTime, updateTime}","r":"c","k":"answer"},{"t":"list documents admin","q":"GET /v1/projects/{project}/databases/(default)/documents/notes?pageSize=1000 (owner)","a":"200 {documents}","r":"c","k":"answer"},{"t":"initial history","q":"connect to the requests websocket","a":"empty history","r":"c","k":"answer"},{"t":"evaluation request 1","q":"rules evaluation event 1","a":"allow create /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 2","q":"rules evaluation event 2","a":"allow update /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 3","q":"rules evaluation event 3","a":"deny create /databases/(default)/documents/notes/denied","r":"c","k":"verdict"},{"t":"evaluation request 4","q":"rules evaluation event 4","a":"deny update /databases/(default)/documents/notes/denied","r":"c","k":"verdict"},{"t":"evaluation request 5","q":"rules evaluation event 5","a":"error get /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 6","q":"rules evaluation event 6","a":"allow get /databases/(default)/documents/notes/visible","r":"c","k":"verdict"},{"t":"evaluation request 7","q":"rules evaluation event 7","a":"error get /databases/(default)/documents/notes/hidden","r":"c","k":"verdict"},{"t":"evaluation request 8","q":"rules evaluation event 8","a":"deny get /databases/(default)/documents/notes/hidden","r":"c","k":"verdict"},{"t":"evaluation request 9","q":"rules evaluation event 9","a":"error get /databases/(default)/documents/notes/missing","r":"c","k":"verdict"},{"t":"evaluation request 10","q":"rules evaluation event 10","a":"error get /databases/(default)/documents/notes/missing","r":"c","k":"verdict"},{"t":"firestore GET","q":"GET /emulator/v1/projects/{project}:ruleCoverage.html","a":"200","r":"c","k":"status"},{"t":"firestore DELETE","q":"DELETE /emulator/v1/projects/{project}/databases/(default)/documents","a":"200 {}","r":"c","k":"answer"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"auth GET","q":"GET /identitytoolkit.googleapis.com/v2/projects/{project}/tenants","a":"200 {tenants}","r":"c","k":"answer"},{"t":"auth GET","q":"GET /emulator/v1/projects/{project}/config","a":"200 {signIn, emailPrivacyConfig}","r":"c","k":"answer"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:lookup","a":"200 identitytoolkit#GetAccountInfoResponse","r":"c","k":"answer"},{"t":"auth POST","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts:query","a":"200 {recordsCount, userInfo}","r":"c","k":"answer"},{"t":"auth DELETE","q":"DELETE /emulator/v1/projects/{project}/accounts","a":"200 {}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"storage POST","q":"POST /v0/b/{project}/o (query: name)","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o/synthetic.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o/synthetic.txt","a":"200 {name, bucket, generation, metageneration, โ€ฆ}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"storage DELETE","q":"DELETE /v0/b/{project}/o/%252f","a":"404 (empty body)","r":"c","k":"status"},{"t":"storage DELETE","q":"DELETE /v0/b/{project}/o/synthetic.txt","a":"204","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"storage GET","q":"GET /v0/b/{project}/o (query: delimiter, prefix)","a":"200 {prefixes, items}","r":"c","k":"answer"},{"t":"UI config","q":"GET /api/config","a":"200 ยท project {project}, 6 services listed","r":"c","k":"answer"},{"t":"read hidden","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/hidden","a":"403 PERMISSION_DENIED: evaluation error at L5:19 for 'get' @ L5, false for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\") and then names the allow that refused it, without the official jar's preliminary pre-read evaluation error (COMPATIBILITY.md rules denials; DESIGN.md, no preliminary planner)"},{"t":"read missing","q":"GET /v1/projects/{project}/databases/(default)/documents/notes/missing","a":"403 PERMISSION_DENIED: evaluation error at L5:19 for 'get' @ L5, Null value error. for 'get' @ L5","r":"d","k":"error","w":"Firenook's denial starts with production's text (\"Missing or insufficient permissions.\") and then names the allow that refused it, without the official jar's preliminary pre-read evaluation error (COMPATIBILITY.md rules denials; DESIGN.md, no preliminary planner); the failed condition's cause is Firenook's own text (DESIGN.md, runtime error cause text)"},{"t":"coverage after","q":"GET /emulator/v1/projects/{project}:ruleCoverage","a":"200 {rules, report}","r":"d","k":"behaviour","w":"coverage counts Firenook's one evaluation of each write, as the create it is; the official jar also counts its preliminary update check, so the write rule's visits are doubled, and its read rule shows the planner's undefined visits (DESIGN.md: coverage uses actual evaluator visits, never manufactured planner visit counts; the producer evaluates once; runtime error causes are Firenook's own text)"},{"t":"coverage html","q":"GET /emulator/v1/projects/{project}:ruleCoverage.html","a":"200 {byteLength, sha256, title, embeddedCoverage}","r":"d","k":"answer","w":"the coverage page is Firenook's own same-origin renderer that fetches the JSON report (DESIGN.md, Native coverage reports); the official page embeds the report: status, content type and title match"},{"t":"after reconnecting","q":"reconnect to the requests websocket","a":"history replay of 10 evaluations","r":"d","k":"behaviour","w":"reconnecting replays the ten retained evaluations in order as they were sent; the official jar's history had appended later line outcomes to five of them (DESIGN.md, Requests transport component: no synthesized enrichment)"},{"t":"hub locator","q":"GET /","a":"200 {version, origins, pid, host, โ€ฆ}","r":"c","k":"answer"},{"t":"hub emulator map","q":"GET /emulators","a":"200 {hub, ui, logging, auth, โ€ฆ}","r":"c","k":"answer"},{"t":"create export user","q":"POST /identitytoolkit.googleapis.com/v1/projects/{project}/accounts","a":"200 identitytoolkit#SignupNewUserResponse","r":"c","k":"answer"},{"t":"hub auth export","q":"POST /_admin/export","a":"200 {message}","r":"c","k":"answer"},{"t":"hub export origin blocked","q":"POST /_admin/export","a":"403 {message}","r":"c","k":"answer"},{"t":"first start","q":"firebase emulators:start (auth, functions, pubsub)","a":"ready after 18 s ยท hub 200, functions 200, auth 200, pubsub 200, ui 200","r":"c","k":"behaviour"},{"t":"restart","q":"start the suite again on the same ports","a":"ready after 18 s ยท hub 200, functions 200, auth 200, pubsub 200, ui 200","r":"c","k":"behaviour"},{"t":"restart hub readiness","q":"GET / on the hub","a":"200 {version, origins, pid, host, โ€ฆ}","r":"c","k":"answer"},{"t":"second stop","q":"stop the suite (control run)","a":"clean, exit 0 ยท locator deleted, ports closed","r":"c","k":"behaviour"},{"t":"ui api config","q":"GET /api/config","a":"200 {projectId, experiments, hub, ui, โ€ฆ}","r":"c","k":"answer"},{"t":"logging websocket message 1","q":"connect to the logging websocket","a":"info: Watching \"/functions\" for Cloud Functions...","r":"c","k":"answer"},{"t":"logging websocket message 3","q":"connect to the logging websocket","a":"info: โœ” functions: Using node@24 from host.","r":"c","k":"answer"},{"t":"first stop","q":"stop the suite (origin-guarded run)","a":"not clean, exit 2 ยท locator deleted, ports closed","r":"d","k":"behaviour","w":"the stop after the origin guard refused an export is clean, exit 0; the official CLI exited 2 there, a fault the recording itself names (invariants originGuardFallthroughObservedInOfficialSuite, originGuardedRunExitedCleanly false), and its second, unguarded stop was clean"},{"t":"ui index html","q":"GET /","a":"200 {byteLength, sha256, containsRootElement}","r":"d","k":"answer","w":"the UI port's root leads to Firenook's own console at /console (COMPATIBILITY.md Hub/UI: Google's Emulator UI is not served since 0.2.0-next.3)"},{"t":"logging websocket message 2","q":"connect to the logging websocket","a":"warn: โš  functions: package.json indicates an outdated version of firebase-functions. Please upgrade using npm install --save firebase-functโ€ฆ","r":"d","k":"answer","w":"no warning that package.json names an outdated firebase-functions: the official CLI asks the npm registry for its latest version, and Firenook reaches the network only for its own update check and unvendored Extensions (SECURITY.md)"}]} \ No newline at end of file diff --git a/public/conformance/tasks.json b/public/conformance/tasks.json index de709d8..fd5bf60 100644 --- a/public/conformance/tasks.json +++ b/public/conformance/tasks.json @@ -1 +1 @@ -{"runs":[[0,17,0,"Every onTaskDispatched export is discovered with its taskQueueTrigger and registered as a queue; a caller can register queues directly with the official defaults, an invalid queue id and an over-limit concurrency are rejected."],[17,11,0,"Enqueue over the wire: a named task and an auto-named task reach the default-config handler with the X-CloudTasks headers; duplicate names, unknown queues and caller headers overriding the emulator's are recorded."],[28,5,0,"Retry semantics: a 500 keeps the execution count, a 400 increments it, exhausting maxAttempts runs maxAttempts+1 times, and the previous response reaches the handler."],[33,6,0,"A dispatch deadline aborts the emulator's request while the handler completes (a retry follows); maxConcurrentDispatches 1 serialises a queue; maxDispatchesPerSecond 1 paces one."],[39,9,0,"Deleting a pending task, an unknown task, a task on an unknown queue, and a task already dispatched; the Admin SDK's delete swallows 404."],[48,11,0,"The Admin SDK path handlers use: getFunctions().taskQueue().enqueue() with data, id, scheduleDelaySeconds, dispatchDeadlineSeconds, headers and uri, a duplicate id, an unknown queue, an explicit region; delete() of a pending, an unknown and an auto-named task."],[59,1,0,"The Admin SDK path handlers use: getFunctions().taskQueue().enqueue() with data, id, scheduleDelaySeconds, dispatchDeadlineSeconds, headers and uri, a duplicate id, an unknown queue, an explicit region; delete() of a pending, an unknown and an auto-named task."]],"cases":[{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"startup logs","q":"emulator log lines matching \"queue\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"stats initial","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"register defaults","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register explicit","q":"POST /projects/{project}/locations/us-central1/queues/manual-explicit","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register null fields","q":"POST /projects/{project}/locations/us-central1/queues/manual-nulls","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register empty body","q":"POST /projects/{project}/locations/us-central1/queues/manual-empty","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register over limit","q":"POST /projects/{project}/locations/us-central1/queues/manual-over","a":"400 cannot set maxConcurrentDispatches to a value over 5000","r":"c","k":"answer"},{"t":"register invalid id underscore","q":"POST /projects/{project}/locations/us-central1/queues/bad_name","a":"400 Queue ID must start with a letter followed by up to 62 letters, numbers, hyphens, or underscores and must end with a letter or a number","r":"c","k":"answer"},{"t":"register invalid id long","q":"POST /projects/{project}/locations/us-central1/queues/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaโ€ฆ","a":"400 Queue ID must start with a letter followed by up to 62 letters, numbers, hyphens, or underscores and must end with a letter or a number","r":"c","k":"answer"},{"t":"register invalid id dot","q":"POST /projects/{project}/locations/us-central1/queues/bad.name","a":"400 Queue ID must start with a letter followed by up to 62 letters, numbers, hyphens, or underscores and must end with a letter or a number","r":"c","k":"answer"},{"t":"register foreign project","q":"POST /projects/{project}/locations/us-central1/queues/foreign","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register replaces","q":"POST /projects/{project}/locations/us-central1/queues/manual-explicit","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"stats after register","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"unknown route get","q":"GET /v2/projects/{project}/locations/us-central1/queues","a":"404 Cannot GET /v2/projects/{project}/locations/us-central1/queues","r":"c","k":"answer"},{"t":"unknown route post","q":"POST /unknown","a":"404 Cannot POST /unknown","r":"c","k":"answer"},{"t":"queue get not a route","q":"GET /projects/{project}/locations/us-central1/queues/manual-defaults","a":"404 Cannot GET /projects/{project}/locations/us-central1/queues/manual-defaults","r":"c","k":"answer"},{"t":"enqueue named","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue auto named","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue duplicate name","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"409 A task with the same name already exists","r":"c","k":"answer"},{"t":"enqueue unknown queue","q":"POST /projects/{project}/locations/us-central1/queues/noSuchQueue/tasks","a":"404 Tried to queue a task from a non-existent queue","r":"c","k":"answer"},{"t":"enqueue with schedule time","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue caller headers","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue explicit url","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue alt region","q":"POST /projects/{project}/locations/europe-west1/queues/taskAlt/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue wrong region","q":"POST /projects/{project}/locations/us-central1/queues/taskAlt/tasks","a":"404 Tried to queue a task from a non-existent queue","r":"c","k":"answer"},{"t":"enqueue manual queue unreachable","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"stats after dispatch","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"retry once 500","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"retry once 400","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"retry exhausted","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 4 events","r":"c","k":"answer"},{"t":"retry then succeed twice","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"stats after retries","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"slow deadline","q":"POST /projects/{project}/locations/us-central1/queues/taskSlow/tasks","a":"200 {task} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"serial a","q":"POST /projects/{project}/locations/us-central1/queues/taskSerial/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"serial b","q":"POST /projects/{project}/locations/us-central1/queues/taskSerial/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"serial c","q":"POST /projects/{project}/locations/us-central1/queues/taskSerial/tasks","a":"200 {task} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"rate abc","q":"3 parallel tasks POST /projects/{project}/locations/us-central1/queues/taskRate/tasks","a":"statuses 200, 200, 200 ยท handler saw 3 events","r":"c","k":"answer"},{"t":"stats after limits","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"enqueue pending a","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"enqueue pending b","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"stats pending","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"delete unknown queue","q":"DELETE /projects/{project}/locations/us-central1/queues/noSuchQueue/tasks/pending-a","a":"404 Tried to remove a task from a non-existent queue","r":"c","k":"answer"},{"t":"delete unknown task","q":"DELETE /projects/{project}/locations/us-central1/queues/manual-defaults/tasks/no-such-task","a":"404 Tried to remove a task that doesn't exist","r":"c","k":"answer"},{"t":"delete dispatched","q":"DELETE /projects/{project}/locations/us-central1/queues/taskDefault/tasks/job-named-1","a":"200 {res}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /projects/{project}/locations/us-central1/queues/taskDefault/tasks/job-named-1","a":"404 Tried to remove a task that doesn't exist","r":"c","k":"answer"},{"t":"reuse deleted name","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"409 A task with the same name already exists","r":"c","k":"answer"},{"t":"stats after delete","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"admin enqueue plain","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue options","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue duplicate","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"500 {ok, code, message} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin enqueue uri","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue unknown queue","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"500 {ok, code, message} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin enqueue alt region","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue pending","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete pending","q":"POST /{project}/us-central1/deleteViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete unknown","q":"POST /{project}/us-central1/deleteViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete unknown queue","q":"POST /{project}/us-central1/deleteViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stats final","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"tasks logs","q":"emulator log lines matching \"task\"","a":"15 log lines matched","r":"u"}]} \ No newline at end of file +{"runs":[[0,17,0,"Every onTaskDispatched export is discovered with its taskQueueTrigger and registered as a queue; a caller can register queues directly with the official defaults, an invalid queue id and an over-limit concurrency are rejected."],[17,11,0,"Enqueue over the wire: a named task and an auto-named task reach the default-config handler with the X-CloudTasks headers; duplicate names, unknown queues and caller headers overriding the emulator's are recorded."],[28,5,0,"Retry semantics: a 500 keeps the execution count, a 400 increments it, exhausting maxAttempts runs maxAttempts+1 times, and the previous response reaches the handler."],[33,6,0,"A dispatch deadline aborts the emulator's request while the handler completes (a retry follows); maxConcurrentDispatches 1 serialises a queue; maxDispatchesPerSecond 1 paces one."],[39,9,0,"Deleting a pending task, an unknown task, a task on an unknown queue, and a task already dispatched; the Admin SDK's delete swallows 404."],[48,12,0,"The Admin SDK path handlers use: getFunctions().taskQueue().enqueue() with data, id, scheduleDelaySeconds, dispatchDeadlineSeconds, headers and uri, a duplicate id, an unknown queue, an explicit region; delete() of a pending, an unknown and an auto-named task."]],"cases":[{"t":"backends","q":"GET /backends","a":"200 {backends}","r":"c","k":"answer"},{"t":"startup logs","q":"emulator log lines matching \"queue\"","a":"0 log lines matched","r":"c","k":"behaviour"},{"t":"stats initial","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"register defaults","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register explicit","q":"POST /projects/{project}/locations/us-central1/queues/manual-explicit","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register null fields","q":"POST /projects/{project}/locations/us-central1/queues/manual-nulls","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register empty body","q":"POST /projects/{project}/locations/us-central1/queues/manual-empty","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register over limit","q":"POST /projects/{project}/locations/us-central1/queues/manual-over","a":"400 cannot set maxConcurrentDispatches to a value over 5000","r":"c","k":"answer"},{"t":"register invalid id underscore","q":"POST /projects/{project}/locations/us-central1/queues/bad_name","a":"400 Queue ID must start with a letter followed by up to 62 letters, numbers, hyphens, or underscores and must end with a letter or a number","r":"c","k":"answer"},{"t":"register invalid id long","q":"POST /projects/{project}/locations/us-central1/queues/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaโ€ฆ","a":"400 Queue ID must start with a letter followed by up to 62 letters, numbers, hyphens, or underscores and must end with a letter or a number","r":"c","k":"answer"},{"t":"register invalid id dot","q":"POST /projects/{project}/locations/us-central1/queues/bad.name","a":"400 Queue ID must start with a letter followed by up to 62 letters, numbers, hyphens, or underscores and must end with a letter or a number","r":"c","k":"answer"},{"t":"register foreign project","q":"POST /projects/{project}/locations/us-central1/queues/foreign","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"register replaces","q":"POST /projects/{project}/locations/us-central1/queues/manual-explicit","a":"200 {taskQueueConfig}","r":"c","k":"answer"},{"t":"stats after register","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"unknown route get","q":"GET /v2/projects/{project}/locations/us-central1/queues","a":"404 Cannot GET /v2/projects/{project}/locations/us-central1/queues","r":"c","k":"answer"},{"t":"unknown route post","q":"POST /unknown","a":"404 Cannot POST /unknown","r":"c","k":"answer"},{"t":"queue get not a route","q":"GET /projects/{project}/locations/us-central1/queues/manual-defaults","a":"404 Cannot GET /projects/{project}/locations/us-central1/queues/manual-defaults","r":"c","k":"answer"},{"t":"enqueue named","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue auto named","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue duplicate name","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"409 A task with the same name already exists","r":"c","k":"answer"},{"t":"enqueue unknown queue","q":"POST /projects/{project}/locations/us-central1/queues/noSuchQueue/tasks","a":"404 Tried to queue a task from a non-existent queue","r":"c","k":"answer"},{"t":"enqueue with schedule time","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue caller headers","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue explicit url","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue alt region","q":"POST /projects/{project}/locations/europe-west1/queues/taskAlt/tasks","a":"200 {task} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"enqueue wrong region","q":"POST /projects/{project}/locations/us-central1/queues/taskAlt/tasks","a":"404 Tried to queue a task from a non-existent queue","r":"c","k":"answer"},{"t":"enqueue manual queue unreachable","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"stats after dispatch","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"retry once 500","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"retry once 400","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"retry exhausted","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 4 events","r":"c","k":"answer"},{"t":"retry then succeed twice","q":"POST /projects/{project}/locations/us-central1/queues/taskRetry/tasks","a":"200 {task} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"stats after retries","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"slow deadline","q":"POST /projects/{project}/locations/us-central1/queues/taskSlow/tasks","a":"200 {task} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"serial a","q":"POST /projects/{project}/locations/us-central1/queues/taskSerial/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"serial b","q":"POST /projects/{project}/locations/us-central1/queues/taskSerial/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"serial c","q":"POST /projects/{project}/locations/us-central1/queues/taskSerial/tasks","a":"200 {task} ยท handler saw 3 events","r":"c","k":"answer"},{"t":"rate abc","q":"3 parallel tasks POST /projects/{project}/locations/us-central1/queues/taskRate/tasks","a":"statuses 200, 200, 200 ยท handler saw 3 events","r":"c","k":"answer"},{"t":"stats after limits","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"enqueue pending a","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"enqueue pending b","q":"POST /projects/{project}/locations/us-central1/queues/manual-defaults/tasks","a":"200 {task}","r":"c","k":"answer"},{"t":"stats pending","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"delete unknown queue","q":"DELETE /projects/{project}/locations/us-central1/queues/noSuchQueue/tasks/pending-a","a":"404 Tried to remove a task from a non-existent queue","r":"c","k":"answer"},{"t":"delete unknown task","q":"DELETE /projects/{project}/locations/us-central1/queues/manual-defaults/tasks/no-such-task","a":"404 Tried to remove a task that doesn't exist","r":"c","k":"answer"},{"t":"delete dispatched","q":"DELETE /projects/{project}/locations/us-central1/queues/taskDefault/tasks/job-named-1","a":"200 {res}","r":"c","k":"answer"},{"t":"delete again","q":"DELETE /projects/{project}/locations/us-central1/queues/taskDefault/tasks/job-named-1","a":"404 Tried to remove a task that doesn't exist","r":"c","k":"answer"},{"t":"reuse deleted name","q":"POST /projects/{project}/locations/us-central1/queues/taskDefault/tasks","a":"409 A task with the same name already exists","r":"c","k":"answer"},{"t":"stats after delete","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"admin enqueue plain","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue options","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue duplicate","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"500 {ok, code, message} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin enqueue uri","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue unknown queue","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"500 {ok, code, message} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin enqueue alt region","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 2 events","r":"c","k":"answer"},{"t":"admin enqueue pending","q":"POST /{project}/us-central1/enqueueViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete pending","q":"POST /{project}/us-central1/deleteViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete unknown","q":"POST /{project}/us-central1/deleteViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"admin delete unknown queue","q":"POST /{project}/us-central1/deleteViaAdmin","a":"200 {ok} ยท handler saw 1 event","r":"c","k":"answer"},{"t":"stats final","q":"GET /queueStats","a":"200 {queue:{project}, queue:{project}, queue:{project}, queue:{project}, โ€ฆ}","r":"c","k":"answer"},{"t":"tasks logs","q":"emulator log lines matching \"task\"","a":"15 log lines matched","r":"c","k":"behaviour"}]} \ No newline at end of file diff --git a/src/content/docs/docs/contribute/build.md b/src/content/docs/docs/contribute/build.md index 9befc86..1f85249 100644 --- a/src/content/docs/docs/contribute/build.md +++ b/src/content/docs/docs/contribute/build.md @@ -11,8 +11,8 @@ project, and which tests a change must pass. ## What you need - **Rust**, the toolchain `rust-toolchain.toml` names: the stable channel with - `clippy` and `rustfmt`. The workspace needs Rust 1.98 or later, and 0.2.3 - was built with 1.98.0, the toolchain the release records. + `clippy` and `rustfmt`. The workspace needs Rust 1.98 or later, and 0.2.4 + was built with 1.100.0, the toolchain the release records. - **Node 24.20.0 and npm 12.0.2**, the versions `CONTRIBUTING.md` names and the repository's checks pin: `console/` and `conformance/` declare `engines.node` `>=24.20.0 <25` and `packageManager` `npm@12.0.2`. @@ -86,7 +86,7 @@ what they lack. To run a change in your own app through the npm launcher, build a local candidate. It is a pair of private tarballs, the launcher and your machine's engine, with a version of their own that names the commit, such as -`0.2.3-local.g1a2b3c4d5e6f`. Nothing is published. +`0.2.4-local.g1a2b3c4d5e6f`. Nothing is published. 1. Commit your change. The build refuses uncommitted tracked changes, so every candidate names the exact source it came from. diff --git a/src/content/docs/docs/data/keep-data.mdx b/src/content/docs/docs/data/keep-data.mdx index c01504c..846f97e 100644 --- a/src/content/docs/docs/data/keep-data.mdx +++ b/src/content/docs/docs/data/keep-data.mdx @@ -19,7 +19,7 @@ npx firenook emulators:start --keep-data The first start begins empty and says where the data goes: ```text -firenook 0.2.3 +firenook 0.2.4 demo-shop ยท a fresh start Node 24.20.0 ยท data in .firenook/state ``` @@ -34,7 +34,7 @@ Every later start picks the data up, says when it was saved, and counts what it holds: ```text -firenook 0.2.3 +firenook 0.2.4 demo-shop ยท picking up the data saved just now Node 24.20.0 ยท data in .firenook/state @@ -52,7 +52,7 @@ Each start gets a new, empty working directory, `.firenook/runs/session-/state`, and says so: ```text -firenook 0.2.3 +firenook 0.2.4 demo-shop ยท a fresh start Node 24.20.0 ยท data in .firenook/runs/session-VLd3PD, for this run ``` @@ -95,17 +95,18 @@ working store, not an export: copy it to another machine as an The official emulator keeps no Pub/Sub or Cloud Tasks data either. Because the receipt covers all three, `--keep-data` needs Firestore, Auth and -Storage running together. Starting with `--only` and without one of them -fails: +Storage running together. A start without one of them is refused before +the engine starts, and the refusal names what is missing and where to add +it, `--only` or `firebase.json`: ```text -suite failed: --resume-state requires the firestore, auth and storage services (the native state receipt covers all three) +Firenook: --keep-data keeps Firestore, Auth and Storage together (its saved data holds all three), and this start runs no Auth or Storage: add auth and storage to --only, or start without --keep-data ``` -The start command `firenook init` writes uses `--keep-data`. If you set a -project up without Auth or Storage, remove `--keep-data` from its -`emulators` script, and keep data with an export instead -([export and snapshots](/docs/data/export)). +`--resume-state` is refused the same way. `firenook init` writes +`--keep-data` into the `emulators` script only for a project that runs all +three. A project without Auth or Storage gets a script without it; keep its +data with an export instead ([export and snapshots](/docs/data/export)). ## Keep data from a seed diff --git a/src/content/docs/docs/data/recovery.mdx b/src/content/docs/docs/data/recovery.mdx index 207045c..c5051f9 100644 --- a/src/content/docs/docs/data/recovery.mdx +++ b/src/content/docs/docs/data/recovery.mdx @@ -137,7 +137,7 @@ in the terminal, `existing data preserved` in the plain log. | `it was imported from : pass --import to keep using it` | You started seeded data without its seed | Start with the same `--import` | | `this data was started without a seed, so it cannot take the seed ` | You gave `--import` to data kept without a seed | Start without `--import`, or import into a new `--state-dir` | | `Existing nonempty state requires explicit --resume-state (or --keep-data)` | The `--state-dir` folder already holds data | Add `--resume-state`, or name an empty folder | -| `--resume-state requires the firestore, auth and storage services` | `--only` left out one of the three | Start all three ([keep data](/docs/data/keep-data#what-is-kept)) | +| `--keep-data keeps Firestore, Auth and Storage together` | `--only` or `firebase.json` leaves out one of the three | Add it where the message says, or start without the flag ([keep data](/docs/data/keep-data#what-is-kept)) | | `suite state is locked` | Another Firenook uses the folder | Stop it, or use another `--state-dir` | | `the import that made it did not finish` | The first start was stopped before its import ended | Import again into a new `--state-dir` | | `it belongs to project , not ` | The folder holds another project's data | Start with that project's id, or another `--state-dir` | diff --git a/src/content/docs/docs/data/seeds.mdx b/src/content/docs/docs/data/seeds.mdx index b645589..3c0fc29 100644 --- a/src/content/docs/docs/data/seeds.mdx +++ b/src/content/docs/docs/data/seeds.mdx @@ -59,7 +59,7 @@ npx firenook emulators:start --import ./data --keep-data The first start imports it into `.firenook/state`: ```text -firenook 0.2.3 +firenook 0.2.4 demo-shop ยท first start, importing the seed "data" Node 24.20.0 ยท data in .firenook/state diff --git a/src/content/docs/docs/functions/debugging.mdx b/src/content/docs/docs/functions/debugging.mdx index d3c9e03..dd19b31 100644 --- a/src/content/docs/docs/functions/debugging.mdx +++ b/src/content/docs/docs/functions/debugging.mdx @@ -46,11 +46,10 @@ codebase points it out. ### If a save seems to change nothing -In 0.2.3, a save that stops a codebase loading, such as code that throws -while it loads or a param with no default and no value, is reported only on -the terminal screen. The plain output (`--plain`, pipes and CI) and the -`--debug` log print nothing about it, and the version loaded before keeps -answering, so a call still gets the old behaviour. The screen shows it: +A save that stops a codebase loading, such as code that throws while it +loads or a param with no default and no value, leaves the version loaded +before answering, so a call still gets the old behaviour. The terminal +screen says why: ```text 19:36:17 โœ• reload failed 117 ms default @@ -60,10 +59,18 @@ answering, so a call still gets the old behaviour. The screen shows it: โ”‚ still running the version loaded at 19:35:59 ยท open in console ``` -When you run with `--plain`, open the codebase in the console's Functions -page after a save: it says the codebase failed to load, with the error, and -that the previous version is still serving. Calling the function you changed -shows the same thing. +The plain output (`--plain`, pipes and CI) and the `--debug` log print the +official line, as the first load does, with the error and its stack +(trimmed): + +```text +firenook functions: Failed to load function definition from source: FirebaseError: Functions codebase could not be analyzed successfully. It may have a syntax or runtime error +Error: SHOP_REGION is not set + at Object. (~/demo-shop/functions/index.js:6:37) +``` + +The console's Functions page says the same: the codebase failed to load, +with the error, and the previous version is still serving. ## Reload by hand diff --git a/src/content/docs/docs/functions/scheduled.mdx b/src/content/docs/docs/functions/scheduled.mdx index d50be36..e257cd6 100644 --- a/src/content/docs/docs/functions/scheduled.mdx +++ b/src/content/docs/docs/functions/scheduled.mdx @@ -107,19 +107,19 @@ The console marks such a schedule **Not automatic**. From the command line, while the emulators run: ```console -$ npx firenook functions:invoke nightlyReport --event-data '{}' +$ npx firenook functions:invoke nightlyReport Firenook: schedule event pubsub for nightlyReport (us-central1, gcfv2) via trigger key us-central1-nightlyReport-0 200 OK http://127.0.0.1:5001/functions/projects/demo-shop/triggers/us-central1-nightlyReport-0 ``` -A schedule takes no data, so `--event-data '{}'` is enough. In 0.2.3 it is -also needed: without it, `functions:invoke` sends a plain HTTPS request, -which a scheduled function does not answer, and the command exits with 1: +A schedule takes no data, so `functions:invoke` sends a scheduled function +its schedule event without `--event-data`, as `--event-data '{}'` does. A +scheduled function answers no HTTPS request, so `--data` and `--method` are +refused with what to type instead, and the command exits with 1: ```console -$ npx firenook functions:invoke nightlyReport -404 Not Found http://127.0.0.1:5001/demo-shop/us-central1/nightlyReport -Function us-central1-nightlyReport does not exist, valid functions are: us-central1-helloWorld, us-central1-addMessage, us-central1-onOrderCreated-0, us-central1-onUpload-0, us-central1-nightlyReport-0, us-central1-sendReceipt, us-central1-onShipped-0-projects/demo-shop/locations/us-central1/channels/firebase +$ npx firenook functions:invoke nightlyReport --data '{"a":1}' +Firenook: nightlyReport is a scheduled function, which takes no --data: firenook functions:invoke nightlyReport sends its schedule event ``` In the [console](/docs/tools/console), open **Functions** and pick the diff --git a/src/content/docs/docs/get-started/ci.md b/src/content/docs/docs/get-started/ci.md index 68ca742..c588b67 100644 --- a/src/content/docs/docs/get-started/ci.md +++ b/src/content/docs/docs/get-started/ci.md @@ -70,7 +70,7 @@ looks like this, trimmed: ```text Firenook: running the script through the shell as the official CLI does; use -- for an argv command without shell interpretation -Firenook 0.2.3; engine 2294132253f03395b0d9bafe391d35075e928112; disk/WAL state /.firenook/runs/session-Syhid2/state +Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state /.firenook/runs/session-Syhid2/state Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost Demo project demo-shop: no cloud service is contacted, but user Functions can still reach external providers; this CLI is not a network sandbox. Working data and launch receipt are preserved in /.firenook/runs/session-Syhid2. No automatic deletion. diff --git a/src/content/docs/docs/get-started/docker.md b/src/content/docs/docs/get-started/docker.md index 50b5716..87825ea 100644 --- a/src/content/docs/docs/get-started/docker.md +++ b/src/content/docs/docs/get-started/docker.md @@ -12,7 +12,7 @@ data you want to keep. ## Use the release image -`ghcr.io/firenook-dev/firenook:0.2.3` holds Node 24 and the `firenook` npm +`ghcr.io/firenook-dev/firenook:0.2.4` holds Node 24 and the `firenook` npm package of that version, nothing else, for linux/amd64 and linux/arm64. `latest` is the newest release. Mount the project, with its `firebase.json`, rules and functions, at `/project`, publish the ports you use, and start the @@ -21,7 +21,7 @@ emulators on every address in the container: ```sh docker run --rm -v "$PWD:/project" \ -p 4000:4000 -p 8080:8080 -p 9099:9099 -p 9199:9199 \ - ghcr.io/firenook-dev/firenook:0.2.3 \ + ghcr.io/firenook-dev/firenook:0.2.4 \ emulators:start --project demo-shop --host 0.0.0.0 ``` @@ -40,7 +40,7 @@ In Compose, or as a CI service container: ```yaml title="compose.yaml" services: firebase: - image: ghcr.io/firenook-dev/firenook:0.2.3 + image: ghcr.io/firenook-dev/firenook:0.2.4 command: emulators:start --project demo-shop --host 0.0.0.0 volumes: - ./:/project diff --git a/src/content/docs/docs/get-started/install.mdx b/src/content/docs/docs/get-started/install.mdx index 06b0640..7fdaafb 100644 --- a/src/content/docs/docs/get-started/install.mdx +++ b/src/content/docs/docs/get-started/install.mdx @@ -115,7 +115,7 @@ stops: ```console $ npx firenook binary-path -Firenook: Missing @firenook/cli-darwin-arm64@0.2.3. Install with optional dependencies enabled. No postinstall script is needed. +Firenook: Missing @firenook/cli-darwin-arm64@0.2.4. Install with optional dependencies enabled. No postinstall script is needed. ``` :::note @@ -150,7 +150,7 @@ published with, and prints where it is: ```console $ npx firenook --version -0.2.3 (engine source 2294132253f03395b0d9bafe391d35075e928112) +0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) $ npx firenook binary-path ~/demo-shop/node_modules/@firenook/cli-darwin-arm64/bin/firenook ``` @@ -186,8 +186,8 @@ $ npx firenook doctor }, "warnings": [], "problems": [], - "version": "0.2.3", - "engineRevision": "2294132253f03395b0d9bafe391d35075e928112" + "version": "0.2.4", + "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9" } ``` diff --git a/src/content/docs/docs/get-started/new-project.mdx b/src/content/docs/docs/get-started/new-project.mdx index 07f74f5..deee990 100644 --- a/src/content/docs/docs/get-started/new-project.mdx +++ b/src/content/docs/docs/get-started/new-project.mdx @@ -62,7 +62,7 @@ Enter takes them all: โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ โ–„โ–ˆ โ”‚ - โ”‚ โ–„โ–ˆโ–ˆโ–ˆโ–€ โ–„ firenook 0.2.3 โ”‚ + โ”‚ โ–„โ–ˆโ–ˆโ–ˆโ–€ โ–„ firenook 0.2.4 โ”‚ โ”‚ โ–„โ–ˆโ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–„ a new project in ~/my-app โ”‚ โ”‚ โ–€โ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–€ Node 24.20.0 ยท Claude Code found โ”‚ โ”‚ โ–ˆโ–€โ–€ โ”‚ @@ -113,7 +113,7 @@ once. Each step gets a line with its time: โ”‚ โ”‚ โ”‚ Files โœ“ 4 ms firebase.json, .firebaserc, rules, functions/, โ€ฆ โ”‚ โ”‚ Agents โœ“ 0 ms .mcp.json for Claude Code โ”‚ - โ”‚ Firenook โœ“ 517 ms 0.2.3 in package.json โ”‚ + โ”‚ Firenook โœ“ 517 ms 0.2.4 in package.json โ”‚ โ”‚ Packages โœ“ 14.1 s npm install in functions/, 241 packages โ”‚ โ”‚ Build โœ“ 1.1 s tsc, into functions/lib โ”‚ โ”‚ โ”‚ @@ -169,15 +169,12 @@ The codebase has a `serve` script of its own, as the official template does. From `functions/`, `npm run serve` starts only the Functions emulator, with `--build` for TypeScript; Firenook finds `firebase.json` in the folder above. -:::caution +:::note `--keep-data` keeps Firestore, Auth and Storage together, so it needs all three. If you turn Auth or Storage off, on the screen or with `--only`, -remove `--keep-data` from the `emulators` script and from the start command -`init` prints. Otherwise the start is refused: - -```text -suite failed: --resume-state requires the firestore, auth and storage services (the native state receipt covers all three) -``` +`init` leaves `--keep-data` out of the `emulators` script and of the start +command it prints and runs. For TypeScript, the script is then +`firenook emulators:start --build`. ::: ## What init writes @@ -211,7 +208,7 @@ The scripts, as `init` writes them for TypeScript: "emulators": "firenook emulators:start --keep-data --build" }, "devDependencies": { - "firenook": "0.2.3" + "firenook": "0.2.4" } } ``` @@ -292,7 +289,7 @@ Firenook init: project demo-my-app in ~/my-app wrote ~/my-app/functions/.gitignore wrote ~/my-app/.gitignore done Agents: .mcp.json for Claude Code (0.0 s) - done Firenook: 0.2.3 in package.json (0.4 s) + done Firenook: 0.2.4 in package.json (0.4 s) done Packages: npm install in functions/, 241 packages (2.3 s) done Build: tsc, into functions/lib (0.8 s) Next steps: diff --git a/src/content/docs/docs/get-started/one-service.md b/src/content/docs/docs/get-started/one-service.md index d008b82..29d1b17 100644 --- a/src/content/docs/docs/get-started/one-service.md +++ b/src/content/docs/docs/get-started/one-service.md @@ -81,7 +81,7 @@ three in the list: ```console $ npx firenook emulators:start --only firestore --keep-data -suite failed: --resume-state requires the firestore, auth and storage services (the native state receipt covers all three) +Firenook: --keep-data keeps Firestore, Auth and Storage together (its saved data holds all three), and this start runs no Auth or Storage: add auth and storage to --only, or start without --keep-data ``` Start `--only firestore,auth,storage --keep-data` and add the others you need. diff --git a/src/content/docs/docs/get-started/tests.md b/src/content/docs/docs/get-started/tests.md index ab6a937..0e65d60 100644 --- a/src/content/docs/docs/get-started/tests.md +++ b/src/content/docs/docs/get-started/tests.md @@ -149,7 +149,7 @@ builds the functions and starts the emulators around it. Trimmed: ```console $ npm run test:integration Firenook: running the script through the shell as the official CLI does; use -- for an argv command without shell interpretation -Firenook 0.2.3; engine 2294132253f03395b0d9bafe391d35075e928112; disk/WAL state ~/demo-shop/.firenook/runs/session-Syhid2/state +Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/runs/session-Syhid2/state Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost Build: functions runs its build script before the emulators start firenook functions: Loaded functions definitions from source: helloWorld, orderTotal. diff --git a/src/content/docs/docs/help/former-name.md b/src/content/docs/docs/help/former-name.md index 1c41a75..d384f22 100644 --- a/src/content/docs/docs/help/former-name.md +++ b/src/content/docs/docs/help/former-name.md @@ -71,7 +71,7 @@ where Fireside left it. Start with the same `--state-dir`, and the same ```console $ npx firenook emulators:start --keep-data --state-dir ./local-state --import ./seed -Firenook 0.2.3; engine 2294132253f03395b0d9bafe391d35075e928112; disk/WAL state ~/demo-shop/local-state +Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/local-state firenook resuming validated native state (seed import skipped) firenook: indexed the top-level fields of 5 Firestore documents in 0.0 s All emulators ready diff --git a/src/content/docs/docs/help/report.md b/src/content/docs/docs/help/report.md index ec701dc..171f2f6 100644 --- a/src/content/docs/docs/help/report.md +++ b/src/content/docs/docs/help/report.md @@ -17,7 +17,7 @@ Search the open and closed issues first: someone may have reported it, and ```console $ npx firenook --version -0.2.3 (engine source 2294132253f03395b0d9bafe391d35075e928112) +0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) ``` Include the whole line: the engine revision says exactly which engine you @@ -51,7 +51,7 @@ log to the run's folder and prints where: ```console $ npx firenook emulators:start --plain --debug --only firestore -Firenook 0.2.3; engine 2294132253f03395b0d9bafe391d35075e928112; disk/WAL state ~/demo-shop/.firenook/runs/session-12IyTo/state +Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/runs/session-12IyTo/state Services: firestore; Emulator UI on; host localhost Demo project demo-shop: no cloud service is contacted, but user Functions can still reach external providers; this CLI is not a network sandbox. Debug log: ~/demo-shop/.firenook/runs/session-12IyTo/firenook-debug.log diff --git a/src/content/docs/docs/help/troubleshooting.md b/src/content/docs/docs/help/troubleshooting.md index 0cb841e..659213b 100644 --- a/src/content/docs/docs/help/troubleshooting.md +++ b/src/content/docs/docs/help/troubleshooting.md @@ -82,7 +82,7 @@ it where your app connects too. Every emulator needs its own port; see ```console $ npx firenook emulators:start -Firenook: Missing @firenook/cli-darwin-arm64@0.2.3. Install with optional dependencies enabled. No postinstall script is needed. +Firenook: Missing @firenook/cli-darwin-arm64@0.2.4. Install with optional dependencies enabled. No postinstall script is needed. ``` The native engine for your machine comes in an optional dependency, one @@ -338,7 +338,7 @@ At start, rules that do not compile stop the start, with the file, line and column: ```text -suite failed: invalid Firestore rules for database "(default)" in ~/demo-shop/firestore.rules: 15:26: expected "if" +suite failed: invalid Firestore rules for database "(default)" in ~/demo-shop/firestore.rules: 5:19: Missing 'if' before conditional expression. ``` While the emulators run, Firenook loads rules again when you save the file. A @@ -346,8 +346,8 @@ save that does not compile is reported and the rules already loaded stay in force: ```text -firenook firestore: database "(default)" rules in ~/demo-shop/firestore.rules did not compile; the rules in force are unchanged: 15:26: expected "if" -firenook storage: rules for every bucket in ~/demo-shop/storage.rules did not compile; the rules in force are unchanged: 13:1: expected end of rules source +firenook firestore: database "(default)" rules in ~/demo-shop/firestore.rules did not compile; the rules in force are unchanged: 5:19: Missing 'if' before conditional expression. +firenook storage: rules for every bucket in ~/demo-shop/storage.rules did not compile; the rules in force are unchanged: 9:1: Unexpected '}'. ``` Fix the line named and save again. diff --git a/src/content/docs/docs/help/versions.md b/src/content/docs/docs/help/versions.md index e70772c..bb1bb7b 100644 --- a/src/content/docs/docs/help/versions.md +++ b/src/content/docs/docs/help/versions.md @@ -8,7 +8,7 @@ install one on purpose, and how to check the package and the engine you have. ## Releases -The current release is `0.2.3`. The first for public use was `0.2.0`, and +The current release is `0.2.4`. The first for public use was `0.2.0`, and before it came the previews, `0.2.0-next.1` to `0.2.0-next.8`. Each release is listed, with what it changed and what it passed, on the [releases page](https://github.com/firenook-dev/firenook/releases) and in the @@ -20,7 +20,7 @@ only held the name before the first release and contains no emulator. ## Channels -npm has two tags for Firenook. `latest` is the release to install, `0.2.3` +npm has two tags for Firenook. `latest` is the release to install, `0.2.4` today; `npm install firenook` and a bare `npx firenook` get it on any Node from 20 up. `next` carries previews, which keep their own `-next` versions. `npm view firenook dist-tags` shows where each tag points. @@ -34,9 +34,9 @@ and every CI run gets the same release until you upgrade: npm install --save-dev firenook ``` -npm records it as `^0.2.3`: an update can take a later `0.2` release, never +npm records it as `^0.2.4`: an update can take a later `0.2` release, never `0.3` or a preview. To install one release in particular, name it, as in -`npm install --save-dev firenook@0.2.3`. +`npm install --save-dev firenook@0.2.4`. Firenook never upgrades itself. In a terminal, it asks the npm registry for the version tags at most once a day, in the background, and the next start @@ -51,8 +51,8 @@ say whether it changes how data is stored. ## Data between releases -Data kept with `--keep-data` moves between `0.2.3`, `0.2.2`, `0.2.1` and -`0.2.0` as it is. It also moves between `0.2.0` and the last preview, in +Data kept with `--keep-data` moves between `0.2.4`, `0.2.3`, `0.2.2`, `0.2.1` +and `0.2.0` as it is. It also moves between `0.2.0` and the last preview, in both directions: - The first `0.2.0` start of data an earlier release saved builds the @@ -78,15 +78,15 @@ both: ```console $ npx firenook --version -0.2.3 (engine source 2294132253f03395b0d9bafe391d35075e928112) +0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) ``` The launcher records the engine it expects in `release.json`: ```json title="node_modules/firenook/release.json" { - "engineRevision": "2294132253f03395b0d9bafe391d35075e928112", - "rustToolchain": "1.98.0", + "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9", + "rustToolchain": "1.100.0", "platforms": { "darwin-arm64": "aarch64-apple-darwin", "darwin-x64": "x86_64-apple-darwin", @@ -102,10 +102,10 @@ cut short: ```json title="node_modules/@firenook/cli-darwin-arm64/receipt.json" { - "version": "0.2.3", + "version": "0.2.4", "platform": "darwin-arm64", "target": "aarch64-apple-darwin", - "engineRevision": "2294132253f03395b0d9bafe391d35075e928112", + "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9", "sha256": "โ€ฆ" } ``` @@ -153,7 +153,7 @@ They do not replace npm's provenance or your lockfile. ## What a release has passed -Each release on GitHub, tagged `npm-v0.2.3` and so on, names its +Each release on GitHub, tagged `npm-v0.2.4` and so on, names its engine revision and the CI runs it passed, and carries: - the published tarballs, the launcher's and each platform's; @@ -166,8 +166,8 @@ You can compare what npm serves with the manifest. `npm pack` downloads the tarball, and its SHA-256 must match the manifest's: ```sh -npm pack firenook@0.2.3 -shasum -a 256 firenook-0.2.3.tgz +npm pack firenook@0.2.4 +shasum -a 256 firenook-0.2.4.tgz ``` A platform is supported for a release only when that release's run passed on diff --git a/src/content/docs/docs/index.mdx b/src/content/docs/docs/index.mdx index 13b42bc..1228bb5 100644 --- a/src/content/docs/docs/index.mdx +++ b/src/content/docs/docs/index.mdx @@ -59,7 +59,7 @@ Java and nothing else to download. ## Status -These docs describe Firenook `0.2.3`. It +These docs describe Firenook `0.2.4`. It runs on Node 22, 24 or 26, on macOS (Apple silicon and Intel), Linux x64 and arm64 with glibc 2.28 or newer, and Windows x64. Every release passes conformance replays against the official emulator and packed installs on all diff --git a/src/content/docs/docs/reference/cli.md b/src/content/docs/docs/reference/cli.md index 0bc8e7a..c7e748e 100644 --- a/src/content/docs/docs/reference/cli.md +++ b/src/content/docs/docs/reference/cli.md @@ -1,6 +1,6 @@ --- title: CLI commands -description: Every firenook command and flag in 0.2.3, grouped as firenook --help groups them, with what each does and its default. +description: Every firenook command and flag in 0.2.4, grouped as firenook --help groups them, with what each does and its default. --- Every command the `firenook` executable takes, grouped as `firenook --help` @@ -9,7 +9,7 @@ groups them. Run them through your package manager (`npx firenook ...`, ```console $ npx firenook --version -0.2.3 (engine source 2294132253f03395b0d9bafe391d35075e928112) +0.2.4 (engine source 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9) ``` `firenook --help`, `-h` or `help` prints one help text for every command, @@ -110,7 +110,8 @@ in `firebase.json`), or `functions/index.js` with `--language javascript`. `.firenook/` and `*-debug.log` are added to `.gitignore`. Pinning writes Firenook into `package.json` as an exact devDependency, with an `emulators` script that runs -`firenook emulators:start --keep-data`, plus `--build` for TypeScript. A +`firenook emulators:start --keep-data`, plus `--build` for TypeScript, and +without `--keep-data` when Firestore, Auth or Storage is left out. A script or a pin already there is kept. | Option | Does | Default | @@ -128,8 +129,8 @@ script or a pin already there is kept. | `--json` | Prints the plan as one line of JSON instead of the list | | The start command `init` prints keeps the data with `--keep-data`, which -needs Firestore, Auth and Storage. When `--only` leaves Auth or Storage -out, start without `--keep-data`. +needs Firestore, Auth and Storage. When `--only` leaves one of them out, +`init` writes, prints and runs the start command without `--keep-data`. `init` will not write over an existing `firebase.json`. It points you to `init --adopt`, and exits 1: @@ -292,8 +293,8 @@ $ npx firenook doctor ... "warnings": [], "problems": [], - "version": "0.2.3", - "engineRevision": "2294132253f03395b0d9bafe391d35075e928112" + "version": "0.2.4", + "engineRevision": "4be26bedd0ce6124c3267d6936ec6d9b539a2bc9" } ``` @@ -420,10 +421,11 @@ firenook functions:invoke NAME --event-data JSON [--resource PATH] [--params JSO Calls a function on the running suite. It replaces the official `functions:shell`: without `--event-data` it sends an HTTPS or callable -request; with it, it delivers a background event shaped as the official -shell builds it, for Firestore, Storage, Pub/Sub, Auth, schedule, Eventarc -and task-queue triggers. Pub/Sub and task-queue events go through their -emulators, as they would in production. +request, or a scheduled function's schedule event; with it, it delivers a +background event shaped as the official shell builds it, for Firestore, +Storage, Pub/Sub, Auth, schedule, Eventarc and task-queue triggers. Pub/Sub +and task-queue events go through their emulators, as they would in +production. ```console $ npx firenook functions:invoke checkout @@ -435,20 +437,20 @@ Firenook: firestore event google.cloud.firestore.document.v1.created for sendRec {"status":"acknowledged"} ``` -A scheduled function takes an event too. Without `--event-data` the call -goes to an HTTP route the function does not have, and fails with -`404 Not Found`: +A scheduled function gets its schedule event without `--event-data`, as +with `--event-data '{}'`. It answers no HTTPS request, so `--data` and +`--method` are refused for it, with what to type instead: ```console -$ npx firenook functions:invoke nightlyReport --event-data '{}' +$ npx firenook functions:invoke nightlyReport Firenook: schedule event pubsub for nightlyReport (us-central1, gcfv2) via trigger key us-central1-nightlyReport-0 200 OK http://127.0.0.1:5001/functions/projects/demo-shop/triggers/us-central1-nightlyReport-0 ``` | Option | Does | Default | | --- | --- | --- | -| `--data JSON` | Sends `{"data": }` as a JSON request body, the shape a callable function reads | No body | -| `--method M` | The HTTP method, for an HTTPS function | `POST` | +| `--data JSON` | Sends `{"data": }` as a JSON request body, the shape a callable function reads. Refused for a scheduled function | No body | +| `--method M` | The HTTP method, for an HTTPS function. Refused for a scheduled function | `POST` | | `--region R` | The region, when the name is deployed in several | `us-central1` | | `--event-data JSON` | Sends a background event with this payload instead of a request | | | `--resource PATH` | The event's resource, such as a Firestore document path | | @@ -615,7 +617,7 @@ Every command above takes these, where they apply. | `--only NAMES` | Starts only these emulators, by the official names: `auth`, `functions`, `firestore`, `storage`, `pubsub`. `extensions` means `functions`; `eventarc`, `tasks`, `hub`, `ui` and `logging` follow their parent. `database`, `hosting`, `dataconnect` and `apphosting` are refused. | Every configured emulator | | `--import DIR` | Imports an export (Firestore, Auth, Storage) at start. With `--keep-data`, only on the first start. A folder without an export's metadata file is a warning, and the start goes on empty. | | | `--export-on-exit[=DIR]` | Exports when the emulators stop, to `DIR` or back to the `--import` folder. | | -| `--keep-data` | Keeps the data between runs in `.firenook/state`. Needs Firestore, Auth and Storage running. See [Keep data between runs](/docs/data/keep-data). | A new, empty folder for every run | +| `--keep-data` | Keeps the data between runs in `.firenook/state`. Needs Firestore, Auth and Storage running; a start without one of them is refused before the engine starts. See [Keep data between runs](/docs/data/keep-data). | A new, empty folder for every run | | `--state-dir DIR` | Keeps the run's data in `DIR`. A folder that already holds data needs `--resume-state` or `--keep-data`. | `.firenook/runs/session-*/state` | | `--resume-state` | Picks up the data in `--state-dir`. | | | `--build` | Runs each Functions codebase's `build:watch` script (`build` for `exec`) and starts the emulators after the first compile. | | @@ -631,7 +633,7 @@ Every command above takes these, where they apply. | `--strict-indexes` | Refuses a Firestore query whose composite index `firestore.indexes.json` does not declare, with `FAILED_PRECONDITION`, as production does. Without it the query is answered and the index is warned of once. See [Queries and indexes](/docs/services/firestore#queries-and-indexes). | Answered and warned of | | `--plain` | Prints plain lines instead of the [terminal screen](/docs/tools/terminal#plain-output). | The screen, in a terminal | | `--hub-port N` | The hub's port. | `emulators.hub.port`, else 4400 | -| `--logging-port N` | The logging listener's port. | `emulators.logging.port`, else 4500 | +| `--logging-port N` | The logging listener's port. | `emulators.logging.port`, else 4500, or the next free port when 4500 is taken | | `--eventarc-port N` | The Eventarc emulator's port. | `emulators.eventarc.port`, else 9299 | | `--tasks-port N` | The Cloud Tasks emulator's port. | `emulators.tasks.port`, else 9499 | | `--firestore-websocket-port N` | The Firestore requests WebSocket's port. | `emulators.firestore.websocketPort`, else 9150 | diff --git a/src/content/docs/docs/reference/configuration.md b/src/content/docs/docs/reference/configuration.md index 74e0248..5dfc3de 100644 --- a/src/content/docs/docs/reference/configuration.md +++ b/src/content/docs/docs/reference/configuration.md @@ -34,8 +34,8 @@ official CLI decides: | Auth | `emulators.auth` | | Pub/Sub | `emulators.pubsub` | -Eventarc and Cloud Tasks start with Functions. The hub always runs. The -console and the logging listener run unless `emulators.ui.enabled` is +Eventarc and Cloud Tasks start with Functions. The hub and the logging +listener always run. The console runs unless `emulators.ui.enabled` is `false`. When `firebase.json` configures Functions but names no codebase and no Extensions, Functions, Eventarc and Cloud Tasks are not started, and a notice says so. `--only` narrows the list further. With nothing @@ -61,7 +61,7 @@ configured, Firenook stops with | `emulators..port` | The port of `firestore`, `auth`, `storage`, `functions`, `pubsub`, `eventarc`, `tasks`, `hub`, `ui` or `logging`. See [Ports](/docs/reference/ports). | | `emulators..host` | The address to listen on. Default: `localhost`. See [Ports](/docs/reference/ports#host). | | `emulators.firestore.websocketPort` | The Firestore requests WebSocket's port | -| `emulators.ui.enabled` | `false` turns off the console and the logging listener. `--ui` turns them on all the same, as the official `--ui` does. | +| `emulators.ui.enabled` | `false` turns off the console; the logging listener runs either way, as the official CLI starts it. `--ui` turns the console on all the same, as the official `--ui` does. | | `emulators.singleProjectMode` | Whether to warn about requests that name another project. Default: `true` | A `storage` section is optional: without one, Storage starts on diff --git a/src/content/docs/docs/reference/mcp-tools.mdx b/src/content/docs/docs/reference/mcp-tools.mdx index bbb42c5..de97225 100644 --- a/src/content/docs/docs/reference/mcp-tools.mdx +++ b/src/content/docs/docs/reference/mcp-tools.mdx @@ -6,7 +6,7 @@ description: All 55 tools firenook mcp gives a coding agent, by group, with what import McpTools from '../../../../components/docs/McpTools.astro'; `firenook mcp` serves these 55 tools to a coding agent, in this order. The -list is what the server answers to `tools/list` in 0.2.3. To connect +list is what the server answers to `tools/list` in 0.2.4. To connect an agent, see [Connect your coding agent](/docs/tools/mcp). Two marks recur below: diff --git a/src/content/docs/docs/reference/ports.md b/src/content/docs/docs/reference/ports.md index 5f38766..45c14ed 100644 --- a/src/content/docs/docs/reference/ports.md +++ b/src/content/docs/docs/reference/ports.md @@ -21,7 +21,7 @@ and what Firenook does when a port is already in use. | Pub/Sub | 8085 | `emulators.pubsub.port` | | Pub/Sub runs | | Hub | 4400 | `emulators.hub.port` | `--hub-port` | Always | | Console (the Emulator UI port) | 4000 | `emulators.ui.port` | | The UI is on | -| Logging | 4500 | `emulators.logging.port` | `--logging-port` | The UI is on | +| Logging | 4500 | `emulators.logging.port` | `--logging-port` | Always | A flag wins over `firebase.json`, and `firebase.json` over the default. The emulators with no flag in the table take their port from `firebase.json` @@ -144,6 +144,14 @@ suite failed: cannot bind auth at 127.0.0.1:38212: Address already in use (os er Either way the command exits with code 1. Firenook never stops the other program for you. +The logging listener is the one exception, as in the official CLI. When +4500 is taken and neither `--logging-port` nor `emulators.logging.port` +chose it, it starts on the next free port, with a warning: + +```text +Firenook: port 4500 for the logging emulator is taken; it starts on 4501 instead (emulators.logging.port in firebase.json chooses it). +``` + ## Run two suites at once Give each suite its own ports in its own `firebase.json`, every listener diff --git a/src/content/docs/docs/services/firestore.mdx b/src/content/docs/docs/services/firestore.mdx index f4450eb..97d6f0f 100644 --- a/src/content/docs/docs/services/firestore.mdx +++ b/src/content/docs/docs/services/firestore.mdx @@ -239,7 +239,7 @@ A file that does not compile leaves the rules in force serving requests, and the log says where: ```text -firenook firestore: database "(default)" rules in ~/demo-shop/firestore.rules did not compile; the rules in force are unchanged: 9:37: expected a rules expression +firenook firestore: database "(default)" rules in ~/demo-shop/firestore.rules did not compile; the rules in force are unchanged: 5:19: Missing 'if' before conditional expression. ``` ### Who a request is from diff --git a/src/content/docs/docs/services/functions.mdx b/src/content/docs/docs/services/functions.mdx index 987e413..19678a2 100644 --- a/src/content/docs/docs/services/functions.mdx +++ b/src/content/docs/docs/services/functions.mdx @@ -164,10 +164,11 @@ firenook functions routing refreshed: 7 registered functions Trimmed: every function gets its `initialized` line. Functions that do not load leave every emulator running, the version loaded before keeps answering, and the next save loads them again; [if a save seems to change -nothing](/docs/functions/debugging#if-a-save-seems-to-change-nothing), read -the terminal screen or the console. In a terminal, `r` reloads by hand. +nothing](/docs/functions/debugging#if-a-save-seems-to-change-nothing), the +log, the terminal screen and the console say why. In a terminal, `r` +reloads by hand. -In 0.2.3, a function you remove, rename or move to another region (a +In 0.2.4, a function you remove, rename or move to another region (a `region` param changed in `.env`, for one) keeps its old route until the emulators restart. A call to the old route answers `500`, and the log says: @@ -182,7 +183,9 @@ Restart the emulators after you change a function's name or region. ## Call any function with functions:invoke `firenook functions:invoke` calls a function on the running suite. Without -`--event-data` it sends an HTTP request, or a callable body with `--data`: +`--event-data` it sends an HTTP request, a callable body with `--data`, or a +scheduled function's schedule event +([scheduled functions](/docs/functions/scheduled#run-one-now)): ```console $ npx firenook functions:invoke addMessage --data '{"text":"hi"}' diff --git a/src/content/docs/docs/services/rules.mdx b/src/content/docs/docs/services/rules.mdx index 4b9e9ba..d4fe218 100644 --- a/src/content/docs/docs/services/rules.mdx +++ b/src/content/docs/docs/services/rules.mdx @@ -51,16 +51,22 @@ A file that does not compile leaves the rules in force serving requests, and says where it went wrong: ```text -firenook storage: rules for every bucket in ~/demo-shop/storage.rules did not compile; the rules in force are unchanged: 5:53: expected a rules expression +firenook storage: rules for every bucket in ~/demo-shop/storage.rules did not compile; the rules in force are unchanged: 9:1: Unexpected '}'. ``` Tests can also replace the rules over HTTP. On the Firestore port, `PUT /emulator/v1/projects/:securityRules` replaces the rules of every database of the project, as on the official emulator. It reads the body as JSON whatever its content type, as the official emulator does, so it takes -the rules `@firebase/rules-unit-testing` sends. +the rules `@firebase/rules-unit-testing` sends. A body that does not compile +is answered `400` with `Error compiling rules:` and a line for each mistake, +in the official parser's words: -On the Storage port, `PUT /internal/setRules` does the same for Storage. A +```json +{"error":{"code":400,"message":"Error compiling rules:\nL5:19 Missing 'if' before conditional expression.","status":"INVALID_ARGUMENT"}} +``` + +On the Storage port, `PUT /internal/setRules` replaces the Storage rules. A body that does not compile there leaves no rules until the next valid one, as on the official emulator. diff --git a/src/content/docs/docs/tools/console.md b/src/content/docs/docs/tools/console.md index 8d3e0ae..801ccbf 100644 --- a/src/content/docs/docs/tools/console.md +++ b/src/content/docs/docs/tools/console.md @@ -25,9 +25,9 @@ listens on both `127.0.0.1` and `::1`, so `http://localhost:4000/console` works whichever address your browser tries. The console is on by default with `emulators:start`. -`emulators.ui.enabled: false` in `firebase.json` turns it off, together -with the logging listener, as in the official suite. `emulators:exec` -leaves it off unless you pass `--ui` or `firebase.json` sets +`emulators.ui.enabled: false` in `firebase.json` turns it off, as in the +official suite; the logging listener runs either way. `emulators:exec` +leaves the console off unless you pass `--ui` or `firebase.json` sets `emulators.ui.enabled: true`. `--ui` turns the console on even when `firebase.json` turns it off, as the official `--ui` does. diff --git a/src/content/docs/docs/tools/mcp.mdx b/src/content/docs/docs/tools/mcp.mdx index 3bdda6f..1fea289 100644 --- a/src/content/docs/docs/tools/mcp.mdx +++ b/src/content/docs/docs/tools/mcp.mdx @@ -163,7 +163,7 @@ agent starts it in, and takes the project id from there. Its first line, on stderr, says what it found: ```text -firenook mcp 0.2.3: 55 tools over stdio for project demo-shop (from ~/demo-shop/firebase.json); local emulators only +firenook mcp 0.2.4: 55 tools over stdio for project demo-shop (from ~/demo-shop/firebase.json); local emulators only ``` `--project ` picks the project, and `--config ` reads a diff --git a/src/content/docs/docs/tools/terminal.md b/src/content/docs/docs/tools/terminal.md index b7e0126..232c4bc 100644 --- a/src/content/docs/docs/tools/terminal.md +++ b/src/content/docs/docs/tools/terminal.md @@ -19,7 +19,7 @@ of `?`. The empty rows above the footer are left out. โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ โ–„โ–ˆ โ”‚ - โ”‚ โ–„โ–ˆโ–ˆโ–ˆโ–€ โ–„ firenook 0.2.3 โ”‚ + โ”‚ โ–„โ–ˆโ–ˆโ–ˆโ–€ โ–„ firenook 0.2.4 โ”‚ โ”‚ โ–„โ–ˆโ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–„ demo-shop ยท picking up the data saved 1 minute ago โ”‚ โ”‚ โ–€โ–ˆโ–ˆโ–€ โ–ˆโ–ˆโ–ˆโ–€ Node 24.20.0 ยท data in .firenook/state โ”‚ โ”‚ โ–ˆโ–€โ–€ โ”‚ @@ -340,7 +340,7 @@ Firenook prints plain lines, with no screen, when: The plain lines look like this (trimmed): ```text -Firenook 0.2.3; engine 2294132253f03395b0d9bafe391d35075e928112; disk/WAL state ~/demo-shop/.firenook/state +Firenook 0.2.4; engine 4be26bedd0ce6124c3267d6936ec6d9b539a2bc9; disk/WAL state ~/demo-shop/.firenook/state Services: firestore, auth, storage, functions, pubsub; Emulator UI on; host localhost firenook: Starting emulators: auth, functions, firestore, pubsub, storage firenook functions: Loaded functions definitions from source: checkout, sendReceipt, stripeWebhook, nightlyReport. @@ -387,7 +387,7 @@ splits into two lines, and below 64 columns the banner drops the flame: ```text +------------------------------------------------------+ | | - | firenook 0.2.3 | + | firenook 0.2.4 | | demo-shop - a fresh start | | Node 24.20.0 - data in .firenook/... | | | @@ -423,7 +423,7 @@ folder that already has a `firebase.json`, the card shows what Once a day at most, in the background, Firenook asks the npm registry for its latest version tags. The answer shows on the next start, as the Update row of the ready summary, so the check never slows a start down. It follows -the channel of the version you have: `latest` for a release such as 0.2.3, +the channel of the version you have: `latest` for a release such as 0.2.4, and `next` for a preview, which also hears of a later release on `latest`. It gives the install command for your package manager, from your lockfile. It never runs in plain output, in CI, or with diff --git a/src/data/conformance/history.json b/src/data/conformance/history.json index 8841672..59966a3 100644 --- a/src/data/conformance/history.json +++ b/src/data/conformance/history.json @@ -124,5 +124,19 @@ "total": 6563, "production": 1602, "official": 4961 + }, + { + "release": "0.2.3", + "date": "2026-11-12", + "total": 6592, + "production": 1602, + "official": 4990 + }, + { + "release": "0.2.4", + "date": "2026-11-13", + "total": 6791, + "production": 1681, + "official": 5110 } ] diff --git a/src/data/conformance/summary.json b/src/data/conformance/summary.json index e69159d..81b449d 100644 --- a/src/data/conformance/summary.json +++ b/src/data/conformance/summary.json @@ -1,14 +1,14 @@ { - "release": "0.2.3", - "importedAt": "2026-11-12", - "total": 6592, - "production": 1602, - "official": 4990, - "scenarios": 574, - "checked": 5874, - "differs": 202, - "unreplayed": 516, - "checkedProduction": 1427, + "release": "0.2.4", + "importedAt": "2026-11-13", + "total": 6791, + "production": 1681, + "official": 5110, + "scenarios": 595, + "checked": 6414, + "differs": 351, + "unreplayed": 26, + "checkedProduction": 1630, "services": [ { "id": "firestore", @@ -19,10 +19,10 @@ "production": 188, "official": 462, "scenarios": 88, - "checked": 338, - "differs": 10, - "unreplayed": 302, - "checkedProduction": 42, + "checked": 609, + "differs": 41, + "unreplayed": 0, + "checkedProduction": 186, "sets": [ { "id": "rest-v1/production-cloud-firestore", @@ -34,9 +34,9 @@ "recordedAt": "2026-08-31", "scenarios": 5, "answers": 22, - "checked": 1, - "differs": 0, - "unreplayed": 21, + "checked": 21, + "differs": 1, + "unreplayed": 0, "start": 0 }, { @@ -49,9 +49,9 @@ "recordedAt": "2026-08-31", "scenarios": 14, "answers": 166, - "checked": 41, - "differs": 0, - "unreplayed": 125, + "checked": 165, + "differs": 1, + "unreplayed": 0, "start": 22 }, { @@ -94,9 +94,9 @@ "recordedAt": "2026-09-08", "scenarios": 1, "answers": 1, - "checked": 0, + "checked": 1, "differs": 0, - "unreplayed": 1, + "unreplayed": 0, "start": 238 }, { @@ -154,9 +154,9 @@ "recordedAt": "2026-08-27", "scenarios": 1, "answers": 1, - "checked": 0, + "checked": 1, "differs": 0, - "unreplayed": 1, + "unreplayed": 0, "start": 419 }, { @@ -169,9 +169,9 @@ "recordedAt": "2026-09-10", "scenarios": 2, "answers": 25, - "checked": 16, + "checked": 19, "differs": 6, - "unreplayed": 3, + "unreplayed": 0, "start": 420 }, { @@ -184,9 +184,9 @@ "recordedAt": "2026-08-31", "scenarios": 6, "answers": 26, - "checked": 9, - "differs": 0, - "unreplayed": 17, + "checked": 23, + "differs": 3, + "unreplayed": 0, "start": 445 }, { @@ -199,36 +199,36 @@ "recordedAt": "2026-09-04", "scenarios": 15, "answers": 179, - "checked": 45, - "differs": 0, - "unreplayed": 134, + "checked": 153, + "differs": 26, + "unreplayed": 0, "start": 471 } ], "spans": [ [ 0, - 1, + 21, "production", "c" ], [ - 1, 21, + 1, "production", - "u" + "d" ], [ 22, - 41, + 165, "production", "c" ], [ - 63, - 125, + 187, + 1, "production", - "u" + "d" ], [ 188, @@ -252,7 +252,7 @@ 238, 1, "official", - "u" + "c" ], [ 239, @@ -282,49 +282,43 @@ 419, 1, "official", - "u" + "c" ], [ 420, - 16, + 19, "official", "c" ], [ - 436, + 439, 6, "official", "d" ], - [ - 442, - 3, - "official", - "u" - ], [ 445, - 9, + 23, "official", "c" ], [ - 454, - 17, + 468, + 3, "official", - "u" + "d" ], [ 471, - 45, + 153, "official", "c" ], [ - 516, - 134, + 624, + 26, "official", - "u" + "d" ] ], "listed": [ @@ -347,14 +341,14 @@ "name": "Firestore rules", "art": "rules", "anchor": "firestore-rules", - "answers": 2485, - "production": 1108, - "official": 1377, - "scenarios": 220, - "checked": 2212, - "differs": 171, - "unreplayed": 102, - "checkedProduction": 1082, + "answers": 2684, + "production": 1187, + "official": 1497, + "scenarios": 241, + "checked": 2396, + "differs": 262, + "unreplayed": 26, + "checkedProduction": 1141, "sets": [ { "id": "rules-v2/production-rules-api", @@ -363,14 +357,29 @@ "reference": "Firebase Rules API (production)", "version": null, "label": "Firebase Rules API (production)", - "recordedAt": "2026-09-01", - "scenarios": 35, - "answers": 1108, - "checked": 1082, - "differs": 3, - "unreplayed": 23, + "recordedAt": "2026-11-13", + "scenarios": 40, + "answers": 1187, + "checked": 1141, + "differs": 46, + "unreplayed": 0, "start": 0 }, + { + "id": "developer-tools-compile-errors-v1", + "area": "Rules reloads that do not compile: the compiler's messages", + "kind": "official", + "reference": "Firestore emulator (Java)", + "version": "1.21.0", + "label": "Firestore emulator 1.21.0", + "recordedAt": "2026-11-13", + "scenarios": 16, + "answers": 120, + "checked": 94, + "differs": 0, + "unreplayed": 26, + "start": 1187 + }, { "id": "developer-tools-coverage-v1", "area": "Rules expression coverage reports", @@ -381,10 +390,10 @@ "recordedAt": "2026-09-10", "scenarios": 3, "answers": 31, - "checked": 14, - "differs": 0, - "unreplayed": 17, - "start": 1108 + "checked": 19, + "differs": 12, + "unreplayed": 0, + "start": 1307 }, { "id": "developer-tools-request-metadata-v1", @@ -396,10 +405,10 @@ "recordedAt": "2026-09-10", "scenarios": 2, "answers": 49, - "checked": 0, - "differs": 0, - "unreplayed": 49, - "start": 1139 + "checked": 19, + "differs": 30, + "unreplayed": 0, + "start": 1338 }, { "id": "developer-tools-request-values-v1", @@ -411,10 +420,10 @@ "recordedAt": "2026-09-10", "scenarios": 2, "answers": 14, - "checked": 1, - "differs": 0, - "unreplayed": 13, - "start": 1188 + "checked": 8, + "differs": 6, + "unreplayed": 0, + "start": 1387 }, { "id": "request-identity-v1", @@ -429,7 +438,7 @@ "checked": 193, "differs": 167, "unreplayed": 0, - "start": 1202 + "start": 1401 }, { "id": "rule-bindings-v1", @@ -444,7 +453,7 @@ "checked": 40, "differs": 0, "unreplayed": 0, - "start": 1562 + "start": 1761 }, { "id": "rules-document-paths-v1", @@ -459,7 +468,7 @@ "checked": 135, "differs": 0, "unreplayed": 0, - "start": 1602 + "start": 1801 }, { "id": "rules-unit-testing-v1", @@ -474,7 +483,7 @@ "checked": 0, "differs": 0, "unreplayed": 0, - "start": 1737 + "start": 1936 }, { "id": "rules-v2/contributed-rooms", @@ -489,7 +498,7 @@ "checked": 28, "differs": 1, "unreplayed": 0, - "start": 1737 + "start": 1936 }, { "id": "rules-v2/official-emulator", @@ -504,112 +513,125 @@ "checked": 719, "differs": 0, "unreplayed": 0, - "start": 1766 + "start": 1965 } ], "spans": [ [ 0, - 1082, + 1141, "production", "c" ], [ - 1082, - 3, + 1141, + 46, "production", "d" ], [ - 1085, - 23, - "production", + 1187, + 94, + "official", + "c" + ], + [ + 1281, + 26, + "official", "u" ], [ - 1108, - 14, + 1307, + 19, "official", "c" ], [ - 1122, - 17, + 1326, + 12, "official", - "u" + "d" ], [ - 1139, - 49, + 1338, + 19, "official", - "u" + "c" ], [ - 1188, - 1, + 1357, + 30, + "official", + "d" + ], + [ + 1387, + 8, "official", "c" ], [ - 1189, - 13, + 1395, + 6, "official", - "u" + "d" ], [ - 1202, + 1401, 193, "official", "c" ], [ - 1395, + 1594, 167, "official", "d" ], [ - 1562, + 1761, 40, "official", "c" ], [ - 1602, + 1801, 135, "official", "c" ], [ - 1737, + 1936, 28, "official", "c" ], [ - 1765, + 1964, 1, "official", "d" ], [ - 1766, + 1965, 719, "official", "c" ] ], "listed": [ - 7, - 0, 8, + 0, 9, - 6, - 2, + 10, + 7, 3, + 4, + 2, 1, - 5, - 4 + 6, + 5 ] }, { @@ -622,8 +644,8 @@ "official": 1160, "scenarios": 73, "checked": 1149, - "differs": 9, - "unreplayed": 2, + "differs": 11, + "unreplayed": 0, "checkedProduction": 0, "sets": [ { @@ -667,8 +689,8 @@ "scenarios": 11, "answers": 74, "checked": 72, - "differs": 0, - "unreplayed": 2, + "differs": 2, + "unreplayed": 0, "start": 1086 } ], @@ -701,7 +723,7 @@ 1158, 2, "official", - "u" + "d" ] ], "listed": [ @@ -719,9 +741,9 @@ "production": 0, "official": 326, "scenarios": 52, - "checked": 295, - "differs": 1, - "unreplayed": 30, + "checked": 310, + "differs": 16, + "unreplayed": 0, "checkedProduction": 0, "sets": [ { @@ -734,9 +756,9 @@ "recordedAt": "2026-09-10", "scenarios": 1, "answers": 2, - "checked": 1, + "checked": 2, "differs": 0, - "unreplayed": 1, + "unreplayed": 0, "start": 0 }, { @@ -749,9 +771,9 @@ "recordedAt": "2026-09-08", "scenarios": 10, "answers": 109, - "checked": 80, - "differs": 0, - "unreplayed": 29, + "checked": 94, + "differs": 15, + "unreplayed": 0, "start": 2 }, { @@ -788,27 +810,21 @@ "spans": [ [ 0, - 1, + 2, "official", "c" ], - [ - 1, - 1, - "official", - "u" - ], [ 2, - 80, + 94, "official", "c" ], [ - 82, - 29, + 96, + 15, "official", - "u" + "d" ], [ 111, @@ -921,9 +937,9 @@ "production": 0, "official": 301, "scenarios": 49, - "checked": 270, - "differs": 2, - "unreplayed": 29, + "checked": 297, + "differs": 4, + "unreplayed": 0, "checkedProduction": 0, "sets": [ { @@ -936,9 +952,9 @@ "recordedAt": "2026-09-01", "scenarios": 1, "answers": 5, - "checked": 4, + "checked": 5, "differs": 0, - "unreplayed": 1, + "unreplayed": 0, "start": 0 }, { @@ -951,9 +967,9 @@ "recordedAt": "2026-09-07", "scenarios": 2, "answers": 9, - "checked": 0, - "differs": 0, - "unreplayed": 9, + "checked": 8, + "differs": 1, + "unreplayed": 0, "start": 5 }, { @@ -966,9 +982,9 @@ "recordedAt": "2026-09-11", "scenarios": 2, "answers": 8, - "checked": 0, - "differs": 0, - "unreplayed": 8, + "checked": 7, + "differs": 1, + "unreplayed": 0, "start": 14 }, { @@ -981,9 +997,9 @@ "recordedAt": "2026-09-17", "scenarios": 43, "answers": 276, - "checked": 263, + "checked": 274, "differs": 2, - "unreplayed": 11, + "unreplayed": 0, "start": 22 }, { @@ -1005,46 +1021,46 @@ "spans": [ [ 0, - 4, + 5, "official", "c" ], [ - 4, - 1, + 5, + 8, "official", - "u" + "c" ], [ - 5, - 9, + 13, + 1, "official", - "u" + "d" ], [ 14, - 8, + 7, "official", - "u" + "c" + ], + [ + 21, + 1, + "official", + "d" ], [ 22, - 263, + 274, "official", "c" ], [ - 285, + 296, 2, "official", "d" ], - [ - 287, - 11, - "official", - "u" - ], [ 298, 3, @@ -1069,9 +1085,9 @@ "production": 0, "official": 908, "scenarios": 43, - "checked": 904, + "checked": 908, "differs": 0, - "unreplayed": 4, + "unreplayed": 0, "checkedProduction": 0, "sets": [ { @@ -1084,9 +1100,9 @@ "recordedAt": "2026-09-01", "scenarios": 1, "answers": 8, - "checked": 4, + "checked": 8, "differs": 0, - "unreplayed": 4, + "unreplayed": 0, "start": 0 }, { @@ -1108,16 +1124,10 @@ "spans": [ [ 0, - 4, + 8, "official", "c" ], - [ - 4, - 4, - "official", - "u" - ], [ 8, 900, @@ -1139,9 +1149,9 @@ "production": 0, "official": 60, "scenarios": 6, - "checked": 59, + "checked": 60, "differs": 0, - "unreplayed": 1, + "unreplayed": 0, "checkedProduction": 0, "sets": [ { @@ -1154,24 +1164,18 @@ "recordedAt": "2026-09-19", "scenarios": 6, "answers": 60, - "checked": 59, + "checked": 60, "differs": 0, - "unreplayed": 1, + "unreplayed": 0, "start": 0 } ], "spans": [ [ 0, - 59, + 60, "official", "c" - ], - [ - 59, - 1, - "official", - "u" ] ], "listed": [ @@ -1187,9 +1191,9 @@ "production": 0, "official": 62, "scenarios": 7, - "checked": 16, - "differs": 0, - "unreplayed": 46, + "checked": 54, + "differs": 8, + "unreplayed": 0, "checkedProduction": 0, "sets": [ { @@ -1202,9 +1206,9 @@ "recordedAt": "2026-09-11", "scenarios": 1, "answers": 2, - "checked": 1, + "checked": 2, "differs": 0, - "unreplayed": 1, + "unreplayed": 0, "start": 0 }, { @@ -1217,9 +1221,9 @@ "recordedAt": "2026-09-10", "scenarios": 3, "answers": 45, - "checked": 15, - "differs": 0, - "unreplayed": 30, + "checked": 40, + "differs": 5, + "unreplayed": 0, "start": 2 }, { @@ -1232,42 +1236,42 @@ "recordedAt": "2026-09-01", "scenarios": 3, "answers": 15, - "checked": 0, - "differs": 0, - "unreplayed": 15, + "checked": 12, + "differs": 3, + "unreplayed": 0, "start": 47 } ], "spans": [ [ 0, - 1, + 2, "official", "c" ], - [ - 1, - 1, - "official", - "u" - ], [ 2, - 15, + 40, "official", "c" ], [ - 17, - 30, + 42, + 5, "official", - "u" + "d" ], [ 47, - 15, + 12, "official", - "u" + "c" + ], + [ + 59, + 3, + "official", + "d" ] ], "listed": [ diff --git a/src/data/engine/CHANGELOG.md b/src/data/engine/CHANGELOG.md index ca3ec20..c253f6c 100644 --- a/src/data/engine/CHANGELOG.md +++ b/src/data/engine/CHANGELOG.md @@ -1,3 +1,91 @@ +# 0.2.4 โ€” all but 26 recorded answers replayed, 18 bugs fixed, and deep Security Rules no longer stop the engine + +- Pin the engine to `4be26bedd0ce6124c3267d6936ec6d9b539a2bc9`, main after + every 0.2.4 pull request merged (the merge of + [PR #233](https://github.com/firenook-dev/firenook/pull/233)). CI + ([run 43380050621](https://github.com/firenook-dev/firenook/actions/runs/43380050621)), + the five-platform packed-install matrix + ([run 43380050691](https://github.com/firenook-dev/firenook/actions/runs/43380050691)) + and the real SDK clients on Android, iOS and the web + ([run 43380477649](https://github.com/firenook-dev/firenook/actions/runs/43380477649)) + passed on it. The engine is built with Rust 1.100.0 (1.98.0 before). +- **The conformance record.** 0.2.3 published 6,592 answers recorded from + production and the official emulators, 516 of them with no replay. 0.2.4 + records 6,791 in 43 sets and replays all but 26: 6,414 are compared + exactly, 351 are compared and different on purpose, each with its reason, + and the 26 wait on #229. CI fails when a recorded answer has no replay, or + when a listed one is replayed again (#212). Two sets are new: 79 + production probes of how deep one rules expression may nest, and 120 rules + reloads that do not compile, recorded from the official emulator. The + replays found the differences below. +- **Firestore.** + - A listen's first snapshot comes in the query's order, numeric document + ids included (#197). + - A target on a missing document is told it is missing (`documentDelete`) + before it becomes current (#198). + - A refused target is added before it is removed, as production sends it + (#199). + - `orderBy('__name__')` followed by another field is refused in + production's words (#200). + - A WebChannel write that updates a missing document fails with + production's message and envelope (#201). + - An aggregation over two or more equality filters needs a composite + index, as production asks: refused with `--strict-indexes`, a + missing-index warning without it (#202). +- **Security Rules.** + - Calls nest 21 frames deep, as production allows; the 22nd is refused at + compile, in production's words, at the function's declaration (#203). + - An expression is refused at compile once part of it sits 100 levels + down: `Expression is too complex to evaluate safely.`, at each place + production names (#204). + - The 1,000-expression budget runs out at the expression where + production's does (#205). + - Coverage places a failed field access where its member chain starts + (#206). + - A reload that does not compile is answered `Error compiling rules:` with + the official parser's own words (`mismatched input 'broken' expecting + {โ€ฆ}`, `missing '=' at โ€ฆ`, `Unexpected '}'.`) at its line and column + (#207). Sources the official emulator refuses are refused too: an empty + match block, a keyword used as a name, a string left open at the end of + its line. 26 of the 120 recorded mistakes are still answered otherwise + (#229). + - The Requests feed shows a query's `resource` as recorded (#208). + - Two ways to stop the engine are gone. Functions that call each other + from the depths of long expressions overflowed the stack that evaluated + them (#228): rules are now evaluated on 32 MiB stacks, more than three + times what the deepest ruleset both limits allow needs. A source of + thousands of nested brackets or match blocks overflowed the parser + (#231): it now stops at 240 levels with the same refusal, and refuses + match blocks nested more than 128 deep. +- **CLI, Functions and the suite.** + - `firenook init` writes, prints and runs `--keep-data` only for a project + that runs Firestore, Auth and Storage, which saved data holds together; + the launcher refuses the flag before the engine starts otherwise, and + says what to add (#187). + - A Functions save that does not load prints + `Failed to load function definition from source: โ€ฆ` in the plain output, + as the first load always did (#188). + - `functions:invoke` sends a scheduled function its schedule event without + `--event-data` (#189). + - `accounts:signUp` keeps an empty `mfaInfo` list, as the official one does + (#209). + - The hub's `/emulators` and the UI's `/api/config` list the emulators as + firebase-tools does. The logging emulator runs whether or not the UI + does, and when 4500 is taken and neither `--logging-port` nor + `emulators.logging.port` chose it, it starts on the next free port with + a warning, as firebase-tools does (#210). + - The Logs feed files `Watching "" for Cloud Functions...` without a + label, and gains `Using node@ from host.` on each load, as the + official logger does (#211). +- Dependencies: `notify` 8.2.2. Cargo now leaves out crate versions published + less than a week ago when it picks new ones, and Dependabot waits the same + week. +- No data format changed: nothing in how Firestore, Auth, Storage or an + export is saved changed since 0.2.3, so 0.2.4 opens what 0.2.3 saved as it + is, and 0.2.3 opens what 0.2.4 saves. The one port that can move is the + logging emulator's, as above. +- Published straight to `latest`, as 0.2.3 was. + # 0.2.3 โ€” the Indexes page, three reported bugs fixed, and a container image - Pin the engine to `2294132253f03395b0d9bafe391d35075e928112`, main after diff --git a/src/data/engine/README.md b/src/data/engine/README.md index 3e571a5..8d86f07 100644 --- a/src/data/engine/README.md +++ b/src/data/engine/README.md @@ -1,7 +1,7 @@ # From the engine repository Copied from github.com/firenook-dev/firenook at the release the site -describes (tag `npm-v0.2.3`). Copy them again for a new release. +describes (tag `npm-v0.2.4`). Copy them again for a new release. - `CHANGELOG.md`: `packaging/CHANGELOG.md`, which /changelog and its feed are drawn from. Links into the former repository (archived, no longer diff --git a/src/data/mcp-tools.json b/src/data/mcp-tools.json index 5878216..57f7f96 100644 --- a/src/data/mcp-tools.json +++ b/src/data/mcp-tools.json @@ -1,5 +1,5 @@ { - "version": "0.2.3", + "version": "0.2.4", "tools": [ { "name": "firenook_status", diff --git a/src/lib/changelog.ts b/src/lib/changelog.ts index 2e422da..55383e5 100644 --- a/src/lib/changelog.ts +++ b/src/lib/changelog.ts @@ -8,6 +8,7 @@ import type { Panel } from './panels'; /** When each version reached npm (`npm view firenook time`; the 0.1 line was @fireside-dev/cli). */ const published: Record = { + '0.2.4': '2026-11-13T08:45:09Z', '0.2.3': '2026-11-12T06:01:06Z', '0.2.2': '2026-11-11T00:27:36Z', '0.2.1': '2026-11-04T21:35:11Z', diff --git a/src/lib/compatibility.ts b/src/lib/compatibility.ts index 9557a22..0470bb8 100644 --- a/src/lib/compatibility.ts +++ b/src/lib/compatibility.ts @@ -15,7 +15,7 @@ export interface Surface { differs?: string[]; } -export const record = 'https://github.com/firenook-dev/firenook/blob/npm-v0.2.3/COMPATIBILITY.md'; +export const record = 'https://github.com/firenook-dev/firenook/blob/npm-v0.2.4/COMPATIBILITY.md'; export const surfaces: Surface[] = [ { @@ -232,26 +232,11 @@ export const platforms = { * the engine repository. */ export const knownIssues: { area: string; text: string; href: string }[] = [ - { - area: 'init', - text: 'The emulators script that init writes starts with `--keep-data`, which needs Firestore, Auth and Storage together, so a project made without Auth or Storage does not start with it.', - href: '/docs/get-started/new-project', - }, - { - area: 'Cloud Functions', - text: 'A save that stops a codebase loading is shown on the terminal screen only: plain output and the log say nothing, and the code loaded before keeps answering.', - href: '/docs/functions/debugging', - }, { area: 'Cloud Functions', text: 'A function you remove, rename or move to another region keeps its old route until a restart, and a call there fails.', href: '/docs/services/functions', }, - { - area: 'functions:invoke', - text: 'A scheduled function answers 404 unless you pass `--event-data \'{}\'`.', - href: '/docs/functions/scheduled', - }, ]; /** diff --git a/src/lib/pages.ts b/src/lib/pages.ts index 78bdbf6..5a94bb9 100644 --- a/src/lib/pages.ts +++ b/src/lib/pages.ts @@ -52,7 +52,7 @@ export const pages = { '/compatibility': { title: 'Compatibility: what each emulator covers ยท Firenook', description: - 'What Firenookโ€™s Firestore, Auth, Storage, Functions, Extensions, Pub/Sub, Cloud Tasks and Eventarc emulators cover in 0.2.3, and what they do not.', + 'What Firenookโ€™s Firestore, Auth, Storage, Functions, Extensions, Pub/Sub, Cloud Tasks and Eventarc emulators cover in 0.2.4, and what they do not.', card: { title: 'What each emulator covers', subtitle: 'Service by service, what Firenook does in this release, what it does not, and where it differs from the official emulator.' }, crumb: 'Compatibility', }, diff --git a/src/lib/site.ts b/src/lib/site.ts index 52ed36e..0e4d3b0 100644 --- a/src/lib/site.ts +++ b/src/lib/site.ts @@ -13,12 +13,12 @@ export const site = { npm: 'https://www.npmjs.com/package/firenook', license: 'https://github.com/firenook-dev/firenook/blob/main/LICENSE', /** The release the site describes. The recordings name the release they are from. */ - version: '0.2.3', + version: '0.2.4', install: 'npm install --save-dev firenook', /** The release the site describes, as its changelog names it. */ release: { - title: 'Sign-in from any address, and a sign-in page in the consoleโ€™s look', - url: '/changelog/0.2.3', + title: 'All but 26 recorded answers replayed, 18 bugs fixed, and deep Security Rules no longer stop the engine', + url: '/changelog/0.2.4', }, requirements: 'Node 22, 24 or 26 on macOS, Linux with glibc 2.28 or newer, or Windows x64', } as const; diff --git a/src/pages/changelog.astro b/src/pages/changelog.astro index 572e354..3118f0c 100644 --- a/src/pages/changelog.astro +++ b/src/pages/changelog.astro @@ -91,7 +91,7 @@ const schema = graph(

- Every multiple is rounded down. Each figure is from the releaseโ€™s notes, and for {latest.version} from{' '} + Every multiple is rounded down. Each figure is from the releaseโ€™s notes, and for 0.2.0 from{' '} its benchmark record. Against the official emulator:{' '} the benchmarks.

@@ -104,7 +104,7 @@ const schema = graph(

Every release

{releases.length} releases since the first preview on {day.format(first.date)}. The previews came first; { - releases.find((release) => release.stable)?.version + releases.findLast((release) => release.stable)?.version } is the first release for public use.