summaryrefslogtreecommitdiff
path: root/StoneIsland/platforms/ios/Pods/FirebaseAuth
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/platforms/ios/Pods/FirebaseAuth')
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/CHANGELOG.md259
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/README.md17
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRActionCodeSettings.m45
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth.m2247
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult.m83
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h46
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.h63
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.m46
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h31
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.m30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthOperationType.h47
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.m56
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSettings.m33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult.m166
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult_Internal.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth_Internal.h147
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailAuthProvider.m41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h61
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.m92
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential.m46
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthProvider.m66
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.m72
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthProvider.m40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h79
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.m92
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthProvider.m92
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.h41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.m70
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthProvider.m40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.h38
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.m77
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthProvider.m41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential.m130
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h78
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthProvider.m400
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential.m107
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h73
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthProvider.m716
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.h48
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.m74
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthProvider.m40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h125
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.m96
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.h620
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.m1409
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h57
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h48
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.m35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h71
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.m110
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.h88
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.m97
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.h61
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.m35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.m69
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.h30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.m29
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h66
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.m74
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.h54
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.m37
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.h53
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.m49
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h158
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.m117
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h178
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.m288
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.m35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.m40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.m40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.h55
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.m60
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.h52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.m32
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.h113
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.m163
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.m73
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h64
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.m84
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h32
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.m35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h151
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.m179
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h98
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.m64
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h91
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.m80
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h64
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.m40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.h72
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.m90
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.h44
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.m35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h118
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.m177
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h214
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.m100
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.h55
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.m62
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.h38
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.m34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h58
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.m59
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.m36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h81
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.m95
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h75
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.m52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h90
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.m133
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h64
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.m43
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.m55
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.h30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.m30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.m52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.h29
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.m34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.h37
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.m51
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.h30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.m28
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.m56
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.h28
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.m32
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.h34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.m52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.h29
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.m32
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.m43
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h31
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.m46
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h27
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.m33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.m74
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h27
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.m33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/FirebaseAuthVersion.m25
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor+Internal.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor.m195
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion+Internal.h33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion.m29
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorConstants.m26
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo+Internal.h37
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo.m74
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver+Internal.h34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver.m101
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession.m52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion.m43
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorGenerator.m36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo+Internal.h30
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo.m41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRActionCodeSettings.h89
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAdditionalUserInfo.h57
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuth.h882
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthAPNSTokenType.h45
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthCredential.h41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthDataResult.h57
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthErrors.h421
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthSettings.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthTokenResult.h69
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthUIDelegate.h59
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIREmailAuthProvider.h70
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFacebookAuthProvider.h54
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFederatedAuthProvider.h55
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGameCenterAuthProvider.h62
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGitHubAuthProvider.h54
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGoogleAuthProvider.h56
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactor.h89
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorAssertion.h40
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h54
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorResolver.h60
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorSession.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthCredential.h53
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthProvider.h124
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthCredential.h41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthProvider.h141
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h37
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorGenerator.h47
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorInfo.h42
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRTwitterAuthProvider.h54
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUser.h557
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserInfo.h60
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserMetadata.h45
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuth.h54
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuthVersion.h27
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h99
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.m323
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.m74
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h63
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.m57
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.h83
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.m250
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h52
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.m64
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h90
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.m175
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.h76
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.m188
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.h99
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.m133
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.h99
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.m208
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo.m97
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo_Internal.h46
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser.m1604
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.h60
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.m131
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata.m64
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata_Internal.h37
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser_Internal.h107
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.h47
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.m126
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h585
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.m1368
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.m41
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthInternalErrors.h530
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h69
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.m201
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h102
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.m205
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.h44
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.m104
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.h78
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.m118
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.h31
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.m33
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRAppInternal.h173
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponent.h91
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentContainer.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentType.h34
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h35
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRDependency.h45
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrorCode.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrors.h24
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h39
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLibrary.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLogger.h156
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIROptionsInternal.h119
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FirebaseCoreInternal.h31
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h111
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h50
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h47
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h49
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainStorage.h79
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainUtils.h61
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULSecureCoding.h36
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h73
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/Interop/Auth/Public/FIRAuthInterop.h44
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/LICENSE202
-rw-r--r--StoneIsland/platforms/ios/Pods/FirebaseAuth/README.md298
271 files changed, 29648 insertions, 0 deletions
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/CHANGELOG.md b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/CHANGELOG.md
new file mode 100644
index 00000000..5674290a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/CHANGELOG.md
@@ -0,0 +1,259 @@
+# v6.7.1
+- [fixed] Fixed a multithreaded memory access issue on iOS (#5979).
+
+# v6.7.0
+- [changed] Functionally neutral source reorganization for preliminary Swift Package Manager support. (#5856)
+
+# v6.5.3
+- [changed] Remove unused mfa request field "mfa_provider" (#5397)
+- [fixed] Suppress deprecation warnings when targeting iOS versions up to iOS 13. (#5437)
+
+# v6.5.2
+- [fixed] Handle calls to `useUserAccessGroup` soon after configure. (#4175)
+
+# v6.5.1
+- [changed] File structure changes. No functional change.
+- [changed] Code formatting changes.
+
+# v6.5.0
+- [feature] Added support of Multi-factor Authentication. (#4823)
+
+# v6.4.1
+- [fixed] Added support of UISceneDelegate for URL redirect. (#4380)
+- [fixed] Fixed rawNonce in encoder. (#4337)
+
+# v6.4.0
+- [feature] Added support for Sign-in with Apple. (#4183)
+
+# v6.3.1
+- [fixed] Removed usage of a deprecated property on iOS 13. (#4066)
+
+# v6.3.0
+- [added] Added methods allowing developers to link and reauthenticate with federated providers. (#3971)
+
+# v6.2.3
+- [fixed] Make sure the first valid auth domain is retrieved. (#3493)
+- [fixed] Add assertion for Facebook generic IDP flow. (#3208)
+- [fixed] Build for Catalyst. (#3549)
+
+# v6.2.2
+- [fixed] Fixed an issue where unlinking an email auth provider raised an incorrect error stating the account was not linked to an email auth provider. (#3405)
+- [changed] Renamed internal Keychain classes. (#3473)
+
+# v6.2.1
+- [added] Add new client error MISSING_CLIENT_IDENTIFIER. (#3341)
+
+# v6.2.0
+- [feature] Expose `secret` of OAuth credential in public header. (#3089)
+- [fixed] Fix a keychain issue where API key is incorrectly set. (#3239)
+
+# v6.1.2
+- [fixed] Fix line limits and linter warnings in public documentation. (#3139)
+
+# v6.1.1
+- [fixed] Fix an issue where a user can't link with email provider by email link. (#3030)
+
+# v6.1.0
+- [added] Add support of web.app as an auth domain. (#2959)
+- [fixed] Fix an issue where the return type of `getStoredUserForAccessGroup:error:` is nonnull. (#2879)
+
+# v6.0.0
+- [added] Add support of single sign on. (#2684)
+- [deprecated] Deprecate `reauthenticateAndRetrieveDataWithCredential:completion:`, `signInAndRetrieveDataWithCredential:completion:`, `linkAndRetrieveDataWithCredential:completion:`, `fetchProvidersForEmail:completion:`. (#2723, #2756)
+- [added] Returned oauth secret token in Generic IDP sign-in for Twitter. (#2663)
+- [removed] Remove pendingToken from public API. (#2676)
+- [changed] `GULAppDelegateSwizzler` is used for the app delegate swizzling. (#2591)
+
+# v5.4.2
+- [added] Support new error code ERROR_INVALID_PROVIDER_ID. (#2629)
+
+# v5.4.1
+- [deprecated] Deprecate Microsoft and Yahoo OAuth Provider ID (#2517)
+- [fixed] Fix an issue where an exception was thrown when linking OAuth credentials. (#2521)
+- [fixed] Fix an issue where a wrong error was thrown when handling error with
+ FEDERATED_USER_ID_ALREADY_LINKED. (#2522)
+
+# v5.4.0
+- [added] Add support of Generic IDP (#2405).
+
+# v5.3.0
+- [changed] Use the new registerInternalLibrary API to register with FirebaseCore. (#2137)
+
+# v5.2.0
+- [added] Add support of Game Center sign in (#2127).
+
+# v5.1.0
+- [added] Add support of custom FDL domain link (#2121).
+
+# v5.0.5
+- [changed] Restore SafariServices framework dependency (#2002).
+
+# v5.0.4
+- [fixed] Fix analyzer issues (#1740).
+
+# v5.0.3
+- [added] Add `FIRAuthErrorCodeMalformedJWT`, which is raised on JWT token parsing.
+ failures during auth operations (#1436).
+- [changed] Migrate to use FirebaseAuthInterop interfaces to access FirebaseAuth (#1501).
+
+# v5.0.2
+- [fixed] Fix an issue where JWT date timestamps weren't parsed correctly. (#1319)
+- [fixed] Fix an issue where anonymous accounts weren't correctly promoted to
+ non-anonymous when linked with passwordless email auth accounts. (#1383)
+- [fixed] Fix an exception from using an invalidated NSURLSession. (#1261)
+- [fixed] Fix a data race issue caught by the sanitizer. (#1446)
+
+# v5.0.1
+- [fixed] Restore 4.x level of support for extensions (#1357).
+
+# v5.0.0
+- [added] Adds APIs for phone Auth testing to bypass the verification flow (#1192).
+- [feature] Changes the callback block signature for sign in and create user methods
+ to provide an AuthDataResult that includes the user and user info (#1123, #1186).
+- [changed] Removes GoogleToolboxForMac dependency (#1175).
+- [removed] Removes miscellaneous deprecated APIs (#1188, #1200).
+
+# v4.6.1
+- [fixed] Fixes crash which occurred when certain Firebase IDTokens were being parsed (#1076).
+
+# v4.6.0
+- [added] Adds `getIDTokenResultWithCompletion:` and `getIDTokenResultForcingRefresh:completion:` APIs which
+ call back with an AuthTokenResult object. The Auth token result object contains the ID token JWT string and other properties associated with the token including the decoded available payload claims (#1004).
+
+- [added] Adds the `updateCurrentUser:completion:` API which sets the currentUser on the calling Auth instance to the provided user object (#1018).
+
+- [added] Adds client-side validation to prevent setting `handleCodeInApp` to false when performing
+ email-link authentication. If `handleCodeInApp` is set to false an invalid argument exception
+ is thrown (#931).
+
+- [added] Adds support for passing the deep link (which is embedded in the sign-in link sent via email) to the
+ `signInWithEmail:link:completion:` and `isSignInWithEmailLink:` methods during an
+ email/link sign-in flow (#1023).
+
+# v4.5.0
+- [added] Adds new API which provides a way to determine the sign-in methods associated with an
+ email address.
+- [added] Adds new API which allows authentication using only an email link (Passwordless Authentication
+ with email link).
+
+# v4.4.4
+- [fixed] Addresses CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF warnings that surface in newer versions of
+ Xcode and CocoaPods.
+- [fixed] Improves FIRUser documentation with clear message explaining when Firebase Auth attempts to validate
+ users and what happens when an invalidated user is detected (#694) .
+
+# v4.4.3
+- [added] Adds an explicit dependency on CoreGraphics from Firebase Auth.
+
+# v4.4.2
+- [fixed] Fixes bug where the FIRAuthResult object returned following a Phone Number authentication
+ always contained a nil FIRAdditionalUserInfo object. Now the FIRAdditionalUserInfo object is
+ never nil and its newUser field is populated correctly.
+
+# v4.4.0
+- [fixed] Adds new APIs which return an AuthDataResult object after successfully creating an
+ Email/Password user, signing in anonymously, signing in with Email/Password and signing
+ in with Custom Token. The AuthDataResult object contains the new user and additional
+ information pertaining to the new user.
+
+# v4.3.2
+- [fixed] Improves error handling for the phone number sign-in reCAPTCHA flow.
+- [fixed] Improves error handling for phone number linking flow.
+- [fixed] Fixes issue where after linking an anonymous user to a phone number the user remained
+ anonymous.
+
+# v4.3.1
+- [changed] Internal clean up.
+
+# v4.3.0
+- [added] Provides account creation and last sign-in dates as metadata to the user
+ object.
+- [added] Returns more descriptive errors for some error cases of the phone number
+ sign-in reCAPTCHA flow.
+- [fixed] Fixes an issue that invalid users were not automatically signed out earlier.
+- [fixed] Fixes an issue that ID token listeners were not fired in some cases.
+
+# v4.2.1
+- [fixed] Fixes a threading issue in phone number auth that completion block was not
+ executed on the main thread in some error cases.
+
+# v4.2.0
+- [added] Adds new phone number verification API which makes use of an intelligent reCAPTCHA to verify the application.
+
+# v4.1.1
+- [changed] Improves some method documentation in headers.
+
+# v4.1.0
+- [added] Allows the app to handle continue URL natively, e.g., from password reset
+ email.
+- [added] Allows the app to set language code, e.g., for sending password reset email.
+- [fixed] Fixes an issue that user's phone number did not persist on client.
+- [fixed] Fixes an issue that recover email action code type was reported as unknown.
+- [feature] Improves app start-up time by moving initialization off from the main
+ thread.
+- [fixed] Better reports missing email error when creating a new password user.
+- [fixed] Changes console message logging levels to be more consistent with other
+ Firebase products on the iOS platform.
+
+# 2017-05-17 -- v4.0.0
+- [added] Adds Phone Number Authentication.
+- [added] Adds support for generic OAuth2 identity providers.
+- [added] Adds methods that return additional user data from identity providers if
+ available when authenticating users.
+- [added] Improves session management by automatically refreshing tokens if possible
+ and signing out users if the session is detected invalidated, for example,
+ after the user changed password or deleted account from another device.
+- [fixed] Fixes an issue that reauthentication creates new user account if the user
+ credential is valid but does not match the currently signed in user.
+- [fixed] Fixes an issue that the "password" provider is not immediately listed on the
+ client side after adding a password to an account.
+- [changed] Changes factory methods to return non-null FIRAuth instances or raises an
+ exception, instead of returning nullable instances.
+- [changed] Changes auth state change listener to only be triggered when the user changes.
+- [added] Adds a new listener which is triggered whenever the ID token is changed.
+- [changed] Switches ERROR_EMAIL_ALREADY_IN_USE to
+ ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL when the email used in the
+ signInWithCredential: call is already in use by another account.
+- [deprecated] Deprecates FIREmailPasswordAuthProvider in favor of FIREmailAuthProvider.
+- [deprecated] Deprecates getTokenWithCompletion in favor of getIDTokenWithCompletion on
+ FIRUser.
+- [fixed] Changes Swift API names to better align with Swift convention.
+
+# 2017-02-06 -- v3.1.1
+- [added] Allows handling of additional errors when sending OOB action emails. The
+ server can respond with the following new error messages:
+ INVALID_MESSAGE_PAYLOAD,INVALID_SENDER and INVALID_RECIPIENT_EMAIL.
+- [fixed] Removes incorrect reference to FIRAuthErrorCodeCredentialTooOld in FIRUser.h.
+- [added] Provides additional error information from server if available.
+
+# 2016-12-13 -- v3.1.0
+- [added] Adds FIRAuth methods that enable the app to follow up with user actions
+ delivered by email, such as verifying email address or reset password.
+- [fixed] No longer applies the keychain workaround introduced in v3.0.5 on iOS 10.2
+ simulator or above since the issue has been fixed.
+- [fixed] Fixes nullability compilation warnings when used in Swift.
+- [fixed] Better reports missing password error.
+
+# 2016-10-24 -- v3.0.6
+- [changed] Switches to depend on open sourced GoogleToolboxForMac and GTMSessionFetcher.
+- [fixed] Improves logging of keychain error when initializing.
+
+# 2016-09-14 -- v3.0.5
+- [fixed] Works around a keychain issue in iOS 10 simulator.
+- [fixed] Reports the correct error for invalid email when signing in with email and
+ password.
+
+# 2016-07-18 -- v3.0.4
+- [fixed] Fixes a race condition bug that could crash the app with an exception from
+ NSURLSession on iOS 9.
+
+# 2016-06-20 -- v3.0.3
+- [added] Adds documentation for all possible errors returned by each method.
+- [fixed] Improves error handling and messages for a variety of error conditions.
+- [fixed] Whether or not an user is considered anonymous is now consistent with other
+ platforms.
+- [changed] A saved signed in user is now siloed between different Firebase projects
+ within the same app.
+
+# 2016-05-18 -- v3.0.2
+- Initial public release.
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/README.md b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/README.md
new file mode 100644
index 00000000..f6e123e3
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/README.md
@@ -0,0 +1,17 @@
+# Firebase Auth for iOS
+
+Firebase Auth enables apps to easily support multiple authentication options
+for their end users.
+
+Please visit [our developer site](https://firebase.google.com/docs/auth/) for
+integration instructions, documentation, support information, and terms of
+service.
+
+# Firebase Auth Development
+
+Example/Auth contains a set of samples and tests that integrate with
+FirebaseAuth.
+
+The unit tests run without any additional configuration along with the rest of
+Firebase. See [Example/Auth/README.md](../../Example/Auth/README.md) for
+information about setting up, running, and testing the samples.
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRActionCodeSettings.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRActionCodeSettings.m
new file mode 100644
index 00000000..2d782308
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRActionCodeSettings.m
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRActionCodeSettings.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRActionCodeSettings
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
+ }
+ return self;
+}
+
+- (void)setIOSBundleID:(NSString *)iOSBundleID {
+ _iOSBundleID = [iOSBundleID copy];
+}
+
+- (void)setAndroidPackageName:(NSString *)androidPackageName
+ installIfNotAvailable:(BOOL)installIfNotAvailable
+ minimumVersion:(nullable NSString *)minimumVersion {
+ _androidPackageName = [androidPackageName copy];
+ _androidInstallIfNotAvailable = installIfNotAvailable;
+ _androidMinimumVersion = [minimumVersion copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth.m
new file mode 100644
index 00000000..25aa09c6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth.m
@@ -0,0 +1,2247 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+
+#if __has_include(<UIKit/UIKit.h>)
+#import <UIKit/UIKit.h>
+#endif
+
+#import "FirebaseAuth/Sources/Public/FirebaseAuth.h"
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+#import "GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h"
+#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h"
+#import "GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuthDispatcher.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuthOperationType.h"
+#import "FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h"
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h"
+#import "FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h"
+#import "FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.h"
+#import "FirebaseAuth/Sources/User/FIRAdditionalUserInfo_Internal.h"
+#import "FirebaseAuth/Sources/User/FIRUser_Internal.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - Constants
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+const NSNotificationName FIRAuthStateDidChangeNotification = @"FIRAuthStateDidChangeNotification";
+#else
+NSString *const FIRAuthStateDidChangeNotification = @"FIRAuthStateDidChangeNotification";
+#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+
+/** @var kMaxWaitTimeForBackoff
+ @brief The maximum wait time before attempting to retry auto refreshing tokens after a failed
+ attempt.
+ @remarks This is the upper limit (in seconds) of the exponential backoff used for retrying
+ token refresh.
+ */
+static NSTimeInterval kMaxWaitTimeForBackoff = 16 * 60;
+
+/** @var kTokenRefreshHeadStart
+ @brief The amount of time before the token expires that proactive refresh should be attempted.
+ */
+NSTimeInterval kTokenRefreshHeadStart = 5 * 60;
+
+/** @var kUserKey
+ @brief Key of user stored in the keychain. Prefixed with a Firebase app name.
+ */
+static NSString *const kUserKey = @"%@_firebase_user";
+
+/** @var kMissingEmailInvalidParameterExceptionReason
+ @brief The reason for @c invalidParameterException when the email used to initiate password
+ reset is nil.
+ */
+static NSString *const kMissingEmailInvalidParameterExceptionReason =
+ @"The email used to initiate password reset cannot be nil.";
+
+/** @var kHandleCodeInAppFalseExceptionReason
+ @brief The reason for @c invalidParameterException when the handleCodeInApp parameter is false
+ on the ActionCodeSettings object used to send the link for Email-link Authentication.
+ */
+static NSString *const kHandleCodeInAppFalseExceptionReason =
+ @"You must set handleCodeInApp in your ActionCodeSettings to true for Email-link "
+ "Authentication.";
+
+static NSString *const kInvalidEmailSignInLinkExceptionMessage =
+ @"The link provided is not valid for email/link sign-in. Please check the link by calling "
+ "isSignInWithEmailLink:link: on Auth before attempting to use it for email/link sign-in.";
+
+/** @var kPasswordResetRequestType
+ @brief The action code type value for resetting password in the check action code response.
+ */
+static NSString *const kPasswordResetRequestType = @"PASSWORD_RESET";
+
+/** @var kVerifyEmailRequestType
+ @brief The action code type value for verifying email in the check action code response.
+ */
+static NSString *const kVerifyEmailRequestType = @"VERIFY_EMAIL";
+
+/** @var kRecoverEmailRequestType
+ @brief The action code type value for recovering email in the check action code response.
+ */
+static NSString *const kRecoverEmailRequestType = @"RECOVER_EMAIL";
+
+/** @var kEmailLinkSignInRequestType
+ @brief The action code type value for an email sign-in link in the check action code response.
+*/
+static NSString *const kEmailLinkSignInRequestType = @"EMAIL_SIGNIN";
+
+/** @var kVerifyAndChangeEmailRequestType
+ @brief The action code type value for verifing and changing email in the check action code
+ response.
+ */
+static NSString *const kVerifyAndChangeEmailRequestType = @"VERIFY_AND_CHANGE_EMAIL";
+
+/** @var kRevertSecondFactorAdditionRequestType
+ @brief The action code type value for reverting second factor addition in the check action code
+ response.
+ */
+static NSString *const kRevertSecondFactorAdditionRequestType = @"REVERT_SECOND_FACTOR_ADDITION";
+
+/** @var kMissingPasswordReason
+ @brief The reason why the @c FIRAuthErrorCodeWeakPassword error is thrown.
+ @remarks This error message will be localized in the future.
+ */
+static NSString *const kMissingPasswordReason = @"Missing Password";
+
+/** @var gKeychainServiceNameForAppName
+ @brief A map from Firebase app name to keychain service names.
+ @remarks This map is needed for looking up the keychain service name after the FIRApp instance
+ is deleted, to remove the associated keychain item. Accessing should occur within a
+ @syncronized([FIRAuth class]) context.
+ */
+static NSMutableDictionary *gKeychainServiceNameForAppName;
+
+#pragma mark - FIRActionCodeInfo
+
+@interface FIRActionCodeInfo ()
+
+/**
+ @brief The operation being performed.
+ */
+@property(nonatomic, readwrite) FIRActionCodeOperation operation;
+
+/** @property email
+ @brief The email address to which the code was sent. The new email address in the case of
+ FIRActionCodeOperationRecoverEmail.
+ */
+@property(nonatomic, nullable, readwrite, copy) NSString *email;
+
+/** @property previousEmail
+ @brief The current email address in the case of FIRActionCodeOperationRecoverEmail.
+ */
+@property(nonatomic, nullable, readwrite, copy) NSString *previousEmail;
+
+#if TARGET_OS_IOS
+/** @property multiFactorInfo
+ @brief The MultiFactorInfo object of the second factor to be reverted in case of
+ FIRActionCodeMultiFactorInfoKey.
+ */
+@property(nonatomic, nullable, readwrite) FIRMultiFactorInfo *multiFactorInfo;
+#endif
+
+@end
+
+@implementation FIRActionCodeInfo
+
+- (NSString *)dataForKey:(FIRActionDataKey)key {
+ switch (key) {
+ case FIRActionCodeEmailKey:
+ return self.email;
+ case FIRActionCodeFromEmailKey:
+ return self.previousEmail;
+ }
+}
+
+- (instancetype)initWithOperation:(FIRActionCodeOperation)operation
+ email:(NSString *)email
+ newEmail:(nullable NSString *)newEmail {
+ self = [super init];
+ if (self) {
+ _operation = operation;
+ if (newEmail) {
+ _email = [newEmail copy];
+ _previousEmail = [email copy];
+ } else {
+ _email = [email copy];
+ }
+ }
+ return self;
+}
+
+/** @fn actionCodeOperationForRequestType:
+ @brief Returns the corresponding operation type per provided request type string.
+ @param requestType Request type returned in in the server response.
+ @return The corresponding FIRActionCodeOperation for the supplied request type.
+ */
++ (FIRActionCodeOperation)actionCodeOperationForRequestType:(NSString *)requestType {
+ if ([requestType isEqualToString:kPasswordResetRequestType]) {
+ return FIRActionCodeOperationPasswordReset;
+ }
+ if ([requestType isEqualToString:kVerifyEmailRequestType]) {
+ return FIRActionCodeOperationVerifyEmail;
+ }
+ if ([requestType isEqualToString:kRecoverEmailRequestType]) {
+ return FIRActionCodeOperationRecoverEmail;
+ }
+ if ([requestType isEqualToString:kEmailLinkSignInRequestType]) {
+ return FIRActionCodeOperationEmailLink;
+ }
+ if ([requestType isEqualToString:kVerifyAndChangeEmailRequestType]) {
+ return FIRActionCodeOperationVerifyAndChangeEmail;
+ }
+ if ([requestType isEqualToString:kRevertSecondFactorAdditionRequestType]) {
+ return FIRActionCodeOperationRevertSecondFactorAddition;
+ }
+ return FIRActionCodeOperationUnknown;
+}
+
+@end
+
+#pragma mark - FIRActionCodeURL
+
+@implementation FIRActionCodeURL
+
+/** @fn FIRAuthParseURL:NSString
+ @brief Parses an incoming URL into all available query items.
+ @param urlString The url to be parsed.
+ @return A dictionary of available query items in the target URL.
+ */
++ (NSDictionary<NSString *, NSString *> *)parseURL:(NSString *)urlString {
+ NSString *linkURL = [NSURLComponents componentsWithString:urlString].query;
+ if (!linkURL) {
+ return @{};
+ }
+ NSArray<NSString *> *URLComponents = [linkURL componentsSeparatedByString:@"&"];
+ NSMutableDictionary<NSString *, NSString *> *queryItems =
+ [[NSMutableDictionary alloc] initWithCapacity:URLComponents.count];
+ for (NSString *component in URLComponents) {
+ NSRange equalRange = [component rangeOfString:@"="];
+ if (equalRange.location != NSNotFound) {
+ NSString *queryItemKey =
+ [[component substringToIndex:equalRange.location] stringByRemovingPercentEncoding];
+ NSString *queryItemValue =
+ [[component substringFromIndex:equalRange.location + 1] stringByRemovingPercentEncoding];
+ if (queryItemKey && queryItemValue) {
+ queryItems[queryItemKey] = queryItemValue;
+ }
+ }
+ }
+ return queryItems;
+}
+
++ (nullable instancetype)actionCodeURLWithLink:(NSString *)link {
+ NSDictionary<NSString *, NSString *> *queryItems = [FIRActionCodeURL parseURL:link];
+ if (!queryItems.count) {
+ NSURLComponents *urlComponents = [NSURLComponents componentsWithString:link];
+ queryItems = [FIRActionCodeURL parseURL:urlComponents.query];
+ }
+ if (!queryItems.count) {
+ return nil;
+ }
+ NSString *APIKey = queryItems[@"apiKey"];
+ NSString *actionCode = queryItems[@"oobCode"];
+ NSString *continueURLString = queryItems[@"continueUrl"];
+ NSString *languageCode = queryItems[@"languageCode"];
+ NSString *mode = queryItems[@"mode"];
+ NSString *tenantID = queryItems[@"tenantID"];
+ return [[FIRActionCodeURL alloc] initWithAPIKey:APIKey
+ actionCode:actionCode
+ continueURLString:continueURLString
+ languageCode:languageCode
+ mode:mode
+ tenantID:tenantID];
+}
+
+- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
+ actionCode:(NSString *)actionCode
+ continueURLString:(NSString *)continueURLString
+ languageCode:(NSString *)languageCode
+ mode:(NSString *)mode
+ tenantID:(NSString *)tenantID {
+ self = [super init];
+ if (self) {
+ _APIKey = APIKey;
+ _operation = [FIRActionCodeInfo actionCodeOperationForRequestType:mode];
+ _code = actionCode;
+ _continueURL = [NSURL URLWithString:continueURLString];
+ _languageCode = languageCode;
+ }
+ return self;
+}
+
+@end
+
+#pragma mark - FIRAuth
+
+#if TARGET_OS_IOS
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+@interface FIRAuth () <UIApplicationDelegate,
+ UISceneDelegate,
+ FIRLibrary,
+ FIRComponentLifecycleMaintainer>
+#else
+@interface FIRAuth () <UIApplicationDelegate, FIRLibrary, FIRComponentLifecycleMaintainer>
+#endif
+#else
+@interface FIRAuth () <FIRLibrary, FIRComponentLifecycleMaintainer>
+#endif
+
+/** @property firebaseAppId
+ @brief The Firebase app ID.
+ */
+@property(nonatomic, copy, readonly) NSString *firebaseAppId;
+
+/** @property additionalFrameworkMarker
+ @brief Additional framework marker that will be added as part of the header of every request.
+ */
+@property(nonatomic, copy, nullable) NSString *additionalFrameworkMarker;
+
+/** @property storedUserManager
+ @brief The stored user manager.
+ */
+@property(nonatomic, strong, nullable) FIRAuthStoredUserManager *storedUserManager;
+
+/** @fn initWithApp:
+ @brief Creates a @c FIRAuth instance associated with the provided @c FIRApp instance.
+ @param app The application to associate the auth instance with.
+ */
+- (instancetype)initWithApp:(FIRApp *)app;
+
+@end
+
+@implementation FIRAuth {
+ /** @var _currentUser
+ @brief The current user.
+ */
+ FIRUser *_currentUser;
+
+ /** @var _firebaseAppName
+ @brief The Firebase app name.
+ */
+ NSString *_firebaseAppName;
+
+ /** @var _listenerHandles
+ @brief Handles returned from @c NSNotificationCenter for blocks which are "auth state did
+ change" notification listeners.
+ @remarks Mutations should occur within a @syncronized(self) context.
+ */
+ NSMutableArray<FIRAuthStateDidChangeListenerHandle> *_listenerHandles;
+
+ /** @var _keychainServices
+ @brief The keychain service.
+ */
+ FIRAuthKeychainServices *_keychainServices;
+
+ /** @var _lastNotifiedUserToken
+ @brief The user access (ID) token used last time for posting auth state changed notification.
+ */
+ NSString *_lastNotifiedUserToken;
+
+ /** @var _autoRefreshTokens
+ @brief This flag denotes whether or not tokens should be automatically refreshed.
+ @remarks Will only be set to @YES if the another Firebase service is included (additionally to
+ Firebase Auth).
+ */
+ BOOL _autoRefreshTokens;
+
+ /** @var _autoRefreshScheduled
+ @brief Whether or not token auto-refresh is currently scheduled.
+ */
+ BOOL _autoRefreshScheduled;
+
+ /** @var _isAppInBackground
+ @brief A flag that is set to YES if the app is put in the background and no when the app is
+ returned to the foreground.
+ */
+ BOOL _isAppInBackground;
+
+ /** @var _applicationDidBecomeActiveObserver
+ @brief An opaque object to act as the observer for UIApplicationDidBecomeActiveNotification.
+ */
+ id<NSObject> _applicationDidBecomeActiveObserver;
+
+ /** @var _applicationDidBecomeActiveObserver
+ @brief An opaque object to act as the observer for
+ UIApplicationDidEnterBackgroundNotification.
+ */
+ id<NSObject> _applicationDidEnterBackgroundObserver;
+}
+
++ (void)load {
+ [FIRApp registerInternalLibrary:(Class<FIRLibrary>)self
+ withName:@"fire-auth"
+ withVersion:[NSString stringWithUTF8String:FirebaseAuthVersionStr]];
+}
+
++ (void)initialize {
+ gKeychainServiceNameForAppName = [[NSMutableDictionary alloc] init];
+}
+
++ (FIRAuth *)auth {
+ FIRApp *defaultApp = [FIRApp defaultApp];
+ if (!defaultApp) {
+ [NSException raise:NSInternalInconsistencyException
+ format:@"The default FIRApp instance must be configured before the default FIRAuth"
+ @"instance can be initialized. One way to ensure that is to call "
+ @"`[FIRApp configure];` (`FirebaseApp.configure()` in Swift) in the App "
+ @"Delegate's `application:didFinishLaunchingWithOptions:` "
+ @"(`application(_:didFinishLaunchingWithOptions:)` in Swift)."];
+ }
+ return [self authWithApp:defaultApp];
+}
+
++ (FIRAuth *)authWithApp:(FIRApp *)app {
+ // Get the instance of Auth from the container, which will create or return the cached instance
+ // associated with this app.
+ id<FIRAuthInterop> auth = FIR_COMPONENT(FIRAuthInterop, app.container);
+ return (FIRAuth *)auth;
+}
+
+- (instancetype)initWithApp:(FIRApp *)app {
+ [FIRAuth setKeychainServiceNameForApp:app];
+ self = [self initWithAPIKey:app.options.APIKey appName:app.name];
+ if (self) {
+ _app = app;
+#if TARGET_OS_IOS
+ _authURLPresenter = [[FIRAuthURLPresenter alloc] init];
+#endif
+ }
+ return self;
+}
+
+- (nullable instancetype)initWithAPIKey:(NSString *)APIKey appName:(NSString *)appName {
+ self = [super init];
+ if (self) {
+ _listenerHandles = [NSMutableArray array];
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:APIKey];
+ _firebaseAppName = [appName copy];
+#if TARGET_OS_IOS
+ _settings = [[FIRAuthSettings alloc] init];
+ static Class applicationClass = nil;
+ // iOS App extensions should not call [UIApplication sharedApplication], even if UIApplication
+ // responds to it.
+ if (![GULAppEnvironmentUtil isAppExtension]) {
+ Class cls = NSClassFromString(@"UIApplication");
+ if (cls && [cls respondsToSelector:NSSelectorFromString(@"sharedApplication")]) {
+ applicationClass = cls;
+ }
+ }
+ UIApplication *application = [applicationClass sharedApplication];
+
+ [GULAppDelegateSwizzler proxyOriginalDelegateIncludingAPNSMethods];
+ [GULSceneDelegateSwizzler proxyOriginalSceneDelegate];
+#endif // TARGET_OS_IOS
+
+ // Continue with the rest of initialization in the work thread.
+ __weak FIRAuth *weakSelf = self;
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ // Load current user from Keychain.
+ FIRAuth *strongSelf = weakSelf;
+ if (!strongSelf) {
+ return;
+ }
+ NSString *keychainServiceName =
+ [FIRAuth keychainServiceNameForAppName:strongSelf->_firebaseAppName];
+ if (keychainServiceName) {
+ strongSelf->_keychainServices =
+ [[FIRAuthKeychainServices alloc] initWithService:keychainServiceName];
+ strongSelf.storedUserManager =
+ [[FIRAuthStoredUserManager alloc] initWithServiceName:keychainServiceName];
+ }
+
+ NSError *error;
+ NSString *storedUserAccessGroup =
+ [strongSelf.storedUserManager getStoredUserAccessGroupWithError:&error];
+ if (!error) {
+ if (!storedUserAccessGroup) {
+ FIRUser *user;
+ if ([strongSelf getUser:&user error:&error]) {
+ [strongSelf updateCurrentUser:user byForce:NO savingToDisk:NO error:&error];
+ self->_lastNotifiedUserToken = user.rawAccessToken;
+ } else {
+ FIRLogError(kFIRLoggerAuth, @"I-AUT000001",
+ @"Error loading saved user when starting up: %@", error);
+ }
+ } else {
+ [strongSelf internalUseUserAccessGroup:storedUserAccessGroup error:&error];
+ if (error) {
+ FIRLogError(kFIRLoggerAuth, @"I-AUT000001",
+ @"Error loading saved user when starting up: %@", error);
+ }
+ }
+ } else {
+ FIRLogError(kFIRLoggerAuth, @"I-AUT000001",
+ @"Error loading saved user when starting up: %@", error);
+ }
+
+#if TARGET_OS_IOS
+ // Initialize for phone number auth.
+ strongSelf->_tokenManager = [[FIRAuthAPNSTokenManager alloc] initWithApplication:application];
+
+ strongSelf->_appCredentialManager =
+ [[FIRAuthAppCredentialManager alloc] initWithKeychain:strongSelf->_keychainServices];
+
+ strongSelf->_notificationManager = [[FIRAuthNotificationManager alloc]
+ initWithApplication:application
+ appCredentialManager:strongSelf->_appCredentialManager];
+
+ [GULAppDelegateSwizzler registerAppDelegateInterceptor:strongSelf];
+#if ((TARGET_OS_IOS || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 130000))
+ if (@available(iOS 13, tvos 13, *)) {
+ [GULSceneDelegateSwizzler registerSceneDelegateInterceptor:strongSelf];
+ }
+#endif // ((TARGET_OS_IOS || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 130000))
+#endif // TARGET_OS_IOS
+ });
+ }
+ return self;
+}
+
+- (void)dealloc {
+ @synchronized(self) {
+ NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
+ while (_listenerHandles.count != 0) {
+ FIRAuthStateDidChangeListenerHandle handleToRemove = _listenerHandles.lastObject;
+ [defaultCenter removeObserver:handleToRemove];
+ [_listenerHandles removeLastObject];
+ }
+
+#if TARGET_OS_IOS
+ [defaultCenter removeObserver:_applicationDidBecomeActiveObserver
+ name:UIApplicationDidBecomeActiveNotification
+ object:nil];
+ [defaultCenter removeObserver:_applicationDidEnterBackgroundObserver
+ name:UIApplicationDidEnterBackgroundNotification
+ object:nil];
+#endif
+ }
+}
+
+#pragma mark - Public API
+
+- (nullable FIRUser *)currentUser {
+ __block FIRUser *result;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ result = self->_currentUser;
+ });
+ return result;
+}
+
+- (void)fetchProvidersForEmail:(NSString *)email
+ completion:(nullable FIRProviderQueryCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRCreateAuthURIRequest *request =
+ [[FIRCreateAuthURIRequest alloc] initWithIdentifier:email
+ continueURI:@"http://www.google.com/"
+ requestConfiguration:self->_requestConfiguration];
+ [FIRAuthBackend
+ createAuthURI:request
+ callback:^(FIRCreateAuthURIResponse *_Nullable response, NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(response.allProviders, error);
+ });
+ }
+ }];
+ });
+}
+
+- (void)signInWithProvider:(id<FIRFederatedAuthProvider>)provider
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthDataResultCallback)completion {
+#if TARGET_OS_IOS
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthDataResultCallback decoratedCallback =
+ [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion];
+ [provider getCredentialWithUIDelegate:UIDelegate
+ completion:^(FIRAuthCredential *_Nullable credential,
+ NSError *_Nullable error) {
+ if (error) {
+ decoratedCallback(nil, error);
+ return;
+ }
+ [self
+ internalSignInAndRetrieveDataWithCredential:credential
+ isReauthentication:NO
+ callback:decoratedCallback];
+ }];
+ });
+#endif // TARGET_OS_IOS
+}
+
+- (void)fetchSignInMethodsForEmail:(nonnull NSString *)email
+ completion:(nullable FIRSignInMethodQueryCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRCreateAuthURIRequest *request =
+ [[FIRCreateAuthURIRequest alloc] initWithIdentifier:email
+ continueURI:@"http://www.google.com/"
+ requestConfiguration:self->_requestConfiguration];
+ [FIRAuthBackend
+ createAuthURI:request
+ callback:^(FIRCreateAuthURIResponse *_Nullable response, NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(response.signinMethods, error);
+ });
+ }
+ }];
+ });
+}
+
+- (void)signInWithEmail:(NSString *)email
+ password:(NSString *)password
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthDataResultCallback decoratedCallback =
+ [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion];
+ [self internalSignInAndRetrieveDataWithEmail:email
+ password:password
+ completion:^(FIRAuthDataResult *_Nullable authResult,
+ NSError *_Nullable error) {
+ decoratedCallback(authResult, error);
+ }];
+ });
+}
+
+- (void)signInWithEmail:(NSString *)email
+ link:(NSString *)link
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthDataResultCallback decoratedCallback =
+ [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion];
+ FIREmailPasswordAuthCredential *credential =
+ [[FIREmailPasswordAuthCredential alloc] initWithEmail:email link:link];
+ [self internalSignInAndRetrieveDataWithCredential:credential
+ isReauthentication:NO
+ callback:^(FIRAuthDataResult *_Nullable authResult,
+ NSError *_Nullable error) {
+ decoratedCallback(authResult, error);
+ }];
+ });
+}
+
+/** @fn signInWithEmail:password:callback:
+ @brief Signs in using an email address and password.
+ @param email The user's email address.
+ @param password The user's password.
+ @param callback A block which is invoked when the sign in finishes (or is cancelled.) Invoked
+ asynchronously on the global auth work queue in the future.
+ @remarks This is the internal counterpart of this method, which uses a callback that does not
+ update the current user.
+ */
+- (void)signInWithEmail:(NSString *)email
+ password:(NSString *)password
+ callback:(FIRAuthResultCallback)callback {
+ FIRVerifyPasswordRequest *request =
+ [[FIRVerifyPasswordRequest alloc] initWithEmail:email
+ password:password
+ requestConfiguration:_requestConfiguration];
+
+ if (![request.password length]) {
+ callback(nil, [FIRAuthErrorUtils wrongPasswordErrorWithMessage:nil]);
+ return;
+ }
+ [FIRAuthBackend
+ verifyPassword:request
+ callback:^(FIRVerifyPasswordResponse *_Nullable response, NSError *_Nullable error) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ [self completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:callback];
+ }];
+}
+
+/** @fn internalSignInAndRetrieveDataWithEmail:password:callback:
+ @brief Signs in using an email address and password.
+ @param email The user's email address.
+ @param password The user's password.
+ @param completion A block which is invoked when the sign in finishes (or is cancelled.) Invoked
+ asynchronously on the global auth work queue in the future.
+ @remarks This is the internal counterpart of this method, which uses a callback that does not
+ update the current user.
+ */
+- (void)internalSignInAndRetrieveDataWithEmail:(NSString *)email
+ password:(NSString *)password
+ completion:(FIRAuthDataResultCallback)completion {
+ FIREmailPasswordAuthCredential *credentail =
+ [[FIREmailPasswordAuthCredential alloc] initWithEmail:email password:password];
+ [self internalSignInAndRetrieveDataWithCredential:credentail
+ isReauthentication:NO
+ callback:completion];
+}
+
+/** @fn signInAndRetrieveDataWithGameCenterCredential:callback:
+ @brief Signs in using a game center credential.
+ @param credential The Game Center Auth Credential used to sign in.
+ @param callback A block which is invoked when the sign in finished (or is cancelled). Invoked
+ asynchronously on the global auth work queue in the future.
+ */
+- (void)signInAndRetrieveDataWithGameCenterCredential:(FIRGameCenterAuthCredential *)credential
+ callback:(FIRAuthDataResultCallback)callback {
+ FIRSignInWithGameCenterRequest *request =
+ [[FIRSignInWithGameCenterRequest alloc] initWithPlayerID:credential.playerID
+ publicKeyURL:credential.publicKeyURL
+ signature:credential.signature
+ salt:credential.salt
+ timestamp:credential.timestamp
+ displayName:credential.displayName
+ requestConfiguration:_requestConfiguration];
+ [FIRAuthBackend
+ signInWithGameCenter:request
+ callback:^(FIRSignInWithGameCenterResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ if (callback) {
+ callback(nil, error);
+ }
+ return;
+ }
+
+ [self
+ completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (error && callback) {
+ callback(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [[FIRAdditionalUserInfo alloc]
+ initWithProviderID:
+ FIRGameCenterAuthProviderID
+ profile:nil
+ username:nil
+ isNewUser:response.isNewUser];
+ FIRAuthDataResult *result =
+ user ? [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:additionalUserInfo]
+ : nil;
+ if (callback) {
+ callback(result, error);
+ }
+ }];
+ }];
+}
+
+/** @fn internalSignInAndRetrieveDataWithEmail:link:completion:
+ @brief Signs in using an email and email sign-in link.
+ @param email The user's email address.
+ @param link The email sign-in link.
+ @param callback A block which is invoked when the sign in finishes (or is cancelled.) Invoked
+ asynchronously on the global auth work queue in the future.
+ */
+- (void)internalSignInAndRetrieveDataWithEmail:(nonnull NSString *)email
+ link:(nonnull NSString *)link
+ callback:(nullable FIRAuthDataResultCallback)callback {
+ if (![self isSignInWithEmailLink:link]) {
+ [FIRAuthExceptionUtils
+ raiseInvalidParameterExceptionWithReason:kInvalidEmailSignInLinkExceptionMessage];
+ return;
+ }
+ NSDictionary<NSString *, NSString *> *queryItems = [FIRAuthWebUtils parseURL:link];
+ if (![queryItems count]) {
+ NSURLComponents *urlComponents = [NSURLComponents componentsWithString:link];
+ queryItems = [FIRAuthWebUtils parseURL:urlComponents.query];
+ }
+ NSString *actionCode = queryItems[@"oobCode"];
+
+ FIREmailLinkSignInRequest *request =
+ [[FIREmailLinkSignInRequest alloc] initWithEmail:email
+ oobCode:actionCode
+ requestConfiguration:_requestConfiguration];
+
+ [FIRAuthBackend
+ emailLinkSignin:request
+ callback:^(FIREmailLinkSignInResponse *_Nullable response, NSError *_Nullable error) {
+ if (error) {
+ if (callback) {
+ callback(nil, error);
+ }
+ return;
+ }
+ [self completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (error && callback) {
+ callback(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [[FIRAdditionalUserInfo alloc]
+ initWithProviderID:FIREmailAuthProviderID
+ profile:nil
+ username:nil
+ isNewUser:response.isNewUser];
+ FIRAuthDataResult *result =
+ user ? [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:additionalUserInfo]
+ : nil;
+ if (callback) {
+ callback(result, error);
+ }
+ }];
+ }];
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (void)signInWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ [self signInAndRetrieveDataWithCredential:credential completion:completion];
+}
+#pragma clang diagnostic pop
+
+- (void)signInAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthDataResultCallback callback =
+ [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion];
+ [self internalSignInAndRetrieveDataWithCredential:credential
+ isReauthentication:NO
+ callback:callback];
+ });
+}
+
+- (void)internalSignInWithCredential:(FIRAuthCredential *)credential
+ callback:(FIRAuthResultCallback)callback {
+ [self internalSignInAndRetrieveDataWithCredential:credential
+ isReauthentication:NO
+ callback:^(FIRAuthDataResult *_Nullable authResult,
+ NSError *_Nullable error) {
+ callback(authResult.user, error);
+ }];
+}
+
+- (void)internalSignInAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ isReauthentication:(BOOL)isReauthentication
+ callback:(nullable FIRAuthDataResultCallback)callback {
+ if ([credential isKindOfClass:[FIREmailPasswordAuthCredential class]]) {
+ // Special case for email/password credentials
+ FIREmailPasswordAuthCredential *emailPasswordCredential =
+ (FIREmailPasswordAuthCredential *)credential;
+
+ if (emailPasswordCredential.link) {
+ // Email link sign in
+ [self internalSignInAndRetrieveDataWithEmail:emailPasswordCredential.email
+ link:emailPasswordCredential.link
+ callback:callback];
+ } else {
+ // Email password sign in
+ FIRAuthResultCallback completeEmailSignIn =
+ ^(FIRUser *_Nullable user, NSError *_Nullable error) {
+ if (callback) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [[FIRAdditionalUserInfo alloc] initWithProviderID:FIREmailAuthProviderID
+ profile:nil
+ username:nil
+ isNewUser:NO];
+ FIRAuthDataResult *result =
+ user ? [[FIRAuthDataResult alloc] initWithUser:user
+ additionalUserInfo:additionalUserInfo]
+ : nil;
+ callback(result, error);
+ }
+ };
+
+ [self signInWithEmail:emailPasswordCredential.email
+ password:emailPasswordCredential.password
+ callback:completeEmailSignIn];
+ }
+ return;
+ }
+
+ if ([credential isKindOfClass:[FIRGameCenterAuthCredential class]]) {
+ // Special case for Game Center credentials.
+ [self signInAndRetrieveDataWithGameCenterCredential:(FIRGameCenterAuthCredential *)credential
+ callback:callback];
+ return;
+ }
+
+#if TARGET_OS_IOS
+ if ([credential isKindOfClass:[FIRPhoneAuthCredential class]]) {
+ // Special case for phone auth credentials
+ FIRPhoneAuthCredential *phoneCredential = (FIRPhoneAuthCredential *)credential;
+ FIRAuthOperationType operation =
+ isReauthentication ? FIRAuthOperationTypeReauth : FIRAuthOperationTypeSignUpOrSignIn;
+ [self
+ signInWithPhoneCredential:phoneCredential
+ operation:operation
+ callback:^(FIRVerifyPhoneNumberResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (callback) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+
+ [self
+ completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (error && callback) {
+ callback(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [[FIRAdditionalUserInfo alloc]
+ initWithProviderID:
+ FIRPhoneAuthProviderID
+ profile:nil
+ username:nil
+ isNewUser:response
+ .isNewUser];
+ FIRAuthDataResult *result =
+ user ? [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:
+ additionalUserInfo]
+ : nil;
+ if (callback) {
+ callback(result, error);
+ }
+ }];
+ }
+ }];
+ return;
+ }
+#endif
+ FIRVerifyAssertionRequest *request =
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:credential.provider
+ requestConfiguration:_requestConfiguration];
+ request.autoCreate = !isReauthentication;
+ [credential prepareVerifyAssertionRequest:request];
+ [FIRAuthBackend
+ verifyAssertion:request
+ callback:^(FIRVerifyAssertionResponse *response, NSError *error) {
+ if (error) {
+ if (callback) {
+ callback(nil, error);
+ }
+ return;
+ }
+
+ if (response.needConfirmation) {
+ if (callback) {
+ NSString *email = response.email;
+ FIROAuthCredential *credential =
+ [[FIROAuthCredential alloc] initWithVerifyAssertionResponse:response];
+ callback(nil,
+ [FIRAuthErrorUtils
+ accountExistsWithDifferentCredentialErrorWithEmail:email
+ updatedCredential:credential]);
+ }
+ return;
+ }
+
+ if (!response.providerID.length) {
+ if (callback) {
+ callback(nil, [FIRAuthErrorUtils
+ unexpectedResponseWithDeserializedResponse:response]);
+ }
+ return;
+ }
+ [self
+ completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (callback) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [FIRAdditionalUserInfo
+ userInfoWithVerifyAssertionResponse:response];
+ FIROAuthCredential *updatedOAuthCredential =
+ [[FIROAuthCredential alloc]
+ initWithVerifyAssertionResponse:response];
+ FIRAuthDataResult *result =
+ user
+ ? [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:additionalUserInfo
+ credential:updatedOAuthCredential]
+ : nil;
+ callback(result, error);
+ }
+ }];
+ }];
+}
+
+- (void)signInAnonymouslyWithCompletion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthDataResultCallback decoratedCallback =
+ [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion];
+ if (self->_currentUser.anonymous) {
+ FIRAuthDataResult *result = [[FIRAuthDataResult alloc] initWithUser:self->_currentUser
+ additionalUserInfo:nil];
+ decoratedCallback(result, nil);
+ return;
+ }
+ [self internalSignInAnonymouslyWithCompletion:^(FIRSignUpNewUserResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ decoratedCallback(nil, error);
+ return;
+ }
+ [self completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:YES
+ callback:^(FIRUser *_Nullable user, NSError *_Nullable error) {
+ if (error) {
+ decoratedCallback(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [[FIRAdditionalUserInfo alloc] initWithProviderID:nil
+ profile:nil
+ username:nil
+ isNewUser:YES];
+ FIRAuthDataResult *authDataResult =
+ user ? [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:additionalUserInfo]
+ : nil;
+ decoratedCallback(authDataResult, error);
+ }];
+ }];
+ });
+}
+
+- (void)signInWithCustomToken:(NSString *)token
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthDataResultCallback decoratedCallback =
+ [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion];
+ [self internalSignInAndRetrieveDataWithCustomToken:token
+ completion:^(FIRAuthDataResult *_Nullable authResult,
+ NSError *_Nullable error) {
+ decoratedCallback(authResult, error);
+ }];
+ });
+}
+
+- (void)createUserWithEmail:(NSString *)email
+ password:(NSString *)password
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthDataResultCallback decoratedCallback =
+ [self signInFlowAuthDataResultCallbackByDecoratingCallback:completion];
+ [self internalCreateUserWithEmail:email
+ password:password
+ completion:^(FIRSignUpNewUserResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ decoratedCallback(nil, error);
+ return;
+ }
+ [self
+ completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (error) {
+ decoratedCallback(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [[FIRAdditionalUserInfo alloc]
+ initWithProviderID:
+ FIREmailAuthProviderID
+ profile:nil
+ username:nil
+ isNewUser:YES];
+ FIRAuthDataResult *authDataResult =
+ user ? [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:
+ additionalUserInfo]
+ : nil;
+ decoratedCallback(authDataResult, error);
+ }];
+ }];
+ });
+}
+
+- (void)confirmPasswordResetWithCode:(NSString *)code
+ newPassword:(NSString *)newPassword
+ completion:(FIRConfirmPasswordResetCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRResetPasswordRequest *request =
+ [[FIRResetPasswordRequest alloc] initWithOobCode:code
+ newPassword:newPassword
+ requestConfiguration:self->_requestConfiguration];
+ [FIRAuthBackend
+ resetPassword:request
+ callback:^(FIRResetPasswordResponse *_Nullable response, NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if (error) {
+ completion(error);
+ return;
+ }
+ completion(nil);
+ });
+ }
+ }];
+ });
+}
+
+- (void)checkActionCode:(NSString *)code completion:(FIRCheckActionCodeCallBack)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRResetPasswordRequest *request =
+ [[FIRResetPasswordRequest alloc] initWithOobCode:code
+ newPassword:nil
+ requestConfiguration:self->_requestConfiguration];
+ [FIRAuthBackend
+ resetPassword:request
+ callback:^(FIRResetPasswordResponse *_Nullable response, NSError *_Nullable error) {
+ if (completion) {
+ if (error) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(nil, error);
+ });
+ return;
+ }
+ FIRActionCodeOperation operation =
+ [FIRActionCodeInfo actionCodeOperationForRequestType:response.requestType];
+ FIRActionCodeInfo *actionCodeInfo =
+ [[FIRActionCodeInfo alloc] initWithOperation:operation
+ email:response.email
+ newEmail:response.verifiedEmail];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(actionCodeInfo, nil);
+ });
+ }
+ }];
+ });
+}
+
+- (void)verifyPasswordResetCode:(NSString *)code
+ completion:(FIRVerifyPasswordResetCodeCallback)completion {
+ [self checkActionCode:code
+ completion:^(FIRActionCodeInfo *_Nullable info, NSError *_Nullable error) {
+ if (completion) {
+ if (error) {
+ completion(nil, error);
+ return;
+ }
+ completion(info.email, nil);
+ }
+ }];
+}
+
+- (void)applyActionCode:(NSString *)code completion:(FIRApplyActionCodeCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRSetAccountInfoRequest *request =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:self->_requestConfiguration];
+ request.OOBCode = code;
+ [FIRAuthBackend
+ setAccountInfo:request
+ callback:^(FIRSetAccountInfoResponse *_Nullable response, NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(error);
+ });
+ }
+ }];
+ });
+}
+
+- (void)sendPasswordResetWithEmail:(NSString *)email
+ completion:(nullable FIRSendPasswordResetCallback)completion {
+ [self sendPasswordResetWithNullableActionCodeSettings:nil email:email completion:completion];
+}
+
+- (void)sendPasswordResetWithEmail:(NSString *)email
+ actionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendPasswordResetCallback)completion {
+ [self sendPasswordResetWithNullableActionCodeSettings:actionCodeSettings
+ email:email
+ completion:completion];
+}
+
+/** @fn sendPasswordResetWithNullableActionCodeSettings:actionCodeSetting:email:completion:
+ @brief Initiates a password reset for the given email address and @FIRActionCodeSettings object.
+
+ @param actionCodeSettings Optionally, An @c FIRActionCodeSettings object containing settings
+ related to the handling action codes.
+ @param email The email address of the user.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+ */
+- (void)sendPasswordResetWithNullableActionCodeSettings:
+ (nullable FIRActionCodeSettings *)actionCodeSettings
+ email:(NSString *)email
+ completion:
+ (nullable FIRSendPasswordResetCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ if (!email) {
+ [FIRAuthExceptionUtils
+ raiseInvalidParameterExceptionWithReason:kMissingEmailInvalidParameterExceptionReason];
+ return;
+ }
+ FIRGetOOBConfirmationCodeRequest *request = [FIRGetOOBConfirmationCodeRequest
+ passwordResetRequestWithEmail:email
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:self->_requestConfiguration];
+ [FIRAuthBackend getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(error);
+ });
+ }
+ }];
+ });
+}
+
+- (void)sendSignInLinkToEmail:(nonnull NSString *)email
+ actionCodeSettings:(nonnull FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendSignInLinkToEmailCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ if (!email) {
+ [FIRAuthExceptionUtils
+ raiseInvalidParameterExceptionWithReason:kMissingEmailInvalidParameterExceptionReason];
+ }
+
+ if (!actionCodeSettings.handleCodeInApp) {
+ [FIRAuthExceptionUtils
+ raiseInvalidParameterExceptionWithReason:kHandleCodeInAppFalseExceptionReason];
+ }
+ FIRGetOOBConfirmationCodeRequest *request =
+ [FIRGetOOBConfirmationCodeRequest signInWithEmailLinkRequest:email
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:self->_requestConfiguration];
+ [FIRAuthBackend getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(error);
+ });
+ }
+ }];
+ });
+}
+
+- (void)updateCurrentUser:(FIRUser *)user completion:(nullable FIRUserUpdateCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ if (!user) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion([FIRAuthErrorUtils nullUserErrorWithMessage:nil]);
+ });
+ }
+ return;
+ }
+ void (^updateUserBlock)(FIRUser *user) = ^(FIRUser *user) {
+ NSError *error;
+ [self updateCurrentUser:user byForce:YES savingToDisk:YES error:(&error)];
+ if (error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(error);
+ });
+ }
+ return;
+ }
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(nil);
+ });
+ }
+ };
+ if (![user.requestConfiguration.APIKey isEqualToString:self->_requestConfiguration.APIKey]) {
+ // If the API keys are different, then we need to confirm that the user belongs to the same
+ // project before proceeding.
+ user.requestConfiguration = self->_requestConfiguration;
+ [user reloadWithCompletion:^(NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(error);
+ });
+ }
+ return;
+ }
+ updateUserBlock(user);
+ }];
+ } else {
+ updateUserBlock(user);
+ }
+ });
+}
+
+- (BOOL)signOut:(NSError *_Nullable __autoreleasing *_Nullable)error {
+ __block BOOL result = YES;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ if (!self->_currentUser) {
+ return;
+ }
+ result = [self updateCurrentUser:nil byForce:NO savingToDisk:YES error:error];
+ });
+ return result;
+}
+
+- (BOOL)signOutByForceWithUserID:(NSString *)userID error:(NSError *_Nullable *_Nullable)error {
+ if (_currentUser.uid != userID) {
+ return YES;
+ }
+ return [self updateCurrentUser:nil byForce:YES savingToDisk:YES error:error];
+}
+
+- (BOOL)isSignInWithEmailLink:(NSString *)link {
+ if (link.length == 0) {
+ return NO;
+ }
+ NSDictionary<NSString *, NSString *> *queryItems = [FIRAuthWebUtils parseURL:link];
+ if (![queryItems count]) {
+ NSURLComponents *urlComponents = [NSURLComponents componentsWithString:link];
+ if (!urlComponents.query) {
+ return NO;
+ }
+ queryItems = [FIRAuthWebUtils parseURL:urlComponents.query];
+ }
+
+ if (![queryItems count]) {
+ return NO;
+ }
+
+ NSString *actionCode = queryItems[@"oobCode"];
+ NSString *mode = queryItems[@"mode"];
+
+ if (actionCode && [mode isEqualToString:@"signIn"]) {
+ return YES;
+ }
+ return NO;
+}
+
+- (FIRAuthStateDidChangeListenerHandle)addAuthStateDidChangeListener:
+ (FIRAuthStateDidChangeListenerBlock)listener {
+ __block BOOL firstInvocation = YES;
+ __block NSString *previousUserID;
+ return [self addIDTokenDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
+ BOOL shouldCallListener = firstInvocation || !(previousUserID == user.uid ||
+ [previousUserID isEqualToString:user.uid]);
+ firstInvocation = NO;
+ previousUserID = [user.uid copy];
+ if (shouldCallListener) {
+ listener(auth, user);
+ }
+ }];
+}
+
+- (void)removeAuthStateDidChangeListener:(FIRAuthStateDidChangeListenerHandle)listenerHandle {
+ [self removeIDTokenDidChangeListener:listenerHandle];
+}
+
+- (FIRIDTokenDidChangeListenerHandle)addIDTokenDidChangeListener:
+ (FIRIDTokenDidChangeListenerBlock)listener {
+ if (!listener) {
+ [NSException raise:NSInvalidArgumentException format:@"listener must not be nil."];
+ return nil;
+ }
+ FIRAuthStateDidChangeListenerHandle handle;
+ NSNotificationCenter *notifications = [NSNotificationCenter defaultCenter];
+ handle = [notifications addObserverForName:FIRAuthStateDidChangeNotification
+ object:self
+ queue:[NSOperationQueue mainQueue]
+ usingBlock:^(NSNotification *_Nonnull notification) {
+ FIRAuth *auth = notification.object;
+ listener(auth, auth.currentUser);
+ }];
+ @synchronized(self) {
+ [_listenerHandles addObject:handle];
+ }
+ dispatch_async(dispatch_get_main_queue(), ^{
+ listener(self, self->_currentUser);
+ });
+ return handle;
+}
+
+- (void)removeIDTokenDidChangeListener:(FIRIDTokenDidChangeListenerHandle)listenerHandle {
+ [[NSNotificationCenter defaultCenter] removeObserver:listenerHandle];
+ @synchronized(self) {
+ [_listenerHandles removeObject:listenerHandle];
+ }
+}
+
+- (void)useAppLanguage {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ self->_requestConfiguration.languageCode = [[NSLocale preferredLanguages] firstObject];
+ });
+}
+
+- (nullable NSString *)languageCode {
+ return _requestConfiguration.languageCode;
+}
+
+- (void)setLanguageCode:(nullable NSString *)languageCode {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ self->_requestConfiguration.languageCode = [languageCode copy];
+ });
+}
+
+- (nullable NSString *)additionalFrameworkMarker {
+ return self->_requestConfiguration.additionalFrameworkMarker;
+}
+
+- (void)setAdditionalFrameworkMarker:(nullable NSString *)additionalFrameworkMarker {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ self->_requestConfiguration.additionalFrameworkMarker = [additionalFrameworkMarker copy];
+ });
+}
+
+#if TARGET_OS_IOS
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-property-ivar"
+// The warning is ignored because we use the token manager to get the token, instead of using the
+// ivar.
+- (nullable NSData *)APNSToken {
+ __block NSData *result = nil;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ result = self->_tokenManager.token.data;
+ });
+ return result;
+}
+#pragma clang diagnostic pop
+
+#pragma mark - UIApplicationDelegate
+
+- (void)application:(UIApplication *)application
+ didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
+ [self setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeUnknown];
+}
+
+- (void)application:(UIApplication *)application
+ didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ [self->_tokenManager cancelWithError:error];
+ });
+}
+
+- (void)application:(UIApplication *)application
+ didReceiveRemoteNotification:(NSDictionary *)userInfo
+ fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+ [self canHandleNotification:userInfo];
+}
+
+// iOS 10 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
+- (void)application:(UIApplication *)application
+ didReceiveRemoteNotification:(NSDictionary *)userInfo {
+ [self canHandleNotification:userInfo];
+}
+#pragma clang diagnostic pop
+
+- (BOOL)application:(UIApplication *)app
+ openURL:(NSURL *)url
+ options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
+ return [self canHandleURL:url];
+}
+
+// iOS 10 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
+- (BOOL)application:(UIApplication *)application
+ openURL:(NSURL *)url
+ sourceApplication:(nullable NSString *)sourceApplication
+ annotation:(id)annotation {
+ return [self canHandleURL:url];
+}
+#pragma clang diagnostic pop
+
+- (void)setAPNSToken:(NSData *)token type:(FIRAuthAPNSTokenType)type {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ self->_tokenManager.token = [[FIRAuthAPNSToken alloc] initWithData:token type:type];
+ });
+}
+
+- (BOOL)canHandleNotification:(NSDictionary *)userInfo {
+ __block BOOL result = NO;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ result = [self->_notificationManager canHandleNotification:userInfo];
+ });
+ return result;
+}
+
+- (BOOL)canHandleURL:(NSURL *)URL {
+ __block BOOL result = NO;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ result = [self->_authURLPresenter canHandleURL:URL];
+ });
+ return result;
+}
+
+#pragma mark - UISceneDelegate
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+- (void)scene:(UIScene *)scene
+ openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts API_AVAILABLE(ios(13.0)) {
+ for (UIOpenURLContext *urlContext in URLContexts) {
+ NSURL *url = [urlContext URL];
+ [self canHandleURL:url];
+ }
+}
+#endif // __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+#endif // TARGET_OS_IOS
+
+#pragma mark - Internal Methods
+
+#if TARGET_OS_IOS
+/** @fn signInWithPhoneCredential:callback:
+ @brief Signs in using a phone credential.
+ @param credential The Phone Auth credential used to sign in.
+ @param operation The type of operation for which this sign-in attempt is initiated.
+ @param callback A block which is invoked when the sign in finishes (or is cancelled.) Invoked
+ asynchronously on the global auth work queue in the future.
+ */
+- (void)signInWithPhoneCredential:(FIRPhoneAuthCredential *)credential
+ operation:(FIRAuthOperationType)operation
+ callback:(FIRVerifyPhoneNumberResponseCallback)callback {
+ if (credential.temporaryProof.length && credential.phoneNumber.length) {
+ FIRVerifyPhoneNumberRequest *request =
+ [[FIRVerifyPhoneNumberRequest alloc] initWithTemporaryProof:credential.temporaryProof
+ phoneNumber:credential.phoneNumber
+ operation:operation
+ requestConfiguration:_requestConfiguration];
+ [FIRAuthBackend verifyPhoneNumber:request callback:callback];
+ return;
+ }
+
+ if (!credential.verificationID.length) {
+ callback(nil, [FIRAuthErrorUtils missingVerificationIDErrorWithMessage:nil]);
+ return;
+ }
+ if (!credential.verificationCode.length) {
+ callback(nil, [FIRAuthErrorUtils missingVerificationCodeErrorWithMessage:nil]);
+ return;
+ }
+ FIRVerifyPhoneNumberRequest *request =
+ [[FIRVerifyPhoneNumberRequest alloc] initWithVerificationID:credential.verificationID
+ verificationCode:credential.verificationCode
+ operation:operation
+ requestConfiguration:_requestConfiguration];
+ [FIRAuthBackend verifyPhoneNumber:request callback:callback];
+}
+
+#endif
+
+/** @fn internalSignInAndRetrieveDataWithCustomToken:completion:
+ @brief Signs in a Firebase user given a custom token.
+ @param token A self-signed custom auth token.
+ @param completion A block which is invoked when the custom token sign in request completes.
+ */
+- (void)internalSignInAndRetrieveDataWithCustomToken:(NSString *)token
+ completion:
+ (nullable FIRAuthDataResultCallback)completion {
+ FIRVerifyCustomTokenRequest *request =
+ [[FIRVerifyCustomTokenRequest alloc] initWithToken:token
+ requestConfiguration:_requestConfiguration];
+ [FIRAuthBackend
+ verifyCustomToken:request
+ callback:^(FIRVerifyCustomTokenResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ completion(nil, error);
+ return;
+ }
+ }
+ [self completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (error && completion) {
+ completion(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additonalUserInfo =
+ [[FIRAdditionalUserInfo alloc]
+ initWithProviderID:nil
+ profile:nil
+ username:nil
+ isNewUser:response.isNewUser];
+ FIRAuthDataResult *result =
+ user ? [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:additonalUserInfo]
+ : nil;
+ if (completion) {
+ completion(result, error);
+ }
+ }];
+ }];
+}
+
+/** @fn internalCreateUserWithEmail:password:completion:
+ @brief Makes a backend request attempting to create a new Firebase user given an email address
+ and password.
+ @param email The email address used to create the new Firebase user.
+ @param password The password used to create the new Firebase user.
+ @param completion Optionally; a block which is invoked when the request finishes.
+ */
+- (void)internalCreateUserWithEmail:(NSString *)email
+ password:(NSString *)password
+ completion:(nullable FIRSignupNewUserCallback)completion {
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithEmail:email
+ password:password
+ displayName:nil
+ requestConfiguration:_requestConfiguration];
+ if (![request.password length]) {
+ completion(
+ nil, [FIRAuthErrorUtils weakPasswordErrorWithServerResponseReason:kMissingPasswordReason]);
+ return;
+ }
+ if (![request.email length]) {
+ completion(nil, [FIRAuthErrorUtils missingEmailErrorWithMessage:nil]);
+ return;
+ }
+ [FIRAuthBackend signUpNewUser:request callback:completion];
+}
+
+/** @fn internalSignInAnonymouslyWithCompletion:
+ @param completion A block which is invoked when the anonymous sign in request completes.
+ */
+- (void)internalSignInAnonymouslyWithCompletion:(FIRSignupNewUserCallback)completion {
+ FIRSignUpNewUserRequest *request =
+ [[FIRSignUpNewUserRequest alloc] initWithRequestConfiguration:_requestConfiguration];
+ [FIRAuthBackend signUpNewUser:request callback:completion];
+}
+
+/** @fn possiblyPostAuthStateChangeNotification
+ @brief Posts the auth state change notificaton if current user's token has been changed.
+ */
+- (void)possiblyPostAuthStateChangeNotification {
+ NSString *token = _currentUser.rawAccessToken;
+ if (_lastNotifiedUserToken == token ||
+ (token != nil && [_lastNotifiedUserToken isEqualToString:token])) {
+ return;
+ }
+ _lastNotifiedUserToken = token;
+ if (_autoRefreshTokens) {
+ // Shedule new refresh task after successful attempt.
+ [self scheduleAutoTokenRefresh];
+ }
+ NSMutableDictionary *internalNotificationParameters = [NSMutableDictionary dictionary];
+ if (self.app) {
+ internalNotificationParameters[FIRAuthStateDidChangeInternalNotificationAppKey] = self.app;
+ }
+ if (token.length) {
+ internalNotificationParameters[FIRAuthStateDidChangeInternalNotificationTokenKey] = token;
+ }
+ internalNotificationParameters[FIRAuthStateDidChangeInternalNotificationUIDKey] =
+ _currentUser.uid;
+ NSNotificationCenter *notifications = [NSNotificationCenter defaultCenter];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [notifications postNotificationName:FIRAuthStateDidChangeInternalNotification
+ object:self
+ userInfo:internalNotificationParameters];
+ [notifications postNotificationName:FIRAuthStateDidChangeNotification object:self];
+ });
+}
+
+- (BOOL)updateKeychainWithUser:(FIRUser *)user error:(NSError *_Nullable *_Nullable)error {
+ if (user != _currentUser) {
+ // No-op if the user is no longer signed in. This is not considered an error as we don't check
+ // whether the user is still current on other callbacks of user operations either.
+ return YES;
+ }
+ if ([self saveUser:user error:error]) {
+ [self possiblyPostAuthStateChangeNotification];
+ return YES;
+ }
+ return NO;
+}
+
+/** @fn setKeychainServiceNameForApp
+ @brief Sets the keychain service name global data for the particular app.
+ @param app The Firebase app to set keychain service name for.
+ */
++ (void)setKeychainServiceNameForApp:(FIRApp *)app {
+ @synchronized(self) {
+ gKeychainServiceNameForAppName[app.name] =
+ [@"firebase_auth_" stringByAppendingString:app.options.googleAppID];
+ }
+}
+
+/** @fn keychainServiceNameForAppName:
+ @brief Gets the keychain service name global data for the particular app by name.
+ @param appName The name of the Firebase app to get keychain service name for.
+ */
++ (NSString *)keychainServiceNameForAppName:(NSString *)appName {
+ @synchronized(self) {
+ return gKeychainServiceNameForAppName[appName];
+ }
+}
+
+/** @fn deleteKeychainServiceNameForAppName:
+ @brief Deletes the keychain service name global data for the particular app by name.
+ @param appName The name of the Firebase app to delete keychain service name for.
+ */
++ (void)deleteKeychainServiceNameForAppName:(NSString *)appName {
+ @synchronized(self) {
+ [gKeychainServiceNameForAppName removeObjectForKey:appName];
+ }
+}
+
+/** @fn scheduleAutoTokenRefreshWithDelay:
+ @brief Schedules a task to automatically refresh tokens on the current user. The token refresh
+ is scheduled 5 minutes before the scheduled expiration time.
+ @remarks If the token expires in less than 5 minutes, schedule the token refresh immediately.
+ */
+- (void)scheduleAutoTokenRefresh {
+ NSTimeInterval tokenExpirationInterval =
+ [_currentUser.accessTokenExpirationDate timeIntervalSinceNow] - kTokenRefreshHeadStart;
+ [self scheduleAutoTokenRefreshWithDelay:MAX(tokenExpirationInterval, 0) retry:NO];
+}
+
+/** @fn scheduleAutoTokenRefreshWithDelay:
+ @brief Schedules a task to automatically refresh tokens on the current user.
+ @param delay The delay in seconds after which the token refresh task should be scheduled to be
+ executed.
+ @param retry Flag to determine whether the invocation is a retry attempt or not.
+ */
+- (void)scheduleAutoTokenRefreshWithDelay:(NSTimeInterval)delay retry:(BOOL)retry {
+ NSString *accessToken = _currentUser.rawAccessToken;
+ if (!accessToken) {
+ return;
+ }
+ if (retry) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000003",
+ @"Token auto-refresh re-scheduled in %02d:%02d "
+ @"because of error on previous refresh attempt.",
+ (int)ceil(delay) / 60, (int)ceil(delay) % 60);
+ } else {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000004",
+ @"Token auto-refresh scheduled in %02d:%02d for the new token.",
+ (int)ceil(delay) / 60, (int)ceil(delay) % 60);
+ }
+ _autoRefreshScheduled = YES;
+ __weak FIRAuth *weakSelf = self;
+ [[FIRAuthDispatcher sharedInstance]
+ dispatchAfterDelay:delay
+ queue:FIRAuthGlobalWorkQueue()
+ task:^(void) {
+ FIRAuth *strongSelf = weakSelf;
+ if (!strongSelf) {
+ return;
+ }
+ if (![strongSelf->_currentUser.rawAccessToken isEqualToString:accessToken]) {
+ // Another auto refresh must have been scheduled, so keep
+ // _autoRefreshScheduled unchanged.
+ return;
+ }
+ strongSelf->_autoRefreshScheduled = NO;
+ if (strongSelf->_isAppInBackground) {
+ return;
+ }
+ NSString *uid = strongSelf->_currentUser.uid;
+ [strongSelf->_currentUser
+ internalGetTokenForcingRefresh:YES
+ callback:^(NSString *_Nullable token,
+ NSError *_Nullable error) {
+ if (![strongSelf->_currentUser.uid
+ isEqualToString:uid]) {
+ return;
+ }
+ if (error) {
+ // Kicks off exponential back off logic to retry
+ // failed attempt. Starts with one minute delay
+ // (60 seconds) if this is the first failed
+ // attempt.
+ NSTimeInterval rescheduleDelay;
+ if (retry) {
+ rescheduleDelay =
+ MIN(delay * 2, kMaxWaitTimeForBackoff);
+ } else {
+ rescheduleDelay = 60;
+ }
+ [strongSelf
+ scheduleAutoTokenRefreshWithDelay:
+ rescheduleDelay
+ retry:YES];
+ }
+ }];
+ }];
+}
+
+#pragma mark -
+
+/** @fn completeSignInWithTokenService:callback:
+ @brief Completes a sign-in flow once we have access and refresh tokens for the user.
+ @param accessToken The STS access token.
+ @param accessTokenExpirationDate The approximate expiration date of the access token.
+ @param refreshToken The STS refresh token.
+ @param anonymous Whether or not the user is anonymous.
+ @param callback Called when the user has been signed in or when an error occurred. Invoked
+ asynchronously on the global auth work queue in the future.
+ */
+- (void)completeSignInWithAccessToken:(nullable NSString *)accessToken
+ accessTokenExpirationDate:(nullable NSDate *)accessTokenExpirationDate
+ refreshToken:(nullable NSString *)refreshToken
+ anonymous:(BOOL)anonymous
+ callback:(FIRAuthResultCallback)callback {
+ [FIRUser retrieveUserWithAuth:self
+ accessToken:accessToken
+ accessTokenExpirationDate:accessTokenExpirationDate
+ refreshToken:refreshToken
+ anonymous:anonymous
+ callback:callback];
+}
+
+/** @fn signInFlowAuthResultCallbackByDecoratingCallback:
+ @brief Creates a FIRAuthResultCallback block which wraps another FIRAuthResultCallback; trying
+ to update the current user before forwarding it's invocations along to a subject block
+ @param callback Called when the user has been updated or when an error has occurred. Invoked
+ asynchronously on the main thread in the future.
+ @return Returns a block that updates the current user.
+ @remarks Typically invoked as part of the complete sign-in flow. For any other uses please
+ consider alternative ways of updating the current user.
+*/
+- (FIRAuthResultCallback)signInFlowAuthResultCallbackByDecoratingCallback:
+ (nullable FIRAuthResultCallback)callback {
+ return ^(FIRUser *_Nullable user, NSError *_Nullable error) {
+ if (error) {
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(nil, error);
+ });
+ }
+ return;
+ }
+ if (![self updateCurrentUser:user byForce:NO savingToDisk:YES error:&error]) {
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(nil, error);
+ });
+ }
+ return;
+ }
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(user, nil);
+ });
+ }
+ };
+}
+
+/** @fn signInFlowAuthDataResultCallbackByDecoratingCallback:
+ @brief Creates a FIRAuthDataResultCallback block which wraps another FIRAuthDataResultCallback;
+ trying to update the current user before forwarding it's invocations along to a subject
+ block.
+ @param callback Called when the user has been updated or when an error has occurred. Invoked
+ asynchronously on the main thread in the future.
+ @return Returns a block that updates the current user.
+ @remarks Typically invoked as part of the complete sign-in flow. For any other uses please
+ consider alternative ways of updating the current user.
+*/
+- (FIRAuthDataResultCallback)signInFlowAuthDataResultCallbackByDecoratingCallback:
+ (nullable FIRAuthDataResultCallback)callback {
+ return ^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
+ if (error) {
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(nil, error);
+ });
+ }
+ return;
+ }
+ if (![self updateCurrentUser:authResult.user byForce:NO savingToDisk:YES error:&error]) {
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(nil, error);
+ });
+ }
+ return;
+ }
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(authResult, nil);
+ });
+ }
+ };
+}
+
+#pragma mark - User-Related Methods
+
+/** @fn updateCurrentUser:byForce:savingToDisk:error:
+ @brief Update the current user; initializing the user's internal properties correctly, and
+ optionally saving the user to disk.
+ @remarks This method is called during: sign in and sign out events, as well as during class
+ initialization time. The only time the saveToDisk parameter should be set to NO is during
+ class initialization time because the user was just read from disk.
+ @param user The user to use as the current user (including nil, which is passed at sign out
+ time.)
+ @param saveToDisk Indicates the method should persist the user data to disk.
+ */
+- (BOOL)updateCurrentUser:(nullable FIRUser *)user
+ byForce:(BOOL)force
+ savingToDisk:(BOOL)saveToDisk
+ error:(NSError *_Nullable *_Nullable)error {
+ if (user == _currentUser) {
+ [self possiblyPostAuthStateChangeNotification];
+ return YES;
+ }
+ BOOL success = YES;
+ if (saveToDisk) {
+ success = [self saveUser:user error:error];
+ }
+ if (success || force) {
+ _currentUser = user;
+ [self possiblyPostAuthStateChangeNotification];
+ }
+ return success;
+}
+
+/** @fn saveUser:error:
+ @brief Persists user.
+ @param user The user to save.
+ @param outError Return value for any error which occurs.
+ @return @YES on success, @NO otherwise.
+ */
+- (BOOL)saveUser:(nullable FIRUser *)user error:(NSError *_Nullable *_Nullable)outError {
+ BOOL success;
+
+ if (!self.userAccessGroup) {
+ NSString *userKey = [NSString stringWithFormat:kUserKey, _firebaseAppName];
+ if (!user) {
+ success = [_keychainServices removeDataForKey:userKey error:outError];
+ } else {
+ // Encode the user object.
+ NSMutableData *archiveData = [NSMutableData data];
+// iOS 12 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedArchiver *archiver =
+ [[NSKeyedArchiver alloc] initForWritingWithMutableData:archiveData];
+#pragma clang diagnostic pop
+ [archiver encodeObject:user forKey:userKey];
+ [archiver finishEncoding];
+
+ // Save the user object's encoded value.
+ success = [_keychainServices setData:archiveData forKey:userKey error:outError];
+ }
+ } else {
+ if (!user) {
+ success = [self.storedUserManager removeStoredUserForAccessGroup:self.userAccessGroup
+ projectIdentifier:self.app.options.APIKey
+ error:outError];
+ } else {
+ success = [self.storedUserManager setStoredUser:user
+ forAccessGroup:self.userAccessGroup
+ projectIdentifier:self.app.options.APIKey
+ error:outError];
+ }
+ }
+
+ return success;
+}
+
+/** @fn getUser:error:
+ @brief Retrieves the saved user associated, if one exists, from the keychain.
+ @param outUser An out parameter which is populated with the saved user, if one exists.
+ @param error Return value for any error which occurs.
+ @return YES if the operation was a success (irrespective of whether or not a saved user existed
+ for the given @c firebaseAppId,) NO if an error occurred.
+ */
+- (BOOL)getUser:(FIRUser *_Nullable *)outUser error:(NSError *_Nullable *_Nullable)error {
+ if (!self.userAccessGroup) {
+ NSString *userKey = [NSString stringWithFormat:kUserKey, _firebaseAppName];
+
+ NSError *keychainError;
+ NSData *encodedUserData = [_keychainServices dataForKey:userKey error:&keychainError];
+ if (keychainError) {
+ if (error) {
+ *error = keychainError;
+ }
+ return NO;
+ }
+ if (!encodedUserData) {
+ *outUser = nil;
+ return YES;
+ }
+// iOS 12 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedUnarchiver *unarchiver =
+ [[NSKeyedUnarchiver alloc] initForReadingWithData:encodedUserData];
+#pragma clang diagnostic pop
+ FIRUser *user = [unarchiver decodeObjectOfClass:[FIRUser class] forKey:userKey];
+ user.auth = self;
+ *outUser = user;
+
+ return YES;
+ } else {
+ FIRUser *user = [self.storedUserManager getStoredUserForAccessGroup:self.userAccessGroup
+ projectIdentifier:self.app.options.APIKey
+ error:error];
+ user.auth = self;
+ *outUser = user;
+ if (user) {
+ return YES;
+ } else {
+ if (error && *error) {
+ return NO;
+ } else {
+ return YES;
+ }
+ }
+ }
+}
+
+#pragma mark - Interoperability
+
++ (nonnull NSArray<FIRComponent *> *)componentsToRegister {
+ FIRComponentCreationBlock authCreationBlock =
+ ^id _Nullable(FIRComponentContainer *_Nonnull container, BOOL *_Nonnull isCacheable) {
+ *isCacheable = YES;
+ return [[FIRAuth alloc] initWithApp:container.app];
+ };
+ FIRComponent *authInterop = [FIRComponent componentWithProtocol:@protocol(FIRAuthInterop)
+ instantiationTiming:FIRInstantiationTimingAlwaysEager
+ dependencies:@[]
+ creationBlock:authCreationBlock];
+ return @[ authInterop ];
+}
+
+#pragma mark - FIRComponentLifecycleMaintainer
+
+- (void)appWillBeDeleted:(nonnull FIRApp *)app {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ // This doesn't stop any request already issued, see b/27704535 .
+ NSString *keychainServiceName = [FIRAuth keychainServiceNameForAppName:app.name];
+ if (keychainServiceName) {
+ [[self class] deleteKeychainServiceNameForAppName:app.name];
+ FIRAuthKeychainServices *keychain =
+ [[FIRAuthKeychainServices alloc] initWithService:keychainServiceName];
+ NSString *userKey = [NSString stringWithFormat:kUserKey, app.name];
+ [keychain removeDataForKey:userKey error:NULL];
+ }
+ dispatch_async(dispatch_get_main_queue(), ^{
+ // TODO: Move over to fire an event instead, once ready.
+ [[NSNotificationCenter defaultCenter] postNotificationName:FIRAuthStateDidChangeNotification
+ object:nil];
+ });
+ });
+}
+
+#pragma mark - FIRAuthInterop
+
+- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback {
+ __weak FIRAuth *weakSelf = self;
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuth *strongSelf = weakSelf;
+ // Enable token auto-refresh if not aleady enabled.
+ if (strongSelf && !strongSelf->_autoRefreshTokens) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000002", @"Token auto-refresh enabled.");
+ strongSelf->_autoRefreshTokens = YES;
+ [strongSelf scheduleAutoTokenRefresh];
+
+#if TARGET_OS_IOS || TARGET_OS_TV // TODO: Is a similar mechanism needed on macOS?
+ strongSelf->_applicationDidBecomeActiveObserver = [[NSNotificationCenter defaultCenter]
+ addObserverForName:UIApplicationDidBecomeActiveNotification
+ object:nil
+ queue:nil
+ usingBlock:^(NSNotification *notification) {
+ FIRAuth *strongSelf = weakSelf;
+ if (strongSelf) {
+ strongSelf->_isAppInBackground = NO;
+ if (!strongSelf->_autoRefreshScheduled) {
+ [weakSelf scheduleAutoTokenRefresh];
+ }
+ }
+ }];
+ strongSelf->_applicationDidEnterBackgroundObserver = [[NSNotificationCenter defaultCenter]
+ addObserverForName:UIApplicationDidEnterBackgroundNotification
+ object:nil
+ queue:nil
+ usingBlock:^(NSNotification *notification) {
+ FIRAuth *strongSelf = weakSelf;
+ if (strongSelf) {
+ strongSelf->_isAppInBackground = YES;
+ }
+ }];
+#endif
+ }
+ // Call back with 'nil' if there is no current user.
+ if (!strongSelf || !strongSelf->_currentUser) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(nil, nil);
+ });
+ return;
+ }
+ // Call back with current user token.
+ [strongSelf->_currentUser
+ internalGetTokenForcingRefresh:forceRefresh
+ callback:^(NSString *_Nullable token, NSError *_Nullable error) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(token, error);
+ });
+ }];
+ });
+}
+
+- (nullable NSString *)getUserID {
+ return _currentUser.uid;
+}
+
+#pragma mark - Keychain sharing
+
+- (BOOL)internalUseUserAccessGroup:(NSString *_Nullable)accessGroup
+ error:(NSError *_Nullable *_Nullable)outError {
+ BOOL success;
+ success = [self.storedUserManager setStoredUserAccessGroup:accessGroup error:outError];
+ if (!success) {
+ return NO;
+ }
+
+ FIRUser *user = [self getStoredUserForAccessGroup:accessGroup error:outError];
+ if (!user && outError && *outError) {
+ return NO;
+ }
+ success = [self updateCurrentUser:user byForce:NO savingToDisk:NO error:outError];
+ if (!success) {
+ return NO;
+ }
+
+ if (_userAccessGroup == nil && accessGroup != nil) {
+ NSString *userKey = [NSString stringWithFormat:kUserKey, _firebaseAppName];
+ [_keychainServices removeDataForKey:userKey error:outError];
+ }
+ _userAccessGroup = accessGroup;
+ self->_lastNotifiedUserToken = user.rawAccessToken;
+
+ return YES;
+}
+
+- (BOOL)useUserAccessGroup:(NSString *_Nullable)accessGroup
+ error:(NSError *_Nullable *_Nullable)outError {
+ // self.storedUserManager is initialized asynchronously. Make sure it is done.
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ });
+ return [self internalUseUserAccessGroup:accessGroup error:outError];
+}
+
+- (nullable FIRUser *)getStoredUserForAccessGroup:(NSString *_Nullable)accessGroup
+ error:(NSError *_Nullable *_Nullable)outError {
+ FIRUser *user;
+ if (!accessGroup) {
+ NSString *userKey = [NSString stringWithFormat:kUserKey, _firebaseAppName];
+ NSData *encodedUserData = [_keychainServices dataForKey:userKey error:outError];
+ if (!encodedUserData) {
+ return nil;
+ }
+
+// iOS 12 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedUnarchiver *unarchiver =
+ [[NSKeyedUnarchiver alloc] initForReadingWithData:encodedUserData];
+#pragma clang diagnostic pop
+ user = [unarchiver decodeObjectOfClass:[FIRUser class] forKey:userKey];
+ } else {
+ user = [self.storedUserManager getStoredUserForAccessGroup:self.userAccessGroup
+ projectIdentifier:self.app.options.APIKey
+ error:outError];
+ }
+
+ user.auth = self;
+ return user;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult.m
new file mode 100644
index 00000000..f3b2f099
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult.m
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRAdditionalUserInfo.h"
+#import "FirebaseAuth/Sources/Public/FIROAuthCredential.h"
+#import "FirebaseAuth/Sources/Public/FIRUser.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthDataResult
+
+/** @var kAdditionalUserInfoCodingKey
+ @brief The key used to encode the additionalUserInfo property for NSSecureCoding.
+ */
+static NSString *const kAdditionalUserInfoCodingKey = @"additionalUserInfo";
+
+/** @var kUserCodingKey
+ @brief The key used to encode the user property for NSSecureCoding.
+ */
+static NSString *const kUserCodingKey = @"user";
+
+/** @var kCredentialCodingKey
+ @brief The key used to encode the credential for NSSecureCoding.
+ */
+static NSString *const kCredentialCodingKey = @"credential";
+
+- (nullable instancetype)initWithUser:(FIRUser *)user
+ additionalUserInfo:(nullable FIRAdditionalUserInfo *)additionalUserInfo {
+ return [self initWithUser:user additionalUserInfo:additionalUserInfo credential:nil];
+}
+
+- (nullable instancetype)initWithUser:(FIRUser *)user
+ additionalUserInfo:(nullable FIRAdditionalUserInfo *)additionalUserInfo
+ credential:(nullable FIROAuthCredential *)credential {
+ self = [super init];
+ if (self) {
+ _additionalUserInfo = additionalUserInfo;
+ _user = user;
+ _credential = credential;
+ }
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ FIRUser *user = [aDecoder decodeObjectOfClass:[FIRUser class] forKey:kUserCodingKey];
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [aDecoder decodeObjectOfClass:[FIRAdditionalUserInfo class]
+ forKey:kAdditionalUserInfoCodingKey];
+ FIROAuthCredential *credential = [aDecoder decodeObjectOfClass:[FIROAuthCredential class]
+ forKey:kCredentialCodingKey];
+ return [self initWithUser:user additionalUserInfo:additionalUserInfo credential:credential];
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_user forKey:kUserCodingKey];
+ [aCoder encodeObject:_additionalUserInfo forKey:kAdditionalUserInfoCodingKey];
+ [aCoder encodeObject:_credential forKey:kCredentialCodingKey];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h
new file mode 100644
index 00000000..08d701d1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRAuthDataResult.h"
+
+@class FIROAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthDataResult () <NSSecureCoding>
+
+/** @fn initWithUser:additionalUserInfo:
+ @brief Designated initializer.
+ @param user The signed in user reference.
+ @param additionalUserInfo The additional user info if available.
+ */
+- (nullable instancetype)initWithUser:(FIRUser *)user
+ additionalUserInfo:(nullable FIRAdditionalUserInfo *)additionalUserInfo;
+
+/** @fn initWithUser:additionalUserInfo:
+ @brief Designated initializer.
+ @param user The signed in user reference.
+ @param additionalUserInfo The additional user info if available.
+ @param credential The updated OAuth credential if available.
+ */
+- (nullable instancetype)initWithUser:(FIRUser *)user
+ additionalUserInfo:(nullable FIRAdditionalUserInfo *)additionalUserInfo
+ credential:(nullable FIROAuthCredential *)credential
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.h
new file mode 100644
index 00000000..2c5839b1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRAuthDispatcherImplBlock
+ @brief The type of block which can be set as the implementation for @c
+ dispatchAfterDelay:queue:callback: .
+
+ @param delay The delay in seconds after which the task will be scheduled to execute.
+ @param queue The dispatch queue on which the task will be submitted.
+ @param task The task (block) to be scheduled for future execution.
+ */
+typedef void (^FIRAuthDispatcherImplBlock)(NSTimeInterval delay,
+ dispatch_queue_t queue,
+ void (^task)(void));
+
+/** @class FIRAuthDispatchAfter
+ @brief A utility class used to facilitate scheduling tasks to be executed in the future.
+ */
+@interface FIRAuthDispatcher : NSObject
+
+/** @property dispatchAfterImplementation
+ @brief Allows custom implementation of dispatchAfterDelay:queue:callback:.
+ @remarks Set to nil to restore default implementation.
+ */
+@property(nonatomic, nullable, copy) FIRAuthDispatcherImplBlock dispatchAfterImplementation;
+
+/** @fn dispatchAfterDelay:queue:callback:
+ @brief Schedules task in the future after a specified delay.
+
+ @param delay The delay in seconds after which the task will be scheduled to execute.
+ @param queue The dispatch queue on which the task will be submitted.
+ @param task The task (block) to be scheduled for future execution.
+ */
+- (void)dispatchAfterDelay:(NSTimeInterval)delay
+ queue:(dispatch_queue_t)queue
+ task:(void (^)(void))task;
+
+/** @fn sharedInstance
+ @brief Gets the shared instance of this class.
+ @returns The shared instance of this clss
+ */
++ (instancetype)sharedInstance;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.m
new file mode 100644
index 00000000..e5e32c39
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthDispatcher.m
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthDispatcher.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthDispatcher
+
+@synthesize dispatchAfterImplementation = _dispatchAfterImplementation;
+
++ (instancetype)sharedInstance {
+ static dispatch_once_t onceToken;
+ static FIRAuthDispatcher *sharedInstance;
+ dispatch_once(&onceToken, ^{
+ sharedInstance = [[self alloc] init];
+ });
+ return sharedInstance;
+}
+
+- (void)dispatchAfterDelay:(NSTimeInterval)delay
+ queue:(dispatch_queue_t)queue
+ task:(void (^)(void))task {
+ if (_dispatchAfterImplementation) {
+ _dispatchAfterImplementation(delay, queue, task);
+ return;
+ }
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), queue, task);
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h
new file mode 100644
index 00000000..55bb1a70
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @fn FIRAuthGlobalWorkQueue
+ @brief Retrieves the global serial work queue for Firebase Auth.
+ @return The global serial dispatch queue.
+ @remarks To ensure thread safety, all auth code must be executed in either this global work
+ queue, or a serial queue that has its target queue set to this work queue. All public method
+ implementations that may involve contested code shall dispatch to this work queue as the
+ first thing they do.
+ */
+extern dispatch_queue_t FIRAuthGlobalWorkQueue(void);
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.m
new file mode 100644
index 00000000..bfe263a7
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.m
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+dispatch_queue_t FIRAuthGlobalWorkQueue() {
+ static dispatch_once_t once;
+ static dispatch_queue_t queue;
+ dispatch_once(&once, ^{
+ queue = dispatch_queue_create("com.google.firebase.auth.globalWorkQueue", NULL);
+ });
+ return queue;
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthOperationType.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthOperationType.h
new file mode 100644
index 00000000..62d6cd10
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthOperationType.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief Indicates the type of operation performed for RPCs that support the operation
+ parameter.
+ */
+typedef NS_ENUM(NSInteger, FIRAuthOperationType) {
+ /** Indicates that the operation type is uspecified.
+ */
+ FIRAuthOperationTypeUnspecified = 0,
+
+ /** Indicates that the operation type is sign in or sign up.
+ */
+ FIRAuthOperationTypeSignUpOrSignIn = 1,
+
+ /** Indicates that the operation type is reauthentication.
+ */
+ FIRAuthOperationTypeReauth = 2,
+
+ /** Indicates that the operation type is update.
+ */
+ FIRAuthOperationTypeUpdate = 3,
+
+ /** Indicates that the operation type is link.
+ */
+ FIRAuthOperationTypeLink = 4,
+};
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.h
new file mode 100644
index 00000000..cdae0468
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRAuthSerialTaskCompletionBlock
+ @brief The type of method a @c FIRAuthSerialTask must call when it is complete.
+ */
+typedef void (^FIRAuthSerialTaskCompletionBlock)(void);
+
+/** @typedef FIRAuthSerialTask
+ @brief Represents a unit of work submitted to a task queue.
+ @param complete The task MUST call the complete method when done.
+ */
+typedef void (^FIRAuthSerialTask)(FIRAuthSerialTaskCompletionBlock complete);
+
+/** @class FIRAuthSerialTaskQueue
+ @brief An easy to use serial task queue which supports a callback-based completion notification
+ system for easy asyncronous call chaining.
+ */
+@interface FIRAuthSerialTaskQueue : NSObject
+
+/** @fn enqueueTask:
+ @brief Enqueues a task for serial execution in the queue.
+ @remarks The task MUST call the complete method when done. This method is thread-safe.
+ The task block won't be executed concurrently with any other blocks in other task queues or
+ the global work queue as returned by @c FIRAuthGlobalWorkQueue , but an uncompleted task
+ (e.g. task block finished executation before complete method is called at a later time)
+ does not affect other task queues or the global work queue.
+ */
+- (void)enqueueTask:(FIRAuthSerialTask)task;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.m
new file mode 100644
index 00000000..4bded783
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.m
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthSerialTaskQueue {
+ /** @var _dispatchQueue
+ @brief The asyncronous dispatch queue into which tasks are enqueued and processed
+ serially.
+ */
+ dispatch_queue_t _dispatchQueue;
+}
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _dispatchQueue = dispatch_queue_create("com.google.firebase.auth.serialTaskQueue", NULL);
+ dispatch_set_target_queue(_dispatchQueue, FIRAuthGlobalWorkQueue());
+ }
+ return self;
+}
+
+- (void)enqueueTask:(FIRAuthSerialTask)task {
+ // This dispatch queue will run tasks serially in FIFO order, as long as it's not suspended.
+ dispatch_async(self->_dispatchQueue, ^{
+ // But as soon as a task is started, stop other tasks from running until the task calls it's
+ // completion handler, which allows the queue to resume processing of tasks. This allows the
+ // task to perform other asyncronous actions on other dispatch queues and "get back to us" when
+ // all of their sub-tasks are complete.
+ dispatch_suspend(self->_dispatchQueue);
+ task(^{
+ dispatch_resume(self->_dispatchQueue);
+ });
+ });
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSettings.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSettings.m
new file mode 100644
index 00000000..515aa568
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthSettings.m
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRAuthSettings.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthSettings
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _appVerificationDisabledForTesting = NO;
+ }
+ return self;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult.m
new file mode 100644
index 00000000..fd857e30
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult.m
@@ -0,0 +1,166 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthTokenResult_Internal.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kExpirationDateKey
+ @brief The key used to encode the expirationDate property for NSSecureCoding.
+ */
+static NSString *const kExpirationDateKey = @"expiratinDate";
+
+/** @var kTokenKey
+ @brief The key used to encode the token property for NSSecureCoding.
+ */
+static NSString *const kTokenKey = @"token";
+
+/** @var kAuthDateKey
+ @brief The key used to encode the authDate property for NSSecureCoding.
+ */
+static NSString *const kAuthDateKey = @"authDate";
+
+/** @var kIssuedDateKey
+ @brief The key used to encode the issuedDate property for NSSecureCoding.
+ */
+static NSString *const kIssuedDateKey = @"issuedDate";
+
+/** @var kSignInProviderKey
+ @brief The key used to encode the signInProvider property for NSSecureCoding.
+ */
+static NSString *const kSignInProviderKey = @"signInProvider";
+
+/** @var kSignInSecondFactorKey
+ @brief The key used to encode the signInSecondFactor property for NSSecureCoding.
+ */
+static NSString *const kSignInSecondFactorKey = @"signInSecondFactor";
+
+/** @var kClaimsKey
+ @brief The key used to encode the claims property for NSSecureCoding.
+ */
+static NSString *const kClaimsKey = @"claims";
+
+@implementation FIRAuthTokenResult
+
+- (instancetype)initWithToken:(NSString *)token
+ expirationDate:(NSDate *)expirationDate
+ authDate:(NSDate *)authDate
+ issuedAtDate:(NSDate *)issuedAtDate
+ signInProvider:(NSString *)signInProvider
+ signInSecondFactor:(NSString *)signInSecondFactor
+ claims:(NSDictionary *)claims {
+ self = [super init];
+ if (self) {
+ _token = token;
+ _expirationDate = expirationDate;
+ _authDate = authDate;
+ _issuedAtDate = issuedAtDate;
+ _signInProvider = signInProvider;
+ _signInSecondFactor = signInSecondFactor;
+ _claims = claims;
+ }
+ return self;
+}
+
++ (nullable FIRAuthTokenResult *)tokenResultWithToken:(NSString *)token {
+ NSArray *tokenStringArray = [token componentsSeparatedByString:@"."];
+
+ // The JWT should have three parts, though we only use the second in this method.
+ if (tokenStringArray.count != 3) {
+ return nil;
+ }
+
+ // The token payload is always the second index of the array.
+ NSString *IDToken = tokenStringArray[1];
+
+ // Convert the base64URL encoded string to a base64 encoded string.
+ // Replace "_" with "/"
+ NSMutableString *tokenPayload = [[IDToken stringByReplacingOccurrencesOfString:@"_"
+ withString:@"/"] mutableCopy];
+
+ // Replace "-" with "+"
+ [tokenPayload replaceOccurrencesOfString:@"-"
+ withString:@"+"
+ options:kNilOptions
+ range:NSMakeRange(0, tokenPayload.length)];
+
+ // Pad the token payload with "=" signs if the payload's length is not a multiple of 4.
+ while ((tokenPayload.length % 4) != 0) {
+ [tokenPayload appendFormat:@"="];
+ }
+ NSData *decodedTokenPayloadData =
+ [[NSData alloc] initWithBase64EncodedString:tokenPayload
+ options:NSDataBase64DecodingIgnoreUnknownCharacters];
+ if (!decodedTokenPayloadData) {
+ return nil;
+ }
+ NSError *jsonError = nil;
+ NSJSONReadingOptions options = NSJSONReadingMutableContainers | NSJSONReadingAllowFragments;
+ NSDictionary *tokenPayloadDictionary =
+ [NSJSONSerialization JSONObjectWithData:decodedTokenPayloadData
+ options:options
+ error:&jsonError];
+ if (jsonError != nil) {
+ return nil;
+ }
+
+ if (!tokenPayloadDictionary) {
+ return nil;
+ }
+
+ // These are dates since 00:00:00 January 1 1970, as described by the Terminology section in
+ // the JWT spec. https://tools.ietf.org/html/rfc7519
+ NSDate *expirationDate =
+ [NSDate dateWithTimeIntervalSince1970:[tokenPayloadDictionary[@"exp"] doubleValue]];
+ NSDate *authDate =
+ [NSDate dateWithTimeIntervalSince1970:[tokenPayloadDictionary[@"auth_time"] doubleValue]];
+ NSDate *issuedAtDate =
+ [NSDate dateWithTimeIntervalSince1970:[tokenPayloadDictionary[@"iat"] doubleValue]];
+
+ NSDictionary *firebaseTokenPayloadDictionary = tokenPayloadDictionary[@"firebase"];
+ NSString *signInProvider = firebaseTokenPayloadDictionary[@"sign_in_provider"];
+ NSString *signInSecondFactor = firebaseTokenPayloadDictionary[@"sign_in_second_factor"];
+
+ FIRAuthTokenResult *tokenResult =
+ [[FIRAuthTokenResult alloc] initWithToken:token
+ expirationDate:expirationDate
+ authDate:authDate
+ issuedAtDate:issuedAtDate
+ signInProvider:signInProvider
+ signInSecondFactor:signInSecondFactor
+ claims:tokenPayloadDictionary];
+ return tokenResult;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *token = [aDecoder decodeObjectOfClass:[NSDate class] forKey:kTokenKey];
+ return [FIRAuthTokenResult tokenResultWithToken:token];
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_token forKey:kTokenKey];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult_Internal.h
new file mode 100644
index 00000000..591dbe40
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuthTokenResult_Internal.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRAuthTokenResult.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @extension FIRAuthAPNSTokenResult
+ @brief An internal class used to expose internal methods of FIRAuthAPNSTokenResult.
+ */
+@interface FIRAuthTokenResult () <NSSecureCoding>
+
+/** @fn tokenResultWithToken:
+ @brief Parse a token string to a structured token.
+ @param token The token string to parse.
+ @return A structured token result.
+*/
++ (nullable FIRAuthTokenResult *)tokenResultWithToken:(NSString *)token;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth_Internal.h
new file mode 100644
index 00000000..b9c47def
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth_Internal.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRAuth.h"
+#import "Interop/Auth/Public/FIRAuthInterop.h"
+
+@class FIRAuthRequestConfiguration;
+@class FIRAuthURLPresenter;
+
+#if TARGET_OS_IOS
+@class FIRAuthAPNSTokenManager;
+@class FIRAuthAppCredentialManager;
+@class FIRAuthNotificationManager;
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuth () <FIRAuthInterop>
+
+/** @property requestConfiguration
+ @brief The configuration object comprising of paramters needed to make a request to Firebase
+ Auth's backend.
+ */
+@property(nonatomic, copy, readonly) FIRAuthRequestConfiguration *requestConfiguration;
+
+#if TARGET_OS_IOS
+
+/** @property tokenManager
+ @brief The manager for APNs tokens used by phone number auth.
+ */
+@property(nonatomic, strong, readonly) FIRAuthAPNSTokenManager *tokenManager;
+
+/** @property appCredentailManager
+ @brief The manager for app credentials used by phone number auth.
+ */
+@property(nonatomic, strong, readonly) FIRAuthAppCredentialManager *appCredentialManager;
+
+/** @property notificationManager
+ @brief The manager for remote notifications used by phone number auth.
+ */
+@property(nonatomic, strong, readonly) FIRAuthNotificationManager *notificationManager;
+
+#endif // TARGET_OS_IOS
+
+/** @property authURLPresenter
+ @brief An object that takes care of presenting URLs via the auth instance.
+ */
+@property(nonatomic, strong, readonly) FIRAuthURLPresenter *authURLPresenter;
+
+/** @fn initWithAPIKey:appName:
+ @brief Designated initializer.
+ @param APIKey The Google Developers Console API key for making requests from your app.
+ @param appName The name property of the previously created @c FIRApp instance.
+ */
+- (nullable instancetype)initWithAPIKey:(NSString *)APIKey
+ appName:(NSString *)appName NS_DESIGNATED_INITIALIZER;
+
+/** @fn getUserID
+ @brief Gets the identifier of the current user, if any.
+ @return The identifier of the current user, or nil if there is no current user.
+ */
+- (nullable NSString *)getUserID;
+
+/** @fn updateKeychainWithUser:error:
+ @brief Updates the keychain for the given user.
+ @param user The user to be updated.
+ @param error The error caused the method to fail if the method returns NO.
+ @return Whether updating keychain has succeeded or not.
+ @remarks Called by @c FIRUser when user info or token changes occur.
+ */
+- (BOOL)updateKeychainWithUser:(FIRUser *)user error:(NSError *_Nullable *_Nullable)error;
+
+/** @fn internalSignInWithCredential:callback:
+ @brief Convenience method for @c internalSignInAndRetrieveDataWithCredential:callback:
+ This method doesn't return additional identity provider data.
+*/
+- (void)internalSignInWithCredential:(FIRAuthCredential *)credential
+ callback:(FIRAuthResultCallback)callback;
+
+/** @fn internalSignInAndRetrieveDataWithCredential:callback:
+ @brief Asynchronously signs in Firebase with the given 3rd party credentials (e.g. a Facebook
+ login Access Token, a Google ID Token/Access Token pair, etc.) and returns additional
+ identity provider data.
+ @param credential The credential supplied by the IdP.
+ @param isReauthentication Indicates whether or not the current invocation originated from an
+ attempt to reauthenticate.
+ @param callback A block which is invoked when the sign in finishes (or is cancelled.) Invoked
+ asynchronously on the auth global work queue in the future.
+ @remarks This is the internal counterpart of this method, which uses a callback that does not
+ update the current user.
+ */
+- (void)internalSignInAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ isReauthentication:(BOOL)isReauthentication
+ callback:(nullable FIRAuthDataResultCallback)callback;
+
+/** @fn signOutByForceWithUserID:error:
+ @brief Signs out the current user.
+ @param userID The ID of the user to force sign out.
+ @param error An optional out parameter for error results.
+ @return @YES when the sign out request was successful. @NO otherwise.
+ */
+- (BOOL)signOutByForceWithUserID:(NSString *)userID error:(NSError *_Nullable *_Nullable)error;
+
+/** @fn completeSignInWithTokenService:callback:
+ @brief Completes a sign-in flow once we have access and refresh tokens for the user.
+ @param accessToken The STS access token.
+ @param accessTokenExpirationDate The approximate expiration date of the access token.
+ @param refreshToken The STS refresh token.
+ @param anonymous Whether or not the user is anonymous.
+ @param callback Called when the user has been signed in or when an error occurred. Invoked
+ asynchronously on the global auth work queue in the future.
+*/
+- (void)completeSignInWithAccessToken:(nullable NSString *)accessToken
+ accessTokenExpirationDate:(nullable NSDate *)accessTokenExpirationDate
+ refreshToken:(nullable NSString *)refreshToken
+ anonymous:(BOOL)anonymous
+ callback:(FIRAuthResultCallback)callback;
+
+/** @fn signInFlowAuthResultCallbackByDecoratingCallback:
+ @brief Creates a FIRAuthResultCallback block which wraps another FIRAuthResultCallback; trying
+ to update the current user before forwarding it's invocations along to a subject block
+ @param callback Called when the user has been updated or when an error has occurred. Invoked
+ asynchronously on the main thread in the future.
+ @return Returns a block that updates the current user.
+ @remarks Typically invoked as part of the complete sign-in flow. For any other uses please
+ consider alternative ways of updating the current user.
+*/
+- (FIRAuthDataResultCallback)signInFlowAuthDataResultCallbackByDecoratingCallback:
+ (nullable FIRAuthDataResultCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailAuthProvider.m
new file mode 100644
index 00000000..108198a5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailAuthProvider.m
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIREmailAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIREmailAuthProvider
+
+- (instancetype)init {
+ @throw [NSException exceptionWithName:@"Attempt to call unavailable initializer."
+ reason:@"This class is not meant to be initialized."
+ userInfo:nil];
+}
+
++ (FIRAuthCredential *)credentialWithEmail:(NSString *)email password:(NSString *)password {
+ return [[FIREmailPasswordAuthCredential alloc] initWithEmail:email password:password];
+}
+
++ (FIRAuthCredential *)credentialWithEmail:(NSString *)email link:(NSString *)link {
+ return [[FIREmailPasswordAuthCredential alloc] initWithEmail:email link:link];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h
new file mode 100644
index 00000000..df683e6f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIREmailPasswordAuthCredential
+ @brief Internal implementation of FIRAuthCredential for Email/Password credentials.
+ */
+@interface FIREmailPasswordAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @property email
+ @brief The user's email address.
+ */
+@property(nonatomic, readonly) NSString *email;
+
+/** @property password
+ @brief The user's password.
+ */
+@property(nonatomic, readonly) NSString *password;
+
+/** @property link
+ @brief The email sign-in link.
+ */
+@property(nonatomic, readonly) NSString *link;
+
+/** @fn initWithEmail:password:
+ @brief Designated initializer.
+ @param email The user's email address.
+ @param password The user's password.
+ */
+- (nullable instancetype)initWithEmail:(NSString *)email
+ password:(NSString *)password NS_DESIGNATED_INITIALIZER;
+
+/** @fn initWithEmail:link:
+ @brief Designated initializer.
+ @param email The user's email address.
+ @param link The email sign-in link.
+ */
+- (nullable instancetype)initWithEmail:(NSString *)email
+ link:(NSString *)link NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.m
new file mode 100644
index 00000000..2320f3fc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.m
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h"
+
+#import "FirebaseAuth/Sources/Public/FIREmailAuthProvider.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIREmailPasswordAuthCredential ()
+
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+@implementation FIREmailPasswordAuthCredential
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (nullable instancetype)initWithEmail:(NSString *)email password:(NSString *)password {
+ self = [super initWithProvider:FIREmailAuthProviderID];
+ if (self) {
+ _email = [email copy];
+ _password = [password copy];
+ }
+ return self;
+}
+
+- (nullable instancetype)initWithEmail:(NSString *)email link:(NSString *)link {
+ self = [super initWithProvider:FIREmailAuthProviderID];
+ if (self) {
+ _email = [email copy];
+ _link = [link copy];
+ }
+ return self;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:
+ @"Attempt to call prepareVerifyAssertionRequest: on a FIREmailPasswordAuthCredential."];
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *email = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"email"];
+ NSString *password = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"password"];
+ NSString *link = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"link"];
+ if (email.length && password.length) {
+ self = [self initWithEmail:email password:password];
+ } else if (email.length && link.length) {
+ self = [self initWithEmail:email link:link];
+ } else {
+ self = nil;
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:self.email forKey:@"email"];
+ [aCoder encodeObject:self.password forKey:@"password"];
+ [aCoder encodeObject:self.link forKey:@"link"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential.m
new file mode 100644
index 00000000..2f633f79
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential.m
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthCredential
+
+- (instancetype)init {
+ @throw [NSException exceptionWithName:@"Attempt to call unavailable initializer."
+ reason:@"This class is an abstract base class. It's init method "
+ "should not be called directly."
+ userInfo:nil];
+}
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ self = [super init];
+ if (self) {
+ _provider = [provider copy];
+ }
+ return self;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ @throw [NSException exceptionWithName:@"Attempt to call virtual method."
+ reason:@"This method must be overridden by a subclass."
+ userInfo:nil];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h
new file mode 100644
index 00000000..b63d9d2e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRAuthCredential.h"
+
+@class FIRVerifyAssertionRequest;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthCredential ()
+
+/** @fn initWithProvider:
+ @brief Designated initializer.
+ @remarks This is the designated initializer for internal/friend subclasses.
+ @param provider The provider name.
+ */
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_DESIGNATED_INITIALIZER;
+
+/** @fn prepareVerifyAssertionRequest:
+ @brief Called immediately before a request to the verifyAssertion endpoint is made. Implementers
+ should update the passed request instance with their credentials.
+ @param request The request to be updated with credentials.
+ */
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthProvider.m
new file mode 100644
index 00000000..6192ad69
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/FIRAuthProvider.m
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#pragma mark - Provider ID constants
+
+// Declared 'extern' in FIRGoogleAuthProvider.h
+NSString *const FIRGoogleAuthProviderID = @"google.com";
+
+// Declared 'extern' in FIRFacebookAuthProvider.h
+NSString *const FIRFacebookAuthProviderID = @"facebook.com";
+
+// Declared 'extern' in FIREmailAuthProvider.h
+NSString *const FIREmailAuthProviderID = @"password";
+
+// Declared 'extern' in FIRTwitterAuthProvider.h
+NSString *const FIRTwitterAuthProviderID = @"twitter.com";
+
+// Declared 'extern' in FIRGitHubAuthProvider.h
+NSString *const FIRGitHubAuthProviderID = @"github.com";
+
+// Declared 'extern' in FIRPhoneAuthProvider.h
+NSString *const FIRPhoneAuthProviderID = @"phone";
+
+// Declared 'extern' in FIRGameCenterAuthProvider.h
+NSString *const FIRGameCenterAuthProviderID = @"gc.apple.com";
+
+#pragma mark - sign-in methods constants
+
+// Declared 'extern' in FIRGoogleAuthProvider.h
+NSString *const FIRGoogleAuthSignInMethod = @"google.com";
+
+// Declared 'extern' in FIREmailAuthProvider.h
+NSString *const FIREmailPasswordAuthSignInMethod = @"password";
+
+// Declared 'extern' in FIREmailAuthProvider.h
+NSString *const FIREmailLinkAuthSignInMethod = @"emailLink";
+
+// Declared 'extern' in FIRTwitterAuthProvider.h
+NSString *const FIRTwitterAuthSignInMethod = @"twitter.com";
+
+// Declared 'extern' in FIRFacebookAuthProvider.h
+NSString *const FIRFacebookAuthSignInMethod = @"facebook.com";
+
+// Declared 'extern' in FIRGitHubAuthProvider.h
+NSString *const FIRGitHubAuthSignInMethod = @"github.com";
+
+// Declared 'extern' in FIRPhoneAuthProvider.h
+NSString *const FIRPhoneAuthSignInMethod = @"phone";
+
+// Declared 'extern' in FIRGameCenterAuthProvider.h
+NSString *const FIRGameCenterAuthSignInMethod = @"gc.apple.com";
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.h
new file mode 100644
index 00000000..646ddba4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRFacebookAuthCredential
+ @brief Internal implementation of FIRAuthCredential for the Facebook IdP.
+ */
+@interface FIRFacebookAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @fn initWithAccessToken:
+ @brief Designated initializer.
+ @param accessToken The Access Token obtained from Facebook.
+ */
+- (nullable instancetype)initWithAccessToken:(NSString *)accessToken NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.m
new file mode 100644
index 00000000..018cf28b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.m
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.h"
+
+#import "FirebaseAuth/Sources/Public/FIRFacebookAuthProvider.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRFacebookAuthCredential ()
+
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+@implementation FIRFacebookAuthCredential {
+ NSString *_accessToken;
+}
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (nullable instancetype)initWithAccessToken:(NSString *)accessToken {
+ self = [super initWithProvider:FIRFacebookAuthProviderID];
+ if (self) {
+ _accessToken = [accessToken copy];
+ }
+ return self;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ request.providerAccessToken = _accessToken;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *accessToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"accessToken"];
+ self = [self initWithAccessToken:accessToken];
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_accessToken forKey:@"accessToken"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthProvider.m
new file mode 100644
index 00000000..9194205e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthProvider.m
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRFacebookAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Facebook/FIRFacebookAuthCredential.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+// FIRFacebookAuthProviderID is defined in FIRAuthProvider.m.
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRFacebookAuthProvider
+
+- (instancetype)init {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"This class is not meant to be initialized."];
+ return nil;
+}
+
++ (FIRAuthCredential *)credentialWithAccessToken:(NSString *)accessToken {
+ return [[FIRFacebookAuthCredential alloc] initWithAccessToken:accessToken];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h
new file mode 100644
index 00000000..144792c2
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRAuthCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRGameCenterAuthCredential
+ @brief Internal implementation of FIRAuthCredential for Game Center credentials.
+ */
+@interface FIRGameCenterAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @property playerID
+ @brief The ID of the Game Center local player.
+ */
+@property(nonatomic, readonly) NSString *playerID;
+
+/** @property publicKeyURL
+ @brief The URL for the public encryption key.
+ */
+@property(nonatomic, readonly) NSURL *publicKeyURL;
+
+/** @property signature
+ @brief The verification signature data generated.
+ */
+@property(nonatomic, readonly) NSData *signature;
+
+/** @property salt
+ @brief A random string used to compute the hash and keep it randomized.
+ */
+@property(nonatomic, readonly) NSData *salt;
+
+/** @property timestamp
+ @brief The date and time that the signature was created.
+ */
+@property(nonatomic, readonly) uint64_t timestamp;
+
+/** @property displayName
+ @brief The date and time that the signature was created.
+ */
+@property(nonatomic, readonly) NSString *displayName;
+
+/** @fn initWithPlayerID:publicKeyURL:signature:salt:timestamp:displayName:
+ @brief Designated initializer.
+ @param publicKeyURL The URL for the public encryption key.
+ @param signature The verification signature generated.
+ @param salt A random string used to compute the hash and keep it randomized.
+ @param timestamp The date and time that the signature was created.
+ */
+- (nullable instancetype)initWithPlayerID:(NSString *)playerID
+ publicKeyURL:(NSURL *)publicKeyURL
+ signature:(NSData *)signature
+ salt:(NSData *)salt
+ timestamp:(uint64_t)timestamp
+ displayName:(NSString *)displayName NS_DESIGNATED_INITIALIZER;
+
+/** @fn initWithProvider:
+ @brief Initializer with a provider name.
+ @param provider The provider name.
+ */
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.m
new file mode 100644
index 00000000..881a6898
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.m
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h"
+
+#import "FirebaseAuth/Sources/Public/FIRGameCenterAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRGameCenterAuthCredential
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (nullable instancetype)initWithPlayerID:(NSString *)playerID
+ publicKeyURL:(NSURL *)publicKeyURL
+ signature:(NSData *)signature
+ salt:(NSData *)salt
+ timestamp:(uint64_t)timestamp
+ displayName:(NSString *)displayName {
+ self = [super initWithProvider:FIRGameCenterAuthProviderID];
+ if (self) {
+ _playerID = [playerID copy];
+ _publicKeyURL = [publicKeyURL copy];
+ _signature = [signature copy];
+ _salt = [salt copy];
+ _timestamp = timestamp;
+ _displayName = [displayName copy];
+ }
+ return self;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:
+ @"Attempt to call prepareVerifyAssertionRequest: on a FIRGameCenterAuthCredential."];
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *playerID = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"playerID"];
+ NSURL *publicKeyURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:@"publicKeyURL"];
+ NSData *signature = [aDecoder decodeObjectOfClass:[NSData class] forKey:@"signature"];
+ NSData *salt = [aDecoder decodeObjectOfClass:[NSData class] forKey:@"salt"];
+ NSNumber *timestamp = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:@"timestamp"];
+ NSString *displayName = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"displayName"];
+ self = [self initWithPlayerID:playerID
+ publicKeyURL:publicKeyURL
+ signature:signature
+ salt:salt
+ timestamp:timestamp.unsignedLongLongValue
+ displayName:displayName];
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:self.playerID forKey:@"playerID"];
+ [aCoder encodeObject:self.publicKeyURL forKey:@"publicKeyURL"];
+ [aCoder encodeObject:self.signature forKey:@"signature"];
+ [aCoder encodeObject:self.salt forKey:@"salt"];
+ [aCoder encodeObject:[NSNumber numberWithUnsignedLongLong:self.timestamp] forKey:@"timestamp"];
+ [aCoder encodeObject:self.displayName forKey:@"displayName"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthProvider.m
new file mode 100644
index 00000000..01b50a06
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthProvider.m
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRGameCenterAuthProvider.h"
+#import <GameKit/GameKit.h>
+
+#import "FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRGameCenterAuthProvider
+
+- (instancetype)init {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"This class is not meant to be initialized."];
+ return nil;
+}
+
++ (void)getCredentialWithCompletion:(FIRGameCenterCredentialCallback)completion {
+ /**
+ Linking GameKit.framework without using it on macOS results in App Store rejection.
+ Thus we don't link GameKit.framework to our SDK directly. `optionalLocalPlayer` is used for
+ checking whether the APP that consuming our SDK has linked GameKit.framework. If not, a
+ `GameKitNotLinkedError` will be raised.
+ **/
+ GKLocalPlayer *_Nullable optionalLocalPlayer = [[NSClassFromString(@"GKLocalPlayer") alloc] init];
+
+ if (!optionalLocalPlayer) {
+ if (completion) {
+ completion(nil, [FIRAuthErrorUtils gameKitNotLinkedError]);
+ }
+ return;
+ }
+
+ __weak GKLocalPlayer *localPlayer = [[optionalLocalPlayer class] localPlayer];
+ if (!localPlayer.isAuthenticated) {
+ if (completion) {
+ completion(nil, [FIRAuthErrorUtils localPlayerNotAuthenticatedError]);
+ }
+ return;
+ }
+
+ [localPlayer generateIdentityVerificationSignatureWithCompletionHandler:^(
+ NSURL *publicKeyURL, NSData *signature, NSData *salt, uint64_t timestamp,
+ NSError *error) {
+ if (error) {
+ if (completion) {
+ completion(nil, error);
+ }
+ } else {
+ if (completion) {
+ /**
+ @c `localPlayer.alias` is actually the displayname needed, instead of
+ `localPlayer.displayname`. For more information, check
+ https://developer.apple.com/documentation/gamekit/gkplayer
+ **/
+ NSString *displayName = localPlayer.alias;
+// iOS 13 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ FIRGameCenterAuthCredential *credential =
+ [[FIRGameCenterAuthCredential alloc] initWithPlayerID:localPlayer.playerID
+ publicKeyURL:publicKeyURL
+ signature:signature
+ salt:salt
+ timestamp:timestamp
+ displayName:displayName];
+#pragma clang diagnostic pop
+ completion(credential, nil);
+ }
+ }
+ }];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.h
new file mode 100644
index 00000000..f6765c41
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRGitHubAuthCredential
+ @brief Internal implementation of FIRAuthCredential for GitHub credentials.
+ */
+@interface FIRGitHubAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @property token
+ @brief The GitHub OAuth access token.
+ */
+@property(nonatomic, readonly) NSString *token;
+
+/** @fn initWithToken:
+ @brief Designated initializer.
+ @param token The GitHub OAuth access token.
+ */
+- (nullable instancetype)initWithToken:(NSString *)token NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.m
new file mode 100644
index 00000000..54f18ac3
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.m
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.h"
+
+#import "FirebaseAuth/Sources/Public/FIRGitHubAuthProvider.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRGitHubAuthCredential ()
+
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+@implementation FIRGitHubAuthCredential
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (nullable instancetype)initWithToken:(NSString *)token {
+ self = [super initWithProvider:FIRGitHubAuthProviderID];
+ if (self) {
+ _token = [token copy];
+ }
+ return self;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ request.providerAccessToken = _token;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *token = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"token"];
+ self = [self initWithToken:token];
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:self.token forKey:@"token"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthProvider.m
new file mode 100644
index 00000000..4534a702
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthProvider.m
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRGitHubAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/GitHub/FIRGitHubAuthCredential.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+// FIRGitHubAuthProviderID is defined in FIRAuthProvider.m.
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRGitHubAuthProvider
+
+- (instancetype)init {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"This class is not meant to be initialized."];
+ return nil;
+}
+
++ (FIRAuthCredential *)credentialWithToken:(NSString *)token {
+ return [[FIRGitHubAuthCredential alloc] initWithToken:token];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.h
new file mode 100644
index 00000000..6d205c10
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRGoogleAuthCredential
+ @brief Internal implementation of FIRAuthCredential for the Google IdP.
+ */
+@interface FIRGoogleAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @fn initWithIDToken:accessToken:
+ @brief Designated initializer.
+ @param IDToken The ID Token obtained from Google.
+ @param accessToken The Access Token obtained from Google.
+ */
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken
+ accessToken:(NSString *)accessToken NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.m
new file mode 100644
index 00000000..bbc7da2c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.m
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.h"
+
+#import "FirebaseAuth/Sources/Public/FIRGoogleAuthProvider.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRGoogleAuthCredential ()
+
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+@implementation FIRGoogleAuthCredential {
+ NSString *_IDToken;
+ NSString *_accessToken;
+}
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken accessToken:(NSString *)accessToken {
+ self = [super initWithProvider:FIRGoogleAuthProviderID];
+ if (self) {
+ _IDToken = [IDToken copy];
+ _accessToken = [accessToken copy];
+ }
+ return self;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ request.providerIDToken = _IDToken;
+ request.providerAccessToken = _accessToken;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *IDToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"IDToken"];
+ NSString *accessToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"accessToken"];
+ self = [self initWithIDToken:IDToken accessToken:accessToken];
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_IDToken forKey:@"IDToken"];
+ [aCoder encodeObject:_accessToken forKey:@"accessToken"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthProvider.m
new file mode 100644
index 00000000..a3453d0f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthProvider.m
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRGoogleAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Google/FIRGoogleAuthCredential.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+// FIRGoogleAuthProviderID is defined in FIRAuthProvider.m.
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRGoogleAuthProvider
+
+- (instancetype)init {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"This class is not meant to be initialized."];
+ return nil;
+}
+
++ (FIRAuthCredential *)credentialWithIDToken:(NSString *)IDToken
+ accessToken:(NSString *)accessToken {
+ return [[FIRGoogleAuthCredential alloc] initWithIDToken:IDToken accessToken:accessToken];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential.m
new file mode 100644
index 00000000..b57e9a1c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential.m
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIROAuthCredential.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIROAuthCredential ()
+
+@property(nonatomic, nullable) NSString *rawNonce;
+
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+@implementation FIROAuthCredential
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (instancetype)initWithProviderID:(NSString *)providerID
+ IDToken:(nullable NSString *)IDToken
+ rawNonce:(nullable NSString *)rawNonce
+ accessToken:(nullable NSString *)accessToken
+ secret:(nullable NSString *)secret
+ pendingToken:(nullable NSString *)pendingToken {
+ self = [super initWithProvider:providerID];
+ if (self) {
+ _IDToken = IDToken;
+ _rawNonce = rawNonce;
+ _accessToken = accessToken;
+ _pendingToken = pendingToken;
+ _secret = secret;
+ }
+ return self;
+}
+
+- (instancetype)initWithProviderID:(NSString *)providerID
+ sessionID:(NSString *)sessionID
+ OAuthResponseURLString:(NSString *)OAuthResponseURLString {
+ self = [self initWithProviderID:providerID
+ IDToken:nil
+ rawNonce:nil
+ accessToken:nil
+ secret:nil
+ pendingToken:nil];
+ if (self) {
+ _OAuthResponseURLString = OAuthResponseURLString;
+ _sessionID = sessionID;
+ }
+ return self;
+}
+
+- (nullable instancetype)initWithVerifyAssertionResponse:(FIRVerifyAssertionResponse *)response {
+ if (response.oauthIDToken.length || response.oauthAccessToken.length ||
+ response.oauthSecretToken.length) {
+ return [self initWithProviderID:response.providerID
+ IDToken:response.oauthIDToken
+ rawNonce:nil
+ accessToken:response.oauthAccessToken
+ secret:response.oauthSecretToken
+ pendingToken:response.pendingToken];
+ }
+ return nil;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ request.providerIDToken = _IDToken;
+ request.providerRawNonce = _rawNonce;
+ request.providerAccessToken = _accessToken;
+ request.requestURI = _OAuthResponseURLString;
+ request.sessionID = _sessionID;
+ request.providerOAuthTokenSecret = _secret;
+ request.pendingToken = _pendingToken;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *IDToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"IDToken"];
+ NSString *rawNonce = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"rawNonce"];
+ NSString *accessToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"accessToken"];
+ NSString *pendingToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"pendingToken"];
+ NSString *secret = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"secret"];
+ self = [self initWithProviderID:self.provider
+ IDToken:IDToken
+ rawNonce:rawNonce
+ accessToken:accessToken
+ secret:secret
+ pendingToken:pendingToken];
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:self.IDToken forKey:@"IDToken"];
+ [aCoder encodeObject:self.rawNonce forKey:@"rawNonce"];
+ [aCoder encodeObject:self.accessToken forKey:@"accessToken"];
+ [aCoder encodeObject:self.pendingToken forKey:@"pendingToken"];
+ [aCoder encodeObject:self.secret forKey:@"secret"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h
new file mode 100644
index 00000000..a333acae
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIROAuthCredential.h"
+
+@class FIRVerifyAssertionResponse;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @extension FIROAuthCredential
+ @brief Internal implementation of FIRAuthCredential for generic credentials.
+ */
+@interface FIROAuthCredential ()
+
+/** @property OAuthResponseURLString
+ @brief A string representation of the response URL corresponding to this OAuthCredential.
+ */
+@property(nonatomic, readonly, nullable) NSString *OAuthResponseURLString;
+
+/** @property sessionID
+ @brief The session ID used when completing the headful-lite flow.
+ */
+@property(nonatomic, readonly, nullable) NSString *sessionID;
+
+/** @property pendingToken
+ @brief The pending token used when completing the headful-lite flow.
+ */
+@property(nonatomic, readonly, nullable) NSString *pendingToken;
+
+/** @fn initWithProviderId:IDToken:accessToken:secret:pendingToken
+ @brief Designated initializer.
+ @param providerID The provider ID associated with the credential being created.
+ @param IDToken The ID Token associated with the credential being created.
+ @param rawNonce The raw nonce associated with the Auth credential being created.
+ @param accessToken The access token associated with the credential being created.
+ @param secret The secret associated with the credential being created.
+ @param pendingToken The pending token associated with the credential being created.
+ */
+- (instancetype)initWithProviderID:(NSString *)providerID
+ IDToken:(nullable NSString *)IDToken
+ rawNonce:(nullable NSString *)rawNonce
+ accessToken:(nullable NSString *)accessToken
+ secret:(nullable NSString *)secret
+ pendingToken:(nullable NSString *)pendingToken NS_DESIGNATED_INITIALIZER;
+
+/** @fn initWithProviderId:sessionID:OAuthResponseURLString:
+ @brief Intitializer which takes a sessionID and an OAuthResponseURLString.
+ @param providerID The provider ID associated with the credential being created.
+ @param sessionID The session ID used when completing the headful-lite flow.
+ @param OAuthResponseURLString The error that occurred if any.
+ */
+- (instancetype)initWithProviderID:(NSString *)providerID
+ sessionID:(NSString *)sessionID
+ OAuthResponseURLString:(NSString *)OAuthResponseURLString;
+
+/** @fn initWithVerifyAssertionResponse
+ @brief Intitializer which takes an verifyAssertion response.
+ @param response The verifyAssertion Response to create the credential instance.
+ */
+- (nullable instancetype)initWithVerifyAssertionResponse:(FIRVerifyAssertionResponse *)response;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthProvider.m
new file mode 100644
index 00000000..1285fded
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthProvider.m
@@ -0,0 +1,400 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIROAuthProvider.h"
+#include <CommonCrypto/CommonCrypto.h>
+#import "FirebaseAuth/Sources/Public/FIRFacebookAuthProvider.h"
+#import "FirebaseAuth/Sources/Public/FIROAuthCredential.h"
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+#import "FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRHeadfulLiteURLCallBack
+ @brief The callback invoked at the end of the flow to fetch a headful-lite URL.
+ @param headfulLiteURL The headful lite URL.
+ @param error The error that occurred while fetching the headful-lite, if any.
+ */
+typedef void (^FIRHeadfulLiteURLCallBack)(NSURL *_Nullable headfulLiteURL,
+ NSError *_Nullable error);
+
+/** @var kHeadfulLiteURLStringFormat
+ @brief The format of the URL used to open the headful lite page during sign-in.
+ */
+NSString *const kHeadfulLiteURLStringFormat = @"https://%@/__/auth/handler?%@";
+
+/** @var kauthTypeSignInWithRedirect
+ @brief The auth type to be specified in the sign-in request with redirect request and response.
+ */
+static NSString *const kAuthTypeSignInWithRedirect = @"signInWithRedirect";
+
+@implementation FIROAuthProvider {
+ /** @var _auth
+ @brief The auth instance used for launching the URL presenter.
+ */
+ FIRAuth *_auth;
+
+ /** @var _callbackScheme
+ @brief The callback URL scheme used for headful-lite sign-in.
+ */
+ NSString *_callbackScheme;
+}
+
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ IDToken:(NSString *)IDToken
+ accessToken:(nullable NSString *)accessToken {
+ return [[FIROAuthCredential alloc] initWithProviderID:providerID
+ IDToken:IDToken
+ rawNonce:nil
+ accessToken:accessToken
+ secret:nil
+ pendingToken:nil];
+}
+
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ accessToken:(NSString *)accessToken {
+ return [[FIROAuthCredential alloc] initWithProviderID:providerID
+ IDToken:nil
+ rawNonce:nil
+ accessToken:accessToken
+ secret:nil
+ pendingToken:nil];
+}
+
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ IDToken:(NSString *)IDToken
+ rawNonce:(nullable NSString *)rawNonce
+ accessToken:(nullable NSString *)accessToken {
+ return [[FIROAuthCredential alloc] initWithProviderID:providerID
+ IDToken:IDToken
+ rawNonce:rawNonce
+ accessToken:accessToken
+ secret:nil
+ pendingToken:nil];
+}
+
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ IDToken:(NSString *)IDToken
+ rawNonce:(nullable NSString *)rawNonce {
+ return [[FIROAuthCredential alloc] initWithProviderID:providerID
+ IDToken:IDToken
+ rawNonce:rawNonce
+ accessToken:nil
+ secret:nil
+ pendingToken:nil];
+}
+
++ (instancetype)providerWithProviderID:(NSString *)providerID {
+ return [[self alloc] initWithProviderID:providerID auth:[FIRAuth auth]];
+}
+
++ (instancetype)providerWithProviderID:(NSString *)providerID auth:(FIRAuth *)auth {
+ return [[self alloc] initWithProviderID:providerID auth:auth];
+}
+
+#if TARGET_OS_IOS
+- (void)getCredentialWithUIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthCredentialCallback)completion {
+ if (![FIRAuthWebUtils isCallbackSchemeRegisteredForCustomURLScheme:self->_callbackScheme]) {
+ [NSException raise:NSInternalInconsistencyException
+ format:@"Please register custom URL scheme '%@' in the app's Info.plist file.",
+ self->_callbackScheme];
+ }
+ __weak __typeof__(self) weakSelf = self;
+ __weak FIRAuth *weakAuth = _auth;
+ __weak NSString *weakProviderID = _providerID;
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRAuthCredentialCallback callbackOnMainThread =
+ ^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(credential, error);
+ });
+ }
+ };
+ NSString *eventID = [FIRAuthWebUtils randomStringWithLength:10];
+ NSString *sessionID = [FIRAuthWebUtils randomStringWithLength:10];
+ __strong __typeof__(self) strongSelf = weakSelf;
+ [strongSelf
+ getHeadFulLiteURLWithEventID:eventID
+ sessionID:sessionID
+ completion:^(NSURL *_Nullable headfulLiteURL, NSError *_Nullable error) {
+ if (error) {
+ callbackOnMainThread(nil, error);
+ return;
+ }
+ FIRAuthURLCallbackMatcher callbackMatcher =
+ ^BOOL(NSURL *_Nullable callbackURL) {
+ return [FIRAuthWebUtils
+ isExpectedCallbackURL:callbackURL
+ eventID:eventID
+ authType:kAuthTypeSignInWithRedirect
+ callbackScheme:strongSelf->_callbackScheme];
+ };
+ __strong FIRAuth *strongAuth = weakAuth;
+ [strongAuth.authURLPresenter
+ presentURL:headfulLiteURL
+ UIDelegate:UIDelegate
+ callbackMatcher:callbackMatcher
+ completion:^(NSURL *_Nullable callbackURL,
+ NSError *_Nullable error) {
+ if (error) {
+ callbackOnMainThread(nil, error);
+ return;
+ }
+ NSString *OAuthResponseURLString =
+ [strongSelf OAuthResponseForURL:callbackURL
+ error:&error];
+ if (error) {
+ callbackOnMainThread(nil, error);
+ return;
+ }
+ __strong NSString *strongProviderID = weakProviderID;
+ FIROAuthCredential *credential = [[FIROAuthCredential alloc]
+ initWithProviderID:strongProviderID
+ sessionID:sessionID
+ OAuthResponseURLString:OAuthResponseURLString];
+ callbackOnMainThread(credential, nil);
+ }];
+ }];
+ });
+}
+#endif // TARGET_OS_IOS
+
+#pragma mark - Internal Methods
+
+/** @fn initWithProviderID:auth:
+ @brief returns an instance of @c FIROAuthProvider associated with the provided auth instance.
+ @param auth The Auth instance to be associated with the OAuthProvider instance.
+ @return An Instance of @c FIROAuthProvider.
+ */
+- (nullable instancetype)initWithProviderID:(NSString *)providerID auth:(FIRAuth *)auth {
+ NSAssert(![providerID isEqual:FIRFacebookAuthProviderID],
+ @"Sign in with Facebook is not supported via generic IDP; the Facebook TOS "
+ "dictate that you must use the Facebook iOS SDK for Facebook login.");
+ NSAssert(![providerID isEqual:@"apple.com"],
+ @"Sign in with Apple is not supported via generic IDP; You must use the Apple iOS SDK"
+ " for Sign in with Apple.");
+ self = [super init];
+ if (self) {
+ _auth = auth;
+ _providerID = providerID;
+ _callbackScheme = [[[_auth.app.options.clientID componentsSeparatedByString:@"."]
+ reverseObjectEnumerator].allObjects componentsJoinedByString:@"."];
+ }
+ return self;
+}
+
+/** @fn OAuthResponseForURL:error:
+ @brief Parses the redirected URL and returns a string representation of the OAuth response URL.
+ @param URL The url to be parsed for an OAuth response URL.
+ @param error The error that occurred if any.
+ @return The OAuth response if successful.
+ */
+- (nullable NSString *)OAuthResponseForURL:(NSURL *)URL error:(NSError *_Nullable *_Nullable)error {
+ NSDictionary<NSString *, NSString *> *URLQueryItems =
+ [FIRAuthWebUtils dictionaryWithHttpArgumentsString:URL.query];
+ NSURL *deepLinkURL = [NSURL URLWithString:URLQueryItems[@"deep_link_id"]];
+ URLQueryItems = [FIRAuthWebUtils dictionaryWithHttpArgumentsString:deepLinkURL.query];
+ NSString *queryItemLink = URLQueryItems[@"link"];
+ if (queryItemLink) {
+ return queryItemLink;
+ }
+ if (!error) {
+ return nil;
+ }
+ NSData *errorData = [URLQueryItems[@"firebaseError"] dataUsingEncoding:NSUTF8StringEncoding];
+ NSError *jsonError;
+ NSDictionary *errorDict = [NSJSONSerialization JSONObjectWithData:errorData
+ options:0
+ error:&jsonError];
+ if (jsonError) {
+ *error = [FIRAuthErrorUtils JSONSerializationErrorWithUnderlyingError:jsonError];
+ return nil;
+ }
+ *error = [FIRAuthErrorUtils URLResponseErrorWithCode:errorDict[@"code"]
+ message:errorDict[@"message"]];
+ if (!*error) {
+ NSString *reason;
+ if (errorDict[@"code"] && errorDict[@"message"]) {
+ reason = [NSString stringWithFormat:@"[%@] - %@", errorDict[@"code"], errorDict[@"message"]];
+ }
+ *error = [FIRAuthErrorUtils webSignInUserInteractionFailureWithReason:reason];
+ }
+ return nil;
+}
+
+/** @fn getHeadFulLiteURLWithEventID:completion:
+ @brief Constructs a URL used for opening a headful-lite flow using a given event
+ ID and session ID.
+ @param eventID The event ID used for this purpose.
+ @param sessionID The session ID used when completing the headful lite flow.
+ @param completion The callback invoked after the URL has been constructed or an error
+ has been encountered.
+ */
+- (void)getHeadFulLiteURLWithEventID:(NSString *)eventID
+ sessionID:(NSString *)sessionID
+ completion:(FIRHeadfulLiteURLCallBack)completion {
+ __weak __typeof__(self) weakSelf = self;
+ [FIRAuthWebUtils
+ fetchAuthDomainWithRequestConfiguration:_auth.requestConfiguration
+ completion:^(NSString *_Nullable authDomain,
+ NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ completion(nil, error);
+ }
+ return;
+ }
+ __strong __typeof__(self) strongSelf = weakSelf;
+ NSString *bundleID = [NSBundle mainBundle].bundleIdentifier;
+ NSString *clienID = strongSelf->_auth.app.options.clientID;
+ NSString *apiKey =
+ strongSelf->_auth.requestConfiguration.APIKey;
+ NSMutableDictionary *urlArguments = [@{
+ @"apiKey" : apiKey,
+ @"authType" : @"signInWithRedirect",
+ @"ibi" : bundleID ?: @"",
+ @"clientId" : clienID,
+ @"sessionId" : [strongSelf hashforString:sessionID],
+ @"v" : [FIRAuthBackend authUserAgent],
+ @"eventId" : eventID,
+ @"providerId" : strongSelf->_providerID,
+ } mutableCopy];
+ if (strongSelf.scopes.count) {
+ urlArguments[@"scopes"] =
+ [strongSelf.scopes componentsJoinedByString:@","];
+ }
+ if (strongSelf.customParameters.count) {
+ NSString *customParameters =
+ [strongSelf customParametersStringWithError:&error];
+ if (error) {
+ completion(nil, error);
+ return;
+ }
+ if (customParameters) {
+ urlArguments[@"customParameters"] = customParameters;
+ }
+ }
+ if (strongSelf->_auth.requestConfiguration.languageCode) {
+ urlArguments[@"hl"] =
+ strongSelf->_auth.requestConfiguration.languageCode;
+ }
+ NSString *argumentsString = [strongSelf
+ httpArgumentsStringForArgsDictionary:urlArguments];
+ NSString *URLString =
+ [NSString stringWithFormat:kHeadfulLiteURLStringFormat,
+ authDomain, argumentsString];
+ if (completion) {
+ NSCharacterSet *set =
+ [NSCharacterSet URLFragmentAllowedCharacterSet];
+ completion(
+ [NSURL
+ URLWithString:
+ [URLString
+ stringByAddingPercentEncodingWithAllowedCharacters:
+ set]],
+ nil);
+ }
+ }];
+}
+
+/** @fn customParametersString
+ @brief Returns a JSON string representation of the custom parameters dictionary corresponding
+ to the OAuthProvider.
+ @return The JSON string representation of the custom parameters dictionary corresponding
+ to the OAuthProvider.
+ */
+- (nullable NSString *)customParametersStringWithError:(NSError *_Nullable *_Nullable)error {
+ if (!_customParameters.count) {
+ return nil;
+ }
+
+ if (!error) {
+ return nil;
+ }
+ NSError *jsonError;
+ NSData *customParametersJSONData = [NSJSONSerialization dataWithJSONObject:_customParameters
+ options:0
+ error:&jsonError];
+ if (jsonError) {
+ *error = [FIRAuthErrorUtils JSONSerializationErrorWithUnderlyingError:jsonError];
+ return nil;
+ }
+
+ NSString *customParamsRawJSON = [[NSString alloc] initWithData:customParametersJSONData
+ encoding:NSUTF8StringEncoding];
+ return customParamsRawJSON;
+}
+
+/** @fn hashforString:
+ @brief Returns the SHA256 hash representation of a given string object.
+ @param string The string for which a SHA256 hash is desired.
+ @return An hexadecimal string representation of the SHA256 hash.
+ */
+- (NSString *)hashforString:(NSString *)string {
+ NSData *sessionIDData = [string dataUsingEncoding:NSUTF8StringEncoding];
+ NSMutableData *hashOutputData = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH];
+ if (CC_SHA256(sessionIDData.bytes, (CC_LONG)[sessionIDData length],
+ hashOutputData.mutableBytes)) {
+ }
+ return [self hexStringFromData:hashOutputData];
+ ;
+}
+
+/** @fn hexStringFromData:
+ @brief Returns the hexadecimal string representation of an NSData object.
+ @param data The NSData object for which a hexadecical string is desired.
+ @return The hexadecimal string representation of the supplied NSData object.
+ */
+- (NSString *)hexStringFromData:(NSData *)data {
+ const unsigned char *dataBuffer = (const unsigned char *)[data bytes];
+ NSMutableString *string = [[NSMutableString alloc] init];
+ for (unsigned int i = 0; i < data.length; i++) {
+ [string appendFormat:@"%02lx", (unsigned long)dataBuffer[i]];
+ }
+ return [string copy];
+}
+
+- (NSString *)httpArgumentsStringForArgsDictionary:(NSDictionary *)argsDictionary {
+ NSMutableArray *arguments = [NSMutableArray arrayWithCapacity:argsDictionary.count];
+ NSString *key;
+ for (key in argsDictionary) {
+ NSString *description = [argsDictionary[key] description];
+ [arguments
+ addObject:[NSString
+ stringWithFormat:@"%@=%@",
+ [FIRAuthWebUtils stringByUnescapingFromURLArgument:key],
+ [FIRAuthWebUtils
+ stringByUnescapingFromURLArgument:description]]];
+ }
+ return [arguments componentsJoinedByString:@"&"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential.m
new file mode 100644
index 00000000..c160bfce
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential.m
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRPhoneAuthCredential.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRPhoneAuthCredential ()
+
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+@implementation FIRPhoneAuthCredential
+
+- (instancetype)initWithTemporaryProof:(NSString *)temporaryProof
+ phoneNumber:(NSString *)phoneNumber
+ providerID:(NSString *)providerID {
+ self = [super initWithProvider:providerID];
+ if (self) {
+ _temporaryProof = [temporaryProof copy];
+ _phoneNumber = [phoneNumber copy];
+ }
+ return self;
+}
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (instancetype)initWithProviderID:(NSString *)providerID
+ verificationID:(NSString *)verificationID
+ verificationCode:(NSString *)verificationCode {
+ self = [super initWithProvider:providerID];
+ if (self) {
+ _verificationID = [verificationID copy];
+ _verificationCode = [verificationCode copy];
+ }
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *verificationID = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:@"verificationID"];
+ NSString *verificationCode = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:@"verificationCode"];
+ NSString *temporaryProof = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:@"temporaryProof"];
+ NSString *phoneNumber = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"phoneNumber"];
+ if (temporaryProof.length && phoneNumber.length) {
+ self = [self initWithTemporaryProof:temporaryProof
+ phoneNumber:phoneNumber
+ providerID:self.provider];
+ } else if (verificationID.length && verificationCode.length) {
+ self = [self initWithProviderID:self.provider
+ verificationID:verificationID
+ verificationCode:verificationCode];
+ } else {
+ self = nil;
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:self.verificationID forKey:@"verificationID"];
+ [aCoder encodeObject:self.verificationCode forKey:@"verificationCode"];
+ [aCoder encodeObject:self.temporaryProof forKey:@"temporaryProof"];
+ [aCoder encodeObject:self.phoneNumber forKey:@"phoneNumber"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h
new file mode 100644
index 00000000..1d320298
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRPhoneAuthCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @extension FIRPhoneAuthCredential
+ @brief Internal implementation of FIRAuthCredential for Phone Auth credentials.
+ */
+@interface FIRPhoneAuthCredential ()
+
+/** @var verificationID
+ @brief The verification ID obtained from invoking @c verifyPhoneNumber:completion:
+ */
+@property(nonatomic, readonly, nonnull) NSString *verificationID;
+
+/** @var verificationCode
+ @brief The verification code provided by the user.
+ */
+@property(nonatomic, readonly, nonnull) NSString *verificationCode;
+
+/** @var temporaryProof
+ @brief The a temporary proof code perftaining to this credential, returned from the backend.
+ */
+@property(nonatomic, readonly, nonnull) NSString *temporaryProof;
+
+/** @var phoneNumber
+ @brief The a phone number pertaining to this credential, returned from the backend.
+ */
+@property(nonatomic, readonly, nonnull) NSString *phoneNumber;
+
+/** @var initWithTemporaryProof:phoneNumber:
+ @brief Designated Initializer.
+ @param providerID The provider ID associated with the phone auth credential being created.
+ */
+- (instancetype)initWithTemporaryProof:(NSString *)temporaryProof
+ phoneNumber:(NSString *)phoneNumber
+ providerID:(NSString *)providerID NS_DESIGNATED_INITIALIZER;
+
+/** @var initWithProviderID:verificationID:verificationCode:
+ @brief Designated Initializer.
+ @param providerID The provider ID associated with the phone auth credential being created.
+ @param verificationID The verification ID associated witht Phone Auth credential being created.
+ @param verificationCode The verification code associated witht Phone Auth credential being
+ created.
+ */
+- (instancetype)initWithProviderID:(NSString *)providerID
+ verificationID:(NSString *)verificationID
+ verificationCode:(NSString *)verificationCode NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthProvider.m
new file mode 100644
index 00000000..ed73d535
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthProvider.m
@@ -0,0 +1,716 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRAuthSettings.h"
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorResolver.h"
+#import "FirebaseAuth/Sources/Public/FIRPhoneAuthProvider.h"
+#import "FirebaseAuth/Sources/Public/FirebaseAuthVersion.h"
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo+Internal.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRReCAPTCHAURLCallBack
+ @brief The callback invoked at the end of the flow to fetch a reCAPTCHA URL.
+ @param reCAPTCHAURL The reCAPTCHA URL.
+ @param error The error that occurred while fetching the reCAPTCHAURL, if any.
+ */
+typedef void (^FIRReCAPTCHAURLCallBack)(NSURL *_Nullable reCAPTCHAURL, NSError *_Nullable error);
+
+/** @typedef FIRVerifyClientCallback
+ @brief The callback invoked at the end of a client verification flow.
+ @param appCredential credential that proves the identity of the app during a phone
+ authentication flow.
+ @param error The error that occurred while verifying the app, if any.
+ */
+typedef void (^FIRVerifyClientCallback)(FIRAuthAppCredential *_Nullable appCredential,
+ NSString *_Nullable reCAPTCHAToken,
+ NSError *_Nullable error);
+
+/** @typedef FIRFetchAuthDomainCallback
+ @brief The callback invoked at the end of the flow to fetch the Auth domain.
+ @param authDomain The Auth domain.
+ @param error The error that occurred while fetching the auth domain, if any.
+ */
+typedef void (^FIRFetchAuthDomainCallback)(NSString *_Nullable authDomain,
+ NSError *_Nullable error);
+
+/** @var kauthTypeVerifyApp
+ @brief The auth type to be specified in the app verification request.
+ */
+static NSString *const kAuthTypeVerifyApp = @"verifyApp";
+
+/** @var kReCAPTCHAURLStringFormat
+ @brief The format of the URL used to open the reCAPTCHA page during app verification.
+ */
+NSString *const kReCAPTCHAURLStringFormat = @"https://%@/__/auth/handler?";
+
+extern NSString *const FIRPhoneMultiFactorID;
+
+@implementation FIRPhoneAuthProvider {
+ /** @var _auth
+ @brief The auth instance used for verifying the phone number.
+ */
+ FIRAuth *_auth;
+
+ /** @var _callbackScheme
+ @brief The callback URL scheme used for reCAPTCHA fallback.
+ */
+ NSString *_callbackScheme;
+}
+
+/** @fn initWithAuth:
+ @brief returns an instance of @c FIRPhoneAuthProvider associated with the provided auth
+ instance.
+ @return An Instance of @c FIRPhoneAuthProvider.
+ */
+- (nullable instancetype)initWithAuth:(FIRAuth *)auth {
+ self = [super init];
+ if (self) {
+ _auth = auth;
+ _callbackScheme = [[[_auth.app.options.clientID componentsSeparatedByString:@"."]
+ reverseObjectEnumerator].allObjects componentsJoinedByString:@"."];
+ }
+ return self;
+}
+
+- (void)verifyPhoneNumber:(NSString *)phoneNumber
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRVerificationResultCallback)completion {
+ if (![FIRAuthWebUtils isCallbackSchemeRegisteredForCustomURLScheme:_callbackScheme]) {
+ [NSException raise:NSInternalInconsistencyException
+ format:@"Please register custom URL scheme '%@' in the app's Info.plist file.",
+ _callbackScheme];
+ }
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRVerificationResultCallback callBackOnMainThread =
+ ^(NSString *_Nullable verificationID, NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(verificationID, error);
+ });
+ }
+ };
+ [self
+ internalVerifyPhoneNumber:phoneNumber
+ UIDelegate:UIDelegate
+ completion:^(NSString *_Nullable verificationID, NSError *_Nullable error) {
+ if (!error) {
+ callBackOnMainThread(verificationID, nil);
+ return;
+ } else {
+ callBackOnMainThread(nil, error);
+ return;
+ }
+ }];
+ });
+}
+
+- (void)verifyPhoneNumberWithMultiFactorInfo:(FIRPhoneMultiFactorInfo *)phoneMultiFactorInfo
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ multiFactorSession:(nullable FIRMultiFactorSession *)session
+ completion:(nullable FIRVerificationResultCallback)completion {
+ session.multiFactorInfo = phoneMultiFactorInfo;
+ [self verifyPhoneNumber:phoneMultiFactorInfo.phoneNumber
+ UIDelegate:UIDelegate
+ multiFactorSession:session
+ completion:completion];
+}
+
+- (void)verifyPhoneNumber:(NSString *)phoneNumber
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ multiFactorSession:(nullable FIRMultiFactorSession *)session
+ completion:(nullable FIRVerificationResultCallback)completion {
+ if (!session) {
+ [self verifyPhoneNumber:phoneNumber UIDelegate:UIDelegate completion:completion];
+ return;
+ }
+
+ if (![FIRAuthWebUtils isCallbackSchemeRegisteredForCustomURLScheme:_callbackScheme]) {
+ [NSException raise:NSInternalInconsistencyException
+ format:@"Please register custom URL scheme '%@' in the app's Info.plist file.",
+ _callbackScheme];
+ }
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ FIRVerificationResultCallback callBackOnMainThread =
+ ^(NSString *_Nullable verificationID, NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(verificationID, error);
+ });
+ }
+ };
+ [self
+ internalVerifyPhoneNumber:phoneNumber
+ UIDelegate:UIDelegate
+ multiFactorSession:session
+ completion:^(NSString *_Nullable verificationID, NSError *_Nullable error) {
+ if (!error) {
+ callBackOnMainThread(verificationID, nil);
+ return;
+ } else {
+ callBackOnMainThread(nil, error);
+ return;
+ }
+ }];
+ });
+}
+
+- (FIRPhoneAuthCredential *)credentialWithVerificationID:(NSString *)verificationID
+ verificationCode:(NSString *)verificationCode {
+ return [[FIRPhoneAuthCredential alloc] initWithProviderID:FIRPhoneAuthProviderID
+ verificationID:verificationID
+ verificationCode:verificationCode];
+}
+
++ (instancetype)provider {
+ return [[self alloc] initWithAuth:[FIRAuth auth]];
+}
+
++ (instancetype)providerWithAuth:(FIRAuth *)auth {
+ return [[self alloc] initWithAuth:auth];
+}
+
+#pragma mark - Internal Methods
+
+/** @fn reCAPTCHATokenForURL:error:
+ @brief Parses the reCAPTCHA URL and returns the reCAPTCHA token.
+ @param URL The url to be parsed for a reCAPTCHA token.
+ @param error The error that occurred if any.
+ @return The reCAPTCHA token if successful.
+ */
+- (NSString *)reCAPTCHATokenForURL:(NSURL *)URL error:(NSError **)error {
+ NSURLComponents *actualURLComponents = [NSURLComponents componentsWithURL:URL
+ resolvingAgainstBaseURL:NO];
+ NSArray<NSURLQueryItem *> *queryItems = [actualURLComponents queryItems];
+ NSString *deepLinkURL = [FIRAuthWebUtils queryItemValue:@"deep_link_id" from:queryItems];
+ NSData *errorData;
+ if (deepLinkURL) {
+ actualURLComponents = [NSURLComponents componentsWithString:deepLinkURL];
+ queryItems = [actualURLComponents queryItems];
+ NSString *recaptchaToken = [FIRAuthWebUtils queryItemValue:@"recaptchaToken" from:queryItems];
+ if (recaptchaToken) {
+ return recaptchaToken;
+ }
+ NSString *firebaseError = [FIRAuthWebUtils queryItemValue:@"firebaseError" from:queryItems];
+ errorData = [firebaseError dataUsingEncoding:NSUTF8StringEncoding];
+ } else {
+ errorData = nil;
+ }
+ NSError *jsonError;
+ NSDictionary *errorDict = [NSJSONSerialization JSONObjectWithData:errorData
+ options:0
+ error:&jsonError];
+ if (jsonError) {
+ *error = [FIRAuthErrorUtils JSONSerializationErrorWithUnderlyingError:jsonError];
+ return nil;
+ }
+ *error = [FIRAuthErrorUtils URLResponseErrorWithCode:errorDict[@"code"]
+ message:errorDict[@"message"]];
+ if (!*error) {
+ NSString *reason;
+ if (errorDict[@"code"] && errorDict[@"message"]) {
+ reason = [NSString stringWithFormat:@"[%@] - %@", errorDict[@"code"], errorDict[@"message"]];
+ } else {
+ reason = [NSString stringWithFormat:@"An unknown error occurred with the following "
+ "response: %@",
+ deepLinkURL];
+ }
+ *error = [FIRAuthErrorUtils appVerificationUserInteractionFailureWithReason:reason];
+ }
+ return nil;
+}
+
+/** @fn internalVerifyPhoneNumber:completion:
+ @brief Starts the phone number authentication flow by sending a verifcation code to the
+ specified phone number.
+ @param phoneNumber The phone number to be verified.
+ @param completion The callback to be invoked when the verification flow is finished.
+ */
+
+- (void)internalVerifyPhoneNumber:(NSString *)phoneNumber
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRVerificationResultCallback)completion {
+ if (!phoneNumber.length) {
+ completion(nil, [FIRAuthErrorUtils missingPhoneNumberErrorWithMessage:nil]);
+ return;
+ }
+ [_auth.notificationManager
+ checkNotificationForwardingWithCallback:^(BOOL isNotificationBeingForwarded) {
+ if (!isNotificationBeingForwarded) {
+ completion(nil, [FIRAuthErrorUtils notificationNotForwardedError]);
+ return;
+ }
+ FIRVerificationResultCallback callback =
+ ^(NSString *_Nullable verificationID, NSError *_Nullable error) {
+ if (completion) {
+ completion(verificationID, error);
+ }
+ };
+ [self verifyClientAndSendVerificationCodeToPhoneNumber:phoneNumber
+ retryOnInvalidAppCredential:YES
+ UIDelegate:UIDelegate
+ callback:callback];
+ }];
+}
+
+- (void)internalVerifyPhoneNumber:(NSString *)phoneNumber
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ multiFactorSession:(nullable FIRMultiFactorSession *)session
+ completion:(nullable FIRVerificationResultCallback)completion {
+ if (!phoneNumber.length) {
+ if (completion) {
+ completion(nil, [FIRAuthErrorUtils missingPhoneNumberErrorWithMessage:nil]);
+ }
+ return;
+ }
+ [_auth.notificationManager
+ checkNotificationForwardingWithCallback:^(BOOL isNotificationBeingForwarded) {
+ if (!isNotificationBeingForwarded) {
+ if (completion) {
+ completion(nil, [FIRAuthErrorUtils notificationNotForwardedError]);
+ }
+ return;
+ }
+ FIRVerificationResultCallback callback =
+ ^(NSString *_Nullable verificationID, NSError *_Nullable error) {
+ if (completion) {
+ completion(verificationID, error);
+ }
+ };
+ [self verifyClientAndSendVerificationCodeToPhoneNumber:phoneNumber
+ retryOnInvalidAppCredential:YES
+ UIDelegate:UIDelegate
+ multiFactorSession:session
+ callback:callback];
+ }];
+}
+
+/** @fn verifyClientAndSendVerificationCodeToPhoneNumber:retryOnInvalidAppCredential:callback:
+ @brief Starts the flow to verify the client via silent push notification.
+ @param retryOnInvalidAppCredential Whether of not the flow should be retried if an
+ FIRAuthErrorCodeInvalidAppCredential error is returned from the backend.
+ @param phoneNumber The phone number to be verified.
+ @param callback The callback to be invoked on the global work queue when the flow is
+ finished.
+ */
+- (void)verifyClientAndSendVerificationCodeToPhoneNumber:(NSString *)phoneNumber
+ retryOnInvalidAppCredential:(BOOL)retryOnInvalidAppCredential
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ callback:(FIRVerificationResultCallback)callback {
+ if (_auth.settings.isAppVerificationDisabledForTesting) {
+ FIRSendVerificationCodeRequest *request =
+ [[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:phoneNumber
+ appCredential:nil
+ reCAPTCHAToken:nil
+ requestConfiguration:_auth.requestConfiguration];
+ [FIRAuthBackend sendVerificationCode:request
+ callback:^(FIRSendVerificationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callback(response.verificationID, error);
+ }];
+ return;
+ }
+ [self
+ verifyClientWithUIDelegate:UIDelegate
+ completion:^(FIRAuthAppCredential *_Nullable appCredential,
+ NSString *_Nullable reCAPTCHAToken, NSError *_Nullable error) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ FIRSendVerificationCodeRequest *_Nullable request;
+ if (appCredential) {
+ request = [[FIRSendVerificationCodeRequest alloc]
+ initWithPhoneNumber:phoneNumber
+ appCredential:appCredential
+ reCAPTCHAToken:nil
+ requestConfiguration:self->_auth.requestConfiguration];
+ } else if (reCAPTCHAToken) {
+ request = [[FIRSendVerificationCodeRequest alloc]
+ initWithPhoneNumber:phoneNumber
+ appCredential:nil
+ reCAPTCHAToken:reCAPTCHAToken
+ requestConfiguration:self->_auth.requestConfiguration];
+ }
+ if (request) {
+ [FIRAuthBackend
+ sendVerificationCode:request
+ callback:^(
+ FIRSendVerificationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ if (error.code ==
+ FIRAuthErrorCodeInvalidAppCredential) {
+ if (retryOnInvalidAppCredential) {
+ [self->_auth
+ .appCredentialManager clearCredential];
+ [self
+ verifyClientAndSendVerificationCodeToPhoneNumber:
+ phoneNumber
+ retryOnInvalidAppCredential:
+ NO
+ UIDelegate:
+ UIDelegate
+ callback:
+ callback];
+ return;
+ }
+ callback(
+ nil,
+ [FIRAuthErrorUtils
+ unexpectedResponseWithDeserializedResponse:
+ nil
+ underlyingError:
+ error]);
+ return;
+ }
+ callback(nil, error);
+ return;
+ }
+ callback(response.verificationID, nil);
+ }];
+ }
+ }];
+}
+
+- (void)verifyClientAndSendVerificationCodeToPhoneNumber:(NSString *)phoneNumber
+ retryOnInvalidAppCredential:(BOOL)retryOnInvalidAppCredential
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ multiFactorSession:(nullable FIRMultiFactorSession *)session
+ callback:(FIRVerificationResultCallback)callback {
+ if (_auth.settings.isAppVerificationDisabledForTesting) {
+ FIRSendVerificationCodeRequest *request =
+ [[FIRSendVerificationCodeRequest alloc] initWithPhoneNumber:phoneNumber
+ appCredential:nil
+ reCAPTCHAToken:nil
+ requestConfiguration:_auth.requestConfiguration];
+ [FIRAuthBackend sendVerificationCode:request
+ callback:^(FIRSendVerificationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callback(response.verificationID, error);
+ }];
+ return;
+ }
+
+ [self
+ verifyClientWithUIDelegate:UIDelegate
+ completion:^(FIRAuthAppCredential *_Nullable appCredential,
+ NSString *_Nullable reCAPTCHAToken, NSError *_Nullable error) {
+ if (error) {
+ if (callback) {
+ callback(nil, error);
+ }
+ return;
+ }
+
+ NSString *IDToken = session.IDToken;
+ FIRAuthProtoStartMFAPhoneRequestInfo *startMFARequestInfo =
+ [[FIRAuthProtoStartMFAPhoneRequestInfo alloc]
+ initWithPhoneNumber:phoneNumber
+ appCredential:appCredential
+ reCAPTCHAToken:reCAPTCHAToken];
+ if (session.IDToken) {
+ FIRStartMFAEnrollmentRequest *request =
+ [[FIRStartMFAEnrollmentRequest alloc]
+ initWithIDToken:IDToken
+ enrollmentInfo:startMFARequestInfo
+ requestConfiguration:self->_auth.requestConfiguration];
+ [FIRAuthBackend
+ startMultiFactorEnrollment:request
+ callback:^(FIRStartMFAEnrollmentResponse
+ *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ if (error.code ==
+ FIRAuthErrorCodeInvalidAppCredential) {
+ if (retryOnInvalidAppCredential) {
+ [self->_auth.appCredentialManager
+ clearCredential];
+ [self
+ verifyClientAndSendVerificationCodeToPhoneNumber:
+ phoneNumber
+ retryOnInvalidAppCredential:
+ NO
+ UIDelegate:
+ UIDelegate
+ multiFactorSession:
+ session
+ callback:
+ callback];
+ return;
+ }
+ if (callback) {
+ callback(
+ nil,
+ [FIRAuthErrorUtils
+ unexpectedResponseWithDeserializedResponse:
+ nil
+ underlyingError:
+ error]);
+ }
+ return;
+ } else {
+ if (callback) {
+ callback(nil, error);
+ }
+ }
+ } else {
+ if (callback) {
+ callback(
+ response.enrollmentResponse.sessionInfo,
+ nil);
+ }
+ }
+ }];
+ } else {
+ FIRStartMFASignInRequest *request = [[FIRStartMFASignInRequest alloc]
+ initWithMFAPendingCredential:session.MFAPendingCredential
+ MFAEnrollmentID:session.multiFactorInfo.UID
+ signInInfo:startMFARequestInfo
+ requestConfiguration:self->_auth.requestConfiguration];
+ [FIRAuthBackend
+ startMultiFactorSignIn:request
+ callback:^(
+ FIRStartMFASignInResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ if (error.code ==
+ FIRAuthErrorCodeInvalidAppCredential) {
+ if (retryOnInvalidAppCredential) {
+ [self->_auth
+ .appCredentialManager clearCredential];
+ [self
+ verifyClientAndSendVerificationCodeToPhoneNumber:
+ phoneNumber
+ retryOnInvalidAppCredential:
+ NO
+ UIDelegate:
+ UIDelegate
+ multiFactorSession:
+ session
+ callback:
+ callback];
+ return;
+ }
+ if (callback) {
+ callback(
+ nil,
+ [FIRAuthErrorUtils
+ unexpectedResponseWithDeserializedResponse:
+ nil
+ underlyingError:
+ error]);
+ }
+ return;
+ } else {
+ if (callback) {
+ callback(nil, error);
+ }
+ }
+ } else {
+ if (callback) {
+ callback(response.responseInfo.sessionInfo, nil);
+ }
+ }
+ }];
+ }
+ }];
+}
+
+/** @fn verifyClientWithCompletion:completion:
+ @brief Continues the flow to verify the client via silent push notification.
+ @param completion The callback to be invoked when the client verification flow is finished.
+ */
+- (void)verifyClientWithUIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(FIRVerifyClientCallback)completion {
+ if (_auth.appCredentialManager.credential) {
+ completion(_auth.appCredentialManager.credential, nil, nil);
+ return;
+ }
+ [_auth.tokenManager getTokenWithCallback:^(FIRAuthAPNSToken *_Nullable token,
+ NSError *_Nullable error) {
+ if (!token) {
+ [self reCAPTCHAFlowWithUIDelegate:UIDelegate completion:completion];
+ return;
+ }
+ FIRVerifyClientRequest *request =
+ [[FIRVerifyClientRequest alloc] initWithAppToken:token.string
+ isSandbox:token.type == FIRAuthAPNSTokenTypeSandbox
+ requestConfiguration:self->_auth.requestConfiguration];
+ [FIRAuthBackend
+ verifyClient:request
+ callback:^(FIRVerifyClientResponse *_Nullable response, NSError *_Nullable error) {
+ if (error) {
+ NSError *underlyingError = error.userInfo[NSUnderlyingErrorKey];
+ BOOL isInvalidAppCredential =
+ error.code == FIRAuthErrorCodeInternalError &&
+ underlyingError.code == FIRAuthErrorCodeInvalidAppCredential;
+ if (error.code != FIRAuthErrorCodeMissingAppToken && !isInvalidAppCredential) {
+ completion(nil, nil, error);
+ return;
+ } else {
+ [self reCAPTCHAFlowWithUIDelegate:UIDelegate completion:completion];
+ return;
+ }
+ }
+ NSTimeInterval timeout = [response.suggestedTimeOutDate timeIntervalSinceNow];
+ [self->_auth.appCredentialManager
+ didStartVerificationWithReceipt:response.receipt
+ timeout:timeout
+ callback:^(FIRAuthAppCredential *credential) {
+ if (!credential.secret) {
+ FIRLogWarning(kFIRLoggerAuth, @"I-AUT000014",
+ @"Failed to receive remote notification "
+ @"to verify app identity within "
+ @"%.0f second(s)",
+ timeout);
+ }
+ completion(credential, nil, nil);
+ }];
+ }];
+ }];
+}
+
+- (void)reCAPTCHAFlowWithUIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(FIRVerifyClientCallback)completion {
+ NSString *eventID = [FIRAuthWebUtils randomStringWithLength:10];
+ [self
+ reCAPTCHAURLWithEventID:eventID
+ completion:^(NSURL *_Nullable reCAPTCHAURL, NSError *_Nullable error) {
+ if (error) {
+ completion(nil, nil, error);
+ return;
+ }
+ FIRAuthURLCallbackMatcher callbackMatcher =
+ ^BOOL(NSURL *_Nullable callbackURL) {
+ return [FIRAuthWebUtils isExpectedCallbackURL:callbackURL
+ eventID:eventID
+ authType:kAuthTypeVerifyApp
+ callbackScheme:self->_callbackScheme];
+ };
+ [self->_auth.authURLPresenter
+ presentURL:reCAPTCHAURL
+ UIDelegate:UIDelegate
+ callbackMatcher:callbackMatcher
+ completion:^(NSURL *_Nullable callbackURL, NSError *_Nullable error) {
+ if (error) {
+ completion(nil, nil, error);
+ return;
+ }
+ NSError *reCAPTCHAError;
+ NSString *reCAPTCHAToken =
+ [self reCAPTCHATokenForURL:callbackURL error:&reCAPTCHAError];
+ if (!reCAPTCHAToken) {
+ completion(nil, nil, reCAPTCHAError);
+ return;
+ } else {
+ completion(nil, reCAPTCHAToken, nil);
+ return;
+ }
+ }];
+ }];
+}
+
+/** @fn reCAPTCHAURLWithEventID:completion:
+ @brief Constructs a URL used for opening a reCAPTCHA app verification flow using a given event
+ ID.
+ @param eventID The event ID used for this purpose.
+ @param completion The callback invoked after the URL has been constructed or an error
+ has been encountered.
+ */
+- (void)reCAPTCHAURLWithEventID:(NSString *)eventID completion:(FIRReCAPTCHAURLCallBack)completion {
+ [FIRAuthWebUtils
+ fetchAuthDomainWithRequestConfiguration:_auth.requestConfiguration
+ completion:^(NSString *_Nullable authDomain,
+ NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ completion(nil, error);
+ return;
+ }
+ }
+ NSString *bundleID = [NSBundle mainBundle].bundleIdentifier;
+ NSString *clientID = self->_auth.app.options.clientID;
+ NSString *apiKey = self->_auth.requestConfiguration.APIKey;
+ NSMutableArray<NSURLQueryItem *> *queryItems = [@[
+ [NSURLQueryItem queryItemWithName:@"apiKey" value:apiKey],
+ [NSURLQueryItem queryItemWithName:@"authType"
+ value:kAuthTypeVerifyApp],
+ [NSURLQueryItem queryItemWithName:@"ibi"
+ value:bundleID ?: @""],
+ [NSURLQueryItem queryItemWithName:@"clientId"
+ value:clientID],
+ [NSURLQueryItem
+ queryItemWithName:@"v"
+ value:[FIRAuthBackend authUserAgent]],
+ [NSURLQueryItem queryItemWithName:@"eventId" value:eventID]
+ ] mutableCopy];
+
+ if (self->_auth.requestConfiguration.languageCode) {
+ [queryItems
+ addObject:[NSURLQueryItem
+ queryItemWithName:@"hl"
+ value:self->_auth
+ .requestConfiguration
+ .languageCode]];
+ }
+ NSURLComponents *components = [[NSURLComponents alloc]
+ initWithString:
+ [NSString stringWithFormat:kReCAPTCHAURLStringFormat,
+ authDomain]];
+ [components setQueryItems:queryItems];
+ if (completion) {
+ completion([components URL], nil);
+ }
+ }];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.h
new file mode 100644
index 00000000..ad25dc6b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRTwitterAuthCredential
+ @brief Internal implementation of FIRAuthCredential for Twitter credentials.
+ */
+@interface FIRTwitterAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @property token
+ @brief The Twitter OAuth token.
+ */
+@property(nonatomic, readonly) NSString *token;
+
+/** @property secret
+ @brief The Twitter OAuth secret.
+ */
+@property(nonatomic, readonly) NSString *secret;
+
+/** @fn initWithToken:secret:
+ @brief Designated initializer.
+ @param token The Twitter OAuth token.
+ @param secret The Twitter OAuth secret.
+ */
+- (nullable instancetype)initWithToken:(NSString *)token
+ secret:(NSString *)secret NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.m
new file mode 100644
index 00000000..61f21a09
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.m
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.h"
+
+#import "FirebaseAuth/Sources/Public/FIRTwitterAuthProvider.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRTwitterAuthCredential ()
+
+- (nullable instancetype)initWithProvider:(NSString *)provider NS_UNAVAILABLE;
+
+@end
+
+@implementation FIRTwitterAuthCredential
+
+- (nullable instancetype)initWithProvider:(NSString *)provider {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"Please call the designated initializer."];
+ return nil;
+}
+
+- (nullable instancetype)initWithToken:(NSString *)token secret:(NSString *)secret {
+ self = [super initWithProvider:FIRTwitterAuthProviderID];
+ if (self) {
+ _token = [token copy];
+ _secret = [secret copy];
+ }
+ return self;
+}
+
+- (void)prepareVerifyAssertionRequest:(FIRVerifyAssertionRequest *)request {
+ request.providerAccessToken = _token;
+ request.providerOAuthTokenSecret = _secret;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *token = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"token"];
+ NSString *secret = [aDecoder decodeObjectOfClass:[NSString class] forKey:@"secret"];
+ self = [self initWithToken:token secret:secret];
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:self.token forKey:@"token"];
+ [aCoder encodeObject:self.secret forKey:@"secret"];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthProvider.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthProvider.m
new file mode 100644
index 00000000..eea1d32c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthProvider.m
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRTwitterAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Twitter/FIRTwitterAuthCredential.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+// FIRTwitterAuthProviderID is defined in FIRAuthProvider.m.
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRTwitterAuthProvider
+
+- (instancetype)init {
+ [FIRAuthExceptionUtils
+ raiseMethodNotImplementedExceptionWithReason:@"This class is not meant to be initialized."];
+ return nil;
+}
+
++ (FIRAuthCredential *)credentialWithToken:(NSString *)token secret:(NSString *)secret {
+ return [[FIRTwitterAuthCredential alloc] initWithToken:token secret:secret];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h
new file mode 100644
index 00000000..8ed62537
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRStartMFAEnrollmentResponseCallback
+ @brief The type of block used to return the result of a call to the startMFAEnroll endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+*/
+typedef void (^FIRStartMFAEnrollmentResponseCallback)(
+ FIRStartMFAEnrollmentResponse *_Nullable response, NSError *_Nullable error);
+
+/** @typedef FIRFinalizeMFAEnrollmentResponseCallback
+ @brief The type of block used to return the result of a call to the finalizeMFAEnroll endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+*/
+typedef void (^FIRFinalizeMFAEnrollmentResponseCallback)(
+ FIRFinalizeMFAEnrollmentResponse *_Nullable response, NSError *_Nullable error);
+
+/** @typedef FIRStartMFASignInResponseCallback
+ @brief The type of block used to return the result of a call to the startMFASignIn endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+*/
+typedef void (^FIRStartMFASignInResponseCallback)(FIRStartMFASignInResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRFinalizeMFASignInResponseCallback
+ @brief The type of block used to return the result of a call to the finalizeMFASignIn endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+*/
+typedef void (^FIRFinalizeMFASignInResponseCallback)(
+ FIRFinalizeMFASignInResponse *_Nullable response, NSError *_Nullable error);
+
+/** @typedef FIRWithdrawMFAResponseCallback
+ @brief The type of block used to return the result of a call to the MFAUnenroll endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+*/
+typedef void (^FIRWithdrawMFAResponseCallback)(FIRWithdrawMFAResponse *_Nullable response,
+ NSError *_Nullable error);
+
+@interface FIRAuthBackend (MultiFactor)
+
+/** @fn startMultiFactorEnrollment:callback:
+ @brief Calls the startMFAEnrollment endpoint.
+ @param request The request parameters.
+ @param callback The callback.
+*/
++ (void)startMultiFactorEnrollment:(FIRStartMFAEnrollmentRequest *)request
+ callback:(FIRStartMFAEnrollmentResponseCallback)callback;
+
+/** @fn finalizeMultiFactorEnrollment:callback:
+ @brief Calls the finalizeMultiFactorEnrollment endpoint.
+ @param request The request parameters.
+ @param callback The callback.
+*/
++ (void)finalizeMultiFactorEnrollment:(FIRFinalizeMFAEnrollmentRequest *)request
+ callback:(FIRFinalizeMFAEnrollmentResponseCallback)callback;
+
+/** @fn startMultiFactorSignIn:callback:
+ @brief Calls the startMultiFactorSignIn endpoint.
+ @param request The request parameters.
+ @param callback The callback.
+*/
++ (void)startMultiFactorSignIn:(FIRStartMFASignInRequest *)request
+ callback:(FIRStartMFASignInResponseCallback)callback;
+
+/** @fn finalizeMultiFactorSignIn:callback:
+ @brief Calls the finalizeMultiFactorSignIn endpoint.
+ @param request The request parameters.
+ @param callback The callback.
+*/
++ (void)finalizeMultiFactorSignIn:(FIRFinalizeMFASignInRequest *)request
+ callback:(FIRFinalizeMFASignInResponseCallback)callback;
+
+/** @fn withdrawMultiFactor:callback:
+ @brief Calls the withdrawMultiFactor endpoint.
+ @param request The request parameters.
+ @param callback The callback.
+*/
++ (void)withdrawMultiFactor:(FIRWithdrawMFARequest *)request
+ callback:(FIRWithdrawMFAResponseCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.m
new file mode 100644
index 00000000..7c305a47
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.m
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h"
+
+@implementation FIRAuthBackend (MultiFactor)
+
++ (void)startMultiFactorEnrollment:(FIRStartMFAEnrollmentRequest *)request
+ callback:(FIRStartMFAEnrollmentResponseCallback)callback {
+ FIRStartMFAEnrollmentResponse *response = [[FIRStartMFAEnrollmentResponse alloc] init];
+ [[self implementation] postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
++ (void)finalizeMultiFactorEnrollment:(FIRFinalizeMFAEnrollmentRequest *)request
+ callback:(FIRFinalizeMFAEnrollmentResponseCallback)callback {
+ FIRFinalizeMFAEnrollmentResponse *response = [[FIRFinalizeMFAEnrollmentResponse alloc] init];
+ [[self implementation] postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
++ (void)startMultiFactorSignIn:(FIRStartMFASignInRequest *)request
+ callback:(FIRStartMFASignInResponseCallback)callback {
+ FIRStartMFASignInResponse *response = [[FIRStartMFASignInResponse alloc] init];
+ [[self implementation] postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
++ (void)finalizeMultiFactorSignIn:(FIRFinalizeMFASignInRequest *)request
+ callback:(FIRFinalizeMFASignInResponseCallback)callback {
+ FIRFinalizeMFASignInResponse *response = [[FIRFinalizeMFASignInResponse alloc] init];
+ [[self implementation] postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
++ (void)withdrawMultiFactor:(FIRWithdrawMFARequest *)request
+ callback:(FIRWithdrawMFAResponseCallback)callback {
+ FIRWithdrawMFAResponse *response = [[FIRWithdrawMFAResponse alloc] init];
+ [[self implementation] postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+@end
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.h
new file mode 100644
index 00000000..d3e9bca4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.h
@@ -0,0 +1,620 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+@class FIRAuthRequestConfiguration;
+@class FIRCreateAuthURIRequest;
+@class FIRCreateAuthURIResponse;
+@class FIRDeleteAccountRequest;
+@class FIRDeleteAccountResponse;
+@class FIREmailLinkSignInRequest;
+@class FIREmailLinkSignInResponse;
+@class FIRGetAccountInfoRequest;
+@class FIRGetAccountInfoResponse;
+@class FIRGetProjectConfigRequest;
+@class FIRGetProjectConfigResponse;
+@class FIRGetOOBConfirmationCodeRequest;
+@class FIRGetOOBConfirmationCodeResponse;
+@class FIRResetPasswordRequest;
+@class FIRResetPasswordResponse;
+@class FIRSecureTokenRequest;
+@class FIRSecureTokenResponse;
+@class FIRSetAccountInfoRequest;
+@class FIRSetAccountInfoResponse;
+@class FIRVerifyAssertionRequest;
+@class FIRVerifyAssertionResponse;
+@class FIRVerifyClientRequest;
+@class FIRVerifyClientResponse;
+@class FIRVerifyCustomTokenRequest;
+@class FIRVerifyCustomTokenResponse;
+@class FIRVerifyPasswordRequest;
+@class FIRVerifyPasswordResponse;
+@class FIRVerifyPhoneNumberRequest;
+@class FIRVerifyPhoneNumberResponse;
+@class FIRSendVerificationCodeRequest;
+@class FIRSendVerificationCodeResponse;
+@class FIRSignInWithGameCenterRequest;
+@class FIRSignInWithGameCenterResponse;
+@class FIRSignUpNewUserRequest;
+@class FIRSignUpNewUserResponse;
+
+@protocol FIRAuthBackendImplementation;
+@protocol FIRAuthBackendRPCIssuer;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRAuthBackendRPCIssuerCompletionHandler
+ @brief The type of block used to return the result of a call to an endpoint.
+ @param data The HTTP response body.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRAuthBackendRPCIssuerCompletionHandler)(NSData *_Nullable data,
+ NSError *_Nullable error);
+
+/** @typedef FIRCreateAuthURIResponseCallback
+ @brief The type of block used to return the result of a call to the createAuthURI
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRCreateAuthURIResponseCallback)(FIRCreateAuthURIResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRGetAccountInfoResponseCallback
+ @brief The type of block used to return the result of a call to the getAccountInfo
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRGetAccountInfoResponseCallback)(FIRGetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRGetProjectConfigResponseCallback
+ @brief The type of block used to return the result of a call to the getProjectInfo
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRGetProjectConfigResponseCallback)(FIRGetProjectConfigResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRSetAccountInfoResponseCallback
+ @brief The type of block used to return the result of a call to the setAccountInfo
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRSetAccountInfoResponseCallback)(FIRSetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRSecureTokenResponseCallback
+ @brief The type of block used to return the result of a call to the token endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRSecureTokenResponseCallback)(FIRSecureTokenResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRVerifyAssertionResponseCallback
+ @brief The type of block used to return the result of a call to the verifyAssertion
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRVerifyAssertionResponseCallback)(FIRVerifyAssertionResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRVerifyPasswordResponseCallback
+ @brief The type of block used to return the result of a call to the verifyPassword
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRVerifyPasswordResponseCallback)(FIRVerifyPasswordResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIREmailLinkSigninResponseCallback
+ @brief The type of block used to return the result of a call to the emailLinkSignin
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIREmailLinkSigninResponseCallback)(FIREmailLinkSignInResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRVerifyCustomTokenResponseCallback
+ @brief The type of block used to return the result of a call to the verifyCustomToken
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRVerifyCustomTokenResponseCallback)(
+ FIRVerifyCustomTokenResponse *_Nullable response, NSError *_Nullable error);
+
+/** @typedef FIRDeleteCallBack
+ @brief The type of block called when a request delete account has finished.
+ @param error The error which occurred, or nil if the request was successful.
+ */
+typedef void (^FIRDeleteCallBack)(NSError *_Nullable error);
+
+/** @typedef FIRGetOOBConfirmationCodeResponseCallback
+ @brief The type of block used to return the result of a call to the getOOBConfirmationCode
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRGetOOBConfirmationCodeResponseCallback)(
+ FIRGetOOBConfirmationCodeResponse *_Nullable response, NSError *_Nullable error);
+
+/** @typedef FIRSignupNewUserCallback
+ @brief The type of block used to return the result of a call to the signupNewUser endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRSignupNewUserCallback)(FIRSignUpNewUserResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRResetPasswordCallback
+ @brief The type of block used to return the result of a call to the resetPassword endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRResetPasswordCallback)(FIRResetPasswordResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRSendVerificationCodeResponseCallback
+ @brief The type of block used to return the result of a call to the sendVerificationCode
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRSendVerificationCodeResponseCallback)(
+ FIRSendVerificationCodeResponse *_Nullable response, NSError *_Nullable error);
+
+/** @typedef FIRVerifyPhoneNumberResponseCallback
+ @brief The type of block used to return the result of a call to the verifyPhoneNumber endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRVerifyPhoneNumberResponseCallback)(
+ FIRVerifyPhoneNumberResponse *_Nullable response, NSError *_Nullable error);
+
+/** @typedef FIRVerifyClientResponseCallback
+ @brief The type of block used to return the result of a call to the verifyClient endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRVerifyClientResponseCallback)(FIRVerifyClientResponse *_Nullable response,
+ NSError *_Nullable error);
+
+/** @typedef FIRSignInWithGameCenterResponseCallback
+ @brief The type of block used to return the result of a call to the SignInWithGameCenter
+ endpoint.
+ @param response The received response, if any.
+ @param error The error which occurred, if any.
+ @remarks One of response or error will be non-nil.
+ */
+typedef void (^FIRSignInWithGameCenterResponseCallback)(
+ FIRSignInWithGameCenterResponse *_Nullable response, NSError *_Nullable error);
+
+/** @class FIRAuthBackend
+ @brief Simple static class with methods representing the backend RPCs.
+ @remarks All callback blocks passed as method parameters are invoked asynchronously on the
+ global work queue in the future. See
+ https://github.com/firebase/firebase-ios-sdk/tree/master/FirebaseAuth/Docs/threading.md
+ */
+@interface FIRAuthBackend : NSObject
+
+/** @fn authUserAgent
+ @brief Retrieves the Firebase Auth user agent.
+ @return The Firebase Auth user agent.
+ */
++ (NSString *)authUserAgent;
+
++ (id<FIRAuthBackendImplementation>)implementation;
+
+/** @fn setBackendImplementation:
+ @brief Changes the default backend implementation to something else.
+ @param backendImplementation The backend implementation to use.
+ @remarks This is not, generally, safe to call in a scenario where other backend requests may
+ be occuring. This is specifically to help mock the backend for testing purposes.
+ */
++ (void)setBackendImplementation:(id<FIRAuthBackendImplementation>)backendImplementation;
+
+/** @fn setDefaultBackendImplementationWithRPCIssuer:
+ @brief Uses the default backend implementation, but with a custom RPC issuer.
+ @param RPCIssuer The RPC issuer to use. If @c nil, will use the default implementation.
+ @remarks This is not, generally, safe to call in a scenario where other backend requests may
+ be occuring. This is specifically to help test the backend interfaces (requests, responses,
+ and shared FIRAuthBackend logic.)
+ */
++ (void)setDefaultBackendImplementationWithRPCIssuer:
+ (nullable id<FIRAuthBackendRPCIssuer>)RPCIssuer;
+
+/** @fn createAuthURI:callback:
+ @brief Calls the createAuthURI endpoint, which is responsible for creating the URI used by the
+ IdP to authenticate the user.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)createAuthURI:(FIRCreateAuthURIRequest *)request
+ callback:(FIRCreateAuthURIResponseCallback)callback;
+
+/** @fn getAccountInfo:callback:
+ @brief Calls the getAccountInfo endpoint, which returns account info for a given account.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)getAccountInfo:(FIRGetAccountInfoRequest *)request
+ callback:(FIRGetAccountInfoResponseCallback)callback;
+
+/** @fn getProjectConfig:callback:
+ @brief Calls the getProjectConfig endpoint, which returns configuration information for a given
+ project.
+ @param request An object wrapping the backend get request.
+ @param callback The callback.
+ */
++ (void)getProjectConfig:(FIRGetProjectConfigRequest *)request
+ callback:(FIRGetProjectConfigResponseCallback)callback;
+
+/** @fn setAccountInfo:callback:
+ @brief Calls the setAccountInfo endpoint, which is responsible for setting account info for a
+ user, for example, to sign up a new user with email and password.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)setAccountInfo:(FIRSetAccountInfoRequest *)request
+ callback:(FIRSetAccountInfoResponseCallback)callback;
+
+/** @fn verifyAssertion:callback:
+ @brief Calls the verifyAssertion endpoint, which is responsible for authenticating a
+ user who has IDP-related credentials (an ID Token, an Access Token, etc.)
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)verifyAssertion:(FIRVerifyAssertionRequest *)request
+ callback:(FIRVerifyAssertionResponseCallback)callback;
+
+/** @fn verifyCustomToken:callback:
+ @brief Calls the verifyCustomToken endpoint, which is responsible for authenticating a
+ user who has BYOAuth credentials (a self-signed token using their BYOAuth private key.)
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)verifyCustomToken:(FIRVerifyCustomTokenRequest *)request
+ callback:(FIRVerifyCustomTokenResponseCallback)callback;
+
+/** @fn verifyPassword:callback:
+ @brief Calls the verifyPassword endpoint, which is responsible for authenticating a
+ user who has email and password credentials.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)verifyPassword:(FIRVerifyPasswordRequest *)request
+ callback:(FIRVerifyPasswordResponseCallback)callback;
+
+/** @fn emailLinkSignin:callback:
+ @brief Calls the emailLinkSignin endpoint, which is responsible for authenticating a
+ user through passwordless sign-in.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)emailLinkSignin:(FIREmailLinkSignInRequest *)request
+ callback:(FIREmailLinkSigninResponseCallback)callback;
+
+/** @fn secureToken:callback:
+ @brief Calls the token endpoint, which is responsible for performing STS token exchanges and
+ token refreshes.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)secureToken:(FIRSecureTokenRequest *)request
+ callback:(FIRSecureTokenResponseCallback)callback;
+
+/** @fn getOOBConfirmationCode:callback:
+ @brief Calls the getOOBConfirmationCode endpoint, which is responsible for sending email change
+ request emails, and password reset emails.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)getOOBConfirmationCode:(FIRGetOOBConfirmationCodeRequest *)request
+ callback:(FIRGetOOBConfirmationCodeResponseCallback)callback;
+
+/** @fn signUpNewUser:
+ @brief Calls the signUpNewUser endpoint, which is responsible anonymously signing up a user
+ or signing in a user anonymously.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)signUpNewUser:(FIRSignUpNewUserRequest *)request
+ callback:(FIRSignupNewUserCallback)callback;
+
+/** @fn resetPassword:callback
+ @brief Calls the resetPassword endpoint, which is responsible for resetting a user's password
+ given an OOB code and new password.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)resetPassword:(FIRResetPasswordRequest *)request
+ callback:(FIRResetPasswordCallback)callback;
+
+/** @fn deleteAccount:
+ @brief Calls the DeleteAccount endpoint, which is responsible for deleting a user.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)deleteAccount:(FIRDeleteAccountRequest *)request callback:(FIRDeleteCallBack)callback;
+
+/** @fn SignInWithGameCenter:callback:
+ @brief Calls the SignInWithGameCenter endpoint, which is responsible for authenticating a user
+ who has Game Center credentials.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)signInWithGameCenter:(FIRSignInWithGameCenterRequest *)request
+ callback:(FIRSignInWithGameCenterResponseCallback)callback;
+
+#if TARGET_OS_IOS
+/** @fn sendVerificationCode:callback:
+ @brief Calls the sendVerificationCode endpoint, which is responsible for sending the
+ verification code to a phone number specified in the request parameters.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)sendVerificationCode:(FIRSendVerificationCodeRequest *)request
+ callback:(FIRSendVerificationCodeResponseCallback)callback;
+
+/** @fn verifyPhoneNumber:callback:
+ @brief Calls the verifyPhoneNumber endpoint, which is responsible for sending the verification
+ code to a phone number specified in the request parameters.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)verifyPhoneNumber:(FIRVerifyPhoneNumberRequest *)request
+ callback:(FIRVerifyPhoneNumberResponseCallback)callback;
+
+/** @fn verifyClient:callback:
+ @brief Calls the verifyClient endpoint, which is responsible for sending the silent push
+ notification used for app validation to the device provided in the request parameters.
+ @param request The request parameters.
+ @param callback The callback.
+ */
++ (void)verifyClient:(FIRVerifyClientRequest *)request
+ callback:(FIRVerifyClientResponseCallback)callback;
+#endif
+
+@end
+
+/** @protocol FIRAuthBackendRPCIssuer
+ @brief Used to make FIRAuthBackend
+ */
+@protocol FIRAuthBackendRPCIssuer <NSObject>
+
+/** @fn asyncPostToURLWithRequestConfiguration:URL:body:contentType:completionHandler:
+ @brief Asynchronously seXnds a POST request.
+ @param requestConfiguration The request to be made.
+ @param URL The request URL.
+ @param body Request body.
+ @param contentType Content type of the body.
+ @param handler provided that handles POST response. Invoked asynchronously on the auth global
+ work queue in the future.
+ */
+- (void)asyncPostToURLWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ URL:(NSURL *)URL
+ body:(nullable NSData *)body
+ contentType:(NSString *)contentType
+ completionHandler:(FIRAuthBackendRPCIssuerCompletionHandler)handler;
+
+@end
+
+/** @protocol FIRAuthBackendImplementation
+ @brief Used to make FIRAuthBackend provide a layer of indirection to an actual RPC-based backend
+ or a mock backend.
+ */
+@protocol FIRAuthBackendImplementation <NSObject>
+
+/** @fn createAuthURI:callback:
+ @brief Calls the createAuthURI endpoint, which is responsible for creating the URI used by the
+ IdP to authenticate the user.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)createAuthURI:(FIRCreateAuthURIRequest *)request
+ callback:(FIRCreateAuthURIResponseCallback)callback;
+
+/** @fn getAccountInfo:callback:
+ @brief Calls the getAccountInfo endpoint, which returns account info for a given account.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)getAccountInfo:(FIRGetAccountInfoRequest *)request
+ callback:(FIRGetAccountInfoResponseCallback)callback;
+
+/** @fn getProjectConfig:callback:
+ @brief Calls the getProjectInfo endpoint, which returns configuration information for a given
+ project.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)getProjectConfig:(FIRGetProjectConfigRequest *)request
+ callback:(FIRGetProjectConfigResponseCallback)callback;
+
+/** @fn setAccountInfo:callback:
+ @brief Calls the setAccountInfo endpoint, which is responsible for setting account info for a
+ user, for example, to sign up a new user with email and password.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)setAccountInfo:(FIRSetAccountInfoRequest *)request
+ callback:(FIRSetAccountInfoResponseCallback)callback;
+
+/** @fn verifyAssertion:callback:
+ @brief Calls the verifyAssertion endpoint, which is responsible for authenticating a
+ user who has IDP-related credentials (an ID Token, an Access Token, etc.)
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)verifyAssertion:(FIRVerifyAssertionRequest *)request
+ callback:(FIRVerifyAssertionResponseCallback)callback;
+
+/** @fn verifyCustomToken:callback:
+ @brief Calls the verifyCustomToken endpoint, which is responsible for authenticating a
+ user who has BYOAuth credentials (a self-signed token using their BYOAuth private key.)
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)verifyCustomToken:(FIRVerifyCustomTokenRequest *)request
+ callback:(FIRVerifyCustomTokenResponseCallback)callback;
+
+/** @fn verifyPassword:callback:
+ @brief Calls the verifyPassword endpoint, which is responsible for authenticating a
+ user who has email and password credentials.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)verifyPassword:(FIRVerifyPasswordRequest *)request
+ callback:(FIRVerifyPasswordResponseCallback)callback;
+
+/** @fn emailLinkSignin:callback:
+ @brief Calls the emailLinkSignin endpoint, which is responsible for authenticating a
+ user through passwordless sign-in.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)emailLinkSignin:(FIREmailLinkSignInRequest *)request
+ callback:(FIREmailLinkSigninResponseCallback)callback;
+
+/** @fn secureToken:callback:
+ @brief Calls the token endpoint, which is responsible for performing STS token exchanges and
+ token refreshes.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)secureToken:(FIRSecureTokenRequest *)request
+ callback:(FIRSecureTokenResponseCallback)callback;
+
+/** @fn getOOBConfirmationCode:callback:
+ @brief Calls the getOOBConfirmationCode endpoint, which is responsible for sending email change
+ request emails, email sign-in link emails, and password reset emails.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)getOOBConfirmationCode:(FIRGetOOBConfirmationCodeRequest *)request
+ callback:(FIRGetOOBConfirmationCodeResponseCallback)callback;
+
+/** @fn signUpNewUser:
+ @brief Calls the signUpNewUser endpoint, which is responsible anonymously signing up a user
+ or signing in a user anonymously.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)signUpNewUser:(FIRSignUpNewUserRequest *)request
+ callback:(FIRSignupNewUserCallback)callback;
+
+/** @fn deleteAccount:
+ @brief Calls the DeleteAccount endpoint, which is responsible for deleting a user.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)deleteAccount:(FIRDeleteAccountRequest *)request callback:(FIRDeleteCallBack)callback;
+
+#if TARGET_OS_IOS
+/** @fn sendVerificationCode:callback:
+ @brief Calls the sendVerificationCode endpoint, which is responsible for sending the
+ verification code to a phone number specified in the request parameters.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)sendVerificationCode:(FIRSendVerificationCodeRequest *)request
+ callback:(FIRSendVerificationCodeResponseCallback)callback;
+
+/** @fn verifyPhoneNumber:callback:
+ @brief Calls the verifyPhoneNumber endpoint, which is responsible for sending the verification
+ code to a phone number specified in the request parameters.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)verifyPhoneNumber:(FIRVerifyPhoneNumberRequest *)request
+ callback:(FIRVerifyPhoneNumberResponseCallback)callback;
+
+/** @fn verifyClient:callback:
+ @brief Calls the verifyClient endpoint, which is responsible for sending the silent push
+ notification used for app validation to the device provided in the request parameters.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)verifyClient:(FIRVerifyClientRequest *)request
+ callback:(FIRVerifyClientResponseCallback)callback;
+#endif
+
+/** @fn SignInWithGameCenter:callback:
+ @brief Calls the SignInWithGameCenter endpoint, which is responsible for authenticating a user
+ who has Game Center credentials.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)signInWithGameCenter:(FIRSignInWithGameCenterRequest *)request
+ callback:(FIRSignInWithGameCenterResponseCallback)callback;
+
+/** @fn resetPassword:callback
+ @brief Calls the resetPassword endpoint, which is responsible for resetting a user's password
+ given an OOB code and new password.
+ @param request The request parameters.
+ @param callback The callback.
+ */
+- (void)resetPassword:(FIRResetPasswordRequest *)request
+ callback:(FIRResetPasswordCallback)callback;
+
+/** @fn postWithRequest:response:callback:
+ @brief Calls the RPC using HTTP POST.
+ @remarks Possible error responses:
+ @see FIRAuthInternalErrorCodeRPCRequestEncodingError
+ @see FIRAuthInternalErrorCodeJSONSerializationError
+ @see FIRAuthInternalErrorCodeNetworkError
+ @see FIRAuthInternalErrorCodeUnexpectedErrorResponse
+ @see FIRAuthInternalErrorCodeUnexpectedResponse
+ @see FIRAuthInternalErrorCodeRPCResponseDecodingError
+ @param request The request.
+ @param response The empty response to be filled.
+ @param callback The callback for both success and failure.
+*/
+- (void)postWithRequest:(id<FIRAuthRPCRequest>)request
+ response:(id<FIRAuthRPCResponse>)response
+ callback:(void (^)(NSError *_Nullable error))callback;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.m
new file mode 100644
index 00000000..82bdd998
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthBackend.m
@@ -0,0 +1,1409 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+
+#if SWIFT_PACKAGE
+@import GTMSessionFetcherCore;
+#else
+#import <GTMSessionFetcher/GTMSessionFetcher.h>
+#import <GTMSessionFetcher/GTMSessionFetcherService.h>
+#endif
+
+#import "FirebaseAuth/Sources/Public/FirebaseAuth.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/Public/FIRPhoneAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo+Internal.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kClientVersionHeader
+ @brief HTTP header name for the client version.
+ */
+static NSString *const kClientVersionHeader = @"X-Client-Version";
+
+/** @var kIosBundleIdentifierHeader
+ @brief HTTP header name for iOS bundle ID.
+ */
+static NSString *const kIosBundleIdentifierHeader = @"X-Ios-Bundle-Identifier";
+
+/** @var kFirebaseLocalHeader
+ @brief HTTP header name for the firebase locale.
+ */
+static NSString *const kFirebaseLocalHeader = @"X-Firebase-Locale";
+
+/** @var kFirebaseAuthCoreFrameworkMarker
+ @brief The marker in the HTTP header that indicates the request comes from Firebase Auth Core.
+ */
+static NSString *const kFirebaseAuthCoreFrameworkMarker = @"FirebaseCore-iOS";
+
+/** @var kJSONContentType
+ @brief The value of the HTTP content-type header for JSON payloads.
+ */
+static NSString *const kJSONContentType = @"application/json";
+
+/** @var kErrorDataKey
+ @brief Key for error data in NSError returned by @c GTMSessionFetcher.
+ */
+static NSString *const kErrorDataKey = @"data";
+
+/** @var kErrorKey
+ @brief The key for the "error" value in JSON responses from the server.
+ */
+static NSString *const kErrorKey = @"error";
+
+/** @var kErrorsKey
+ @brief The key for the "errors" value in JSON responses from the server.
+ */
+static NSString *const kErrorsKey = @"errors";
+
+/** @var kReasonKey
+ @brief The key for the "reason" value in JSON responses from the server.
+ */
+static NSString *const kReasonKey = @"reason";
+
+/** @var kInvalidKeyReasonValue
+ @brief The value for the "reason" key indicating an invalid API Key was received by the server.
+ */
+static NSString *const kInvalidKeyReasonValue = @"keyInvalid";
+
+/** @var kAppNotAuthorizedReasonValue
+ @brief The value for the "reason" key indicating the App is not authorized to use Firebase
+ Authentication.
+ */
+static NSString *const kAppNotAuthorizedReasonValue = @"ipRefererBlocked";
+
+/** @var kErrorMessageKey
+ @brief The key for an error's "message" value in JSON responses from the server.
+ */
+static NSString *const kErrorMessageKey = @"message";
+
+/** @var kReturnIDPCredentialErrorMessageKey
+ @brief The key for "errorMessage" value in JSON responses from the server, In case
+ returnIDPCredential of a verifyAssertion request is set to @YES.
+ */
+static NSString *const kReturnIDPCredentialErrorMessageKey = @"errorMessage";
+
+/** @var kUserNotFoundErrorMessage
+ @brief This is the error message returned when the user is not found, which means the user
+ account has been deleted given the token was once valid.
+ */
+static NSString *const kUserNotFoundErrorMessage = @"USER_NOT_FOUND";
+
+/** @var kUserDeletedErrorMessage
+ @brief This is the error message the server will respond with if the user entered an invalid
+ email address.
+ */
+static NSString *const kUserDeletedErrorMessage = @"EMAIL_NOT_FOUND";
+
+/** @var kInvalidLocalIDErrorMessage
+ @brief This is the error message the server responds with if the user local id in the id token
+ does not exit.
+ */
+static NSString *const kInvalidLocalIDErrorMessage = @"INVALID_LOCAL_ID";
+
+/** @var kUserTokenExpiredErrorMessage
+ @brief The error returned by the server if the token issue time is older than the account's
+ valid_since time.
+ */
+static NSString *const kUserTokenExpiredErrorMessage = @"TOKEN_EXPIRED";
+
+/** @var kTooManyRequestsErrorMessage
+ @brief This is the error message the server will respond with if too many requests were made to
+ a server method.
+ */
+static NSString *const kTooManyRequestsErrorMessage = @"TOO_MANY_ATTEMPTS_TRY_LATER";
+
+/** @var kInvalidCustomTokenErrorMessage
+ @brief This is the error message the server will respond with if there is a validation error
+ with the custom token.
+ */
+static NSString *const kInvalidCustomTokenErrorMessage = @"INVALID_CUSTOM_TOKEN";
+
+/** @var kCustomTokenMismatch
+ @brief This is the error message the server will respond with if the service account and API key
+ belong to different projects.
+ */
+static NSString *const kCustomTokenMismatch = @"CREDENTIAL_MISMATCH";
+
+/** @var kInvalidCredentialErrorMessage
+ @brief This is the error message the server responds with if the IDP token or requestUri is
+ invalid.
+ */
+static NSString *const kInvalidCredentialErrorMessage = @"INVALID_IDP_RESPONSE";
+
+/** @var kUserDisabledErrorMessage
+ @brief The error returned by the server if the user account is diabled.
+ */
+static NSString *const kUserDisabledErrorMessage = @"USER_DISABLED";
+
+/** @var kOperationNotAllowedErrorMessage
+ @brief This is the error message the server will respond with if Admin disables IDP specified by
+ provider.
+ */
+static NSString *const kOperationNotAllowedErrorMessage = @"OPERATION_NOT_ALLOWED";
+
+/** @var kPasswordLoginDisabledErrorMessage
+ @brief This is the error message the server responds with if password login is disabled.
+ */
+static NSString *const kPasswordLoginDisabledErrorMessage = @"PASSWORD_LOGIN_DISABLED";
+
+/** @var kEmailAlreadyInUseErrorMessage
+ @brief This is the error message the server responds with if the email address already exists.
+ */
+static NSString *const kEmailAlreadyInUseErrorMessage = @"EMAIL_EXISTS";
+
+/** @var kInvalidEmailErrorMessage
+ @brief The error returned by the server if the email is invalid.
+ */
+static NSString *const kInvalidEmailErrorMessage = @"INVALID_EMAIL";
+
+/** @var kInvalidIdentifierErrorMessage
+ @brief The error returned by the server if the identifier is invalid.
+ */
+static NSString *const kInvalidIdentifierErrorMessage = @"INVALID_IDENTIFIER";
+
+/** @var kWrongPasswordErrorMessage
+ @brief This is the error message the server will respond with if the user entered a wrong
+ password.
+ */
+static NSString *const kWrongPasswordErrorMessage = @"INVALID_PASSWORD";
+
+/** @var kCredentialTooOldErrorMessage
+ @brief This is the error message the server responds with if account change is attempted 5
+ minutes after signing in.
+ */
+static NSString *const kCredentialTooOldErrorMessage = @"CREDENTIAL_TOO_OLD_LOGIN_AGAIN";
+
+/** @var kFederatedUserIDAlreadyLinkedMessage
+ @brief This is the error message the server will respond with if the federated user ID has been
+ already linked with another account.
+ */
+static NSString *const kFederatedUserIDAlreadyLinkedMessage = @"FEDERATED_USER_ID_ALREADY_LINKED";
+
+/** @var kInvalidUserTokenErrorMessage
+ @brief This is the error message the server responds with if user's saved auth credential is
+ invalid, and the user needs to sign in again.
+ */
+static NSString *const kInvalidUserTokenErrorMessage = @"INVALID_ID_TOKEN";
+
+/** @var kWeakPasswordErrorMessagePrefix
+ @brief This is the prefix for the error message the server responds with if user's new password
+ to be set is too weak.
+ */
+static NSString *const kWeakPasswordErrorMessagePrefix = @"WEAK_PASSWORD";
+
+/** @var kExpiredActionCodeErrorMessage
+ @brief This is the error message the server will respond with if the action code is expired.
+ */
+static NSString *const kExpiredActionCodeErrorMessage = @"EXPIRED_OOB_CODE";
+
+/** @var kInvalidActionCodeErrorMessage
+ @brief This is the error message the server will respond with if the action code is invalid.
+ */
+static NSString *const kInvalidActionCodeErrorMessage = @"INVALID_OOB_CODE";
+
+/** @var kMissingEmailErrorMessage
+ @brief This is the error message the server will respond with if the email address is missing
+ during a "send password reset email" attempt.
+ */
+static NSString *const kMissingEmailErrorMessage = @"MISSING_EMAIL";
+
+/** @var kInvalidSenderEmailErrorMessage
+ @brief This is the error message the server will respond with if the sender email is invalid
+ during a "send password reset email" attempt.
+ */
+static NSString *const kInvalidSenderEmailErrorMessage = @"INVALID_SENDER";
+
+/** @var kInvalidMessagePayloadErrorMessage
+ @brief This is the error message the server will respond with if there are invalid parameters in
+ the payload during a "send password reset email" attempt.
+ */
+static NSString *const kInvalidMessagePayloadErrorMessage = @"INVALID_MESSAGE_PAYLOAD";
+
+/** @var kInvalidRecipientEmailErrorMessage
+ @brief This is the error message the server will respond with if the recipient email is invalid.
+ */
+static NSString *const kInvalidRecipientEmailErrorMessage = @"INVALID_RECIPIENT_EMAIL";
+
+/** @var kMissingIosBundleIDErrorMessage
+ @brief This is the error message the server will respond with if iOS bundle ID is missing but
+ the iOS App store ID is provided.
+ */
+static NSString *const kMissingIosBundleIDErrorMessage = @"MISSING_IOS_BUNDLE_ID";
+
+/** @var kMissingAndroidPackageNameErrorMessage
+ @brief This is the error message the server will respond with if Android Package Name is missing
+ but the flag indicating the app should be installed is set to true.
+ */
+static NSString *const kMissingAndroidPackageNameErrorMessage = @"MISSING_ANDROID_PACKAGE_NAME";
+
+/** @var kUnauthorizedDomainErrorMessage
+ @brief This is the error message the server will respond with if the domain of the continue URL
+ specified is not whitelisted in the firebase console.
+ */
+static NSString *const kUnauthorizedDomainErrorMessage = @"UNAUTHORIZED_DOMAIN";
+
+/** @var kInvalidProviderIDErrorMessage
+ @brief This is the error message the server will respond with if the provider id given for the
+ web operation is invalid.
+ */
+static NSString *const kInvalidProviderIDErrorMessage = @"INVALID_PROVIDER_ID";
+
+/** @var kInvalidDynamicLinkDomainErrorMessage
+ @brief This is the error message the server will respond with if the dynamic link domain
+ provided in the request is invalid.
+ */
+static NSString *const kInvalidDynamicLinkDomainErrorMessage = @"INVALID_DYNAMIC_LINK_DOMAIN";
+
+/** @var kInvalidContinueURIErrorMessage
+ @brief This is the error message the server will respond with if the continue URL provided in
+ the request is invalid.
+ */
+static NSString *const kInvalidContinueURIErrorMessage = @"INVALID_CONTINUE_URI";
+
+/** @var kMissingContinueURIErrorMessage
+ @brief This is the error message the server will respond with if there was no continue URI
+ present in a request that required one.
+ */
+static NSString *const kMissingContinueURIErrorMessage = @"MISSING_CONTINUE_URI";
+
+/** @var kInvalidPhoneNumberErrorMessage
+ @brief This is the error message the server will respond with if an incorrectly formatted phone
+ number is provided.
+ */
+static NSString *const kInvalidPhoneNumberErrorMessage = @"INVALID_PHONE_NUMBER";
+
+/** @var kInvalidVerificationCodeErrorMessage
+ @brief This is the error message the server will respond with if an invalid verification code is
+ provided.
+ */
+static NSString *const kInvalidVerificationCodeErrorMessage = @"INVALID_CODE";
+
+/** @var kInvalidSessionInfoErrorMessage
+ @brief This is the error message the server will respond with if an invalid session info
+ (verification ID) is provided.
+ */
+static NSString *const kInvalidSessionInfoErrorMessage = @"INVALID_SESSION_INFO";
+
+/** @var kSessionExpiredErrorMessage
+ @brief This is the error message the server will respond with if the SMS code has expired before
+ it is used.
+ */
+static NSString *const kSessionExpiredErrorMessage = @"SESSION_EXPIRED";
+
+/** @var kMissingOrInvalidNonceErrorMessage
+ @brief This is the error message the server will respond with if the nonce is missing or
+ invalid.
+ */
+static NSString *const kMissingOrInvalidNonceErrorMessage = @"MISSING_OR_INVALID_NONCE";
+
+/** @var kMissingAppTokenErrorMessage
+ @brief This is the error message the server will respond with if the APNS token is missing in a
+ verifyClient request.
+ */
+static NSString *const kMissingAppTokenErrorMessage = @"MISSING_IOS_APP_TOKEN";
+
+/** @var kMissingAppCredentialErrorMessage
+ @brief This is the error message the server will respond with if the app token is missing in a
+ sendVerificationCode request.
+ */
+static NSString *const kMissingAppCredentialErrorMessage = @"MISSING_APP_CREDENTIAL";
+
+/** @var kInvalidAppCredentialErrorMessage
+ @brief This is the error message the server will respond with if the app credential in a
+ sendVerificationCode request is invalid.
+ */
+static NSString *const kInvalidAppCredentialErrorMessage = @"INVALID_APP_CREDENTIAL";
+
+/** @var kQuoutaExceededErrorMessage
+ @brief This is the error message the server will respond with if the quota for SMS text messages
+ has been exceeded for the project.
+ */
+static NSString *const kQuoutaExceededErrorMessage = @"QUOTA_EXCEEDED";
+
+/** @var kAppNotVerifiedErrorMessage
+ @brief This is the error message the server will respond with if Firebase could not verify the
+ app during a phone authentication flow.
+ */
+static NSString *const kAppNotVerifiedErrorMessage = @"APP_NOT_VERIFIED";
+
+/** @var kMissingClientIdentifier
+ @brief This is the error message the server will respond with if Firebase could not verify the
+ app during a phone authentication flow when a real phone number is used and app verification
+ is disabled for testing.
+ */
+static NSString *const kMissingClientIdentifier = @"MISSING_CLIENT_IDENTIFIER";
+
+/** @var kCaptchaCheckFailedErrorMessage
+ @brief This is the error message the server will respond with if the reCAPTCHA token provided is
+ invalid.
+ */
+static NSString *const kCaptchaCheckFailedErrorMessage = @"CAPTCHA_CHECK_FAILED";
+
+/** @var kMissingMFAPendingCredentialErrorMessage
+ @brief This is the error message the server will respond with if the MFA pending credential is
+ missing.
+ */
+static NSString *const kMissingMFAPendingCredentialErrorMessage = @"MISSING_MFA_PENDING_CREDENTIAL";
+
+/** @var kMissingMFAEnrollmentIDErrorMessage
+ @brief This is the error message the server will respond with if the MFA enrollment ID is missing.
+ */
+static NSString *const kMissingMFAEnrollmentIDErrorMessage = @"MISSING_MFA_ENROLLMENT_ID";
+
+/** @var kInvalidMFAPendingCredentialErrorMessage
+ @brief This is the error message the server will respond with if the MFA pending credential is
+ invalid.
+ */
+static NSString *const kInvalidMFAPendingCredentialErrorMessage = @"INVALID_MFA_PENDING_CREDENTIAL";
+
+/** @var kMFAEnrollmentNotFoundErrorMessage
+ @brief This is the error message the server will respond with if the MFA enrollment info is not
+ found.
+ */
+static NSString *const kMFAEnrollmentNotFoundErrorMessage = @"MFA_ENROLLMENT_NOT_FOUND";
+
+/** @var kAdminOnlyOperationErrorMessage
+ @brief This is the error message the server will respond with if the operation is admin only.
+ */
+static NSString *const kAdminOnlyOperationErrorMessage = @"ADMIN_ONLY_OPERATION";
+
+/** @var kUnverifiedEmailErrorMessage
+ @brief This is the error message the server will respond with if the email is unverified.
+ */
+static NSString *const kUnverifiedEmailErrorMessage = @"UNVERIFIED_EMAIL";
+
+/** @var kSecondFactorExistsErrorMessage
+ @brief This is the error message the server will respond with if the second factor already exsists.
+ */
+static NSString *const kSecondFactorExistsErrorMessage = @"SECOND_FACTOR_EXISTS";
+
+/** @var kSecondFactorLimitExceededErrorMessage
+ @brief This is the error message the server will respond with if the number of second factor
+ reaches the limit.
+ */
+static NSString *const kSecondFactorLimitExceededErrorMessage = @"SECOND_FACTOR_LIMIT_EXCEEDED";
+
+/** @var kUnsupportedFirstFactorErrorMessage
+ @brief This is the error message the server will respond with if the first factor doesn't support
+ MFA.
+ */
+static NSString *const kUnsupportedFirstFactorErrorMessage = @"UNSUPPORTED_FIRST_FACTOR";
+
+/** @var kEmailChangeNeedsVerificationErrorMessage
+ @brief This is the error message the server will respond with if changing an unverified email.
+ */
+static NSString *const kEmailChangeNeedsVerificationErrorMessage =
+ @"EMAIL_CHANGE_NEEDS_VERIFICATION";
+
+/** @var kInvalidPendingToken
+ @brief Generic IDP error codes.
+ */
+static NSString *const kInvalidPendingToken = @"INVALID_PENDING_TOKEN";
+
+/** @var gBackendImplementation
+ @brief The singleton FIRAuthBackendImplementation instance to use.
+ */
+static id<FIRAuthBackendImplementation> gBackendImplementation;
+
+/** @class FIRAuthBackendRPCImplementation
+ @brief The default RPC-based backend implementation.
+ */
+@interface FIRAuthBackendRPCImplementation : NSObject <FIRAuthBackendImplementation>
+
+/** @property RPCIssuer
+ @brief An instance of FIRAuthBackendRPCIssuer for making RPC requests. Allows the RPC
+ requests/responses to be easily faked.
+ */
+@property(nonatomic, strong) id<FIRAuthBackendRPCIssuer> RPCIssuer;
+
+@end
+
+@implementation FIRAuthBackend
+
++ (id<FIRAuthBackendImplementation>)implementation {
+ if (!gBackendImplementation) {
+ gBackendImplementation = [[FIRAuthBackendRPCImplementation alloc] init];
+ }
+ return gBackendImplementation;
+}
+
++ (void)setBackendImplementation:(id<FIRAuthBackendImplementation>)backendImplementation {
+ gBackendImplementation = backendImplementation;
+}
+
++ (void)setDefaultBackendImplementationWithRPCIssuer:
+ (nullable id<FIRAuthBackendRPCIssuer>)RPCIssuer {
+ FIRAuthBackendRPCImplementation *defaultImplementation =
+ [[FIRAuthBackendRPCImplementation alloc] init];
+ if (RPCIssuer) {
+ defaultImplementation.RPCIssuer = RPCIssuer;
+ }
+ gBackendImplementation = defaultImplementation;
+}
+
++ (void)createAuthURI:(FIRCreateAuthURIRequest *)request
+ callback:(FIRCreateAuthURIResponseCallback)callback {
+ [[self implementation] createAuthURI:request callback:callback];
+}
+
++ (void)getAccountInfo:(FIRGetAccountInfoRequest *)request
+ callback:(FIRGetAccountInfoResponseCallback)callback {
+ [[self implementation] getAccountInfo:request callback:callback];
+}
+
++ (void)getProjectConfig:(FIRGetProjectConfigRequest *)request
+ callback:(FIRGetProjectConfigResponseCallback)callback {
+ [[self implementation] getProjectConfig:request callback:callback];
+}
+
++ (void)setAccountInfo:(FIRSetAccountInfoRequest *)request
+ callback:(FIRSetAccountInfoResponseCallback)callback {
+ [[self implementation] setAccountInfo:request callback:callback];
+}
+
++ (void)verifyAssertion:(FIRVerifyAssertionRequest *)request
+ callback:(FIRVerifyAssertionResponseCallback)callback {
+ [[self implementation] verifyAssertion:request callback:callback];
+}
+
++ (void)verifyCustomToken:(FIRVerifyCustomTokenRequest *)request
+ callback:(FIRVerifyCustomTokenResponseCallback)callback {
+ [[self implementation] verifyCustomToken:request callback:callback];
+}
+
++ (void)verifyPassword:(FIRVerifyPasswordRequest *)request
+ callback:(FIRVerifyPasswordResponseCallback)callback {
+ [[self implementation] verifyPassword:request callback:callback];
+}
+
++ (void)emailLinkSignin:(FIREmailLinkSignInRequest *)request
+ callback:(FIREmailLinkSigninResponseCallback)callback {
+ [[self implementation] emailLinkSignin:request callback:callback];
+}
+
++ (void)secureToken:(FIRSecureTokenRequest *)request
+ callback:(FIRSecureTokenResponseCallback)callback {
+ [[self implementation] secureToken:request callback:callback];
+}
+
++ (void)getOOBConfirmationCode:(FIRGetOOBConfirmationCodeRequest *)request
+ callback:(FIRGetOOBConfirmationCodeResponseCallback)callback {
+ [[self implementation] getOOBConfirmationCode:request callback:callback];
+}
+
++ (void)signUpNewUser:(FIRSignUpNewUserRequest *)request
+ callback:(FIRSignupNewUserCallback)callback {
+ [[self implementation] signUpNewUser:request callback:callback];
+}
+
++ (void)deleteAccount:(FIRDeleteAccountRequest *)request callback:(FIRDeleteCallBack)callback {
+ [[self implementation] deleteAccount:request callback:callback];
+}
+
++ (void)signInWithGameCenter:(FIRSignInWithGameCenterRequest *)request
+ callback:(FIRSignInWithGameCenterResponseCallback)callback {
+ [[self implementation] signInWithGameCenter:request callback:callback];
+}
+
+#if TARGET_OS_IOS
++ (void)sendVerificationCode:(FIRSendVerificationCodeRequest *)request
+ callback:(FIRSendVerificationCodeResponseCallback)callback {
+ [[self implementation] sendVerificationCode:request callback:callback];
+}
+
++ (void)verifyPhoneNumber:(FIRVerifyPhoneNumberRequest *)request
+ callback:(FIRVerifyPhoneNumberResponseCallback)callback {
+ [[self implementation] verifyPhoneNumber:request callback:callback];
+}
+
++ (void)verifyClient:(id)request callback:(FIRVerifyClientResponseCallback)callback {
+ [[self implementation] verifyClient:request callback:callback];
+}
+#endif
+
++ (void)resetPassword:(FIRResetPasswordRequest *)request
+ callback:(FIRResetPasswordCallback)callback {
+ [[self implementation] resetPassword:request callback:callback];
+}
+
++ (NSString *)authUserAgent {
+ return [NSString stringWithFormat:@"FirebaseAuth.iOS/%s %@", FirebaseAuthVersionStr,
+ GTMFetcherStandardUserAgentString(nil)];
+}
+
+@end
+
+@interface FIRAuthBackendRPCIssuerImplementation : NSObject <FIRAuthBackendRPCIssuer>
+@end
+
+@implementation FIRAuthBackendRPCIssuerImplementation {
+ /** @var The session fetcher service.
+ */
+ GTMSessionFetcherService *_fetcherService;
+}
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _fetcherService = [[GTMSessionFetcherService alloc] init];
+ _fetcherService.userAgent = [FIRAuthBackend authUserAgent];
+ _fetcherService.callbackQueue = FIRAuthGlobalWorkQueue();
+
+ // Avoid reusing the session to prevent
+ // https://github.com/firebase/firebase-ios-sdk/issues/1261
+ _fetcherService.reuseSession = NO;
+ }
+ return self;
+}
+
+- (void)asyncPostToURLWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ URL:(NSURL *)URL
+ body:(nullable NSData *)body
+ contentType:(NSString *)contentType
+ completionHandler:
+ (void (^)(NSData *_Nullable, NSError *_Nullable))handler {
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
+ [request setValue:contentType forHTTPHeaderField:@"Content-Type"];
+ NSString *additionalFrameworkMarker =
+ requestConfiguration.additionalFrameworkMarker ?: kFirebaseAuthCoreFrameworkMarker;
+ NSString *clientVersion = [NSString
+ stringWithFormat:@"iOS/FirebaseSDK/%s/%@", FirebaseAuthVersionStr, additionalFrameworkMarker];
+ [request setValue:clientVersion forHTTPHeaderField:kClientVersionHeader];
+ NSString *bundleID = [[NSBundle mainBundle] bundleIdentifier];
+ [request setValue:bundleID forHTTPHeaderField:kIosBundleIdentifierHeader];
+
+ NSArray<NSString *> *preferredLocalizations = [NSBundle mainBundle].preferredLocalizations;
+ if (preferredLocalizations.count) {
+ NSString *acceptLanguage = preferredLocalizations.firstObject;
+ [request setValue:acceptLanguage forHTTPHeaderField:@"Accept-Language"];
+ }
+ NSString *languageCode = requestConfiguration.languageCode;
+ if (languageCode.length) {
+ [request setValue:languageCode forHTTPHeaderField:kFirebaseLocalHeader];
+ }
+ GTMSessionFetcher *fetcher = [_fetcherService fetcherWithRequest:request];
+ fetcher.bodyData = body;
+ [fetcher beginFetchWithCompletionHandler:handler];
+}
+
+@end
+
+@implementation FIRAuthBackendRPCImplementation
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _RPCIssuer = [[FIRAuthBackendRPCIssuerImplementation alloc] init];
+ }
+ return self;
+}
+
+- (void)createAuthURI:(FIRCreateAuthURIRequest *)request
+ callback:(FIRCreateAuthURIResponseCallback)callback {
+ FIRCreateAuthURIResponse *response = [[FIRCreateAuthURIResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)getAccountInfo:(FIRGetAccountInfoRequest *)request
+ callback:(FIRGetAccountInfoResponseCallback)callback {
+ FIRGetAccountInfoResponse *response = [[FIRGetAccountInfoResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)getProjectConfig:(FIRGetProjectConfigRequest *)request
+ callback:(FIRGetProjectConfigResponseCallback)callback {
+ FIRGetProjectConfigResponse *response = [[FIRGetProjectConfigResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)setAccountInfo:(FIRSetAccountInfoRequest *)request
+ callback:(FIRSetAccountInfoResponseCallback)callback {
+ FIRSetAccountInfoResponse *response = [[FIRSetAccountInfoResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)verifyAssertion:(FIRVerifyAssertionRequest *)request
+ callback:(FIRVerifyAssertionResponseCallback)callback {
+ FIRVerifyAssertionResponse *response = [[FIRVerifyAssertionResponse alloc] init];
+ [self
+ postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ if (!response.IDToken && response.MFAInfo) {
+#if TARGET_OS_IOS
+ NSMutableArray<FIRMultiFactorInfo *> *multiFactorInfo = [NSMutableArray array];
+ for (FIRAuthProtoMFAEnrollment *MFAEnrollment in response.MFAInfo) {
+ FIRPhoneMultiFactorInfo *info =
+ [[FIRPhoneMultiFactorInfo alloc] initWithProto:MFAEnrollment];
+ [multiFactorInfo addObject:info];
+ }
+ NSError *multiFactorRequiredError = [FIRAuthErrorUtils
+ secondFactorRequiredErrorWithPendingCredential:response.MFAPendingCredential
+ hints:multiFactorInfo];
+ callback(nil, multiFactorRequiredError);
+#endif
+ } else {
+ callback(response, nil);
+ }
+ }
+ }];
+}
+
+- (void)verifyCustomToken:(FIRVerifyCustomTokenRequest *)request
+ callback:(FIRVerifyCustomTokenResponseCallback)callback {
+ FIRVerifyCustomTokenResponse *response = [[FIRVerifyCustomTokenResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)verifyPassword:(FIRVerifyPasswordRequest *)request
+ callback:(FIRVerifyPasswordResponseCallback)callback {
+ FIRVerifyPasswordResponse *response = [[FIRVerifyPasswordResponse alloc] init];
+ [self
+ postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ if (!response.IDToken && response.MFAInfo) {
+#if TARGET_OS_IOS
+ NSMutableArray<FIRMultiFactorInfo *> *multiFactorInfo = [NSMutableArray array];
+ for (FIRAuthProtoMFAEnrollment *MFAEnrollment in response.MFAInfo) {
+ FIRPhoneMultiFactorInfo *info =
+ [[FIRPhoneMultiFactorInfo alloc] initWithProto:MFAEnrollment];
+ [multiFactorInfo addObject:info];
+ }
+ NSError *multiFactorRequiredError = [FIRAuthErrorUtils
+ secondFactorRequiredErrorWithPendingCredential:response.MFAPendingCredential
+ hints:multiFactorInfo];
+ callback(nil, multiFactorRequiredError);
+#endif
+ } else {
+ callback(response, nil);
+ }
+ }
+ }];
+}
+
+- (void)emailLinkSignin:(FIREmailLinkSignInRequest *)request
+ callback:(FIREmailLinkSigninResponseCallback)callback {
+ FIREmailLinkSignInResponse *response = [[FIREmailLinkSignInResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)secureToken:(FIRSecureTokenRequest *)request
+ callback:(FIRSecureTokenResponseCallback)callback {
+ FIRSecureTokenResponse *response = [[FIRSecureTokenResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)getOOBConfirmationCode:(FIRGetOOBConfirmationCodeRequest *)request
+ callback:(FIRGetOOBConfirmationCodeResponseCallback)callback {
+ FIRGetOOBConfirmationCodeResponse *response = [[FIRGetOOBConfirmationCodeResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)signUpNewUser:(FIRSignUpNewUserRequest *)request
+ callback:(FIRSignupNewUserCallback)callback {
+ FIRSignUpNewUserResponse *response = [[FIRSignUpNewUserResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, nil);
+ }
+ }];
+}
+
+- (void)deleteAccount:(FIRDeleteAccountRequest *)request callback:(FIRDeleteCallBack)callback {
+ FIRDeleteAccountResponse *response = [[FIRDeleteAccountResponse alloc] init];
+ [self postWithRequest:request response:response callback:callback];
+}
+
+#if TARGET_OS_IOS
+- (void)sendVerificationCode:(FIRSendVerificationCodeRequest *)request
+ callback:(FIRSendVerificationCodeResponseCallback)callback {
+ FIRSendVerificationCodeResponse *response = [[FIRSendVerificationCodeResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ } else {
+ callback(response, error);
+ }
+ }];
+}
+
+- (void)verifyPhoneNumber:(FIRVerifyPhoneNumberRequest *)request
+ callback:(FIRVerifyPhoneNumberResponseCallback)callback {
+ FIRVerifyPhoneNumberResponse *response = [[FIRVerifyPhoneNumberResponse alloc] init];
+ [self
+ postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ // Check whether or not the successful response is actually the special case phone
+ // auth flow that returns a temporary proof and phone number.
+ if (response.phoneNumber.length && response.temporaryProof.length) {
+ FIRPhoneAuthCredential *credential =
+ [[FIRPhoneAuthCredential alloc] initWithTemporaryProof:response.temporaryProof
+ phoneNumber:response.phoneNumber
+ providerID:FIRPhoneAuthProviderID];
+ callback(nil, [FIRAuthErrorUtils credentialAlreadyInUseErrorWithMessage:nil
+ credential:credential
+ email:nil]);
+ return;
+ }
+ callback(response, nil);
+ }];
+}
+
+- (void)verifyClient:(id)request callback:(FIRVerifyClientResponseCallback)callback {
+ FIRVerifyClientResponse *response = [[FIRVerifyClientResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ callback(response, nil);
+ }];
+}
+#endif
+
+- (void)resetPassword:(FIRResetPasswordRequest *)request
+ callback:(FIRResetPasswordCallback)callback {
+ FIRResetPasswordResponse *response = [[FIRResetPasswordResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ callback(response, nil);
+ }];
+}
+
+- (void)signInWithGameCenter:(FIRSignInWithGameCenterRequest *)request
+ callback:(FIRSignInWithGameCenterResponseCallback)callback {
+ FIRSignInWithGameCenterResponse *response = [[FIRSignInWithGameCenterResponse alloc] init];
+ [self postWithRequest:request
+ response:response
+ callback:^(NSError *error) {
+ if (error) {
+ if (callback) {
+ callback(nil, error);
+ }
+ } else {
+ if (callback) {
+ callback(response, nil);
+ }
+ }
+ }];
+}
+
+#pragma mark - Generic RPC handling methods
+
+/** @fn postWithRequest:response:callback:
+ @brief Calls the RPC using HTTP POST.
+ @remarks Possible error responses:
+ @see FIRAuthInternalErrorCodeRPCRequestEncodingError
+ @see FIRAuthInternalErrorCodeJSONSerializationError
+ @see FIRAuthInternalErrorCodeNetworkError
+ @see FIRAuthInternalErrorCodeUnexpectedErrorResponse
+ @see FIRAuthInternalErrorCodeUnexpectedResponse
+ @see FIRAuthInternalErrorCodeRPCResponseDecodingError
+ @param request The request.
+ @param response The empty response to be filled.
+ @param callback The callback for both success and failure.
+ */
+- (void)postWithRequest:(id<FIRAuthRPCRequest>)request
+ response:(id<FIRAuthRPCResponse>)response
+ callback:(void (^)(NSError *_Nullable error))callback {
+ NSError *error;
+ NSData *bodyData;
+ if ([request containsPostBody]) {
+ id postBody = [request unencodedHTTPRequestBodyWithError:&error];
+ if (!postBody) {
+ callback([FIRAuthErrorUtils RPCRequestEncodingErrorWithUnderlyingError:error]);
+ return;
+ }
+
+ NSJSONWritingOptions JSONWritingOptions = 0;
+#if DEBUG
+ JSONWritingOptions |= NSJSONWritingPrettyPrinted;
+#endif
+
+ if ([NSJSONSerialization isValidJSONObject:postBody]) {
+ bodyData = [NSJSONSerialization dataWithJSONObject:postBody
+ options:JSONWritingOptions
+ error:&error];
+ if (!bodyData) {
+ // This is an untested case. This happens exclusively when there is an error in the
+ // framework implementation of dataWithJSONObject:options:error:. This shouldn't normally
+ // occur as isValidJSONObject: should return NO in any case we should encounter an error.
+ error = [FIRAuthErrorUtils JSONSerializationErrorWithUnderlyingError:error];
+ }
+ } else {
+ error = [FIRAuthErrorUtils JSONSerializationErrorForUnencodableType];
+ }
+ if (!bodyData) {
+ callback(error);
+ return;
+ }
+ }
+
+ [_RPCIssuer
+ asyncPostToURLWithRequestConfiguration:[request requestConfiguration]
+ URL:[request requestURL]
+ body:bodyData
+ contentType:kJSONContentType
+ completionHandler:^(NSData *data, NSError *error) {
+ // If there is an error with no body data at all, then this must be a
+ // network error.
+ if (error && !data) {
+ callback([FIRAuthErrorUtils networkErrorWithUnderlyingError:error]);
+ return;
+ }
+
+ // Try to decode the HTTP response data which may contain either a
+ // successful response or error message.
+ NSError *jsonError;
+ NSDictionary *dictionary =
+ [NSJSONSerialization JSONObjectWithData:data
+ options:NSJSONReadingMutableLeaves
+ error:&jsonError];
+ if (!dictionary) {
+ if (error) {
+ // We have an error, but we couldn't decode the body, so we have no
+ // additional information other than the raw response and the
+ // original NSError (the jsonError is infered by the error code
+ // (FIRAuthErrorCodeUnexpectedHTTPResponse, and is irrelevant.)
+ callback([FIRAuthErrorUtils
+ unexpectedErrorResponseWithData:data
+ underlyingError:error]);
+ } else {
+ // This is supposed to be a "successful" response, but we couldn't
+ // deserialize the body.
+ callback([FIRAuthErrorUtils unexpectedResponseWithData:data
+ underlyingError:jsonError]);
+ }
+ return;
+ }
+ if (![dictionary isKindOfClass:[NSDictionary class]]) {
+ if (error) {
+ callback([FIRAuthErrorUtils
+ unexpectedErrorResponseWithDeserializedResponse:dictionary]);
+ } else {
+ callback([FIRAuthErrorUtils
+ unexpectedResponseWithDeserializedResponse:dictionary]);
+ }
+ return;
+ }
+
+ // At this point we either have an error with successfully decoded
+ // details in the body, or we have a response which must pass further
+ // validation before we know it's truly successful. We deal with the
+ // case where we have an error with successfully decoded error details
+ // first:
+ if (error) {
+ NSDictionary *errorDictionary = dictionary[kErrorKey];
+ if ([errorDictionary isKindOfClass:[NSDictionary class]]) {
+ id<NSObject> errorMessage = errorDictionary[kErrorMessageKey];
+ if ([errorMessage isKindOfClass:[NSString class]]) {
+ NSString *errorMessageString = (NSString *)errorMessage;
+
+ // Contruct client error.
+ NSError *clientError = [[self class]
+ clientErrorWithServerErrorMessage:errorMessageString
+ errorDictionary:errorDictionary
+ response:response];
+ if (clientError) {
+ callback(clientError);
+ return;
+ }
+ }
+ // Not a message we know, return the message directly.
+ if (errorMessage) {
+ NSError *unexpecterErrorResponse = [FIRAuthErrorUtils
+ unexpectedErrorResponseWithDeserializedResponse:
+ errorDictionary];
+ callback(unexpecterErrorResponse);
+ return;
+ }
+ }
+ // No error message at all, return the decoded response.
+ callback([FIRAuthErrorUtils
+ unexpectedErrorResponseWithDeserializedResponse:dictionary]);
+ return;
+ }
+
+ // Finally, we try to populate the response object with the JSON
+ // values.
+ if (![response setWithDictionary:dictionary error:&error]) {
+ callback([FIRAuthErrorUtils
+ RPCResponseDecodingErrorWithDeserializedResponse:dictionary
+ underlyingError:error]);
+ return;
+ }
+ // In case returnIDPCredential of a verifyAssertion request is set to
+ // @YES, the server may return a 200 with a response that may contain a
+ // server error.
+ if ([request isKindOfClass:[FIRVerifyAssertionRequest class]]) {
+ FIRVerifyAssertionRequest *verifyAssertionRequest =
+ (FIRVerifyAssertionRequest *)request;
+ if (verifyAssertionRequest.returnIDPCredential) {
+ NSString *errorMessage =
+ dictionary[kReturnIDPCredentialErrorMessageKey];
+ if ([errorMessage isKindOfClass:[NSString class]]) {
+ NSString *errorString = (NSString *)errorMessage;
+ NSError *clientError =
+ [[self class] clientErrorWithServerErrorMessage:errorString
+ errorDictionary:@{}
+ response:response];
+ if (clientError) {
+ callback(clientError);
+ return;
+ }
+ }
+ }
+ }
+ // Success! The response object originally passed in can be used by the
+ // caller.
+ callback(nil);
+ }];
+}
+
+/** @fn clientErrorWithServerErrorMessage:errorDictionary:
+ @brief Translates known server errors to client errors.
+ @param serverErrorMessage The error message from the server.
+ @param errorDictionary The error part of the response from the server.
+ @param response The response from the server RPC.
+ @return A client error, if any.
+ */
++ (nullable NSError *)clientErrorWithServerErrorMessage:(NSString *)serverErrorMessage
+ errorDictionary:(NSDictionary *)errorDictionary
+ response:(id<FIRAuthRPCResponse>)response {
+ NSString *shortErrorMessage = serverErrorMessage;
+ NSString *serverDetailErrorMessage;
+ NSRange colonRange = [serverErrorMessage rangeOfString:@":"];
+ if (colonRange.location != NSNotFound) {
+ shortErrorMessage = [serverErrorMessage substringToIndex:colonRange.location];
+ shortErrorMessage =
+ [shortErrorMessage stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
+ serverDetailErrorMessage = [serverErrorMessage substringFromIndex:colonRange.location + 1];
+ serverDetailErrorMessage = [serverDetailErrorMessage
+ stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
+ }
+
+ // Delegate the responsibility for constructing the client error to the response object,
+ // if possible.
+ SEL clientErrorWithServerErrorMessageSelector = @selector(clientErrorWithShortErrorMessage:
+ detailErrorMessage:);
+ if ([response respondsToSelector:clientErrorWithServerErrorMessageSelector]) {
+ NSError *error = [response clientErrorWithShortErrorMessage:shortErrorMessage
+ detailErrorMessage:serverDetailErrorMessage];
+ if (error) {
+ return error;
+ }
+ }
+
+ if ([shortErrorMessage isEqualToString:kUserNotFoundErrorMessage]) {
+ return [FIRAuthErrorUtils userNotFoundErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kUserDeletedErrorMessage]) {
+ return [FIRAuthErrorUtils userNotFoundErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidLocalIDErrorMessage]) {
+ // This case shouldn't be necessary but it is for now: b/27908364 .
+ return [FIRAuthErrorUtils userNotFoundErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kUserTokenExpiredErrorMessage]) {
+ return [FIRAuthErrorUtils userTokenExpiredErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kTooManyRequestsErrorMessage]) {
+ return [FIRAuthErrorUtils tooManyRequestsErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidCustomTokenErrorMessage]) {
+ return [FIRAuthErrorUtils invalidCustomTokenErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kCustomTokenMismatch]) {
+ return [FIRAuthErrorUtils customTokenMistmatchErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidCredentialErrorMessage] ||
+ [shortErrorMessage isEqualToString:kInvalidPendingToken]) {
+ return [FIRAuthErrorUtils invalidCredentialErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kUserDisabledErrorMessage]) {
+ return [FIRAuthErrorUtils userDisabledErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kOperationNotAllowedErrorMessage]) {
+ return [FIRAuthErrorUtils operationNotAllowedErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kPasswordLoginDisabledErrorMessage]) {
+ return [FIRAuthErrorUtils operationNotAllowedErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kEmailAlreadyInUseErrorMessage]) {
+ return [FIRAuthErrorUtils emailAlreadyInUseErrorWithEmail:nil];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidEmailErrorMessage]) {
+ return [FIRAuthErrorUtils invalidEmailErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ // "INVALID_IDENTIFIER" can be returned by createAuthURI RPC. Considering email addresses are
+ // currently the only identifiers, we surface the FIRAuthErrorCodeInvalidEmail error code in this
+ // case.
+ if ([shortErrorMessage isEqualToString:kInvalidIdentifierErrorMessage]) {
+ return [FIRAuthErrorUtils invalidEmailErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kWrongPasswordErrorMessage]) {
+ return [FIRAuthErrorUtils wrongPasswordErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kCredentialTooOldErrorMessage]) {
+ return [FIRAuthErrorUtils requiresRecentLoginErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidUserTokenErrorMessage]) {
+ return [FIRAuthErrorUtils invalidUserTokenErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kFederatedUserIDAlreadyLinkedMessage]) {
+ FIROAuthCredential *credential;
+ NSString *email;
+ if ([response isKindOfClass:[FIRVerifyAssertionResponse class]]) {
+ FIRVerifyAssertionResponse *verifyAssertion = (FIRVerifyAssertionResponse *)response;
+ credential = [[FIROAuthCredential alloc] initWithVerifyAssertionResponse:verifyAssertion];
+ email = verifyAssertion.email;
+ }
+ return [FIRAuthErrorUtils credentialAlreadyInUseErrorWithMessage:serverDetailErrorMessage
+ credential:credential
+ email:email];
+ }
+
+ if ([shortErrorMessage isEqualToString:kWeakPasswordErrorMessagePrefix]) {
+ return [FIRAuthErrorUtils weakPasswordErrorWithServerResponseReason:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kExpiredActionCodeErrorMessage]) {
+ return [FIRAuthErrorUtils expiredActionCodeErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidActionCodeErrorMessage]) {
+ return [FIRAuthErrorUtils invalidActionCodeErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingEmailErrorMessage]) {
+ return [FIRAuthErrorUtils missingEmailErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidSenderEmailErrorMessage]) {
+ return [FIRAuthErrorUtils invalidSenderErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidMessagePayloadErrorMessage]) {
+ return [FIRAuthErrorUtils invalidMessagePayloadErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidRecipientEmailErrorMessage]) {
+ return [FIRAuthErrorUtils invalidRecipientEmailErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingIosBundleIDErrorMessage]) {
+ return [FIRAuthErrorUtils missingIosBundleIDErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingAndroidPackageNameErrorMessage]) {
+ return [FIRAuthErrorUtils missingAndroidPackageNameErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kUnauthorizedDomainErrorMessage]) {
+ return [FIRAuthErrorUtils unauthorizedDomainErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidContinueURIErrorMessage]) {
+ return [FIRAuthErrorUtils invalidContinueURIErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidProviderIDErrorMessage]) {
+ return [FIRAuthErrorUtils invalidProviderIDErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidDynamicLinkDomainErrorMessage]) {
+ return [FIRAuthErrorUtils invalidDynamicLinkDomainErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingContinueURIErrorMessage]) {
+ return [FIRAuthErrorUtils missingContinueURIErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidPhoneNumberErrorMessage]) {
+ return [FIRAuthErrorUtils invalidPhoneNumberErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidSessionInfoErrorMessage]) {
+ return [FIRAuthErrorUtils invalidVerificationIDErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidVerificationCodeErrorMessage]) {
+ return [FIRAuthErrorUtils invalidVerificationCodeErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kSessionExpiredErrorMessage]) {
+ return [FIRAuthErrorUtils sessionExpiredErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingAppTokenErrorMessage]) {
+ return [FIRAuthErrorUtils missingAppTokenErrorWithUnderlyingError:nil];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingAppCredentialErrorMessage]) {
+ return [FIRAuthErrorUtils missingAppCredentialWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidAppCredentialErrorMessage]) {
+ return [FIRAuthErrorUtils invalidAppCredentialWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kQuoutaExceededErrorMessage]) {
+ return [FIRAuthErrorUtils quotaExceededErrorWithMessage:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kAppNotVerifiedErrorMessage]) {
+ return [FIRAuthErrorUtils appNotVerifiedErrorWithMessage:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingClientIdentifier]) {
+ return [FIRAuthErrorUtils missingClientIdentifierErrorWithMessage:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kCaptchaCheckFailedErrorMessage]) {
+ return [FIRAuthErrorUtils captchaCheckFailedErrorWithMessage:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingOrInvalidNonceErrorMessage]) {
+ return [FIRAuthErrorUtils missingOrInvalidNonceErrorWithMessage:serverDetailErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingMFAPendingCredentialErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeMissingMultiFactorSession
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMissingMFAEnrollmentIDErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeMissingMultiFactorInfo
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kInvalidMFAPendingCredentialErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeInvalidMultiFactorSession
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kMFAEnrollmentNotFoundErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeMultiFactorInfoNotFound
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kAdminOnlyOperationErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeAdminRestrictedOperation
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kUnverifiedEmailErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeUnverifiedEmail
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kSecondFactorExistsErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeSecondFactorAlreadyEnrolled
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kSecondFactorLimitExceededErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeMaximumSecondFactorCountExceeded
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kUnsupportedFirstFactorErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeUnsupportedFirstFactor
+ message:serverErrorMessage];
+ }
+
+ if ([shortErrorMessage isEqualToString:kEmailChangeNeedsVerificationErrorMessage]) {
+ return [FIRAuthErrorUtils errorWithCode:FIRAuthInternalErrorCodeEmailChangeNeedsVerification
+ message:serverErrorMessage];
+ }
+
+ // In this case we handle an error that might be specified in the underlying errors dictionary,
+ // the error message in determined based on the @c reason key in the dictionary.
+ if (errorDictionary[kErrorsKey]) {
+ // Check for underlying error with reason = keyInvalid;
+ id underlyingErrors = errorDictionary[kErrorsKey];
+ if ([underlyingErrors isKindOfClass:[NSArray class]]) {
+ NSArray *underlyingErrorsArray = (NSArray *)underlyingErrors;
+ for (id underlyingError in underlyingErrorsArray) {
+ if ([underlyingError isKindOfClass:[NSDictionary class]]) {
+ NSDictionary *underlyingErrorDictionary = (NSDictionary *)underlyingError;
+ NSString *reason = underlyingErrorDictionary[kReasonKey];
+ if ([reason hasPrefix:kInvalidKeyReasonValue]) {
+ return [FIRAuthErrorUtils invalidAPIKeyError];
+ }
+ if ([reason isEqualToString:kAppNotAuthorizedReasonValue]) {
+ return [FIRAuthErrorUtils appNotAuthorizedError];
+ }
+ }
+ }
+ }
+ }
+ return nil;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h
new file mode 100644
index 00000000..9ca4f449
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthRequestConfiguration;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @protocol FIRAuthRPCRequest
+ @brief The generic interface for an RPC request needed by @c FIRAuthBackend.
+ */
+@protocol FIRAuthRPCRequest <NSObject>
+
+/** @fn requestURL
+ @brief Gets the request's full URL.
+ */
+- (NSURL *)requestURL;
+
+@optional
+
+/** @fn containsPostBody
+ @brief Returns whether the request contains a post body or not. Requests without a post body
+ are get requests.
+ @remarks The default implementation returns YES.
+ */
+- (BOOL)containsPostBody;
+
+/** @fn UnencodedHTTPRequestBodyWithError:
+ @brief Creates unencoded HTTP body representing the request.
+ @param error An out field for an error which occurred constructing the request.
+ @return The HTTP body data representing the request before any encoding, or nil for error.
+ */
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error;
+
+/** @fn requestConfiguration
+ @brief Obtains the request configurations if available.
+ @return Returns the request configurations.
+ */
+- (FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h
new file mode 100644
index 00000000..0fe981a6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @protocol FIRAuthRPCResponse
+ @brief The generic interface for an RPC response needed by @c FIRAuthBackend.
+ */
+@protocol FIRAuthRPCResponse <NSObject>
+
+/** @fn setFieldsWithDictionary:error:
+ @brief Sets the response instance from the decoded JSON response.
+ @param dictionary The dictionary decoded from HTTP JSON response.
+ @param error An out field for an error which occurred constructing the request.
+ @return Whether the operation was successful or not.
+ */
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error;
+
+@optional
+
+/** @fn clientErrorWithshortErrorMessage:detailErrorMessage
+ @brief This optional method allows response classes to create client errors given a short error
+ message and a detail error message from the server.
+ @param shortErrorMessage The short error message from the server.
+ @param detailErrorMessage The detailed error message from the server.
+ @return A client error, if any.
+ */
+- (nullable NSError *)clientErrorWithShortErrorMessage:(NSString *)shortErrorMessage
+ detailErrorMessage:(nullable NSString *)detailErrorMessage;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h
new file mode 100644
index 00000000..575ee951
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthRequestConfiguration
+ @brief Defines configurations to be added to a request to Firebase Auth's backend.
+ */
+@interface FIRAuthRequestConfiguration : NSObject
+
+/** @property APIKey
+ @brief The Firebase Auth API key used in the request.
+ */
+@property(nonatomic, copy, readonly) NSString *APIKey;
+
+/** @property LanguageCode
+ @brief The language code used in the request.
+ */
+@property(nonatomic, copy, nullable) NSString *languageCode;
+
+/** @property additionalFrameworkMarker
+ @brief Additional framework marker that will be added as part of the header of every request.
+ */
+@property(nonatomic, copy, nullable) NSString *additionalFrameworkMarker;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithRequestClass:APIKey:authLanguage:
+ @brief Designated initializer.
+ @param APIKey The API key to be used in the request.
+ */
+- (nullable instancetype)initWithAPIKey:(NSString *)APIKey NS_DESIGNATED_INITIALIZER;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.m
new file mode 100644
index 00000000..40996e57
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h"
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthRequestConfiguration
+
+- (nullable instancetype)initWithAPIKey:(NSString *)APIKey {
+ self = [super init];
+ if (self) {
+ _APIKey = [APIKey copy];
+ }
+ return self;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h
new file mode 100644
index 00000000..f1e55093
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h"
+
+@class FIRAuthRequestConfiguration;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRIdentityToolkitRequest
+ @brief Represents a request to an identity toolkit endpoint.
+ */
+@interface FIRIdentityToolkitRequest : NSObject
+
+/** @property endpoint
+ @brief Gets the RPC's endpoint.
+ */
+@property(nonatomic, copy, readonly) NSString *endpoint;
+
+/** @property APIKey
+ @brief Gets the client's API key used for the request.
+ */
+@property(nonatomic, copy, readonly) NSString *APIKey;
+
+/** @fn init
+ @brief Please use initWithEndpoint:APIKey:
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithEndpoint:APIKey:
+ @brief Designated initializer.
+ @param endpoint The endpoint name.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ useIdentityPlatform:(BOOL)useIdentityPlatform
+ useStaging:(BOOL)useStaging;
+
+/** @fn requestURL
+ @brief Gets the request's full URL.
+ */
+- (NSURL *)requestURL;
+
+/** @fn requestConfiguration
+ @brief Gets the request's configuration.
+ */
+- (FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.m
new file mode 100644
index 00000000..6b7e420f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.m
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+static NSString *const kFirebaseAuthAPIURLFormat =
+ @"https://%@/identitytoolkit/v3/relyingparty/%@?key=%@";
+static NSString *const kIdentityPlatformAPIURLFormat = @"https://%@/v2/%@?key=%@";
+
+static NSString *gAPIHost = @"www.googleapis.com";
+
+static NSString *kFirebaseAuthAPIHost = @"www.googleapis.com";
+static NSString *kIdentityPlatformAPIHost = @"identitytoolkit.googleapis.com";
+
+static NSString *kFirebaseAuthStagingAPIHost = @"staging-www.sandbox.googleapis.com";
+static NSString *kIdentityPlatformStagingAPIHost =
+ @"staging-identitytoolkit.sandbox.googleapis.com";
+
+@implementation FIRIdentityToolkitRequest {
+ FIRAuthRequestConfiguration *_requestConfiguration;
+
+ BOOL _useIdentityPlatform;
+
+ BOOL _useStaging;
+}
+
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super init];
+ if (self) {
+ _APIKey = [requestConfiguration.APIKey copy];
+ _endpoint = [endpoint copy];
+ _requestConfiguration = requestConfiguration;
+ _useIdentityPlatform = NO;
+ _useStaging = NO;
+ }
+ return self;
+}
+
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ useIdentityPlatform:(BOOL)useIdentityPlatform
+ useStaging:(BOOL)useStaging {
+ self = [self initWithEndpoint:endpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _useIdentityPlatform = useIdentityPlatform;
+ _useStaging = useStaging;
+ }
+ return self;
+}
+
+- (BOOL)containsPostBody {
+ return YES;
+}
+
+- (NSURL *)requestURL {
+ NSString *apiURLFormat;
+ NSString *apiHost;
+ if (_useIdentityPlatform) {
+ apiURLFormat = kIdentityPlatformAPIURLFormat;
+ if (_useStaging) {
+ apiHost = kIdentityPlatformStagingAPIHost;
+ } else {
+ apiHost = kIdentityPlatformAPIHost;
+ }
+ } else {
+ apiURLFormat = kFirebaseAuthAPIURLFormat;
+ if (_useStaging) {
+ apiHost = kFirebaseAuthStagingAPIHost;
+ } else {
+ apiHost = kFirebaseAuthAPIHost;
+ }
+ }
+ NSString *URLString = [NSString stringWithFormat:apiURLFormat, apiHost, _endpoint, _APIKey];
+ NSURL *URL = [NSURL URLWithString:URLString];
+ return URL;
+}
+
+- (FIRAuthRequestConfiguration *)requestConfiguration {
+ return _requestConfiguration;
+}
+
+#pragma mark - Internal API for development
+
++ (NSString *)host {
+ return gAPIHost;
+}
+
++ (void)setHost:(NSString *)host {
+ gAPIHost = host;
+}
+
+NS_ASSUME_NONNULL_END
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.h
new file mode 100644
index 00000000..633ffa97
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.h
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRCreateAuthURIRequest
+ @brief Represents the parameters for the createAuthUri endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/createAuthUri
+ */
+@interface FIRCreateAuthURIRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property identifier
+ @brief The email or federated ID of the user.
+ */
+@property(nonatomic, copy) NSString *identifier;
+
+/** @property continueURI
+ @brief The URI to which the IDP redirects the user after the federated login flow.
+ */
+@property(nonatomic, copy) NSString *continueURI;
+
+/** @property openIDRealm
+ @brief Optional realm for OpenID protocol. The sub string "scheme://domain:port" of the param
+ "continueUri" is used if this is not set.
+ */
+@property(nonatomic, copy, nullable) NSString *openIDRealm;
+
+/** @property providerID
+ @brief The IdP ID. For white listed IdPs it's a short domain name e.g. google.com, aol.com,
+ live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
+ */
+@property(nonatomic, copy, nullable) NSString *providerID;
+
+/** @property clientID
+ @brief The relying party OAuth client ID.
+ */
+@property(nonatomic, copy, nullable) NSString *clientID;
+
+/** @property context
+ @brief The opaque value used by the client to maintain context info between the authentication
+ request and the IDP callback.
+ */
+@property(nonatomic, copy, nullable) NSString *context;
+
+/** @property appID
+ @brief The iOS client application's bundle identifier.
+ */
+@property(nonatomic, copy, nullable) NSString *appID;
+
+/** @fn initWithEndpoint:requestConfiguration:requestConfiguration.
+ @brief Please use initWithIdentifier:continueURI:requestConfiguration: instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithIdentifier:continueURI:requestConfiguration:
+ @brief Designated initializer.
+ @param identifier The email or federated ID of the user.
+ @param continueURI The URI to which the IDP redirects the user after the federated login flow.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithIdentifier:(NSString *)identifier
+ continueURI:(NSString *)continueURI
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.m
new file mode 100644
index 00000000..c1a6fc0e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.m
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kCreateAuthURIEndpoint
+ @brief The "createAuthUri" endpoint.
+ */
+static NSString *const kCreateAuthURIEndpoint = @"createAuthUri";
+
+/** @var kProviderIDKey
+ @brief The key for the "providerId" value in the request.
+ */
+static NSString *const kProviderIDKey = @"providerId";
+
+/** @var kIdentifierKey
+ @brief The key for the "identifier" value in the request.
+ */
+static NSString *const kIdentifierKey = @"identifier";
+
+/** @var kContinueURIKey
+ @brief The key for the "continueUri" value in the request.
+ */
+static NSString *const kContinueURIKey = @"continueUri";
+
+/** @var kOpenIDRealmKey
+ @brief The key for the "openidRealm" value in the request.
+ */
+static NSString *const kOpenIDRealmKey = @"openidRealm";
+
+/** @var kClientIDKey
+ @brief The key for the "clientId" value in the request.
+ */
+static NSString *const kClientIDKey = @"clientId";
+
+/** @var kContextKey
+ @brief The key for the "context" value in the request.
+ */
+static NSString *const kContextKey = @"context";
+
+/** @var kAppIDKey
+ @brief The key for the "appId" value in the request.
+ */
+static NSString *const kAppIDKey = @"appId";
+
+@implementation FIRCreateAuthURIRequest
+
+- (nullable instancetype)initWithIdentifier:(NSString *)identifier
+ continueURI:(NSString *)continueURI
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kCreateAuthURIEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _identifier = [identifier copy];
+ _continueURI = [continueURI copy];
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody =
+ [@{kIdentifierKey : _identifier, kContinueURIKey : _continueURI} mutableCopy];
+ if (_providerID) {
+ postBody[kProviderIDKey] = _providerID;
+ }
+ if (_openIDRealm) {
+ postBody[kOpenIDRealmKey] = _openIDRealm;
+ }
+ if (_clientID) {
+ postBody[kClientIDKey] = _clientID;
+ }
+ if (_context) {
+ postBody[kContextKey] = _context;
+ }
+ if (_appID) {
+ postBody[kAppIDKey] = _appID;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.h
new file mode 100644
index 00000000..79c5ea7d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRCreateAuthURIResponse
+ @brief Represents the parameters for the createAuthUri endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/createAuthUri
+ */
+@interface FIRCreateAuthURIResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property authUri
+ @brief The URI used by the IDP to authenticate the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *authURI;
+
+/** @property registered
+ @brief Whether the user is registered if the identifier is an email.
+ */
+@property(nonatomic, assign, readonly) BOOL registered;
+
+/** @property providerId
+ @brief The provider ID of the auth URI.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *providerID;
+
+/** @property forExistingProvider
+ @brief True if the authUri is for user's existing provider.
+ */
+@property(nonatomic, assign, readonly) BOOL forExistingProvider;
+
+/** @property allProviders
+ @brief A list of provider IDs the passed @c identifier could use to sign in with.
+ */
+@property(nonatomic, copy, readonly, nullable) NSArray<NSString *> *allProviders;
+
+/** @property signinMethods
+ @brief A list of sign-in methods available for the passed @c identifier.
+ */
+@property(nonatomic, copy, readonly, nullable) NSArray<NSString *> *signinMethods;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.m
new file mode 100644
index 00000000..bf422c9c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRCreateAuthURIResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRCreateAuthURIResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _providerID = [dictionary[@"providerId"] copy];
+ _authURI = [dictionary[@"authUri"] copy];
+ _registered = [dictionary[@"registered"] boolValue];
+ _forExistingProvider = [dictionary[@"forExistingProvider"] boolValue];
+ _allProviders = [dictionary[@"allProviders"] copy];
+ _signinMethods = [dictionary[@"signinMethods"] copy];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.h
new file mode 100644
index 00000000..b6b6e404
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRDeleteAccountRequest
+ @brief Represents the parameters for the deleteAccount endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/deleteAccount
+ */
+@interface FIRDeleteAccountRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @fn initWithEndpoint:requestConfiguration:requestConfiguration.
+ @brief Please use initWitLocalID:accessToken:requestConfiguration instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWitLocalID:accessToken:requestConfiguration.
+ @brief Designated initializer.
+ @param localID The local ID.
+ @param accessToken The access token.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWitLocalID:(NSString *)localID
+ accessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.m
new file mode 100644
index 00000000..8bc6c52e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.m
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kCreateAuthURIEndpoint
+ @brief The "deleteAccount" endpoint.
+ */
+static NSString *const kDeleteAccountEndpoint = @"deleteAccount";
+
+/** @var kIDTokenKey
+ @brief The key for the "idToken" value in the request. This is actually the STS Access Token,
+ despite it's confusing (backwards compatiable) parameter name.
+ */
+static NSString *const kIDTokenKey = @"idToken";
+
+/** @var kLocalIDKey
+ @brief The key for the "localID" value in the request.
+ */
+static NSString *const kLocalIDKey = @"localId";
+
+@implementation FIRDeleteAccountRequest {
+ /** @var _accessToken
+ @brief The STS Access Token of the authenticated user.
+ */
+ NSString *_accessToken;
+
+ /** @var _localID
+ @brief The localID of the user.
+ */
+ NSString *_localID;
+}
+
+- (nullable instancetype)initWitLocalID:(NSString *)localID
+ accessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kDeleteAccountEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _localID = [localID copy];
+ _accessToken = [accessToken copy];
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ postBody[kIDTokenKey] = _accessToken;
+ postBody[kLocalIDKey] = _localID;
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.h
new file mode 100644
index 00000000..bc4d0d99
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRDeleteAccountResponse
+ @brief Represents the response from the deleteAccount endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/deleteAccount
+ */
+@interface FIRDeleteAccountResponse : NSObject <FIRAuthRPCResponse>
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.m
new file mode 100644
index 00000000..fba1b6b0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.m
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRDeleteAccountResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h
new file mode 100644
index 00000000..752ffb4b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIREmailLinkSignInRequest
+ @brief Represents the parameters for the emailLinkSignin endpoint.
+ */
+@interface FIREmailLinkSignInRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+#pragma mark - Components of "postBody"
+
+/** @property email
+ @brief The email identifier used to complete the email link sign-in.
+ */
+@property(nonatomic, copy, readonly) NSString *email;
+
+/** @property oobCode
+ @brief The OOB code used to complete the email link sign-in flow.
+ */
+@property(nonatomic, copy, readonly) NSString *oobCode;
+
+/** @property IDToken
+ @brief The ID Token code potentially used to complete the email link sign-in flow.
+ */
+@property(nonatomic, copy) NSString *IDToken;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithProviderID:requestConfifuration instead.
+ */
+- (instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration NS_UNAVAILABLE;
+
+/** @fn initWithProviderID:requestConfifuration
+ @brief Designated initializer.
+ @param email The email identifier used to complete hte email link sign-in flow.
+ @param oobCode The OOB code used to complete the email link sign-in flow.
+ @param requestConfiguration An object containing configurations to be added to the request.
+
+ */
+- (instancetype)initWithEmail:(NSString *)email
+ oobCode:(NSString *)oobCode
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.m
new file mode 100644
index 00000000..dc5b512e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.m
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kEmailLinkSigninEndpoint
+ @brief The "EmailLinkSignin" endpoint.
+ */
+static NSString *const kEmailLinkSigninEndpoint = @"emailLinkSignin";
+
+/** @var kEmailKey
+ @brief The key for the "identifier" value in the request.
+ */
+static NSString *const kEmailKey = @"email";
+
+/** @var kEmailLinkKey
+ @brief The key for the "emailLink" value in the request.
+ */
+static NSString *const kOOBCodeKey = @"oobCode";
+
+/** @var kIDTokenKey
+ @brief The key for the "IDToken" value in the request.
+ */
+static NSString *const kIDTokenKey = @"idToken";
+
+/** @var kPostBodyKey
+ @brief The key for the "postBody" value in the request.
+ */
+static NSString *const kPostBodyKey = @"postBody";
+
+@implementation FIREmailLinkSignInRequest
+
+- (instancetype)initWithEmail:(NSString *)email
+ oobCode:(NSString *)oobCode
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kEmailLinkSigninEndpoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _email = email;
+ _oobCode = oobCode;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody = [@{
+ kEmailKey : _email,
+ kOOBCodeKey : _oobCode,
+ } mutableCopy];
+
+ if (_IDToken) {
+ postBody[kIDTokenKey] = _IDToken;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.h
new file mode 100644
index 00000000..c12b0aa8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRVerifyAssertionResponse
+ @brief Represents the response from the emailLinkSignin endpoint.
+ */
+@interface FIREmailLinkSignInResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property IDToken
+ @brief The ID token in the email link sign-in response.
+ */
+@property(nonatomic, copy, readonly) NSString *IDToken;
+
+/** @property email
+ @brief The email returned by the IdP.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *email;
+
+/** @property refreshToken
+ @brief The refreshToken returned by the server.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *refreshToken;
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property isNewUser
+ @brief Flag indicating that the user signing in is a new user and not a returning user.
+ */
+@property(nonatomic, assign) BOOL isNewUser;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.m
new file mode 100644
index 00000000..9f125e14
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIREmailLinkSignInResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _email = [dictionary[@"email"] copy];
+ _IDToken = [dictionary[@"idToken"] copy];
+ _isNewUser = [dictionary[@"isNewUser"] boolValue];
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ _approximateExpirationDate =
+ [dictionary[@"expiresIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]]
+ : nil;
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.h
new file mode 100644
index 00000000..7d78500a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRGetAccountInfoRequest
+ @brief Represents the parameters for the getAccountInfo endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/getAccountInfo
+ */
+@interface FIRGetAccountInfoRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property accessToken
+ @brief The STS Access Token for the authenticated user.
+ */
+@property(nonatomic, copy) NSString *accessToken;
+
+/** @fn initWithEndpoint:requestConfiguration:requestConfiguration
+ @brief Please use initWithAccessToken:requestConfiguration: instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithAccessToken:requestConfiguration
+ @brief Designated initializer.
+ @param accessToken The Access Token of the authenticated user.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithAccessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.m
new file mode 100644
index 00000000..db86f934
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.m
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kGetAccountInfoEndpoint
+ @brief The "getAccountInfo" endpoint.
+ */
+static NSString *const kGetAccountInfoEndpoint = @"getAccountInfo";
+
+/** @var kIDTokenKey
+ @brief The key for the "idToken" value in the request. This is actually the STS Access Token,
+ despite it's confusing (backwards compatiable) parameter name.
+ */
+static NSString *const kIDTokenKey = @"idToken";
+
+@implementation FIRGetAccountInfoRequest
+
+- (nullable instancetype)initWithAccessToken:(NSString *)accessToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kGetAccountInfoEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _accessToken = [accessToken copy];
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ return @{kIDTokenKey : _accessToken};
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h
new file mode 100644
index 00000000..14e7f88c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRGetAccountInfoResponseProviderUserInfo
+ @brief Represents the provider user info part of the response from the getAccountInfo endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/getAccountInfo
+ */
+@interface FIRGetAccountInfoResponseProviderUserInfo : NSObject
+
+/** @property providerID
+ @brief The ID of the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *providerID;
+
+/** @property displayName
+ @brief The user's display name at the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *displayName;
+
+/** @property photoURL
+ @brief The user's photo URL at the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSURL *photoURL;
+
+/** @property federatedID
+ @brief The user's identifier at the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *federatedID;
+
+/** @property email
+ @brief The user's email at the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *email;
+
+/** @property phoneNumber
+ @brief A phone number associated with the user.
+ */
+@property(nonatomic, readonly, nullable) NSString *phoneNumber;
+
+/** @fn init
+ @brief Please use initWithDictionary:
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithAPIKey:
+ @brief Designated initializer.
+ @param dictionary The provider user info data from endpoint.
+ */
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER;
+
+@end
+
+/** @class FIRGetAccountInfoResponseUser
+ @brief Represents the firebase user info part of the response from the getAccountInfo endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/getAccountInfo
+ */
+@interface FIRGetAccountInfoResponseUser : NSObject
+
+/** @property localID
+ @brief The ID of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *localID;
+
+/** @property email
+ @brief The email or the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *email;
+
+/** @property emailVerified
+ @brief Whether the email has been verified.
+ */
+@property(nonatomic, assign, readonly) BOOL emailVerified;
+
+/** @property displayName
+ @brief The display name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *displayName;
+
+/** @property photoURL
+ @brief The user's photo URL.
+ */
+@property(nonatomic, strong, readonly, nullable) NSURL *photoURL;
+
+/** @property creationDate
+ @brief The user's creation date.
+ */
+@property(nonatomic, strong, readonly, nullable) NSDate *creationDate;
+
+/** @property lastSignInDate
+ @brief The user's last login date.
+ */
+@property(nonatomic, strong, readonly, nullable) NSDate *lastLoginDate;
+
+/** @property providerUserInfo
+ @brief The user's profiles at the associated identity providers.
+ */
+@property(nonatomic, strong, readonly, nullable)
+ NSArray<FIRGetAccountInfoResponseProviderUserInfo *> *providerUserInfo;
+
+/** @property passwordHash
+ @brief Information about user's password.
+ @remarks This is not necessarily the hash of user's actual password.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *passwordHash;
+
+/** @property phoneNumber
+ @brief A phone number associated with the user.
+ */
+@property(nonatomic, readonly, nullable) NSString *phoneNumber;
+
+@property(nonatomic, strong, readonly, nullable)
+ NSArray<FIRAuthProtoMFAEnrollment *> *MFAEnrollments;
+
+/** @fn init
+ @brief Please use initWithDictionary:
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithAPIKey:
+ @brief Designated initializer.
+ @param dictionary The provider user info data from endpoint.
+ */
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER;
+
+@end
+
+/** @class FIRGetAccountInfoResponse
+ @brief Represents the response from the setAccountInfo endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/getAccountInfo
+ */
+@interface FIRGetAccountInfoResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property providerUserInfo
+ @brief The requested users' profiles.
+ */
+@property(nonatomic, strong, readonly, nullable) NSArray<FIRGetAccountInfoResponseUser *> *users;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.m
new file mode 100644
index 00000000..6b812bd9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.m
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h"
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kErrorKey
+ @brief The key for the "error" value in JSON responses from the server.
+ */
+static NSString *const kErrorKey = @"error";
+
+@implementation FIRGetAccountInfoResponseProviderUserInfo
+
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
+ self = [super init];
+ if (self) {
+ _providerID = [dictionary[@"providerId"] copy];
+ _displayName = [dictionary[@"displayName"] copy];
+ NSString *photoURL = dictionary[@"photoUrl"];
+ if (photoURL) {
+ _photoURL = [NSURL URLWithString:photoURL];
+ }
+ _federatedID = [dictionary[@"federatedId"] copy];
+ _email = [dictionary[@"email"] copy];
+ _phoneNumber = [dictionary[@"phoneNumber"] copy];
+ }
+ return self;
+}
+
+@end
+
+@implementation FIRGetAccountInfoResponseUser
+
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
+ self = [super init];
+ if (self) {
+ NSArray<NSDictionary *> *providerUserInfoData = dictionary[@"providerUserInfo"];
+ if (providerUserInfoData) {
+ NSMutableArray<FIRGetAccountInfoResponseProviderUserInfo *> *providerUserInfoArray =
+ [NSMutableArray arrayWithCapacity:providerUserInfoData.count];
+ for (NSDictionary *dictionary in providerUserInfoData) {
+ [providerUserInfoArray addObject:[[FIRGetAccountInfoResponseProviderUserInfo alloc]
+ initWithDictionary:dictionary]];
+ }
+ _providerUserInfo = [providerUserInfoArray copy];
+ }
+ _localID = [dictionary[@"localId"] copy];
+ _displayName = [dictionary[@"displayName"] copy];
+ _email = [dictionary[@"email"] copy];
+ NSString *photoURL = dictionary[@"photoUrl"];
+ if (photoURL) {
+ _photoURL = [NSURL URLWithString:photoURL];
+ }
+ if ([dictionary[@"createdAt"] isKindOfClass:[NSString class]]) {
+ // Divide by 1000 in order to convert miliseconds to seconds.
+ NSTimeInterval creationDateTimeInterval = [dictionary[@"createdAt"] doubleValue] / 1000;
+ _creationDate = [NSDate dateWithTimeIntervalSince1970:creationDateTimeInterval];
+ }
+ if ([dictionary[@"lastLoginAt"] isKindOfClass:[NSString class]]) {
+ // Divide by 1000 in order to convert miliseconds to seconds
+ NSTimeInterval creationDateTimeInterval = [dictionary[@"lastLoginAt"] doubleValue] / 1000;
+ _lastLoginDate = [NSDate dateWithTimeIntervalSince1970:creationDateTimeInterval];
+ }
+ _emailVerified = [dictionary[@"emailVerified"] boolValue];
+ _passwordHash = [dictionary[@"passwordHash"] copy];
+ _phoneNumber = [dictionary[@"phoneNumber"] copy];
+ NSArray<NSDictionary *> *MFAEnrollmentData = dictionary[@"mfaInfo"];
+ if (MFAEnrollmentData) {
+ NSMutableArray<FIRAuthProtoMFAEnrollment *> *MFAEnrollments =
+ [NSMutableArray arrayWithCapacity:MFAEnrollmentData.count];
+ for (NSDictionary *dictionary in MFAEnrollmentData) {
+ [MFAEnrollments
+ addObject:[[FIRAuthProtoMFAEnrollment alloc] initWithDictionary:dictionary]];
+ }
+ _MFAEnrollments = [MFAEnrollments copy];
+ }
+ }
+ return self;
+}
+
+@end
+
+@implementation FIRGetAccountInfoResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ NSArray<NSDictionary *> *usersData = dictionary[@"users"];
+ // The client side never sends a getAccountInfo request with multiple localID, so only one user
+ // data is expected in the response.
+ if (![usersData isKindOfClass:[NSArray class]] || usersData.count != 1) {
+ if (error) {
+ *error = [FIRAuthErrorUtils unexpectedResponseWithDeserializedResponse:dictionary];
+ }
+ return NO;
+ }
+ _users = @[ [[FIRGetAccountInfoResponseUser alloc] initWithDictionary:usersData.firstObject] ];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h
new file mode 100644
index 00000000..dc48a3ed
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+@class FIRActionCodeSettings;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @enum FIRGetOOBConfirmationCodeRequestType
+ @brief Types of OOB Confirmation Code requests.
+ */
+typedef NS_ENUM(NSInteger, FIRGetOOBConfirmationCodeRequestType) {
+ /** @var FIRGetOOBConfirmationCodeRequestTypePasswordReset
+ @brief Requests a password reset code.
+ */
+ FIRGetOOBConfirmationCodeRequestTypePasswordReset,
+
+ /** @var FIRGetOOBConfirmationCodeRequestTypeVerifyEmail
+ @brief Requests an email verification code.
+ */
+ FIRGetOOBConfirmationCodeRequestTypeVerifyEmail,
+
+ /** @var FIRGetOOBConfirmationCodeRequestTypeEmailLink
+ @brief Requests an email sign-in link.
+ */
+ FIRGetOOBConfirmationCodeRequestTypeEmailLink,
+
+ /** @var FIRGetOOBConfirmationCodeRequestTypeVerifyBeforeUpdateEmail
+ @brief Requests an verify before update email.
+ */
+ FIRGetOOBConfirmationCodeRequestTypeVerifyBeforeUpdateEmail,
+};
+
+/** @enum FIRGetOOBConfirmationCodeRequest
+ @brief Represents the parameters for the getOOBConfirmationCode endpoint.
+ */
+@interface FIRGetOOBConfirmationCodeRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property requestType
+ @brief The types of OOB Confirmation Code to request.
+ */
+@property(nonatomic, assign, readonly) FIRGetOOBConfirmationCodeRequestType requestType;
+
+/** @property email
+ @brief The email of the user.
+ @remarks For password reset.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *email;
+
+/** @property updatedEmail
+ @brief The new email to be updated.
+ @remarks For verifyBeforeUpdateEmail.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *updatedEmail;
+
+/** @property accessToken
+ @brief The STS Access Token of the authenticated user.
+ @remarks For email change.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *accessToken;
+
+/** @property continueURL
+ @brief This URL represents the state/Continue URL in the form of a universal link.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *continueURL;
+
+/** @property iOSBundleID
+ @brief The iOS bundle Identifier, if available.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *iOSBundleID;
+
+/** @property androidPackageName
+ @brief The Android package name, if available.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *androidPackageName;
+
+/** @property androidMinimumVersion
+ @brief The minimum Android version supported, if available.
+ */
+@property(nonatomic, copy, nullable, readonly) NSString *androidMinimumVersion;
+
+/** @property androidInstallIfNotAvailable
+ @brief Indicates whether or not the Android app should be installed if not already available.
+ */
+@property(nonatomic, assign, readonly) BOOL androidInstallApp;
+
+/** @property handleCodeInApp
+ @brief Indicates whether the action code link will open the app directly or after being
+ redirected from a Firebase owned web widget.
+ */
+@property(assign, nonatomic) BOOL handleCodeInApp;
+
+/** @property dynamicLinkDomain
+ @brief The Firebase Dynamic Link domain used for out of band code flow.
+ */
+@property(copy, nonatomic, nullable) NSString *dynamicLinkDomain;
+
+/** @fn passwordResetRequestWithEmail:actionCodeSettings:requestConfiguration:
+ @brief Creates a password reset request.
+ @param email The user's email address.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the password reset request.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ @return A password reset request.
+ */
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ passwordResetRequestWithEmail:(NSString *)email
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+/** @fn verifyEmailRequestWithAccessToken:actionCodeSettings:requestConfiguration:
+ @brief Creates a password reset request.
+ @param accessToken The user's STS Access Token.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the email verification request.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ @return A password reset request.
+ */
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ verifyEmailRequestWithAccessToken:(NSString *)accessToken
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+/** @fn signInWithEmailLinkRequest:actionCodeSettings:requestConfiguration:
+ @brief Creates a sign-in with email link.
+ @param email The user's email address.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the email sign-in link.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ @return An email sign-in link request.
+ */
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ signInWithEmailLinkRequest:(NSString *)email
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+/** @fn verifyBeforeUpdateEmailWithAccessToken:newEmail:actionCodeSettings:requestConfiguration:
+ @brief Creates a verifyBeforeUpdateEmail request.
+ @param accessToken The user's STS Access Token.
+ @param newEmail The user's email address to be updated.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the password reset request.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ @return A verifyBeforeUpdateEmail request.
+ */
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ verifyBeforeUpdateEmailWithAccessToken:(NSString *)accessToken
+ newEmail:(NSString *)newEmail
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+/** @fn init
+ @brief Please use a factory method.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.m
new file mode 100644
index 00000000..dde084c5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.m
@@ -0,0 +1,288 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h"
+
+#import "FirebaseAuth/Sources/Public/FIRActionCodeSettings.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kEndpoint
+ @brief The getOobConfirmationCode endpoint name.
+ */
+static NSString *const kGetOobConfirmationCodeEndpoint = @"getOobConfirmationCode";
+
+/** @var kRequestTypeKey
+ @brief The name of the required "requestType" property in the request.
+ */
+static NSString *const kRequestTypeKey = @"requestType";
+
+/** @var kEmailKey
+ @brief The name of the "email" property in the request.
+ */
+static NSString *const kEmailKey = @"email";
+
+/** @var kNewEmailKey
+ @brief The name of the "newEmail" property in the request.
+ */
+static NSString *const kNewEmailKey = @"newEmail";
+
+/** @var kIDTokenKey
+ @brief The key for the "idToken" value in the request. This is actually the STS Access Token,
+ despite it's confusing (backwards compatiable) parameter name.
+ */
+static NSString *const kIDTokenKey = @"idToken";
+
+/** @var kContinueURLKey
+ @brief The key for the "continue URL" value in the request.
+ */
+static NSString *const kContinueURLKey = @"continueUrl";
+
+/** @var kIosBundeIDKey
+ @brief The key for the "iOS Bundle Identifier" value in the request.
+ */
+static NSString *const kIosBundleIDKey = @"iOSBundleId";
+
+/** @var kAndroidPackageNameKey
+ @brief The key for the "Android Package Name" value in the request.
+ */
+static NSString *const kAndroidPackageNameKey = @"androidPackageName";
+
+/** @var kAndroidInstallAppKey
+ @brief The key for the request parameter indicating whether the android app should be installed
+ or not.
+ */
+static NSString *const kAndroidInstallAppKey = @"androidInstallApp";
+
+/** @var kAndroidMinimumVersionKey
+ @brief The key for the "minimum Android version supported" value in the request.
+ */
+static NSString *const kAndroidMinimumVersionKey = @"androidMinimumVersion";
+
+/** @var kCanHandleCodeInAppKey
+ @brief The key for the request parameter indicating whether the action code can be handled in
+ the app or not.
+ */
+static NSString *const kCanHandleCodeInAppKey = @"canHandleCodeInApp";
+
+/** @var kDynamicLinkDomainKey
+ @brief The key for the "dynamic link domain" value in the request.
+ */
+static NSString *const kDynamicLinkDomainKey = @"dynamicLinkDomain";
+
+/** @var kPasswordResetRequestTypeValue
+ @brief The value for the "PASSWORD_RESET" request type.
+ */
+static NSString *const kPasswordResetRequestTypeValue = @"PASSWORD_RESET";
+
+/** @var kEmailLinkSignInTypeValue
+ @brief The value for the "EMAIL_SIGNIN" request type.
+ */
+static NSString *const kEmailLinkSignInTypeValue = @"EMAIL_SIGNIN";
+
+/** @var kVerifyEmailRequestTypeValue
+ @brief The value for the "VERIFY_EMAIL" request type.
+ */
+static NSString *const kVerifyEmailRequestTypeValue = @"VERIFY_EMAIL";
+
+/** @var kVerifyBeforeUpdateEmailRequestTypeValue
+ @brief The value for the "VERIFY_AND_CHANGE_EMAIL" request type.
+ */
+static NSString *const kVerifyBeforeUpdateEmailRequestTypeValue = @"VERIFY_AND_CHANGE_EMAIL";
+
+@interface FIRGetOOBConfirmationCodeRequest ()
+
+/** @fn initWithRequestType:email:APIKey:
+ @brief Designated initializer.
+ @param requestType The types of OOB Confirmation Code to request.
+ @param email The email of the user.
+ @param newEmail The email of the user to be updated.
+ @param accessToken The STS Access Token of the currently signed in user.
+ @param actionCodeSettings An object of FIRActionCodeSettings which specifies action code
+ settings to be applied to the OOB code request.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithRequestType:(FIRGetOOBConfirmationCodeRequestType)requestType
+ email:(nullable NSString *)email
+ newEmail:(nullable NSString *)newEmail
+ accessToken:(nullable NSString *)accessToken
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+@implementation FIRGetOOBConfirmationCodeRequest
+
+/** @var requestTypeStringValueForRequestType:
+ @brief Returns the string equivilent for an @c FIRGetOOBConfirmationCodeRequestType value.
+ */
++ (NSString *)requestTypeStringValueForRequestType:
+ (FIRGetOOBConfirmationCodeRequestType)requestType {
+ switch (requestType) {
+ case FIRGetOOBConfirmationCodeRequestTypePasswordReset:
+ return kPasswordResetRequestTypeValue;
+ case FIRGetOOBConfirmationCodeRequestTypeVerifyEmail:
+ return kVerifyEmailRequestTypeValue;
+ case FIRGetOOBConfirmationCodeRequestTypeEmailLink:
+ return kEmailLinkSignInTypeValue;
+ case FIRGetOOBConfirmationCodeRequestTypeVerifyBeforeUpdateEmail:
+ return kVerifyBeforeUpdateEmailRequestTypeValue;
+ // No default case so that we get a compiler warning if a new value was added to the enum.
+ }
+}
+
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ passwordResetRequestWithEmail:(NSString *)email
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypePasswordReset
+ email:email
+ newEmail:nil
+ accessToken:nil
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:requestConfiguration];
+}
+
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ verifyEmailRequestWithAccessToken:(NSString *)accessToken
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypeVerifyEmail
+ email:nil
+ newEmail:nil
+ accessToken:accessToken
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:requestConfiguration];
+}
+
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ signInWithEmailLinkRequest:(NSString *)email
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ return [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypeEmailLink
+ email:email
+ newEmail:nil
+ accessToken:nil
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:requestConfiguration];
+}
+
++ (nullable FIRGetOOBConfirmationCodeRequest *)
+ verifyBeforeUpdateEmailWithAccessToken:(NSString *)accessToken
+ newEmail:(NSString *)newEmail
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ return
+ [[self alloc] initWithRequestType:FIRGetOOBConfirmationCodeRequestTypeVerifyBeforeUpdateEmail
+ email:nil
+ newEmail:newEmail
+ accessToken:accessToken
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:requestConfiguration];
+}
+
+- (nullable instancetype)initWithRequestType:(FIRGetOOBConfirmationCodeRequestType)requestType
+ email:(nullable NSString *)email
+ newEmail:(nullable NSString *)newEmail
+ accessToken:(nullable NSString *)accessToken
+ actionCodeSettings:(nullable FIRActionCodeSettings *)actionCodeSettings
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kGetOobConfirmationCodeEndpoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _requestType = requestType;
+ _email = email;
+ _updatedEmail = newEmail;
+ _accessToken = accessToken;
+ _continueURL = actionCodeSettings.URL.absoluteString;
+ _iOSBundleID = actionCodeSettings.iOSBundleID;
+ _androidPackageName = actionCodeSettings.androidPackageName;
+ _androidMinimumVersion = actionCodeSettings.androidMinimumVersion;
+ _androidInstallApp = actionCodeSettings.androidInstallIfNotAvailable;
+ _handleCodeInApp = actionCodeSettings.handleCodeInApp;
+ _dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *body =
+ [@{kRequestTypeKey : [[self class] requestTypeStringValueForRequestType:_requestType]}
+ mutableCopy];
+
+ // For password reset requests, we only need an email address in addition to the already required
+ // fields.
+ if (_requestType == FIRGetOOBConfirmationCodeRequestTypePasswordReset) {
+ body[kEmailKey] = _email;
+ }
+
+ // For verify email requests, we only need an STS Access Token in addition to the already required
+ // fields.
+ if (_requestType == FIRGetOOBConfirmationCodeRequestTypeVerifyEmail) {
+ body[kIDTokenKey] = _accessToken;
+ }
+
+ // For email sign-in link requests, we only need an email address in addition to the already
+ // required fields.
+ if (_requestType == FIRGetOOBConfirmationCodeRequestTypeEmailLink) {
+ body[kEmailKey] = _email;
+ }
+
+ // For email sign-in link requests, we only need an STS Access Token, a new email address in
+ // addition to the already required fields.
+ if (_requestType == FIRGetOOBConfirmationCodeRequestTypeVerifyBeforeUpdateEmail) {
+ body[kNewEmailKey] = _updatedEmail;
+ body[kIDTokenKey] = _accessToken;
+ }
+
+ if (_continueURL) {
+ body[kContinueURLKey] = _continueURL;
+ }
+
+ if (_iOSBundleID) {
+ body[kIosBundleIDKey] = _iOSBundleID;
+ }
+
+ if (_androidPackageName) {
+ body[kAndroidPackageNameKey] = _androidPackageName;
+ }
+
+ if (_androidMinimumVersion) {
+ body[kAndroidMinimumVersionKey] = _androidMinimumVersion;
+ }
+
+ if (_androidInstallApp) {
+ body[kAndroidInstallAppKey] = @YES;
+ }
+
+ if (_handleCodeInApp) {
+ body[kCanHandleCodeInAppKey] = @YES;
+ }
+
+ if (_dynamicLinkDomain) {
+ body[kDynamicLinkDomainKey] = _dynamicLinkDomain;
+ }
+
+ return body;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h
new file mode 100644
index 00000000..9ea445e5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRGetOOBConfirmationCodeResponse
+ @brief Represents the response from the getOobConfirmationCode endpoint.
+ */
+@interface FIRGetOOBConfirmationCodeResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property OOBCode
+ @brief The OOB code returned by the server in some cases.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *OOBCode;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.m
new file mode 100644
index 00000000..7eef6885
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kOOBCodeKey
+ @brief The name of the field in the response JSON for the OOB code.
+ */
+static NSString *const kOOBCodeKey = @"oobCode";
+
+@implementation FIRGetOOBConfirmationCodeResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _OOBCode = [dictionary[kOOBCodeKey] copy];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h
new file mode 100644
index 00000000..cfaefccb
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRGetProjectConfigRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithRequestConfiguration:
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithTemporaryProof:phoneNumberAPIKey
+ @brief Designated initializer.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.m
new file mode 100644
index 00000000..402f2207
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.m
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kGetProjectConfigEndPoint
+ @brief The "getProjectConfig" endpoint.
+ */
+static NSString *const kGetProjectConfigEndPoint = @"getProjectConfig";
+
+@implementation FIRGetProjectConfigRequest
+
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ return [super initWithEndpoint:kGetProjectConfigEndPoint
+ requestConfiguration:requestConfiguration];
+}
+
+- (BOOL)containsPostBody {
+ return NO;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h
new file mode 100644
index 00000000..12248e11
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRGetProjectConfigResponse
+ @brief Represents the response from the getProjectConfig endpoint.
+ */
+@interface FIRGetProjectConfigResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property projectID
+ @brief The unique ID pertaining to the current project.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *projectID;
+
+/** @property authorizedDomains
+ @brief A list of domains whitelisted for the current project.
+ */
+@property(nonatomic, strong, readonly, nullable) NSArray *authorizedDomains;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.m
new file mode 100644
index 00000000..38a3ba05
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.m
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRGetProjectConfigResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _projectID = [dictionary[@"projectId"] copy];
+ id authorizedDomains = dictionary[@"authorizedDomains"];
+ if ([authorizedDomains isKindOfClass:[NSString class]]) {
+ NSData *data = [authorizedDomains dataUsingEncoding:NSUTF8StringEncoding];
+ authorizedDomains = [NSJSONSerialization JSONObjectWithData:data
+ options:NSJSONReadingMutableLeaves
+ error:nil];
+ }
+ if ([authorizedDomains isKindOfClass:[NSArray class]]) {
+ _authorizedDomains = [[NSArray alloc] initWithArray:authorizedDomains copyItems:YES];
+ }
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.h
new file mode 100644
index 00000000..1b918f50
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRResetPasswordRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property oobCode
+ @brief The oobCode sent in the request.
+ */
+@property(nonatomic, copy, readonly) NSString *oobCode;
+
+/** @property updatedPassword
+ @brief The new password sent in the request.
+ */
+@property(nonatomic, copy, readonly) NSString *updatedPassword;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithOobCode:newPassword:requestConfiguration: instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithOobCode:newPassword:requestConfiguration:
+ @brief Designated initializer.
+ @param oobCode The OOB Code.
+ @param newPassword The new password.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithOobCode:(NSString *)oobCode
+ newPassword:(nullable NSString *)newPassword
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.m
new file mode 100644
index 00000000..9f70935e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.m
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kResetPasswordEndpoint
+ @brief The "resetPassword" endpoint.
+ */
+static NSString *const kResetPasswordEndpoint = @"resetPassword";
+
+/** @var kOOBCodeKey
+ @brief The "resetPassword" key.
+ */
+static NSString *const kOOBCodeKey = @"oobCode";
+
+/** @var kCurrentPasswordKey
+ @brief The "newPassword" key.
+ */
+static NSString *const kCurrentPasswordKey = @"newPassword";
+
+@implementation FIRResetPasswordRequest
+
+- (nullable instancetype)initWithOobCode:(NSString *)oobCode
+ newPassword:(nullable NSString *)newPassword
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kResetPasswordEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _oobCode = oobCode;
+ _updatedPassword = newPassword;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ postBody[kOOBCodeKey] = _oobCode;
+ if (_updatedPassword) {
+ postBody[kCurrentPasswordKey] = _updatedPassword;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.h
new file mode 100644
index 00000000..3e8c5604
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthResetPasswordResponse
+ @brief Represents the response from the resetPassword endpoint.
+ @remarks Possible error codes:
+ - FIRAuthErrorCodeWeakPassword
+ - FIRAuthErrorCodeUserDisabled
+ - FIRAuthErrorCodeOperationNotAllowed
+ - FIRAuthErrorCodeExpiredActionCode
+ - FIRAuthErrorCodeInvalidActionCode
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/resetPassword
+ */
+@interface FIRResetPasswordResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property email
+ @brief The email address corresponding to the reset password request.
+ */
+@property(nonatomic, strong, readonly) NSString *email;
+
+/** @property verifiedEmail
+ @brief The verified email returned from the backend.
+ */
+@property(nonatomic, strong, readonly) NSString *verifiedEmail;
+
+/** @property requestType
+ @brief The tpye of request as returned by the backend.
+ */
+@property(nonatomic, strong, readonly) NSString *requestType;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.m
new file mode 100644
index 00000000..5ad1e361
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.m
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRResetPasswordResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRResetPasswordResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _email = [dictionary[@"email"] copy];
+ _requestType = [dictionary[@"requestType"] copy];
+ _verifiedEmail = [dictionary[@"newEmail"] copy];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.h
new file mode 100644
index 00000000..c17a2378
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.h
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @enum FIRSecureTokenRequestGrantType
+ @brief Represents the possible grant types for a token request.
+ */
+typedef NS_ENUM(NSUInteger, FIRSecureTokenRequestGrantType) {
+ /** @var FIRSecureTokenRequestGrantTypeAuthorizationCode
+ @brief Indicates an authorization code request.
+ @remarks Exchanges a Gitkit "ID Token" for an STS Access Token and Refresh Token.
+ */
+ FIRSecureTokenRequestGrantTypeAuthorizationCode,
+
+ /** @var FIRSecureTokenRequestGrantTypeRefreshToken
+ @brief Indicates an refresh token request.
+ @remarks Uses an existing Refresh Token to create a new Access Token.
+ */
+ FIRSecureTokenRequestGrantTypeRefreshToken,
+};
+
+/** @class FIRSecureTokenRequest
+ @brief Represents the parameters for the token endpoint.
+ */
+@interface FIRSecureTokenRequest : NSObject <FIRAuthRPCRequest>
+
+/** @property grantType
+ @brief The type of grant requested.
+ @see FIRSecureTokenRequestGrantType
+ */
+@property(nonatomic, assign, readonly) FIRSecureTokenRequestGrantType grantType;
+
+/** @property scope
+ @brief The scopes requested (a comma-delimited list of scope strings.)
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *scope;
+
+/** @property refreshToken
+ @brief The client's refresh token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *refreshToken;
+
+/** @property code
+ @brief The client's authorization code (legacy Gitkit "ID Token").
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *code;
+
+/** @property APIKey
+ @brief The client's API Key.
+ */
+@property(nonatomic, copy, readonly) NSString *APIKey;
+
+/** @fn authCodeRequestWithCode:
+ @brief Creates an authorization code request with the given code (legacy Gitkit "ID Token").
+ @param code The authorization code (legacy Gitkit "ID Token").
+ @param requestConfiguration An object containing configurations to be added to the request.
+ @return An authorization request.
+ */
++ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration;
+
+/** @fn refreshRequestWithCode:
+ @brief Creates a refresh request with the given refresh token.
+ @param refreshToken The refresh token.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ @return A refresh request.
+ */
++ (FIRSecureTokenRequest *)refreshRequestWithRefreshToken:(NSString *)refreshToken
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration;
+
+/** @fn init
+ @brief Please use initWithGrantType:scope:refreshToken:code:
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithGrantType:scope:refreshToken:code:APIKey:
+ @brief Designated initializer.
+ @param grantType The type of request.
+ @param scope The scopes requested.
+ @param refreshToken The client's refresh token (for refresh requests.)
+ @param code The client's authorization code (Gitkit ID Token) (for authorization code requests.)
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithGrantType:(FIRSecureTokenRequestGrantType)grantType
+ scope:(nullable NSString *)scope
+ refreshToken:(nullable NSString *)refreshToken
+ code:(nullable NSString *)code
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.m
new file mode 100644
index 00000000..a2bbc1eb
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.m
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.h"
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kFIRSecureTokenServiceGetTokenURLFormat
+ @brief The format of the secure token service URLs. Requires string format substitution with
+ the client's API Key.
+ */
+static NSString *const kFIRSecureTokenServiceGetTokenURLFormat = @"https://%@/v1/token?key=%@";
+
+/** @var kFIRSecureTokenServiceGrantTypeRefreshToken
+ @brief The string value of the @c FIRSecureTokenRequestGrantTypeRefreshToken request type.
+ */
+static NSString *const kFIRSecureTokenServiceGrantTypeRefreshToken = @"refresh_token";
+
+/** @var kFIRSecureTokenServiceGrantTypeAuthorizationCode
+ @brief The string value of the @c FIRSecureTokenRequestGrantTypeAuthorizationCode request type.
+ */
+static NSString *const kFIRSecureTokenServiceGrantTypeAuthorizationCode = @"authorization_code";
+
+/** @var kGrantTypeKey
+ @brief The key for the "grantType" parameter in the request.
+ */
+static NSString *const kGrantTypeKey = @"grantType";
+
+/** @var kScopeKey
+ @brief The key for the "scope" parameter in the request.
+ */
+static NSString *const kScopeKey = @"scope";
+
+/** @var kRefreshTokenKey
+ @brief The key for the "refreshToken" parameter in the request.
+ */
+static NSString *const kRefreshTokenKey = @"refreshToken";
+
+/** @var kCodeKey
+ @brief The key for the "code" parameter in the request.
+ */
+static NSString *const kCodeKey = @"code";
+
+/** @var gAPIHost
+ @brief Host for server API calls.
+ */
+static NSString *gAPIHost = @"securetoken.googleapis.com";
+
+@implementation FIRSecureTokenRequest {
+ /** @var _requestConfiguration
+ @brief Contains configuration relevant to the request.
+ */
+ FIRAuthRequestConfiguration *_requestConfiguration;
+}
+
++ (FIRSecureTokenRequest *)authCodeRequestWithCode:(NSString *)code
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeAuthorizationCode
+ scope:nil
+ refreshToken:nil
+ code:code
+ requestConfiguration:requestConfiguration];
+}
+
++ (FIRSecureTokenRequest *)refreshRequestWithRefreshToken:(NSString *)refreshToken
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ return [[self alloc] initWithGrantType:FIRSecureTokenRequestGrantTypeRefreshToken
+ scope:nil
+ refreshToken:refreshToken
+ code:nil
+ requestConfiguration:requestConfiguration];
+}
+
+/** @fn grantTypeStringWithGrantType:
+ @brief Converts a @c FIRSecureTokenRequestGrantType to it's @c NSString equivilent.
+ */
++ (NSString *)grantTypeStringWithGrantType:(FIRSecureTokenRequestGrantType)grantType {
+ switch (grantType) {
+ case FIRSecureTokenRequestGrantTypeAuthorizationCode:
+ return kFIRSecureTokenServiceGrantTypeAuthorizationCode;
+ case FIRSecureTokenRequestGrantTypeRefreshToken:
+ return kFIRSecureTokenServiceGrantTypeRefreshToken;
+ // No Default case so we will notice if new grant types are added to the enum.
+ }
+}
+
+- (nullable instancetype)initWithGrantType:(FIRSecureTokenRequestGrantType)grantType
+ scope:(nullable NSString *)scope
+ refreshToken:(nullable NSString *)refreshToken
+ code:(nullable NSString *)code
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super init];
+ if (self) {
+ _grantType = grantType;
+ _scope = [scope copy];
+ _refreshToken = [refreshToken copy];
+ _code = [code copy];
+ _APIKey = [requestConfiguration.APIKey copy];
+ _requestConfiguration = requestConfiguration;
+ }
+ return self;
+}
+
+- (FIRAuthRequestConfiguration *)requestConfiguration {
+ return _requestConfiguration;
+}
+
+- (NSURL *)requestURL {
+ NSString *URLString =
+ [NSString stringWithFormat:kFIRSecureTokenServiceGetTokenURLFormat, gAPIHost, _APIKey];
+ NSURL *URL = [NSURL URLWithString:URLString];
+ return URL;
+}
+
+- (BOOL)containsPostBody {
+ return YES;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody =
+ [@{kGrantTypeKey : [[self class] grantTypeStringWithGrantType:_grantType]} mutableCopy];
+ if (_scope) {
+ postBody[kScopeKey] = _scope;
+ }
+ if (_refreshToken) {
+ postBody[kRefreshTokenKey] = _refreshToken;
+ }
+ if (_code) {
+ postBody[kCodeKey] = _code;
+ }
+ return [postBody copy];
+}
+
+#pragma mark - Internal API for development
+
++ (NSString *)host {
+ return gAPIHost;
+}
+
++ (void)setHost:(NSString *)host {
+ gAPIHost = host;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.h
new file mode 100644
index 00000000..a45f9ad4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRSecureTokenResponse
+ @brief Represents the response from the token endpoint.
+ */
+@interface FIRSecureTokenResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property refreshToken
+ @brief The refresh token. (Possibly an updated one for refresh requests.)
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *refreshToken;
+
+/** @property accessToken
+ @brief The new access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *accessToken;
+
+/** @property IDToken
+ @brief The new ID Token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.m
new file mode 100644
index 00000000..5d4c00ae
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.m
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.h"
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kExpiresInKey
+ @brief The key for the number of seconds till the access token expires.
+ */
+static NSString *const kExpiresInKey = @"expires_in";
+
+/** @var kRefreshTokenKey
+ @brief The key for the refresh token.
+ */
+static NSString *const kRefreshTokenKey = @"refresh_token";
+
+/** @var kAccessTokenKey
+ @brief The key for the access token.
+ */
+static NSString *const kAccessTokenKey = @"access_token";
+
+/** @var kIDTokenKey
+ @brief The key for the "id_token" value in the response.
+ */
+static NSString *const kIDTokenKey = @"id_token";
+
+@implementation FIRSecureTokenResponse
+
+- (nullable NSString *)expectedKind {
+ return nil;
+}
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _refreshToken = dictionary[kRefreshTokenKey];
+ _accessToken = dictionary[kAccessTokenKey];
+ _IDToken = dictionary[kIDTokenKey];
+ if (!_accessToken.length) {
+ if (error) {
+ *error = [FIRAuthErrorUtils unexpectedResponseWithDeserializedResponse:dictionary];
+ }
+ return NO;
+ }
+ id expiresIn = dictionary[kExpiresInKey];
+ if (![expiresIn isKindOfClass:[NSString class]]) {
+ if (error) {
+ *error = [FIRAuthErrorUtils unexpectedResponseWithDeserializedResponse:dictionary];
+ }
+ return NO;
+ }
+
+ _approximateExpirationDate = [NSDate dateWithTimeIntervalSinceNow:[expiresIn doubleValue]];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h
new file mode 100644
index 00000000..974eb6a4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+@class FIRAuthAppCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRSendVerificationCodeRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property phoneNumber
+ @brief The phone number to which the verification code should be sent.
+ */
+@property(nonatomic, strong, readonly) NSString *phoneNumber;
+
+/** @property appCredential
+ @brief The credential to prove the identity of the app in order to send the verification code.
+ */
+@property(nonatomic, strong, readonly, nullable) FIRAuthAppCredential *appCredential;
+
+/** @property reCAPTCHAToken
+ @brief The reCAPTCHA token to prove the identity of the app in order to send the verification
+ code.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *reCAPTCHAToken;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithPhoneNumber:appCredentials:requestConfiguration: instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithPhoneNumber:appCredentials:requestConfiguration:
+ @brief Designated initializer.
+ @param phoneNumber The phone number to which the verification code is to be sent.
+ @param appCredential The credential that proves the identity of the app.
+ @param reCAPTCHAToken The reCAPTCHA token that proves the identity of the app.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithPhoneNumber:(NSString *)phoneNumber
+ appCredential:(nullable FIRAuthAppCredential *)appCredential
+ reCAPTCHAToken:(nullable NSString *)reCAPTCHAToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.m
new file mode 100644
index 00000000..b0eb544d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeRequest.h"
+
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kSendVerificationCodeEndPoint
+ @brief The "sendVerificationCodeEnd" endpoint.
+ */
+static NSString *const kSendVerificationCodeEndPoint = @"sendVerificationCode";
+
+/** @var kPhoneNumberKey
+ @brief The key for the Phone Number parameter in the request.
+ */
+static NSString *const kPhoneNumberKey = @"phoneNumber";
+
+/** @var kReceiptKey
+ @brief The key for the receipt parameter in the request.
+ */
+static NSString *const kReceiptKey = @"iosReceipt";
+
+/** @var kSecretKey
+ @brief The key for the Secret parameter in the request.
+ */
+static NSString *const kSecretKey = @"iosSecret";
+
+/** @var kreCAPTCHATokenKey
+ @brief The key for the reCAPTCHAToken parameter in the request.
+ */
+static NSString *const kreCAPTCHATokenKey = @"recaptchaToken";
+
+@implementation FIRSendVerificationCodeRequest {
+}
+
+- (nullable instancetype)initWithPhoneNumber:(NSString *)phoneNumber
+ appCredential:(nullable FIRAuthAppCredential *)appCredential
+ reCAPTCHAToken:(nullable NSString *)reCAPTCHAToken
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kSendVerificationCodeEndPoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _phoneNumber = [phoneNumber copy];
+ _appCredential = appCredential;
+ _reCAPTCHAToken = [reCAPTCHAToken copy];
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_phoneNumber) {
+ postBody[kPhoneNumberKey] = _phoneNumber;
+ }
+ if (_appCredential.receipt) {
+ postBody[kReceiptKey] = _appCredential.receipt;
+ }
+ if (_appCredential.secret) {
+ postBody[kSecretKey] = _appCredential.secret;
+ }
+ if (_reCAPTCHAToken) {
+ postBody[kreCAPTCHATokenKey] = _reCAPTCHAToken;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h
new file mode 100644
index 00000000..605f3f47
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRSendVerificationCodeResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property verificationID
+ @brief Encrypted session information returned by the backend.
+ */
+@property(nonatomic, readonly) NSString *verificationID;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.m
new file mode 100644
index 00000000..6e8598cb
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSendVerificationCodeResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRSendVerificationCodeResponse
+
+// TODO: remove when resolving b/37169084 .
+- (nullable NSString *)expectedKind {
+ return nil;
+}
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _verificationID = [dictionary[@"sessionInfo"] copy];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h
new file mode 100644
index 00000000..5ba22bae
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+@class FIRGetAccountInfoResponse;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var FIRSetAccountInfoUserAttributeEmail
+ @brief Constant for email attribute used in "deleteAttributes".
+ */
+extern NSString *const FIRSetAccountInfoUserAttributeEmail;
+
+/** @var FIRSetAccountInfoUserAttributeDisplayName
+ @brief Constant for displayName attribute used in "deleteAttributes".
+ */
+extern NSString *const FIRSetAccountInfoUserAttributeDisplayName;
+
+/** @var FIRSetAccountInfoUserAttributeProvider
+ @brief Constant for provider attribute used in "deleteAttributes".
+ */
+extern NSString *const FIRSetAccountInfoUserAttributeProvider;
+
+/** @var FIRSetAccountInfoUserAttributePhotoURL
+ @brief Constant for photoURL attribute used in "deleteAttributes".
+ */
+extern NSString *const FIRSetAccountInfoUserAttributePhotoURL;
+
+/** @var FIRSetAccountInfoUserAttributePassword
+ @brief Constant for password attribute used in "deleteAttributes".
+ */
+extern NSString *const FIRSetAccountInfoUserAttributePassword;
+
+/** @class FIRSetAccountInfoRequest
+ @brief Represents the parameters for the setAccountInfo endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/setAccountInfo
+ */
+@interface FIRSetAccountInfoRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property accessToken
+ @brief The STS Access Token of the authenticated user.
+ */
+@property(nonatomic, copy, nullable) NSString *accessToken;
+
+/** @property displayName
+ @brief The name of the user.
+ */
+@property(nonatomic, copy, nullable) NSString *displayName;
+
+/** @property localID
+ @brief The local ID of the user.
+ */
+@property(nonatomic, copy, nullable) NSString *localID;
+
+/** @property email
+ @brief The email of the user.
+ */
+@property(nonatomic, copy, nullable) NSString *email;
+
+/** @property photoURL
+ @brief The photoURL of the user.
+ */
+@property(nonatomic, copy, nullable) NSURL *photoURL;
+
+/** @property password
+ @brief The new password of the user.
+ */
+@property(nonatomic, copy, nullable) NSString *password;
+
+/** @property providers
+ @brief The associated identity providers of the user.
+ */
+@property(nonatomic, copy, nullable) NSArray<NSString *> *providers;
+
+/** @property OOBCode
+ @brief The out-of-band code of the change email request.
+ */
+@property(nonatomic, copy, nullable) NSString *OOBCode;
+
+/** @property emailVerified
+ @brief Whether to mark the email as verified or not.
+ */
+@property(nonatomic, assign) BOOL emailVerified;
+
+/** @property upgradeToFederatedLogin
+ @brief Whether to mark the user to upgrade to federated login.
+ */
+@property(nonatomic, assign) BOOL upgradeToFederatedLogin;
+
+/** @property captchaChallenge
+ @brief The captcha challenge.
+ */
+@property(nonatomic, copy, nullable) NSString *captchaChallenge;
+
+/** @property captchaResponse
+ @brief Response to the captcha.
+ */
+@property(nonatomic, copy, nullable) NSString *captchaResponse;
+
+/** @property deleteAttributes
+ @brief The list of user attributes to delete.
+ @remarks Every element of the list must be one of the predefined constant starts with
+ "FIRSetAccountInfoUserAttribute".
+ */
+@property(nonatomic, copy, nullable) NSArray<NSString *> *deleteAttributes;
+
+/** @property deleteProviders
+ @brief The list of identity providers to delete.
+ */
+@property(nonatomic, copy, nullable) NSArray<NSString *> *deleteProviders;
+
+/** @property returnSecureToken
+ @brief Whether the response should return access token and refresh token directly.
+ @remarks The default value is @c YES .
+ */
+@property(nonatomic, assign) BOOL returnSecureToken;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithAPIKey:email:password:displayName:requestConfiguration instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithRequestConfiguration:
+ @brief Designated initializer.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.m
new file mode 100644
index 00000000..99415868
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.m
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+NSString *const FIRSetAccountInfoUserAttributeEmail = @"EMAIL";
+
+NSString *const FIRSetAccountInfoUserAttributeDisplayName = @"DISPLAY_NAME";
+
+NSString *const FIRSetAccountInfoUserAttributeProvider = @"PROVIDER";
+
+NSString *const FIRSetAccountInfoUserAttributePhotoURL = @"PHOTO_URL";
+
+NSString *const FIRSetAccountInfoUserAttributePassword = @"PASSWORD";
+
+/** @var kCreateAuthURIEndpoint
+ @brief The "setAccountInfo" endpoint.
+ */
+static NSString *const kSetAccountInfoEndpoint = @"setAccountInfo";
+
+/** @var kIDTokenKey
+ @brief The key for the "idToken" value in the request. This is actually the STS Access Token,
+ despite it's confusing (backwards compatiable) parameter name.
+ */
+static NSString *const kIDTokenKey = @"idToken";
+
+/** @var kDisplayNameKey
+ @brief The key for the "displayName" value in the request.
+ */
+static NSString *const kDisplayNameKey = @"displayName";
+
+/** @var kLocalIDKey
+ @brief The key for the "localID" value in the request.
+ */
+static NSString *const kLocalIDKey = @"localId";
+
+/** @var kEmailKey
+ @brief The key for the "email" value in the request.
+ */
+static NSString *const kEmailKey = @"email";
+
+/** @var kPasswordKey
+ @brief The key for the "password" value in the request.
+ */
+static NSString *const kPasswordKey = @"password";
+
+/** @var kPhotoURLKey
+ @brief The key for the "photoURL" value in the request.
+ */
+static NSString *const kPhotoURLKey = @"photoUrl";
+
+/** @var kProvidersKey
+ @brief The key for the "providers" value in the request.
+ */
+static NSString *const kProvidersKey = @"provider";
+
+/** @var kOOBCodeKey
+ @brief The key for the "OOBCode" value in the request.
+ */
+static NSString *const kOOBCodeKey = @"oobCode";
+
+/** @var kEmailVerifiedKey
+ @brief The key for the "emailVerified" value in the request.
+ */
+static NSString *const kEmailVerifiedKey = @"emailVerified";
+
+/** @var kUpgradeToFederatedLoginKey
+ @brief The key for the "upgradeToFederatedLogin" value in the request.
+ */
+static NSString *const kUpgradeToFederatedLoginKey = @"upgradeToFederatedLogin";
+
+/** @var kCaptchaChallengeKey
+ @brief The key for the "captchaChallenge" value in the request.
+ */
+static NSString *const kCaptchaChallengeKey = @"captchaChallenge";
+
+/** @var kCaptchaResponseKey
+ @brief The key for the "captchaResponse" value in the request.
+ */
+static NSString *const kCaptchaResponseKey = @"captchaResponse";
+
+/** @var kDeleteAttributesKey
+ @brief The key for the "deleteAttribute" value in the request.
+ */
+static NSString *const kDeleteAttributesKey = @"deleteAttribute";
+
+/** @var kDeleteProvidersKey
+ @brief The key for the "deleteProvider" value in the request.
+ */
+static NSString *const kDeleteProvidersKey = @"deleteProvider";
+
+/** @var kReturnSecureTokenKey
+ @brief The key for the "returnSecureToken" value in the request.
+ */
+static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
+
+@implementation FIRSetAccountInfoRequest
+
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kSetAccountInfoEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _returnSecureToken = YES;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_accessToken) {
+ postBody[kIDTokenKey] = _accessToken;
+ }
+ if (_displayName) {
+ postBody[kDisplayNameKey] = _displayName;
+ }
+ if (_localID) {
+ postBody[kLocalIDKey] = _localID;
+ }
+ if (_email) {
+ postBody[kEmailKey] = _email;
+ }
+ if (_password) {
+ postBody[kPasswordKey] = _password;
+ }
+ if (_photoURL) {
+ postBody[kPhotoURLKey] = _photoURL.absoluteString;
+ }
+ if (_providers) {
+ postBody[kProvidersKey] = _providers;
+ }
+ if (_OOBCode) {
+ postBody[kOOBCodeKey] = _OOBCode;
+ }
+ if (_emailVerified) {
+ postBody[kEmailVerifiedKey] = @YES;
+ }
+ if (_upgradeToFederatedLogin) {
+ postBody[kUpgradeToFederatedLoginKey] = @YES;
+ }
+ if (_captchaChallenge) {
+ postBody[kCaptchaChallengeKey] = _captchaChallenge;
+ }
+ if (_captchaResponse) {
+ postBody[kCaptchaResponseKey] = _captchaResponse;
+ }
+ if (_deleteAttributes) {
+ postBody[kDeleteAttributesKey] = _deleteAttributes;
+ }
+ if (_deleteProviders) {
+ postBody[kDeleteProvidersKey] = _deleteProviders;
+ }
+ if (_returnSecureToken) {
+ postBody[kReturnSecureTokenKey] = @YES;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h
new file mode 100644
index 00000000..9e309304
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRSetAccountInfoResponseProviderUserInfo
+ @brief Represents the provider user info part of the response from the setAccountInfo endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/setAccountInfo
+ */
+@interface FIRSetAccountInfoResponseProviderUserInfo : NSObject
+
+/** @property providerID
+ @brief The ID of the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *providerID;
+
+/** @property displayName
+ @brief The user's display name at the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *displayName;
+
+/** @property photoURL
+ @brief The user's photo URL at the identity provider.
+ */
+@property(nonatomic, strong, readonly, nullable) NSURL *photoURL;
+
+/** @fn init
+ @brief Please use initWithDictionary:
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithAPIKey:
+ @brief Designated initializer.
+ @param dictionary The provider user info data from endpoint.
+ */
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary NS_DESIGNATED_INITIALIZER;
+
+@end
+
+/** @class FIRSetAccountInfoResponse
+ @brief Represents the response from the setAccountInfo endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/setAccountInfo
+ */
+@interface FIRSetAccountInfoResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property email
+ @brief The email or the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *email;
+
+/** @property displayName
+ @brief The display name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *displayName;
+
+/** @property providerUserInfo
+ @brief The user's profiles at the associated identity providers.
+ */
+@property(nonatomic, strong, readonly, nullable)
+ NSArray<FIRSetAccountInfoResponseProviderUserInfo *> *providerUserInfo;
+
+/** @property IDToken
+ @brief Either an authorization code suitable for performing an STS token exchange, or the
+ access token from Secure Token Service, depending on whether @c returnSecureToken is set
+ on the request.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *IDToken;
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property refreshToken
+ @brief The refresh token from Secure Token Service.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *refreshToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.m
new file mode 100644
index 00000000..138fba3e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.m
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRSetAccountInfoResponseProviderUserInfo
+
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
+ self = [super init];
+ if (self) {
+ _providerID = [dictionary[@"providerId"] copy];
+ _displayName = [dictionary[@"displayName"] copy];
+ NSString *photoURL = dictionary[@"photoUrl"];
+ if (photoURL) {
+ _photoURL = [NSURL URLWithString:photoURL];
+ }
+ }
+ return self;
+}
+
+@end
+
+@implementation FIRSetAccountInfoResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _email = [dictionary[@"email"] copy];
+ _displayName = [dictionary[@"displayName"] copy];
+ _IDToken = [dictionary[@"idToken"] copy];
+ _approximateExpirationDate =
+ [dictionary[@"expiresIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]]
+ : nil;
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ NSArray<NSDictionary *> *providerUserInfoData = dictionary[@"providerUserInfo"];
+ if (providerUserInfoData) {
+ NSMutableArray<FIRSetAccountInfoResponseProviderUserInfo *> *providerUserInfoArray =
+ [NSMutableArray arrayWithCapacity:providerUserInfoData.count];
+ for (NSDictionary *dictionary in providerUserInfoData) {
+ [providerUserInfoArray addObject:[[FIRSetAccountInfoResponseProviderUserInfo alloc]
+ initWithDictionary:dictionary]];
+ }
+ _providerUserInfo = [providerUserInfoArray copy];
+ }
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h
new file mode 100644
index 00000000..781d63a2
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRSignInWithGameCenterRequest
+ @brief The request to sign in with Game Center account
+ */
+@interface FIRSignInWithGameCenterRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property playerID
+ @brief The playerID to verify.
+ */
+@property(nonatomic, copy) NSString *playerID;
+
+/** @property publicKeyURL
+ @brief The URL for the public encryption key.
+ */
+@property(nonatomic, copy) NSURL *publicKeyURL;
+
+/** @property signature
+ @brief The verification signature data generated by Game Center.
+ */
+@property(nonatomic, copy) NSData *signature;
+
+/** @property salt
+ @brief A random strong used to compute the hash and keep it randomized.
+ */
+@property(nonatomic, copy) NSData *salt;
+
+/** @property timestamp
+ @brief The date and time that the signature was created.
+ */
+@property(nonatomic, assign) uint64_t timestamp;
+
+/** @property accessToken
+ @brief The STS Access Token for the authenticated user, only needed for linking the user.
+ */
+@property(nonatomic, copy, nullable) NSString *accessToken;
+
+/** @property displayName
+ @brief The display name of the local Game Center player.
+ */
+@property(nonatomic, copy, nullable) NSString *displayName;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithPlayerID:publicKeyURL:signature:salt:timestamp:requestConfiguration:.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithPlayerID:publicKeyURL:signature:salt:timestamp:displayName:requestConfiguration:
+ @brief Designated initializer.
+ @param playerID The ID of the Game Center player.
+ @param publicKeyURL The URL for the public encryption key.
+ @param signature The verification signature generated.
+ @param salt A random string used to compute the hash and keep it randomized.
+ @param timestamp The date and time that the signature was created.
+ @param displayName The display name of the Game Center player.
+ */
+- (nullable instancetype)initWithPlayerID:(NSString *)playerID
+ publicKeyURL:(NSURL *)publicKeyURL
+ signature:(NSData *)signature
+ salt:(NSData *)salt
+ timestamp:(uint64_t)timestamp
+ displayName:(NSString *)displayName
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.m
new file mode 100644
index 00000000..864b9696
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.m
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h"
+
+#import "FirebaseAuth/Sources/Utilities/NSData+FIRBase64.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kSignInWithGameCenterEndPoint
+ @brief The "SignInWithGameCenter" endpoint.
+ */
+static NSString *const kSignInWithGameCenterEndPoint = @"signInWithGameCenter";
+
+@implementation FIRSignInWithGameCenterRequest
+
+- (nullable instancetype)initWithPlayerID:(NSString *)playerID
+ publicKeyURL:(NSURL *)publicKeyURL
+ signature:(NSData *)signature
+ salt:(NSData *)salt
+ timestamp:(uint64_t)timestamp
+ displayName:(NSString *)displayName
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kSignInWithGameCenterEndPoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _playerID = playerID;
+ _publicKeyURL = [publicKeyURL copy];
+ _signature = [signature copy];
+ _salt = [salt copy];
+ _timestamp = timestamp;
+ _displayName = displayName;
+ }
+ return self;
+}
+
+#pragma mark - FIRAuthRPCRequest
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_playerID) {
+ postBody[@"playerId"] = _playerID;
+ }
+ if (_publicKeyURL) {
+ postBody[@"publicKeyUrl"] = _publicKeyURL.absoluteString;
+ }
+ if (_signature) {
+ postBody[@"signature"] = [_signature fir_base64URLEncodedStringWithOptions:0];
+ }
+ if (_salt) {
+ postBody[@"salt"] = [_salt fir_base64URLEncodedStringWithOptions:0];
+ }
+ if (_timestamp != 0) {
+ postBody[@"timestamp"] = [NSNumber numberWithUnsignedLongLong:_timestamp];
+ }
+ if (_accessToken) {
+ postBody[@"idToken"] = _accessToken;
+ }
+ if (_displayName) {
+ postBody[@"displayName"] = _displayName;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h
new file mode 100644
index 00000000..ee07b3e5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRSignInWithGameCenterResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property IDToken
+ @breif Either an authorization code suitable for performing an STS token exchange, or the access
+ token from Secure Token Service, depending on whether @c returnSecureToken is set on the
+ request.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+/** @property refreshToken
+ @breif @breif The refresh token from Secure Token Service.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *refreshToken;
+
+/** @property localID
+ @breif @breif The Firebase Auth user ID.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *localID;
+
+/** @property playerID
+ @breif @breif The verified player ID.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *playerID;
+
+/** @property approximateExpirationDate
+ @breif The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property isNewUser
+ @breif Flag indicating that the user signing in is a new user and not a returning user.
+ */
+@property(nonatomic, assign) BOOL isNewUser;
+
+/** @property displayName
+ @breif The user's Game Center display name.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *displayName;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.m
new file mode 100644
index 00000000..ebad3158
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.m
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRSignInWithGameCenterResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _IDToken = [dictionary[@"idToken"] copy];
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ _localID = [dictionary[@"localId"] copy];
+ _approximateExpirationDate = nil;
+ if ([dictionary[@"expiresIn"] isKindOfClass:[NSString class]]) {
+ _approximateExpirationDate =
+ [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] integerValue]];
+ }
+ _playerID = [dictionary[@"playerId"] copy];
+ _isNewUser = [dictionary[@"isNewUser"] boolValue];
+ _displayName = [dictionary[@"displayName"] copy];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.h
new file mode 100644
index 00000000..070290d0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRSignUpNewUserRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property email
+ @brief The email of the user.
+ */
+@property(nonatomic, copy, nullable) NSString *email;
+
+/** @property password
+ @brief The password inputed by the user.
+ */
+@property(nonatomic, copy, nullable) NSString *password;
+
+/** @property displayName
+ @brief The password inputed by the user.
+ */
+@property(nonatomic, copy, nullable) NSString *displayName;
+
+/** @property returnSecureToken
+ @brief Whether the response should return access token and refresh token directly.
+ @remarks The default value is @c YES .
+ */
+@property(nonatomic, assign) BOOL returnSecureToken;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithAPIKey:email:password:displayName:requestConfiguration instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief initializer for anonymous sign-in.
+ */
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration;
+
+/** @fn initWithAPIKey:email:password:displayName:requestConfiguration
+ @brief Designated initializer.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithEmail:(nullable NSString *)email
+ password:(nullable NSString *)password
+ displayName:(nullable NSString *)displayName
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.m
new file mode 100644
index 00000000..548ca932
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.m
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kSignupNewUserEndpoint
+ @brief The "SingupNewUserEndpoint" endpoint.
+ */
+static NSString *const kSignupNewUserEndpoint = @"signupNewUser";
+
+/** @var kEmailKey
+ @brief The key for the "email" value in the request.
+ */
+static NSString *const kEmailKey = @"email";
+
+/** @var kPasswordKey
+ @brief The key for the "password" value in the request.
+ */
+static NSString *const kPasswordKey = @"password";
+
+/** @var kDisplayNameKey
+ @brief The key for the "kDisplayName" value in the request.
+ */
+static NSString *const kDisplayNameKey = @"displayName";
+
+/** @var kReturnSecureTokenKey
+ @brief The key for the "returnSecureToken" value in the request.
+ */
+static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
+
+@implementation FIRSignUpNewUserRequest
+
+- (nullable instancetype)initWithEmail:(nullable NSString *)email
+ password:(nullable NSString *)password
+ displayName:(nullable NSString *)displayName
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kSignupNewUserEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _email = [email copy];
+ _password = [password copy];
+ _displayName = [displayName copy];
+ _returnSecureToken = YES;
+ }
+ return self;
+}
+
+- (nullable instancetype)initWithRequestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [self initWithEmail:nil
+ password:nil
+ displayName:nil
+ requestConfiguration:requestConfiguration];
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_email) {
+ postBody[kEmailKey] = _email;
+ }
+ if (_password) {
+ postBody[kPasswordKey] = _password;
+ }
+ if (_displayName) {
+ postBody[kDisplayNameKey] = _displayName;
+ }
+ if (_returnSecureToken) {
+ postBody[kReturnSecureTokenKey] = @YES;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.h
new file mode 100644
index 00000000..f2e74f6a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRSignUpNewUserResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property IDToken
+ @brief Either an authorization code suitable for performing an STS token exchange, or the
+ access token from Secure Token Service, depending on whether @c returnSecureToken is set
+ on the request.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *IDToken;
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property refreshToken
+ @brief The refresh token from Secure Token Service.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *refreshToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.m
new file mode 100644
index 00000000..bdfa6d56
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignUpNewUserResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRSignUpNewUserResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _IDToken = [dictionary[@"idToken"] copy];
+ _approximateExpirationDate =
+ [dictionary[@"expiresIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]]
+ : nil;
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h
new file mode 100644
index 00000000..0a1aa370
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRVerifyAssertionRequest
+ @brief Represents the parameters for the verifyAssertion endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/verifyAssertion
+ */
+@interface FIRVerifyAssertionRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property requestURI
+ @brief The URI to which the IDP redirects the user back. It may contain federated login result
+ params added by the IDP.
+ */
+@property(nonatomic, copy, nullable) NSString *requestURI;
+
+/** @property pendingToken
+ @brief The Firebase ID Token for the IDP pending to be confirmed by the user.
+ */
+@property(nonatomic, copy, nullable) NSString *pendingToken;
+
+/** @property accessToken
+ @brief The STS Access Token for the authenticated user, only needed for linking the user.
+ */
+@property(nonatomic, copy, nullable) NSString *accessToken;
+
+/** @property returnSecureToken
+ @brief Whether the response should return access token and refresh token directly.
+ @remarks The default value is @c YES .
+ */
+@property(nonatomic, assign) BOOL returnSecureToken;
+
+#pragma mark - Components of "postBody"
+
+/** @property providerID
+ @brief The ID of the IDP whose credentials are being presented to the endpoint.
+ */
+@property(nonatomic, copy, readonly) NSString *providerID;
+
+/** @property providerAccessToken
+ @brief An access token from the IDP.
+ */
+@property(nonatomic, copy, nullable) NSString *providerAccessToken;
+
+/** @property providerIDToken
+ @brief An ID Token from the IDP.
+ */
+@property(nonatomic, copy, nullable) NSString *providerIDToken;
+
+/** @property providerRawNonce
+ @brief An raw nonce from the IDP.
+ */
+@property(nonatomic, copy, nullable) NSString *providerRawNonce;
+
+/** @property returnIDPCredential
+ @brief Whether the response should return the IDP credential directly.
+ */
+@property(nonatomic, assign) BOOL returnIDPCredential;
+
+/** @property providerOAuthTokenSecret
+ @brief A session ID used to map this request to a headful-lite flow.
+ */
+@property(nonatomic, copy, nullable) NSString *sessionID;
+
+/** @property providerOAuthTokenSecret
+ @brief An OAuth client secret from the IDP.
+ */
+@property(nonatomic, copy, nullable) NSString *providerOAuthTokenSecret;
+
+/** @property inputEmail
+ @brief The originally entered email in the UI.
+ */
+@property(nonatomic, copy, nullable) NSString *inputEmail;
+
+/** @property autoCreate
+ @brief A flag that indicates whether or not the user should be automatically created.
+ */
+@property(nonatomic, assign) BOOL autoCreate;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithProviderID:requestConfifuration instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithProviderID:requestConfifuration
+ @brief Designated initializer.
+ @param providerID The auth provider's ID.
+ @param requestConfiguration An object containing configurations to be added to the request.
+
+ */
+- (nullable instancetype)initWithProviderID:(NSString *)providerID
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.m
new file mode 100644
index 00000000..2b530518
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.m
@@ -0,0 +1,177 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kVerifyAssertionEndpoint
+ @brief The "verifyAssertion" endpoint.
+ */
+static NSString *const kVerifyAssertionEndpoint = @"verifyAssertion";
+
+/** @var kProviderIDKey
+ @brief The key for the "providerId" value in the request.
+ */
+static NSString *const kProviderIDKey = @"providerId";
+
+/** @var kProviderIDTokenKey
+ @brief The key for the "id_token" value in the request.
+ */
+static NSString *const kProviderIDTokenKey = @"id_token";
+
+/** @var kProviderNonceKey
+ @brief The key for the "nonce" value in the request.
+ */
+static NSString *const kProviderNonceKey = @"nonce";
+
+/** @var kProviderAccessTokenKey
+ @brief The key for the "access_token" value in the request.
+ */
+static NSString *const kProviderAccessTokenKey = @"access_token";
+
+/** @var kProviderOAuthTokenSecretKey
+ @brief The key for the "oauth_token_secret" value in the request.
+ */
+static NSString *const kProviderOAuthTokenSecretKey = @"oauth_token_secret";
+
+/** @var kIdentifierKey
+ @brief The key for the "identifier" value in the request.
+ */
+static NSString *const kIdentifierKey = @"identifier";
+
+/** @var kRequestURIKey
+ @brief The key for the "requestUri" value in the request.
+ */
+static NSString *const kRequestURIKey = @"requestUri";
+
+/** @var kPostBodyKey
+ @brief The key for the "postBody" value in the request.
+ */
+static NSString *const kPostBodyKey = @"postBody";
+
+/** @var kPendingTokenKey
+ @brief The key for the "pendingToken" value in the request.
+ */
+static NSString *const kPendingTokenKey = @"pendingToken";
+
+/** @var kAutoCreateKey
+ @brief The key for the "autoCreate" value in the request.
+ */
+static NSString *const kAutoCreateKey = @"autoCreate";
+
+/** @var kIDTokenKey
+ @brief The key for the "idToken" value in the request. This is actually the STS Access Token,
+ despite it's confusing (backwards compatiable) parameter name.
+ */
+static NSString *const kIDTokenKey = @"idToken";
+
+/** @var kReturnSecureTokenKey
+ @brief The key for the "returnSecureToken" value in the request.
+ */
+static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
+
+/** @var kReturnIDPCredentialKey
+ @brief The key for the "returnIdpCredential" value in the request.
+ */
+static NSString *const kReturnIDPCredentialKey = @"returnIdpCredential";
+
+/** @var kSessionIDKey
+ @brief The key for the "sessionID" value in the request.
+ */
+static NSString *const kSessionIDKey = @"sessionId";
+
+@implementation FIRVerifyAssertionRequest
+
+- (nullable instancetype)initWithProviderID:(NSString *)providerID
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyAssertionEndpoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _providerID = providerID;
+ _returnSecureToken = YES;
+ _autoCreate = YES;
+ _returnIDPCredential = YES;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSURLComponents *components = [[NSURLComponents alloc] init];
+ NSMutableArray<NSURLQueryItem *> *queryItems =
+ [@[ [NSURLQueryItem queryItemWithName:kProviderIDKey value:_providerID] ] mutableCopy];
+
+ if (_providerIDToken) {
+ [queryItems addObject:[NSURLQueryItem queryItemWithName:kProviderIDTokenKey
+ value:_providerIDToken]];
+ }
+
+ if (_providerRawNonce) {
+ [queryItems addObject:[NSURLQueryItem queryItemWithName:kProviderNonceKey
+ value:_providerRawNonce]];
+ }
+
+ if (_providerAccessToken) {
+ [queryItems addObject:[NSURLQueryItem queryItemWithName:kProviderAccessTokenKey
+ value:_providerAccessToken]];
+ }
+
+ if (!_providerIDToken && !_providerAccessToken && !_pendingToken && !_requestURI) {
+ [NSException
+ raise:NSInvalidArgumentException
+ format:@"One of IDToken, accessToken, pendingToken, or requestURI must be supplied."];
+ }
+
+ if (_providerOAuthTokenSecret) {
+ [queryItems addObject:[NSURLQueryItem queryItemWithName:kProviderOAuthTokenSecretKey
+ value:_providerOAuthTokenSecret]];
+ }
+
+ if (_inputEmail) {
+ [queryItems addObject:[NSURLQueryItem queryItemWithName:kIdentifierKey value:_inputEmail]];
+ }
+ [components setQueryItems:queryItems];
+ NSMutableDictionary *body = [@{
+ kRequestURIKey : _requestURI ?: @"http://localhost", // Unused by server, but required
+ kPostBodyKey : [components query]
+ } mutableCopy];
+
+ if (_pendingToken) {
+ body[kPendingTokenKey] = _pendingToken;
+ }
+ if (_accessToken) {
+ body[kIDTokenKey] = _accessToken;
+ }
+ if (_returnSecureToken) {
+ body[kReturnSecureTokenKey] = @YES;
+ }
+
+ if (_returnIDPCredential) {
+ body[kReturnIDPCredentialKey] = @YES;
+ }
+
+ if (_sessionID) {
+ body[kSessionIDKey] = _sessionID;
+ }
+
+ body[kAutoCreateKey] = @(_autoCreate);
+
+ return body;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h
new file mode 100644
index 00000000..d739467b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRVerifyAssertionResponse
+ @brief Represents the response from the verifyAssertion endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/verifyAssertion
+ */
+@interface FIRVerifyAssertionResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property federatedID
+ @brief The unique ID identifies the IdP account.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *federatedID;
+
+/** @property providerID
+ @brief The IdP ID. For white listed IdPs it's a short domain name e.g. google.com, aol.com,
+ live.net and yahoo.com. If the "providerId" param is set to OpenID OP identifer other than
+ the whilte listed IdPs the OP identifier is returned. If the "identifier" param is federated
+ ID in the createAuthUri request. The domain part of the federated ID is returned.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *providerID;
+
+/** @property localID
+ @brief The RP local ID if it's already been mapped to the IdP account identified by the
+ federated ID.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *localID;
+
+/** @property email
+ @brief The email returned by the IdP. NOTE: The federated login user may not own the email.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *email;
+
+/** @property inputEmail
+ @brief It's the identifier param in the createAuthUri request if the identifier is an email. It
+ can be used to check whether the user input email is different from the asserted email.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *inputEmail;
+
+/** @property originalEmail
+ @brief The original email stored in the mapping storage. It's returned when the federated ID is
+ associated to a different email.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *originalEmail;
+
+/** @property oauthRequestToken
+ @brief The user approved request token for the OpenID OAuth extension.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *oauthRequestToken;
+
+/** @property oauthScope
+ @brief The scope for the OpenID OAuth extension.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *oauthScope;
+
+/** @property firstName
+ @brief The first name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *firstName;
+
+/** @property lastName
+ @brief The last name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *lastName;
+
+/** @property fullName
+ @brief The full name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *fullName;
+
+/** @property nickName
+ @brief The nick name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *nickName;
+
+/** @property displayName
+ @brief The display name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *displayName;
+
+/** @property IDToken
+ @brief Either an authorization code suitable for performing an STS token exchange, or the
+ access token from Secure Token Service, depending on whether @c returnSecureToken is set
+ on the request.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *IDToken;
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property refreshToken
+ @brief The refresh token from Secure Token Service.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *refreshToken;
+
+/** @property action
+ @brief The action code.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *action;
+
+/** @property language
+ @brief The language preference of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *language;
+
+/** @property timeZone
+ @brief The timezone of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *timeZone;
+
+/** @property photoURL
+ @brief The URI of the public accessible profile picture.
+ */
+@property(nonatomic, strong, readonly, nullable) NSURL *photoURL;
+
+/** @property dateOfBirth
+ @brief The birth date of the IdP account.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *dateOfBirth;
+
+/** @property context
+ @brief The opaque value used by the client to maintain context info between the authentication
+ request and the IDP callback.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *context;
+
+/** @property verifiedProvider
+ @brief When action is 'map', contains the idps which can be used for confirmation.
+ */
+@property(nonatomic, strong, readonly, nullable) NSArray<NSString *> *verifiedProvider;
+
+/** @property needConfirmation
+ @brief Whether the assertion is from a non-trusted IDP and need account linking confirmation.
+ */
+@property(nonatomic, assign) BOOL needConfirmation;
+
+/** @property emailRecycled
+ @brief It's true if the email is recycled.
+ */
+@property(nonatomic, assign) BOOL emailRecycled;
+
+/** @property emailVerified
+ @brief The value is true if the IDP is also the email provider. It means the user owns the
+ email.
+ */
+@property(nonatomic, assign) BOOL emailVerified;
+
+/** @property isNewUser
+ @brief Flag indicating that the user signing in is a new user and not a returning user.
+ */
+@property(nonatomic, assign) BOOL isNewUser;
+
+/** @property profile
+ @brief Dictionary containing the additional IdP specific information.
+ */
+@property(nonatomic, readonly, nullable) NSDictionary<NSString *, NSObject *> *profile;
+
+/** @property username
+ @brief The name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *username;
+
+/** @property oauthIDToken
+ @brief The ID token for the OpenID OAuth extension.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *oauthIDToken;
+
+/** @property oauthExpirationDate
+ @brief The approximate expiration date of the oauth access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *oauthExpirationDate;
+
+/** @property oauthAccessToken
+ @brief The access token for the OpenID OAuth extension.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *oauthAccessToken;
+
+/** @property oauthSecretToken
+ @brief The secret for the OpenID OAuth extention.
+ */
+@property(nonatomic, readonly, nullable) NSString *oauthSecretToken;
+
+/** @property pendingToken
+ @brief The pending ID Token string.
+ */
+@property(nonatomic, copy, nullable) NSString *pendingToken;
+
+@property(nonatomic, strong, readonly, nullable) NSString *MFAPendingCredential;
+
+@property(nonatomic, strong, readonly, nullable) NSArray<FIRAuthProtoMFAEnrollment *> *MFAInfo;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.m
new file mode 100644
index 00000000..6c605e74
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.m
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRVerifyAssertionResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _federatedID = [dictionary[@"federatedId"] copy];
+ _providerID = [dictionary[@"providerId"] copy];
+ _localID = [dictionary[@"localId"] copy];
+ _emailRecycled = [dictionary[@"emailRecycled"] boolValue];
+ _emailVerified = [dictionary[@"emailVerified"] boolValue];
+ _email = [dictionary[@"email"] copy];
+ _inputEmail = [dictionary[@"inputEmail"] copy];
+ _originalEmail = [dictionary[@"originalEmail"] copy];
+ _oauthRequestToken = [dictionary[@"oauthRequestToken"] copy];
+ _oauthScope = [dictionary[@"oauthScope"] copy];
+ _firstName = [dictionary[@"firstName"] copy];
+ _lastName = [dictionary[@"lastName"] copy];
+ _fullName = [dictionary[@"fullName"] copy];
+ _nickName = [dictionary[@"nickName"] copy];
+ _displayName = [dictionary[@"displayName"] copy];
+ _IDToken = [dictionary[@"idToken"] copy];
+ _approximateExpirationDate =
+ [dictionary[@"expiresIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]]
+ : nil;
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ _isNewUser = [dictionary[@"isNewUser"] boolValue];
+ id rawUserInfo = dictionary[@"rawUserInfo"];
+ if ([rawUserInfo isKindOfClass:[NSString class]]) {
+ NSData *data = [rawUserInfo dataUsingEncoding:NSUTF8StringEncoding];
+ rawUserInfo = [NSJSONSerialization JSONObjectWithData:data
+ options:NSJSONReadingMutableLeaves
+ error:nil];
+ }
+ if ([rawUserInfo isKindOfClass:[NSDictionary class]]) {
+ _profile = [[NSDictionary alloc] initWithDictionary:rawUserInfo copyItems:YES];
+ }
+ _username = [dictionary[@"username"] copy];
+ _action = [dictionary[@"action"] copy];
+ _language = [dictionary[@"language"] copy];
+ _timeZone = [dictionary[@"timeZone"] copy];
+ _photoURL = dictionary[@"photoUrl"] ? [NSURL URLWithString:dictionary[@"photoUrl"]] : nil;
+ _dateOfBirth = [dictionary[@"dateOfBirth"] copy];
+ _context = [dictionary[@"context"] copy];
+ _needConfirmation = [dictionary[@"needConfirmation"] boolValue];
+ id verifiedProvider = dictionary[@"verifiedProvider"];
+ if ([verifiedProvider isKindOfClass:[NSString class]]) {
+ NSData *data = [verifiedProvider dataUsingEncoding:NSUTF8StringEncoding];
+ verifiedProvider = [NSJSONSerialization JSONObjectWithData:data
+ options:NSJSONReadingMutableLeaves
+ error:nil];
+ }
+ if ([verifiedProvider isKindOfClass:[NSArray class]]) {
+ _verifiedProvider = [[NSArray alloc] initWithArray:verifiedProvider copyItems:YES];
+ }
+ _oauthIDToken = [dictionary[@"oauthIdToken"] copy];
+ _oauthExpirationDate =
+ [dictionary[@"oauthExpireIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"oauthExpireIn"] doubleValue]]
+ : nil;
+ _oauthAccessToken = [dictionary[@"oauthAccessToken"] copy];
+ _oauthSecretToken = [dictionary[@"oauthTokenSecret"] copy];
+ _pendingToken = [dictionary[@"pendingToken"] copy];
+
+ if (dictionary[@"mfaInfo"] != nil) {
+ NSMutableArray<FIRAuthProtoMFAEnrollment *> *MFAInfo = [NSMutableArray array];
+ NSArray *MFAInfoDataArray = dictionary[@"mfaInfo"];
+ for (NSDictionary *MFAInfoData in MFAInfoDataArray) {
+ FIRAuthProtoMFAEnrollment *MFAEnrollment =
+ [[FIRAuthProtoMFAEnrollment alloc] initWithDictionary:MFAInfoData];
+ [MFAInfo addObject:MFAEnrollment];
+ }
+ _MFAInfo = MFAInfo;
+ }
+ _MFAPendingCredential = [dictionary[@"mfaPendingCredential"] copy];
+
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.h
new file mode 100644
index 00000000..7b4d3bc9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRVerifyClientRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property appToken
+ @brief The APNS device token.
+ */
+@property(nonatomic, readonly, nullable) NSString *appToken;
+
+/** @property isSandbox
+ @brief The flag that denotes if the appToken pertains to Sandbox or Production.
+ */
+@property(nonatomic, assign, readonly) BOOL isSandbox;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithToken:requestConfiguration: instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithAppToken:isSandbox:requestConfiguration:
+ @brief Designated initializer.
+ @param appToken The APNS device token.
+ @param isSandbox The flag indicating whether or not the app token provided is for Sandbox or
+ Production.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithAppToken:(nullable NSString *)appToken
+ isSandbox:(BOOL)isSandbox
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.m
new file mode 100644
index 00000000..02e984cc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.m
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kVerifyClientEndpoint
+ @brief The endpoint for the verifyClient request.
+ */
+static NSString *const kVerifyClientEndpoint = @"verifyClient";
+
+/** @var kAppTokenKey
+ @brief The key for the appToken request paramenter.
+ */
+static NSString *const kAPPTokenKey = @"appToken";
+
+/** @var kIsSandboxKey
+ @brief The key for the isSandbox request parameter
+ */
+static NSString *const kIsSandboxKey = @"isSandbox";
+
+@implementation FIRVerifyClientRequest
+
+- (nullable instancetype)initWithAppToken:(nullable NSString *)appToken
+ isSandbox:(BOOL)isSandbox
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyClientEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _appToken = appToken;
+ _isSandbox = isSandbox;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_appToken) {
+ postBody[kAPPTokenKey] = _appToken;
+ }
+ if (_isSandbox) {
+ postBody[kIsSandboxKey] = @YES;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.h
new file mode 100644
index 00000000..40e69072
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRVerifyClientResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property receipt
+ @brief Receipt that the APNS token was successfully validated with APNS.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *receipt;
+
+/** @property suggestedTimeOut
+ @brief The date after which delivery of the silent push notification is considered to have
+ failed.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *suggestedTimeOutDate;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.m
new file mode 100644
index 00000000..78d648c5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.m
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyClientResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRVerifyClientResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _receipt = dictionary[@"receipt"];
+ _suggestedTimeOutDate =
+ [dictionary[@"suggestedTimeout"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"suggestedTimeout"] doubleValue]]
+ : nil;
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h
new file mode 100644
index 00000000..abea35af
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRVerifyCustomTokenRequest
+ @brief Represents the parameters for the verifyCustomToken endpoint.
+ */
+@interface FIRVerifyCustomTokenRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property token
+ @brief The self-signed token from the client's BYOAuth server.
+ */
+@property(nonatomic, copy, readonly) NSString *token;
+
+/** @property returnSecureToken
+ @brief Whether the response should return access token and refresh token directly.
+ @remarks The default value is @c YES .
+ */
+@property(nonatomic, assign) BOOL returnSecureToken;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithToken:requestConfiguration: instead.
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithToken:requestConfiguration:
+ @brief Designated initializer.
+ @param token The self-signed token from the client's BYOAuth server.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithToken:(NSString *)token
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.m
new file mode 100644
index 00000000..63c81f61
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.m
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kVerifyCustomTokenEndpoint
+ @brief The "verifyPassword" endpoint.
+ */
+static NSString *const kVerifyCustomTokenEndpoint = @"verifyCustomToken";
+
+/** @var kTokenKey
+ @brief The key for the "token" value in the request.
+ */
+static NSString *const kTokenKey = @"token";
+
+/** @var kReturnSecureTokenKey
+ @brief The key for the "returnSecureToken" value in the request.
+ */
+static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
+
+@implementation FIRVerifyCustomTokenRequest
+
+- (nullable instancetype)initWithToken:(NSString *)token
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyCustomTokenEndpoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _token = [token copy];
+ _returnSecureToken = YES;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *body = [@{kTokenKey : _token} mutableCopy];
+ if (_returnSecureToken) {
+ body[kReturnSecureTokenKey] = @YES;
+ }
+ return body;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h
new file mode 100644
index 00000000..7484a94f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRVerifyCustomTokenResponse
+ @brief Represents the response from the verifyCustomToken endpoint.
+ */
+@interface FIRVerifyCustomTokenResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property IDToken
+ @brief Either an authorization code suitable for performing an STS token exchange, or the
+ access token from Secure Token Service, depending on whether @c returnSecureToken is set
+ on the request.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *IDToken;
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property refreshToken
+ @brief The refresh token from Secure Token Service.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *refreshToken;
+
+/** @property isNewUser
+ @brief Flag indicating that the user signing in is a new user and not a returning user.
+ */
+@property(nonatomic, assign) BOOL isNewUser;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.m
new file mode 100644
index 00000000..1bbe645a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.m
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRVerifyCustomTokenResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _IDToken = [dictionary[@"idToken"] copy];
+ _approximateExpirationDate =
+ [dictionary[@"expiresIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]]
+ : nil;
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ _isNewUser = [dictionary[@"isNewUser"] boolValue];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h
new file mode 100644
index 00000000..5931578e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRVerifyPasswordRequest
+ @brief Represents the parameters for the verifyPassword endpoint.
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/verifyPassword
+ */
+@interface FIRVerifyPasswordRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property email
+ @brief The email of the user.
+ */
+@property(nonatomic, copy) NSString *email;
+
+/** @property password
+ @brief The password inputed by the user.
+ */
+@property(nonatomic, copy) NSString *password;
+
+/** @property pendingIDToken
+ @brief The GITKit token for the non-trusted IDP, which is to be confirmed by the user.
+ */
+@property(nonatomic, copy, nullable) NSString *pendingIDToken;
+
+/** @property captchaChallenge
+ @brief The captcha challenge.
+ */
+@property(nonatomic, copy, nullable) NSString *captchaChallenge;
+
+/** @property captchaResponse
+ @brief Response to the captcha.
+ */
+@property(nonatomic, copy, nullable) NSString *captchaResponse;
+
+/** @property returnSecureToken
+ @brief Whether the response should return access token and refresh token directly.
+ @remarks The default value is @c YES .
+ */
+@property(nonatomic, assign) BOOL returnSecureToken;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithEmail:password:requestConfiguration:
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithEmail:password:requestConfiguration:
+ @brief Designated initializer.
+ @param email The email of the user.
+ @param password The password inputed by the user.
+ @param requestConfiguration The configu
+ */
+- (nullable instancetype)initWithEmail:(NSString *)email
+ password:(NSString *)password
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.m
new file mode 100644
index 00000000..03cf490a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.m
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kVerifyPasswordEndpoint
+ @brief The "verifyPassword" endpoint.
+ */
+static NSString *const kVerifyPasswordEndpoint = @"verifyPassword";
+
+/** @var kEmailKey
+ @brief The key for the "email" value in the request.
+ */
+static NSString *const kEmailKey = @"email";
+
+/** @var kPasswordKey
+ @brief The key for the "password" value in the request.
+ */
+static NSString *const kPasswordKey = @"password";
+
+/** @var kPendingIDTokenKey
+ @brief The key for the "pendingIdToken" value in the request.
+ */
+static NSString *const kPendingIDTokenKey = @"pendingIdToken";
+
+/** @var kCaptchaChallengeKey
+ @brief The key for the "captchaChallenge" value in the request.
+ */
+static NSString *const kCaptchaChallengeKey = @"captchaChallenge";
+
+/** @var kCaptchaResponseKey
+ @brief The key for the "captchaResponse" value in the request.
+ */
+static NSString *const kCaptchaResponseKey = @"captchaResponse";
+
+/** @var kReturnSecureTokenKey
+ @brief The key for the "returnSecureToken" value in the request.
+ */
+static NSString *const kReturnSecureTokenKey = @"returnSecureToken";
+
+@implementation FIRVerifyPasswordRequest
+
+- (nullable instancetype)initWithEmail:(NSString *)email
+ password:(NSString *)password
+ requestConfiguration:(nonnull FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyPasswordEndpoint requestConfiguration:requestConfiguration];
+ if (self) {
+ _email = [email copy];
+ _password = [password copy];
+ _returnSecureToken = YES;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *_Nullable *_Nullable)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_email) {
+ postBody[kEmailKey] = _email;
+ }
+ if (_password) {
+ postBody[kPasswordKey] = _password;
+ }
+ if (_pendingIDToken) {
+ postBody[kPendingIDTokenKey] = _pendingIDToken;
+ }
+ if (_captchaChallenge) {
+ postBody[kCaptchaChallengeKey] = _captchaChallenge;
+ }
+ if (_captchaResponse) {
+ postBody[kCaptchaResponseKey] = _captchaResponse;
+ }
+ if (_returnSecureToken) {
+ postBody[kReturnSecureTokenKey] = @YES;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h
new file mode 100644
index 00000000..26563c71
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRVerifyPasswordResponse
+ @brief Represents the response from the verifyPassword endpoint.
+ @remarks Possible error codes:
+ - FIRAuthInternalErrorCodeUserDisabled
+ - FIRAuthInternalErrorCodeEmailNotFound
+ @see https://developers.google.com/identity/toolkit/web/reference/relyingparty/verifyPassword
+ */
+@interface FIRVerifyPasswordResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property localID
+ @brief The RP local ID if it's already been mapped to the IdP account identified by the
+ federated ID.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *localID;
+
+/** @property email
+ @brief The email returned by the IdP. NOTE: The federated login user may not own the email.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *email;
+
+/** @property displayName
+ @brief The display name of the user.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *displayName;
+
+/** @property IDToken
+ @brief Either an authorization code suitable for performing an STS token exchange, or the
+ access token from Secure Token Service, depending on whether @c returnSecureToken is set
+ on the request.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *IDToken;
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+/** @property refreshToken
+ @brief The refresh token from Secure Token Service.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *refreshToken;
+
+/** @property photoURL
+ @brief The URI of the public accessible profile picture.
+ */
+@property(nonatomic, strong, readonly, nullable) NSURL *photoURL;
+
+@property(nonatomic, strong, readonly, nullable) NSString *MFAPendingCredential;
+
+@property(nonatomic, strong, readonly, nullable) NSArray<FIRAuthProtoMFAEnrollment *> *MFAInfo;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.m
new file mode 100644
index 00000000..df8208f6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.m
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRVerifyPasswordResponse
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _localID = [dictionary[@"localId"] copy];
+ _email = [dictionary[@"email"] copy];
+ _displayName = [dictionary[@"displayName"] copy];
+ _IDToken = [dictionary[@"idToken"] copy];
+ _approximateExpirationDate =
+ [dictionary[@"expiresIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]]
+ : nil;
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ _photoURL = dictionary[@"photoUrl"] ? [NSURL URLWithString:dictionary[@"photoUrl"]] : nil;
+
+ if (dictionary[@"mfaInfo"] != nil) {
+ NSMutableArray<FIRAuthProtoMFAEnrollment *> *MFAInfo = [NSMutableArray array];
+ NSArray *MFAInfoDataArray = dictionary[@"mfaInfo"];
+ for (NSDictionary *MFAInfoData in MFAInfoDataArray) {
+ FIRAuthProtoMFAEnrollment *MFAEnrollment =
+ [[FIRAuthProtoMFAEnrollment alloc] initWithDictionary:MFAInfoData];
+ [MFAInfo addObject:MFAEnrollment];
+ }
+ _MFAInfo = MFAInfo;
+ }
+ _MFAPendingCredential = [dictionary[@"mfaPendingCredential"] copy];
+
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h
new file mode 100644
index 00000000..da8d4e87
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthOperationType.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRVerifyPhoneNumberRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+/** @property verificationID
+ @brief The verification ID obtained from the response of @c sendVerificationCode.
+*/
+@property(nonatomic, readonly, nullable) NSString *verificationID;
+
+/** @property verificationCode
+ @brief The verification code provided by the user.
+*/
+@property(nonatomic, readonly, nullable) NSString *verificationCode;
+
+/** @property accessToken
+ @brief The STS Access Token for the authenticated user.
+ */
+@property(nonatomic, copy, nullable) NSString *accessToken;
+
+/** @var temporaryProof
+ @brief The temporary proof code, previously returned from the backend.
+ */
+@property(nonatomic, readonly, nonnull) NSString *temporaryProof;
+
+/** @var phoneNumber
+ @brief The phone number to be verified in the request.
+ */
+@property(nonatomic, readonly, nonnull) NSString *phoneNumber;
+
+/** @var operation
+ @brief The type of operation triggering this verify phone number request.
+ */
+@property(nonatomic, assign, readonly) FIRAuthOperationType operation;
+
+/** @fn initWithEndpoint:requestConfiguration:
+ @brief Please use initWithVerificationID:verificationCode:requestConfiguration
+ */
+- (nullable instancetype)initWithEndpoint:(NSString *)endpoint
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_UNAVAILABLE;
+
+/** @fn initWithTemporaryProof:phoneNumberAPIKey
+ @brief Designated initializer.
+ @param temporaryProof The temporary proof sent by the backed.
+ @param phoneNumber The phone number associated with the credential to be signed in.
+ @param operation Indicates what operation triggered the verify phone number request.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithTemporaryProof:(NSString *)temporaryProof
+ phoneNumber:(NSString *)phoneNumber
+ operation:(FIRAuthOperationType)operation
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+/** @fn initWithVerificationID:verificationCode:requestConfiguration
+ @brief Designated initializer.
+ @param verificationID The verification ID obtained from the response of @c sendVerificationCode.
+ @param verificationCode The verification code provided by the user.
+ @param operation Indicates what operation triggered the verify phone number request.
+ @param requestConfiguration An object containing configurations to be added to the request.
+ */
+- (nullable instancetype)initWithVerificationID:(NSString *)verificationID
+ verificationCode:(NSString *)verificationCode
+ operation:(FIRAuthOperationType)operation
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.m
new file mode 100644
index 00000000..e2ee9166
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.m
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kVerifyPhoneNumberEndPoint
+ @brief The "verifyPhoneNumber" endpoint.
+ */
+static NSString *const kVerifyPhoneNumberEndPoint = @"verifyPhoneNumber";
+
+/** @var kVerificationIDKey
+ @brief The key for the verification ID parameter in the request.
+ */
+static NSString *const kVerificationIDKey = @"sessionInfo";
+
+/** @var kVerificationCodeKey
+ @brief The key for the verification code parameter in the request.
+ */
+static NSString *const kVerificationCodeKey = @"code";
+
+/** @var kIDTokenKey
+ @brief The key for the "ID Token" value in the request.
+ */
+static NSString *const kIDTokenKey = @"idToken";
+
+/** @var kTemporaryProofKey
+ @brief The key for the temporary proof value in the request.
+ */
+static NSString *const kTemporaryProofKey = @"temporaryProof";
+
+/** @var kPhoneNumberKey
+ @brief The key for the phone number value in the request.
+ */
+static NSString *const kPhoneNumberKey = @"phoneNumber";
+
+/** @var kOperationKey
+ @brief The key for the operation value in the request.
+ */
+static NSString *const kOperationKey = @"operation";
+
+@implementation FIRVerifyPhoneNumberRequest
+
+- (nullable instancetype)initWithTemporaryProof:(NSString *)temporaryProof
+ phoneNumber:(NSString *)phoneNumber
+ operation:(FIRAuthOperationType)operation
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _temporaryProof = [temporaryProof copy];
+ _phoneNumber = [phoneNumber copy];
+ _operation = operation;
+ }
+ return self;
+}
+
+- (nullable instancetype)initWithVerificationID:(NSString *)verificationID
+ verificationCode:(NSString *)verificationCode
+ operation:(FIRAuthOperationType)operation
+ requestConfiguration:
+ (FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kVerifyPhoneNumberEndPoint
+ requestConfiguration:requestConfiguration];
+ if (self) {
+ _verificationID = verificationID;
+ _verificationCode = verificationCode;
+ _operation = operation;
+ }
+ return self;
+}
+
+/** @fn FIRAuthOperationString
+ @brief Returns a string object corresponding to the provided FIRAuthOperationType value.
+ @param operationType The value of the FIRAuthOperationType enum which will be translated to its
+ corresponding string value.
+ @return The string value corresponding to the FIRAuthOperationType argument.
+ */
+NSString *const FIRAuthOperationString(FIRAuthOperationType operationType) {
+ switch (operationType) {
+ case FIRAuthOperationTypeUnspecified:
+ return @"VERIFY_OP_UNSPECIFIED";
+ case FIRAuthOperationTypeSignUpOrSignIn:
+ return @"SIGN_UP_OR_IN";
+ case FIRAuthOperationTypeReauth:
+ return @"REAUTH";
+ case FIRAuthOperationTypeLink:
+ return @"LINK";
+ case FIRAuthOperationTypeUpdate:
+ return @"UPDATE";
+ }
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_verificationID) {
+ postBody[kVerificationIDKey] = _verificationID;
+ }
+ if (_verificationCode) {
+ postBody[kVerificationCodeKey] = _verificationCode;
+ }
+ if (_accessToken) {
+ postBody[kIDTokenKey] = _accessToken;
+ }
+ if (_temporaryProof) {
+ postBody[kTemporaryProofKey] = _temporaryProof;
+ }
+ if (_phoneNumber) {
+ postBody[kPhoneNumberKey] = _phoneNumber;
+ }
+ NSString *operation = FIRAuthOperationString(_operation);
+ postBody[kOperationKey] = operation;
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h
new file mode 100644
index 00000000..7817ccf0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRVerifyPhoneNumberResponse : NSObject <FIRAuthRPCResponse>
+
+/** @property IDToken
+ @brief Either an authorization code suitable for performing an STS token exchange, or the
+ access token from Secure Token Service, depending on whether @c returnSecureToken is set
+ on the request.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *IDToken;
+
+/** @property refreshToken
+ @brief The refresh token from Secure Token Service.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *refreshToken;
+
+/** @property localID
+ @brief The Firebase Auth user ID.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *localID;
+
+/** @property phoneNumber
+ @brief The verified phone number.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *phoneNumber;
+
+/** @property temporaryProof
+ @brief The temporary proof code returned by the backend.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *temporaryProof;
+
+/** @property isNewUser
+ @brief Flag indicating that the user signing in is a new user and not a returning user.
+ */
+@property(nonatomic, assign) BOOL isNewUser;
+
+/** @property approximateExpirationDate
+ @brief The approximate expiration date of the access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *approximateExpirationDate;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.m
new file mode 100644
index 00000000..902fb967
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.m
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRVerifyPhoneNumberResponse
+
+- (nullable NSString *)expectedKind {
+ return nil;
+}
+
+- (BOOL)setWithDictionary:(NSDictionary *)dictionary error:(NSError *_Nullable *_Nullable)error {
+ _IDToken = [dictionary[@"idToken"] copy];
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ _isNewUser = [dictionary[@"isNewUser"] boolValue];
+ _localID = [dictionary[@"localId"] copy];
+ _phoneNumber = [dictionary[@"phoneNumber"] copy];
+ _temporaryProof = [dictionary[@"temporaryProof"] copy];
+ _approximateExpirationDate =
+ [dictionary[@"expiresIn"] isKindOfClass:[NSString class]]
+ ? [NSDate dateWithTimeIntervalSinceNow:[dictionary[@"expiresIn"] doubleValue]]
+ : nil;
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.h
new file mode 100644
index 00000000..edd8a732
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRFinalizeMFAEnrollmentRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+@property(nonatomic, copy, readonly, nullable) NSString *displayName;
+
+@property(nonatomic, copy, readonly, nullable)
+ FIRAuthProtoFinalizeMFAPhoneRequestInfo *verificationInfo;
+
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken
+ displayName:(NSString *)displayName
+ verificationInfo:(FIRAuthProtoFinalizeMFAPhoneRequestInfo *)verificationInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.m
new file mode 100644
index 00000000..3874a8f9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.m
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentRequest.h"
+
+static NSString *const kFinalizeMFAEnrollmentEndPoint = @"accounts/mfaEnrollment:finalize";
+
+@implementation FIRFinalizeMFAEnrollmentRequest
+
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken
+ displayName:(NSString *)displayName
+ verificationInfo:(FIRAuthProtoFinalizeMFAPhoneRequestInfo *)verificationInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kFinalizeMFAEnrollmentEndPoint
+ requestConfiguration:requestConfiguration
+ useIdentityPlatform:YES
+ useStaging:NO];
+ if (self) {
+ _IDToken = IDToken;
+ _displayName = displayName;
+ _verificationInfo = verificationInfo;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_IDToken) {
+ postBody[@"idToken"] = _IDToken;
+ }
+ if (_displayName) {
+ postBody[@"displayName"] = _displayName;
+ }
+ if (_verificationInfo) {
+ if ([_verificationInfo isKindOfClass:[FIRAuthProtoFinalizeMFAPhoneRequestInfo class]]) {
+ postBody[@"phoneVerificationInfo"] = [_verificationInfo dictionary];
+ }
+ }
+ return [postBody copy];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.h
new file mode 100644
index 00000000..aca12a17
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRFinalizeMFAEnrollmentResponse : NSObject <FIRAuthRPCResponse>
+
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+@property(nonatomic, copy, readonly, nullable) NSString *refreshToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.m
new file mode 100644
index 00000000..1e9cac5b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.m
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRFinalizeMFAEnrollmentResponse.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h"
+
+@implementation FIRFinalizeMFAEnrollmentResponse
+
+- (BOOL)setWithDictionary:(nonnull NSDictionary *)dictionary
+ error:(NSError *__autoreleasing _Nullable *_Nullable)error {
+ _IDToken = [dictionary[@"idToken"] copy];
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ return YES;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h
new file mode 100644
index 00000000..62599f6d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRStartMFAEnrollmentRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+@property(nonatomic, copy, readonly, nullable) FIRAuthProtoStartMFAPhoneRequestInfo *enrollmentInfo;
+
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken
+ enrollmentInfo:(FIRAuthProtoStartMFAPhoneRequestInfo *)enrollmentInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.m
new file mode 100644
index 00000000..977c1b71
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.m
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h"
+
+static NSString *const kStartMFAEnrollmentEndPoint = @"accounts/mfaEnrollment:start";
+
+@implementation FIRStartMFAEnrollmentRequest
+
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken
+ enrollmentInfo:(FIRAuthProtoStartMFAPhoneRequestInfo *)enrollmentInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kStartMFAEnrollmentEndPoint
+ requestConfiguration:requestConfiguration
+ useIdentityPlatform:YES
+ useStaging:NO];
+ if (self) {
+ _IDToken = IDToken;
+ _enrollmentInfo = enrollmentInfo;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_IDToken) {
+ postBody[@"idToken"] = _IDToken;
+ }
+ if (_enrollmentInfo) {
+ if ([_enrollmentInfo isKindOfClass:[FIRAuthProtoStartMFAPhoneRequestInfo class]]) {
+ postBody[@"phoneEnrollmentInfo"] = [_enrollmentInfo dictionary];
+ }
+ }
+ return [postBody copy];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.h
new file mode 100644
index 00000000..d0d5bdaa
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRStartMFAEnrollmentResponse : NSObject <FIRAuthRPCResponse>
+
+@property(nonatomic, copy, readonly, nullable)
+ FIRAuthProtoStartMFAPhoneResponseInfo *enrollmentResponse;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.m
new file mode 100644
index 00000000..658462ce
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.m
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentResponse.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h"
+
+@implementation FIRStartMFAEnrollmentResponse
+
+- (BOOL)setWithDictionary:(nonnull NSDictionary *)dictionary
+ error:(NSError *__autoreleasing _Nullable *_Nullable)error {
+ if (dictionary[@"phoneSessionInfo"] != nil) {
+ NSDictionary *data = dictionary[@"phoneSessionInfo"];
+ _enrollmentResponse = [[FIRAuthProtoStartMFAPhoneResponseInfo alloc] initWithDictionary:data];
+ } else {
+ return NO;
+ }
+ return YES;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.h
new file mode 100644
index 00000000..155f5ea7
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRFinalizeMFASignInRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+@property(nonatomic, copy, readonly, nullable) NSString *MFAPendingCredential;
+
+@property(nonatomic, copy, readonly, nullable)
+ FIRAuthProtoFinalizeMFAPhoneRequestInfo *verificationInfo;
+
+- (nullable instancetype)
+ initWithMFAPendingCredential:(NSString *)MFAPendingCredential
+ verificationInfo:(FIRAuthProtoFinalizeMFAPhoneRequestInfo *)verificationInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.m
new file mode 100644
index 00000000..65fe3158
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.m
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.h"
+
+static NSString *const kFinalizeMFASignInEndPoint = @"accounts/mfaSignIn:finalize";
+
+@implementation FIRFinalizeMFASignInRequest
+
+- (nullable instancetype)
+ initWithMFAPendingCredential:(NSString *)MFAPendingCredential
+ verificationInfo:(FIRAuthProtoFinalizeMFAPhoneRequestInfo *)verificationInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kFinalizeMFASignInEndPoint
+ requestConfiguration:requestConfiguration
+ useIdentityPlatform:YES
+ useStaging:NO];
+ if (self) {
+ _MFAPendingCredential = MFAPendingCredential;
+ _verificationInfo = verificationInfo;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_MFAPendingCredential) {
+ postBody[@"mfaPendingCredential"] = _MFAPendingCredential;
+ }
+ if (_verificationInfo) {
+ if ([_verificationInfo isKindOfClass:[FIRAuthProtoFinalizeMFAPhoneRequestInfo class]]) {
+ postBody[@"phoneVerificationInfo"] = [_verificationInfo dictionary];
+ }
+ }
+ return [postBody copy];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.h
new file mode 100644
index 00000000..5ad8bd69
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRFinalizeMFASignInResponse : NSObject <FIRAuthRPCResponse>
+
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+@property(nonatomic, copy, readonly, nullable) NSString *refreshToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.m
new file mode 100644
index 00000000..0763880a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.m
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInResponse.h"
+
+@implementation FIRFinalizeMFASignInResponse
+
+- (BOOL)setWithDictionary:(nonnull NSDictionary *)dictionary
+ error:(NSError *__autoreleasing _Nullable *_Nullable)error {
+ _IDToken = [dictionary[@"idToken"] copy];
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ return YES;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.h
new file mode 100644
index 00000000..8a12bad2
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRStartMFASignInRequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+@property(nonatomic, copy, readonly, nullable) NSString *MFAPendingCredential;
+
+@property(nonatomic, copy, readonly, nullable) NSString *MFAEnrollmentID;
+
+@property(nonatomic, copy, readonly, nullable) FIRAuthProtoStartMFAPhoneRequestInfo *signInInfo;
+
+- (nullable instancetype)
+ initWithMFAPendingCredential:(NSString *)MFAPendingCredential
+ MFAEnrollmentID:(NSString *)MFAEnrollmentID
+ signInInfo:(FIRAuthProtoStartMFAPhoneRequestInfo *)signInInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.m
new file mode 100644
index 00000000..0ba4876a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.m
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInRequest.h"
+
+static NSString *const kStartMFASignInEndPoint = @"accounts/mfaSignIn:start";
+
+@implementation FIRStartMFASignInRequest
+
+- (nullable instancetype)
+ initWithMFAPendingCredential:(NSString *)MFAPendingCredential
+ MFAEnrollmentID:(NSString *)MFAEnrollmentID
+ signInInfo:(FIRAuthProtoStartMFAPhoneRequestInfo *)signInInfo
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kStartMFASignInEndPoint
+ requestConfiguration:requestConfiguration
+ useIdentityPlatform:YES
+ useStaging:NO];
+ if (self) {
+ _MFAPendingCredential = MFAPendingCredential;
+ _MFAEnrollmentID = MFAEnrollmentID;
+ _signInInfo = signInInfo;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_MFAPendingCredential) {
+ postBody[@"mfaPendingCredential"] = _MFAPendingCredential;
+ }
+ if (_MFAEnrollmentID) {
+ postBody[@"mfaEnrollmentId"] = _MFAEnrollmentID;
+ }
+ if (_signInInfo) {
+ if ([_signInInfo isKindOfClass:[FIRAuthProtoStartMFAPhoneRequestInfo class]]) {
+ postBody[@"phoneSignInInfo"] = [_signInInfo dictionary];
+ }
+ }
+ return [postBody copy];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.h
new file mode 100644
index 00000000..bd1c372e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRStartMFASignInResponse : NSObject <FIRAuthRPCResponse>
+
+@property(nonatomic, copy, readonly, nullable) FIRAuthProtoStartMFAPhoneResponseInfo *responseInfo;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.m
new file mode 100644
index 00000000..7ad49f85
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.m
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRStartMFASignInResponse.h"
+
+@implementation FIRStartMFASignInResponse
+
+- (BOOL)setWithDictionary:(nonnull NSDictionary *)dictionary
+ error:(NSError *__autoreleasing _Nullable *_Nullable)error {
+ if (dictionary[@"phoneResponseInfo"] != nil) {
+ NSDictionary *data = dictionary[@"phoneResponseInfo"];
+ _responseInfo = [[FIRAuthProtoStartMFAPhoneResponseInfo alloc] initWithDictionary:data];
+ } else {
+ return NO;
+ }
+ return YES;
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.h
new file mode 100644
index 00000000..df211f80
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCRequest.h"
+#import "FirebaseAuth/Sources/Backend/FIRIdentityToolkitRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRWithdrawMFARequest : FIRIdentityToolkitRequest <FIRAuthRPCRequest>
+
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+@property(nonatomic, copy, readonly, nullable) NSString *MFAEnrollmentID;
+
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken
+ MFAEnrollmentID:(NSString *)MFAEnrollmentID
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.m
new file mode 100644
index 00000000..f4468e39
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.m
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFARequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+static NSString *const kWithdrawMFAEndPoint = @"accounts/mfaEnrollment:withdraw";
+
+@implementation FIRWithdrawMFARequest
+
+- (nullable instancetype)initWithIDToken:(NSString *)IDToken
+ MFAEnrollmentID:(NSString *)MFAEnrollmentID
+ requestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration {
+ self = [super initWithEndpoint:kWithdrawMFAEndPoint
+ requestConfiguration:requestConfiguration
+ useIdentityPlatform:YES
+ useStaging:NO];
+ if (self) {
+ _IDToken = IDToken;
+ _MFAEnrollmentID = MFAEnrollmentID;
+ }
+ return self;
+}
+
+- (nullable id)unencodedHTTPRequestBodyWithError:(NSError *__autoreleasing _Nullable *)error {
+ NSMutableDictionary *postBody = [NSMutableDictionary dictionary];
+ if (_IDToken) {
+ postBody[@"idToken"] = _IDToken;
+ }
+ if (_MFAEnrollmentID) {
+ postBody[@"mfaEnrollmentId"] = _MFAEnrollmentID;
+ }
+ return [postBody copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.h
new file mode 100644
index 00000000..84adf824
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRWithdrawMFAResponse : NSObject <FIRAuthRPCResponse>
+
+@property(nonatomic, copy, readonly, nullable) NSString *IDToken;
+
+@property(nonatomic, copy, readonly, nullable) NSString *refreshToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.m
new file mode 100644
index 00000000..7d1c3c76
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.m
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Unenroll/FIRWithdrawMFAResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRWithdrawMFAResponse
+
+- (BOOL)setWithDictionary:(nonnull NSDictionary *)dictionary
+ error:(NSError *__autoreleasing _Nullable *_Nullable)error {
+ _IDToken = [dictionary[@"idToken"] copy];
+ _refreshToken = [dictionary[@"refreshToken"] copy];
+ return YES;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h
new file mode 100644
index 00000000..5d0d8616
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol FIRAuthProto <NSObject>
+
+@optional
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
+
+- (NSDictionary *)dictionary;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h
new file mode 100644
index 00000000..4246e62f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthProtoMFAEnrollment : NSObject <FIRAuthProto>
+
+@property(nonatomic, copy, readonly, nullable) NSString *MFAValue;
+
+@property(nonatomic, copy, readonly, nullable) NSString *MFAEnrollmentID;
+
+@property(nonatomic, copy, readonly, nullable) NSString *displayName;
+
+@property(nonatomic, copy, readonly, nullable) NSDate *enrolledAt;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.m
new file mode 100644
index 00000000..92237e9b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.m
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthProtoMFAEnrollment
+
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
+ self = [super init];
+ if (self) {
+ if (dictionary[@"phoneInfo"]) {
+ _MFAValue = dictionary[@"phoneInfo"];
+ }
+ _MFAEnrollmentID = dictionary[@"mfaEnrollmentId"];
+ _displayName = dictionary[@"displayName"];
+ if ([dictionary[@"enrolledAt"] isKindOfClass:[NSString class]]) {
+ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+ [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
+ NSDate *date = [dateFormatter dateFromString:dictionary[@"enrolledAt"]];
+ _enrolledAt = date;
+ }
+ }
+ return self;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h
new file mode 100644
index 00000000..df6e39af
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthProtoFinalizeMFAPhoneRequestInfo : NSObject <FIRAuthProto>
+
+@property(nonatomic, strong, readonly, nullable) NSString *sessionInfo;
+
+@property(nonatomic, strong, readonly, nullable) NSString *code;
+
+- (instancetype)initWithSessionInfo:(NSString *)sessionInfo
+ verificationCode:(NSString *)verificationCode;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.m
new file mode 100644
index 00000000..b233a137
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.m
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthProtoFinalizeMFAPhoneRequestInfo
+
+- (instancetype)initWithSessionInfo:(NSString *)sessionInfo
+ verificationCode:(NSString *)verificationCode {
+ self = [super init];
+ if (self) {
+ _sessionInfo = sessionInfo;
+ _code = verificationCode;
+ }
+ return self;
+}
+
+- (NSDictionary *)dictionary {
+ NSMutableDictionary *dict = [NSMutableDictionary dictionary];
+ if (_sessionInfo) {
+ dict[@"sessionInfo"] = _sessionInfo;
+ }
+ if (_code) {
+ dict[@"code"] = _code;
+ }
+ return [dict copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h
new file mode 100644
index 00000000..fc9af6ec
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthProtoFinalizeMFAPhoneResponseInfo : NSObject <FIRAuthProto>
+
+@property(nonatomic, copy, readonly, nullable) NSString *phoneNumber;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.m
new file mode 100644
index 00000000..f8f1d96e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.m
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneResponseInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthProtoFinalizeMFAPhoneResponseInfo
+
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
+ self = [super init];
+ if (self) {
+ _phoneNumber = [dictionary[@"phoneNumber"] copy];
+ }
+ return self;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h
new file mode 100644
index 00000000..e17315fa
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthProtoStartMFAPhoneRequestInfo : NSObject <FIRAuthProto>
+
+@property(nonatomic, strong, readonly, nullable) NSString *phoneNumber;
+
+@property(nonatomic, strong, readonly, nullable) FIRAuthAppCredential *appCredential;
+
+@property(nonatomic, strong, readonly, nullable) NSString *reCAPTCHAToken;
+
+- (nullable instancetype)initWithPhoneNumber:(NSString *)phoneNumber
+ appCredential:(nullable FIRAuthAppCredential *)appCredential
+ reCAPTCHAToken:(nullable NSString *)reCAPTCHAToken;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.m
new file mode 100644
index 00000000..1c0ffeaa
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.m
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneRequestInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kPhoneNumberKey
+ @brief The key for the Phone Number parameter in the request.
+ */
+static NSString *const kPhoneNumberKey = @"phoneNumber";
+
+/** @var kReceiptKey
+ @brief The key for the receipt parameter in the request.
+ */
+static NSString *const kReceiptKey = @"iosReceipt";
+
+/** @var kSecretKey
+ @brief The key for the Secret parameter in the request.
+ */
+static NSString *const kSecretKey = @"iosSecret";
+
+/** @var kreCAPTCHATokenKey
+ @brief The key for the reCAPTCHAToken parameter in the request.
+ */
+static NSString *const kreCAPTCHATokenKey = @"recaptchaToken";
+
+@implementation FIRAuthProtoStartMFAPhoneRequestInfo
+
+- (nullable instancetype)initWithPhoneNumber:(NSString *)phoneNumber
+ appCredential:(nullable FIRAuthAppCredential *)appCredential
+ reCAPTCHAToken:(nullable NSString *)reCAPTCHAToken {
+ self = [super init];
+ if (self) {
+ _phoneNumber = [phoneNumber copy];
+ _appCredential = appCredential;
+ _reCAPTCHAToken = [reCAPTCHAToken copy];
+ }
+ return self;
+}
+
+- (NSDictionary *)dictionary {
+ NSMutableDictionary *dict = [NSMutableDictionary dictionary];
+ if (_phoneNumber) {
+ dict[kPhoneNumberKey] = _phoneNumber;
+ }
+ if (_appCredential.receipt) {
+ dict[kReceiptKey] = _appCredential.receipt;
+ }
+ if (_appCredential.secret) {
+ dict[kSecretKey] = _appCredential.secret;
+ }
+ if (_reCAPTCHAToken) {
+ dict[kreCAPTCHATokenKey] = _reCAPTCHAToken;
+ }
+ return [dict copy];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h
new file mode 100644
index 00000000..1cdb6903
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProto.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthProtoStartMFAPhoneResponseInfo : NSObject <FIRAuthProto>
+
+@property(nonatomic, copy, readonly, nullable) NSString *sessionInfo;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.m
new file mode 100644
index 00000000..065e4178
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.m
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoStartMFAPhoneResponseInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthProtoStartMFAPhoneResponseInfo
+
+- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
+ self = [super init];
+ if (self) {
+ _sessionInfo = [dictionary[@"sessionInfo"] copy];
+ }
+ return self;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/FirebaseAuthVersion.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/FirebaseAuthVersion.m
new file mode 100644
index 00000000..adb599c5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/FirebaseAuthVersion.m
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FirebaseAuthVersion.h"
+
+// Convert the macro to a string
+#define STR(x) STR_EXPAND(x)
+#define STR_EXPAND(x) #x
+
+const double FirebaseAuthVersionNum = FIRAuth_MINOR_VERSION;
+
+const char *const FirebaseAuthVersionStr = (const char *const)STR(FIRAuth_VERSION);
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor+Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor+Internal.h
new file mode 100644
index 00000000..a9307065
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor+Internal.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactor.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRMultiFactor ()
+
+@property(nonatomic, weak) FIRUser *user;
+
+/** @fn initWithMFAEnrollments:
+ @brief Initialize a multi factor instance with a list of MFA enrollments.
+*/
+- (instancetype)initWithMFAEnrollments:(NSArray<FIRAuthProtoMFAEnrollment *> *)MFAEnrollments;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor.m
new file mode 100644
index 00000000..5951add6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactor.m
@@ -0,0 +1,195 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactor.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/Enroll/FIRStartMFAEnrollmentRequest.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactor+Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo+Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h"
+#import "FirebaseAuth/Sources/User/FIRUser_Internal.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+static NSString *kEnrolledFactorsCodingKey = @"enrolledFactors";
+
+static NSString *kUserCodingKey = @"user";
+
+@implementation FIRMultiFactor
+
+- (void)getSessionWithCompletion:(nullable FIRMultiFactorSessionCallback)completion {
+ FIRMultiFactorSession *session = [FIRMultiFactorSession sessionForCurrentUser];
+ if (completion) {
+ completion(session, nil);
+ }
+}
+
+- (void)enrollWithAssertion:(FIRMultiFactorAssertion *)assertion
+ displayName:(nullable NSString *)displayName
+ completion:(nullable FIRAuthVoidErrorCallback)completion {
+#if TARGET_OS_IOS
+ FIRPhoneMultiFactorAssertion *phoneAssertion = (FIRPhoneMultiFactorAssertion *)assertion;
+ FIRAuthProtoFinalizeMFAPhoneRequestInfo *finalizeMFAPhoneRequestInfo =
+ [[FIRAuthProtoFinalizeMFAPhoneRequestInfo alloc]
+ initWithSessionInfo:phoneAssertion.authCredential.verificationID
+ verificationCode:phoneAssertion.authCredential.verificationCode];
+ FIRFinalizeMFAEnrollmentRequest *request =
+ [[FIRFinalizeMFAEnrollmentRequest alloc] initWithIDToken:self.user.rawAccessToken
+ displayName:displayName
+ verificationInfo:finalizeMFAPhoneRequestInfo
+ requestConfiguration:self.user.requestConfiguration];
+ [FIRAuthBackend
+ finalizeMultiFactorEnrollment:request
+ callback:^(FIRFinalizeMFAEnrollmentResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ completion(error);
+ }
+ } else {
+ [FIRAuth.auth
+ completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:nil
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ FIRAuthDataResult *result =
+ [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:nil];
+ FIRAuthDataResultCallback
+ decoratedCallback = [FIRAuth.auth
+ signInFlowAuthDataResultCallbackByDecoratingCallback:
+ ^(FIRAuthDataResult
+ *_Nullable authResult,
+ NSError *_Nullable error) {
+ if (completion) {
+ completion(error);
+ }
+ }];
+ decoratedCallback(result, error);
+ }];
+ }
+ }];
+#endif
+}
+
+- (void)unenrollWithInfo:(FIRMultiFactorInfo *)factorInfo
+ completion:(nullable FIRAuthVoidErrorCallback)completion {
+ [self unenrollWithFactorUID:factorInfo.UID completion:completion];
+}
+
+- (void)unenrollWithFactorUID:(NSString *)factorUID
+ completion:(nullable FIRAuthVoidErrorCallback)completion {
+ FIRWithdrawMFARequest *request =
+ [[FIRWithdrawMFARequest alloc] initWithIDToken:self.user.rawAccessToken
+ MFAEnrollmentID:factorUID
+ requestConfiguration:self.user.requestConfiguration];
+ [FIRAuthBackend
+ withdrawMultiFactor:request
+ callback:^(FIRWithdrawMFAResponse *_Nullable response, NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ completion(error);
+ }
+ } else {
+ [FIRAuth.auth
+ completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:nil
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ FIRAuthDataResult *result =
+ [[FIRAuthDataResult alloc] initWithUser:user
+ additionalUserInfo:nil];
+ FIRAuthDataResultCallback decoratedCallback = [FIRAuth
+ .auth
+ signInFlowAuthDataResultCallbackByDecoratingCallback:
+ ^(FIRAuthDataResult *_Nullable authResult,
+ NSError *_Nullable error) {
+ if (error) {
+ [[FIRAuth auth] signOut:NULL];
+ }
+ if (completion) {
+ completion(error);
+ }
+ }];
+ decoratedCallback(result, error);
+ }];
+ }
+ }];
+}
+
+#pragma mark - Internal
+
+- (instancetype)initWithMFAEnrollments:(NSArray<FIRAuthProtoMFAEnrollment *> *)MFAEnrollments {
+ self = [super init];
+
+ if (self) {
+ NSMutableArray<FIRMultiFactorInfo *> *multiFactorInfoArray = [[NSMutableArray alloc] init];
+ for (FIRAuthProtoMFAEnrollment *MFAEnrollment in MFAEnrollments) {
+ FIRMultiFactorInfo *multiFactorInfo =
+ [[FIRMultiFactorInfo alloc] initWithProto:MFAEnrollment];
+ [multiFactorInfoArray addObject:multiFactorInfo];
+ }
+ _enrolledFactors = [multiFactorInfoArray copy];
+ }
+
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [self init];
+ if (self) {
+ NSArray<FIRMultiFactorInfo *> *enrolledFactors =
+ [aDecoder decodeObjectOfClass:[NSArray<FIRMultiFactorInfo *> class]
+ forKey:kEnrolledFactorsCodingKey];
+ _enrolledFactors = enrolledFactors;
+ _user = [aDecoder decodeObjectOfClass:[FIRUser class] forKey:kUserCodingKey];
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_enrolledFactors forKey:kEnrolledFactorsCodingKey];
+ [aCoder encodeObject:_user forKey:kUserCodingKey];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion+Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion+Internal.h
new file mode 100644
index 00000000..ecf26204
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion+Internal.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorAssertion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRMultiFactorAssertion () {
+ @protected
+ NSString *_factorID;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion.m
new file mode 100644
index 00000000..c9452d3c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion.m
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorAssertion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRMultiFactorAssertion
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorConstants.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorConstants.m
new file mode 100644
index 00000000..0c9d06b7
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorConstants.m
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+#pragma mark - Multi Factor ID constants
+
+NSString *const FIRPhoneMultiFactorID = @"1";
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo+Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo+Internal.h
new file mode 100644
index 00000000..5bfcd3a3
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo+Internal.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRMultiFactorInfo () {
+ @protected
+ NSString *_factorID;
+}
+
+- (instancetype)initWithProto:(FIRAuthProtoMFAEnrollment *)proto;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo.m
new file mode 100644
index 00000000..3b74f41d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo.m
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+
+static NSString *kUIDCodingKey = @"uid";
+
+static NSString *kDisplayNameCodingKey = @"displayName";
+
+static NSString *kEnrollmentDateCodingKey = @"enrollmentDate";
+
+static NSString *kFactorIDCodingKey = @"factorID";
+
+@implementation FIRMultiFactorInfo
+
+#pragma mark - Internal
+
+- (instancetype)initWithProto:(FIRAuthProtoMFAEnrollment *)proto {
+ self = [super init];
+
+ if (self) {
+ _UID = proto.MFAEnrollmentID;
+ _displayName = proto.displayName;
+ _enrollmentDate = proto.enrolledAt;
+ }
+
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ self = [self init];
+ if (self) {
+ _UID = [aDecoder decodeObjectOfClass:[NSString class] forKey:kUIDCodingKey];
+ _displayName = [aDecoder decodeObjectOfClass:[NSString class] forKey:kDisplayNameCodingKey];
+ _enrollmentDate = [aDecoder decodeObjectOfClass:[NSDate class] forKey:kEnrollmentDateCodingKey];
+ _factorID = [aDecoder decodeObjectOfClass:[NSString class] forKey:kFactorIDCodingKey];
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_UID forKey:kUIDCodingKey];
+ [aCoder encodeObject:_displayName forKey:kDisplayNameCodingKey];
+ [aCoder encodeObject:_enrollmentDate forKey:kEnrollmentDateCodingKey];
+ [aCoder encodeObject:_factorID forKey:kFactorIDCodingKey];
+}
+
+@end
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver+Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver+Internal.h
new file mode 100644
index 00000000..ecf26e20
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver+Internal.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorResolver.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRMultiFactorResolver ()
+
+@property(nonatomic) NSString *MFAPendingCredential;
+
+- (instancetype)initWithMFAPendingCredential:(NSString *_Nullable)MFAPendingCredential
+ hints:(NSArray<FIRMultiFactorInfo *> *)hints;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver.m
new file mode 100644
index 00000000..c94ab844
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver.m
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRAdditionalUserInfo.h"
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorResolver.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend+MultiFactor.h"
+#import "FirebaseAuth/Sources/Backend/RPC/MultiFactor/SignIn/FIRFinalizeMFASignInRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/Phone/FIRAuthProtoFinalizeMFAPhoneRequestInfo.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver+Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRMultiFactorResolver
+
+- (instancetype)initWithMFAPendingCredential:(NSString *_Nullable)MFAPendingCredential
+ hints:(NSArray<FIRMultiFactorInfo *> *)hints {
+ self = [super init];
+ if (self) {
+ _MFAPendingCredential = MFAPendingCredential;
+ _hints = hints;
+ _auth = [FIRAuth auth];
+ _session = [[FIRMultiFactorSession alloc] init];
+ _session.MFAPendingCredential = MFAPendingCredential;
+ }
+ return self;
+}
+
+- (void)resolveSignInWithAssertion:(nonnull FIRMultiFactorAssertion *)assertion
+ completion:(nullable FIRAuthDataResultCallback)completion {
+#if TARGET_OS_IOS
+ FIRPhoneMultiFactorAssertion *phoneAssertion = (FIRPhoneMultiFactorAssertion *)assertion;
+ FIRAuthProtoFinalizeMFAPhoneRequestInfo *finalizeMFAPhoneRequestInfo =
+ [[FIRAuthProtoFinalizeMFAPhoneRequestInfo alloc]
+ initWithSessionInfo:phoneAssertion.authCredential.verificationID
+ verificationCode:phoneAssertion.authCredential.verificationCode];
+ FIRFinalizeMFASignInRequest *request = [[FIRFinalizeMFASignInRequest alloc]
+ initWithMFAPendingCredential:self.MFAPendingCredential
+ verificationInfo:finalizeMFAPhoneRequestInfo
+ requestConfiguration:self.auth.requestConfiguration];
+ [FIRAuthBackend
+ finalizeMultiFactorSignIn:request
+ callback:^(FIRFinalizeMFASignInResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ if (completion) {
+ completion(nil, error);
+ }
+ } else {
+ [FIRAuth.auth
+ completeSignInWithAccessToken:response.IDToken
+ accessTokenExpirationDate:nil
+ refreshToken:response.refreshToken
+ anonymous:NO
+ callback:^(FIRUser *_Nullable user,
+ NSError *_Nullable error) {
+ FIRAuthDataResult *result =
+ [[FIRAuthDataResult alloc]
+ initWithUser:user
+ additionalUserInfo:nil];
+ FIRAuthDataResultCallback decoratedCallback =
+ [FIRAuth.auth
+ signInFlowAuthDataResultCallbackByDecoratingCallback:
+ completion];
+ decoratedCallback(result, error);
+ }];
+ }
+ }];
+#endif
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h
new file mode 100644
index 00000000..7061c942
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h"
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorSession.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRMultiFactorSession ()
+
+@property(nonatomic, readonly) NSString *IDToken;
+
+@property(nonatomic) NSString *MFAPendingCredential;
+
+@property(nonatomic) FIRMultiFactorInfo *multiFactorInfo;
+
++ (FIRMultiFactorSession *)sessionForCurrentUser;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession.m
new file mode 100644
index 00000000..277ae9a0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession.m
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRAuth.h"
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorSession.h"
+
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorSession+Internal.h"
+#import "FirebaseAuth/Sources/User/FIRUser_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRMultiFactorSession
+
+#pragma mark - Private
+
+- (instancetype)initWithIDToken:(NSString *)IDToken {
+ self = [super init];
+ if (self) {
+ _IDToken = IDToken;
+ }
+ return self;
+}
+
+#pragma mark - Internal
+
++ (FIRMultiFactorSession *)sessionForCurrentUser {
+ FIRUser *currentUser = [[FIRAuth auth] currentUser];
+ NSString *IDToken = currentUser.rawAccessToken;
+ FIRMultiFactorSession *session = [[FIRMultiFactorSession alloc] initWithIDToken:IDToken];
+ return session;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h
new file mode 100644
index 00000000..4372b3c9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRPhoneAuthCredential.h"
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRPhoneMultiFactorAssertion ()
+
+@property(nonatomic) FIRPhoneAuthCredential *authCredential;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion.m
new file mode 100644
index 00000000..83d9cf0b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion.m
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h"
+
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorAssertion+Internal.h"
+#import "FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern NSString *const _Nonnull FIRPhoneMultiFactorID;
+
+@implementation FIRPhoneMultiFactorAssertion
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _factorID = FIRPhoneMultiFactorID;
+ }
+ return self;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorGenerator.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorGenerator.m
new file mode 100644
index 00000000..2987a883
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorGenerator.m
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h"
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorGenerator.h"
+
+#import "FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorAssertion+Internal.h"
+
+@implementation FIRPhoneMultiFactorGenerator
+
++ (FIRPhoneMultiFactorAssertion *)assertionWithCredential:
+ (FIRPhoneAuthCredential *)phoneAuthCredential {
+ FIRPhoneMultiFactorAssertion *assertion = [[FIRPhoneMultiFactorAssertion alloc] init];
+ assertion.authCredential = phoneAuthCredential;
+ return assertion;
+}
+
+@end
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo+Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo+Internal.h
new file mode 100644
index 00000000..7dcd5731
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo+Internal.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorInfo.h"
+
+@class FIRAuthProtoMFAEnrollment;
+
+@interface FIRPhoneMultiFactorInfo ()
+
+- (instancetype)initWithProto:(FIRAuthProtoMFAEnrollment *)proto;
+
+@end
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo.m
new file mode 100644
index 00000000..5df8c22f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/MultiFactor/Phone/FIRPhoneMultiFactorInfo.m
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h"
+#import "FirebaseAuth/Sources/Public/FIRPhoneMultiFactorInfo.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/Proto/FIRAuthProtoMFAEnrollment.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorInfo+Internal.h"
+
+extern NSString *const FIRPhoneMultiFactorID;
+
+@implementation FIRPhoneMultiFactorInfo
+
+- (instancetype)initWithProto:(FIRAuthProtoMFAEnrollment *)proto {
+ self = [super initWithProto:proto];
+ if (self) {
+ _factorID = FIRPhoneMultiFactorID;
+ _phoneNumber = proto.MFAValue;
+ }
+ return self;
+}
+
+@end
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRActionCodeSettings.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRActionCodeSettings.h
new file mode 100644
index 00000000..5024bd59
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRActionCodeSettings.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRActionCodeSettings
+ @brief Used to set and retrieve settings related to handling action codes.
+ */
+NS_SWIFT_NAME(ActionCodeSettings)
+@interface FIRActionCodeSettings : NSObject
+
+/** @property URL
+ @brief This URL represents the state/Continue URL in the form of a universal link.
+ @remarks This URL can should be constructed as a universal link that would either directly open
+ the app where the action code would be handled or continue to the app after the action code
+ is handled by Firebase.
+ */
+@property(nonatomic, copy, nullable) NSURL *URL;
+
+/** @property handleCodeInApp
+ @brief Indicates whether the action code link will open the app directly or after being
+ redirected from a Firebase owned web widget.
+ */
+@property(assign, nonatomic) BOOL handleCodeInApp;
+
+/** @property iOSBundleID
+ @brief The iOS bundle ID, if available. The default value is the current app's bundle ID.
+ */
+@property(copy, nonatomic, readonly, nullable) NSString *iOSBundleID;
+
+/** @property androidPackageName
+ @brief The Android package name, if available.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *androidPackageName;
+
+/** @property androidMinimumVersion
+ @brief The minimum Android version supported, if available.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *androidMinimumVersion;
+
+/** @property androidInstallIfNotAvailable
+ @brief Indicates whether the Android app should be installed on a device where it is not
+ available.
+ */
+@property(nonatomic, assign, readonly) BOOL androidInstallIfNotAvailable;
+
+/** @property dynamicLinkDomain
+ @brief The Firebase Dynamic Link domain used for out of band code flow.
+ */
+@property(copy, nonatomic, nullable) NSString *dynamicLinkDomain;
+
+/** @fn setIOSBundleID
+ @brief Sets the iOS bundle Id.
+ @param iOSBundleID The iOS bundle ID.
+ */
+- (void)setIOSBundleID:(NSString *)iOSBundleID;
+
+/** @fn setAndroidPackageName:installIfNotAvailable:minimumVersion:
+ @brief Sets the Android package name, the flag to indicate whether or not to install the app
+ and the minimum Android version supported.
+ @param androidPackageName The Android package name.
+ @param installIfNotAvailable Indicates whether or not the app should be installed if not
+ available.
+ @param minimumVersion The minimum version of Android supported.
+ @remarks If installIfNotAvailable is set to YES and the link is opened on an android device, it
+ will try to install the app if not already available. Otherwise the web URL is used.
+ */
+- (void)setAndroidPackageName:(NSString *)androidPackageName
+ installIfNotAvailable:(BOOL)installIfNotAvailable
+ minimumVersion:(nullable NSString *)minimumVersion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAdditionalUserInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAdditionalUserInfo.h
new file mode 100644
index 00000000..4f6947ac
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAdditionalUserInfo.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRVerifyAssertionResponse;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAdditionalUserInfo
+ @brief Represents additional user data returned from an identity provider.
+ */
+NS_SWIFT_NAME(AdditionalUserInfo)
+@interface FIRAdditionalUserInfo : NSObject
+
+/** @fn init
+ @brief This class should not be initialized manually. `FIRAdditionalUserInfo` can be retrieved
+ from from an instance of `FIRAuthDataResult`.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @property providerID
+ @brief The provider identifier.
+ */
+@property(nonatomic, readonly) NSString *providerID;
+
+/** @property profile
+ @brief Dictionary containing the additional IdP specific information.
+ */
+@property(nonatomic, readonly, nullable) NSDictionary<NSString *, NSObject *> *profile;
+
+/** @property username
+ @brief username The name of the user.
+ */
+@property(nonatomic, readonly, nullable) NSString *username;
+
+/** @property newUser
+ @brief Indicates whether or not the current user was signed in for the first time.
+ */
+@property(nonatomic, readonly, getter=isNewUser) BOOL newUser;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuth.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuth.h
new file mode 100644
index 00000000..f81c8950
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuth.h
@@ -0,0 +1,882 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <AvailabilityMacros.h>
+#import <Foundation/Foundation.h>
+
+#import "FIRAuthErrors.h"
+
+#if TARGET_OS_IOS
+#import "FIRAuthAPNSTokenType.h"
+#endif
+
+@class FIRActionCodeSettings;
+@class FIRApp;
+@class FIRAuth;
+@class FIRAuthCredential;
+@class FIRAuthDataResult;
+@class FIRAuthSettings;
+@class FIRUser;
+@protocol FIRAuthStateListener;
+@protocol FIRAuthUIDelegate;
+@protocol FIRFederatedAuthProvider;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRUserUpdateCallback
+ @brief The type of block invoked when a request to update the current user is completed.
+ */
+typedef void (^FIRUserUpdateCallback)(NSError *_Nullable error) NS_SWIFT_NAME(UserUpdateCallback);
+
+/** @typedef FIRAuthStateDidChangeListenerHandle
+ @brief The type of handle returned by `FIRAuth.addAuthStateDidChangeListener:`.
+ */
+typedef id<NSObject> FIRAuthStateDidChangeListenerHandle
+ NS_SWIFT_NAME(AuthStateDidChangeListenerHandle);
+
+/** @typedef FIRAuthStateDidChangeListenerBlock
+ @brief The type of block which can be registered as a listener for auth state did change events.
+
+ @param auth The FIRAuth object on which state changes occurred.
+ @param user Optionally; the current signed in user, if any.
+ */
+typedef void (^FIRAuthStateDidChangeListenerBlock)(FIRAuth *auth, FIRUser *_Nullable user)
+ NS_SWIFT_NAME(AuthStateDidChangeListenerBlock);
+
+/** @typedef FIRIDTokenDidChangeListenerHandle
+ @brief The type of handle returned by `FIRAuth.addIDTokenDidChangeListener:`.
+ */
+typedef id<NSObject> FIRIDTokenDidChangeListenerHandle
+ NS_SWIFT_NAME(IDTokenDidChangeListenerHandle);
+
+/** @typedef FIRIDTokenDidChangeListenerBlock
+ @brief The type of block which can be registered as a listener for ID token did change events.
+
+ @param auth The FIRAuth object on which ID token changes occurred.
+ @param user Optionally; the current signed in user, if any.
+ */
+typedef void (^FIRIDTokenDidChangeListenerBlock)(FIRAuth *auth, FIRUser *_Nullable user)
+ NS_SWIFT_NAME(IDTokenDidChangeListenerBlock);
+
+/** @typedef FIRAuthDataResultCallback
+ @brief The type of block invoked when sign-in related events complete.
+
+ @param authResult Optionally; Result of sign-in request containing both the user and
+ the additional user info associated with the user.
+ @param error Optionally; the error which occurred - or nil if the request was successful.
+ */
+typedef void (^FIRAuthDataResultCallback)(FIRAuthDataResult *_Nullable authResult,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(AuthDataResultCallback);
+
+#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+/**
+ @brief The name of the `NSNotificationCenter` notification which is posted when the auth state
+ changes (for example, a new token has been produced, a user signs in or signs out). The
+ object parameter of the notification is the sender `FIRAuth` instance.
+ */
+extern const NSNotificationName FIRAuthStateDidChangeNotification NS_SWIFT_NAME(AuthStateDidChange);
+#else
+/**
+ @brief The name of the `NSNotificationCenter` notification which is posted when the auth state
+ changes (for example, a new token has been produced, a user signs in or signs out). The
+ object parameter of the notification is the sender `FIRAuth` instance.
+ */
+extern NSString *const FIRAuthStateDidChangeNotification
+ NS_SWIFT_NAME(AuthStateDidChangeNotification);
+#endif // defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
+
+/** @typedef FIRAuthResultCallback
+ @brief The type of block invoked when sign-in related events complete.
+
+ @param user Optionally; the signed in user, if any.
+ @param error Optionally; if an error occurs, this is the NSError object that describes the
+ problem. Set to nil otherwise.
+ */
+typedef void (^FIRAuthResultCallback)(FIRUser *_Nullable user, NSError *_Nullable error)
+ NS_SWIFT_NAME(AuthResultCallback);
+
+/** @typedef FIRProviderQueryCallback
+ @brief The type of block invoked when a list of identity providers for a given email address is
+ requested.
+
+ @param providers Optionally; a list of provider identifiers, if any.
+ @see FIRGoogleAuthProviderID etc.
+ @param error Optionally; if an error occurs, this is the NSError object that describes the
+ problem. Set to nil otherwise.
+ */
+typedef void (^FIRProviderQueryCallback)(NSArray<NSString *> *_Nullable providers,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(ProviderQueryCallback);
+
+/** @typedef FIRSignInMethodQueryCallback
+ @brief The type of block invoked when a list of sign-in methods for a given email address is
+ requested.
+ */
+typedef void (^FIRSignInMethodQueryCallback)(NSArray<NSString *> *_Nullable, NSError *_Nullable)
+ NS_SWIFT_NAME(SignInMethodQueryCallback);
+
+/** @typedef FIRSendPasswordResetCallback
+ @brief The type of block invoked when sending a password reset email.
+
+ @param error Optionally; if an error occurs, this is the NSError object that describes the
+ problem. Set to nil otherwise.
+ */
+typedef void (^FIRSendPasswordResetCallback)(NSError *_Nullable error)
+ NS_SWIFT_NAME(SendPasswordResetCallback);
+
+/** @typedef FIRSendSignInLinkToEmailCallback
+ @brief The type of block invoked when sending an email sign-in link email.
+ */
+typedef void (^FIRSendSignInLinkToEmailCallback)(NSError *_Nullable error)
+ NS_SWIFT_NAME(SendSignInLinkToEmailCallback);
+
+/** @typedef FIRConfirmPasswordResetCallback
+ @brief The type of block invoked when performing a password reset.
+
+ @param error Optionally; if an error occurs, this is the NSError object that describes the
+ problem. Set to nil otherwise.
+ */
+typedef void (^FIRConfirmPasswordResetCallback)(NSError *_Nullable error)
+ NS_SWIFT_NAME(ConfirmPasswordResetCallback);
+
+/** @typedef FIRVerifyPasswordResetCodeCallback
+ @brief The type of block invoked when verifying that an out of band code should be used to
+ perform password reset.
+
+ @param email Optionally; the email address of the user for which the out of band code applies.
+ @param error Optionally; if an error occurs, this is the NSError object that describes the
+ problem. Set to nil otherwise.
+ */
+typedef void (^FIRVerifyPasswordResetCodeCallback)(NSString *_Nullable email,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(VerifyPasswordResetCodeCallback);
+
+/** @typedef FIRApplyActionCodeCallback
+ @brief The type of block invoked when applying an action code.
+
+ @param error Optionally; if an error occurs, this is the NSError object that describes the
+ problem. Set to nil otherwise.
+ */
+typedef void (^FIRApplyActionCodeCallback)(NSError *_Nullable error)
+ NS_SWIFT_NAME(ApplyActionCodeCallback);
+
+typedef void (^FIRAuthVoidErrorCallback)(NSError *_Nullable) NS_SWIFT_NAME(AuthVoidErrorCallback);
+
+/**
+ @brief Deprecated. Please directly use email or previousEmail properties instead.
+ */
+typedef NS_ENUM(NSInteger, FIRActionDataKey) {
+ /** Deprecated. Please directly use email property instead. */
+ FIRActionCodeEmailKey = 0,
+
+ /** Deprecated. Please directly use previousEmail property instead. */
+ FIRActionCodeFromEmailKey = 1,
+
+} NS_SWIFT_NAME(ActionDataKey)
+ DEPRECATED_MSG_ATTRIBUTE("Please directly use email or previousEmail properties instead.");
+
+/** @class FIRActionCodeInfo
+ @brief Manages information regarding action codes.
+ */
+NS_SWIFT_NAME(ActionCodeInfo)
+@interface FIRActionCodeInfo : NSObject
+
+/**
+ @brief Operations which can be performed with action codes.
+ */
+typedef NS_ENUM(NSInteger, FIRActionCodeOperation) {
+ /** Action code for unknown operation. */
+ FIRActionCodeOperationUnknown = 0,
+
+ /** Action code for password reset operation. */
+ FIRActionCodeOperationPasswordReset = 1,
+
+ /** Action code for verify email operation. */
+ FIRActionCodeOperationVerifyEmail = 2,
+
+ /** Action code for recover email operation. */
+ FIRActionCodeOperationRecoverEmail = 3,
+
+ /** Action code for email link operation. */
+ FIRActionCodeOperationEmailLink = 4,
+
+ /** Action code for verifing and changing email */
+ FIRActionCodeOperationVerifyAndChangeEmail = 5,
+
+ /** Action code for reverting second factor addition */
+ FIRActionCodeOperationRevertSecondFactorAddition = 6,
+
+} NS_SWIFT_NAME(ActionCodeOperation);
+
+/**
+ @brief The operation being performed.
+ */
+@property(nonatomic, readonly) FIRActionCodeOperation operation;
+
+/** @fn dataForKey:
+ @brief Deprecated. Please directly use email or previousEmail properties instead.
+ */
+- (NSString *)dataForKey:(FIRActionDataKey)key
+ DEPRECATED_MSG_ATTRIBUTE("Please directly use email or previousEmail properties instead.");
+
+/** @property email
+ @brief The email address to which the code was sent. The new email address in the case of
+ FIRActionCodeOperationRecoverEmail.
+ */
+@property(nonatomic, nullable, readonly, copy) NSString *email;
+
+/** @property previousEmail
+ @brief The email that is being recovered in the case of FIRActionCodeOperationRecoverEmail.
+ */
+@property(nonatomic, nullable, readonly, copy) NSString *previousEmail;
+
+/** @fn init
+ @brief please use initWithOperation: instead.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+/** @class FIRActionCodeURL
+ @brief This class will allow developers to easily extract information about out of band links.
+ */
+NS_SWIFT_NAME(ActionCodeURL)
+@interface FIRActionCodeURL : NSObject
+
+/** @property APIKey
+ @brief Returns the API key from the link. nil, if not provided.
+ */
+@property(nonatomic, nullable, copy, readonly) NSString *APIKey;
+
+/** @property operation
+ @brief Returns the mode of oob action. The property will be of FIRActionCodeOperation type.
+ It will return FIRActionCodeOperationUnknown if no oob action is provided.
+ */
+@property(nonatomic, readonly) FIRActionCodeOperation operation;
+
+/** @property code
+ @brief Returns the email action code from the link. nil, if not provided.
+ */
+@property(nonatomic, nullable, copy, readonly) NSString *code;
+
+/** @property continueURL
+ @brief Returns the continue URL from the link. nil, if not provided.
+ */
+@property(nonatomic, nullable, copy, readonly) NSURL *continueURL;
+
+/** @property languageCode
+ @brief Returns the language code from the link. nil, if not provided.
+ */
+@property(nonatomic, nullable, copy, readonly) NSString *languageCode;
+
+/** @fn actionCodeURLWithLink:
+ @brief Construct an FIRActionCodeURL from an out of band link (e.g. email link).
+ @param link The oob link string used to construct the action code URL.
+ @return The FIRActionCodeURL object constructed based on the oob link provided.
+ */
++ (nullable instancetype)actionCodeURLWithLink:(NSString *)link;
+
+/** @fn init
+ @brief Please use actionCodeURLWithLink: for Objective-C or actionCodeURLWithLink(link:) for
+ Swift instead.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+/** @typedef FIRCheckActionCodeCallBack
+ @brief The type of block invoked when performing a check action code operation.
+
+ @param info Metadata corresponding to the action code.
+ @param error Optionally; if an error occurs, this is the NSError object that describes the
+ problem. Set to nil otherwise.
+ */
+typedef void (^FIRCheckActionCodeCallBack)(FIRActionCodeInfo *_Nullable info,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(CheckActionCodeCallback);
+
+/** @class FIRAuth
+ @brief Manages authentication for Firebase apps.
+ @remarks This class is thread-safe.
+ */
+NS_SWIFT_NAME(Auth)
+@interface FIRAuth : NSObject
+
+/** @fn auth
+ @brief Gets the auth object for the default Firebase app.
+ @remarks The default Firebase app must have already been configured or an exception will be
+ raised.
+ */
++ (FIRAuth *)auth NS_SWIFT_NAME(auth());
+
+/** @fn authWithApp:
+ @brief Gets the auth object for a `FIRApp`.
+
+ @param app The FIRApp for which to retrieve the associated FIRAuth instance.
+ @return The FIRAuth instance associated with the given FIRApp.
+ */
++ (FIRAuth *)authWithApp:(FIRApp *)app NS_SWIFT_NAME(auth(app:));
+
+/** @property app
+ @brief Gets the `FIRApp` object that this auth object is connected to.
+ */
+@property(nonatomic, weak, readonly, nullable) FIRApp *app;
+
+/** @property currentUser
+ @brief Synchronously gets the cached current user, or null if there is none.
+ */
+@property(nonatomic, strong, readonly, nullable) FIRUser *currentUser;
+
+/** @property languageCode
+ @brief The current user language code. This property can be set to the app's current language by
+ calling `useAppLanguage`.
+
+ @remarks The string used to set this property must be a language code that follows BCP 47.
+ */
+@property(nonatomic, copy, nullable) NSString *languageCode;
+
+/** @property settings
+ @brief Contains settings related to the auth object.
+ */
+@property(nonatomic, copy, nullable) FIRAuthSettings *settings;
+
+/** @property userAccessGroup
+ @brief The current user access group that the Auth instance is using. Default is nil.
+ */
+@property(readonly, nonatomic, copy, nullable) NSString *userAccessGroup;
+
+#if TARGET_OS_IOS
+/** @property APNSToken
+ @brief The APNs token used for phone number authentication. The type of the token (production
+ or sandbox) will be attempted to be automatcially detected.
+ @remarks If swizzling is disabled, the APNs Token must be set for phone number auth to work,
+ by either setting this property or by calling `setAPNSToken:type:`
+ */
+@property(nonatomic, strong, nullable) NSData *APNSToken;
+#endif
+
+/** @fn init
+ @brief Please access auth instances using `FIRAuth.auth` and `FIRAuth.authForApp:`.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn updateCurrentUser:completion:
+ @brief Sets the currentUser on the calling Auth instance to the provided user object.
+ @param user The user object to be set as the current user of the calling Auth instance.
+ @param completion Optionally; a block invoked after the user of the calling Auth instance has
+ been updated or an error was encountered.
+ */
+- (void)updateCurrentUser:(FIRUser *)user completion:(nullable FIRUserUpdateCallback)completion;
+
+/** @fn fetchProvidersForEmail:completion:
+ @brief Please use fetchSignInMethodsForEmail:completion: for Objective-C or
+ fetchSignInMethods(forEmail:completion:) for Swift instead.
+ */
+- (void)fetchProvidersForEmail:(NSString *)email
+ completion:(nullable FIRProviderQueryCallback)completion
+ DEPRECATED_MSG_ATTRIBUTE("Please use fetchSignInMethodsForEmail:completion: for Objective-C or "
+ "fetchSignInMethods(forEmail:completion:) for Swift instead.");
+
+/** @fn fetchSignInMethodsForEmail:completion:
+ @brief Fetches the list of all sign-in methods previously used for the provided email address.
+
+ @param email The email address for which to obtain a list of sign-in methods.
+ @param completion Optionally; a block which is invoked when the list of sign in methods for the
+ specified email address is ready or an error was encountered. Invoked asynchronously on the
+ main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is malformed.
+
+ @remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
+ */
+
+- (void)fetchSignInMethodsForEmail:(NSString *)email
+ completion:(nullable FIRSignInMethodQueryCallback)completion;
+
+/** @fn signInWithEmail:password:completion:
+ @brief Signs in using an email address and password.
+
+ @param email The user's email address.
+ @param password The user's password.
+ @param completion Optionally; a block which is invoked when the sign in flow finishes, or is
+ canceled. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that email and password
+ accounts are not enabled. Enable them in the Auth section of the
+ Firebase console.
+ + `FIRAuthErrorCodeUserDisabled` - Indicates the user's account is disabled.
+ + `FIRAuthErrorCodeWrongPassword` - Indicates the user attempted
+ sign in with an incorrect password.
+ + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is malformed.
+
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)signInWithEmail:(NSString *)email
+ password:(NSString *)password
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn signInWithEmail:link:completion:
+ @brief Signs in using an email address and email sign-in link.
+
+ @param email The user's email address.
+ @param link The email sign-in link.
+ @param completion Optionally; a block which is invoked when the sign in flow finishes, or is
+ canceled. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that email and email sign-in link
+ accounts are not enabled. Enable them in the Auth section of the
+ Firebase console.
+ + `FIRAuthErrorCodeUserDisabled` - Indicates the user's account is disabled.
+ + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is invalid.
+
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+
+- (void)signInWithEmail:(NSString *)email
+ link:(NSString *)link
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn signInWithProvider:UIDelegate:completion:
+ @brief Signs in using the provided auth provider instance.
+
+ @param provider An instance of an auth provider used to initiate the sign-in flow.
+ @param UIDelegate Optionally an instance of a class conforming to the FIRAuthUIDelegate
+ protocol, this is used for presenting the web context. If nil, a default FIRAuthUIDelegate
+ will be used.
+ @param completion Optionally; a block which is invoked when the sign in flow finishes, or is
+ canceled. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+ <ul>
+ <li>@c FIRAuthErrorCodeOperationNotAllowed - Indicates that email and password
+ accounts are not enabled. Enable them in the Auth section of the
+ Firebase console.
+ </li>
+ <li>@c FIRAuthErrorCodeUserDisabled - Indicates the user's account is disabled.
+ </li>
+ <li>@c FIRAuthErrorCodeWebNetworkRequestFailed - Indicates that a network request within a
+ SFSafariViewController or WKWebView failed.
+ </li>
+ <li>@c FIRAuthErrorCodeWebInternalError - Indicates that an internal error occurred within a
+ SFSafariViewController or WKWebView.
+ </li>
+ <li>@c FIRAuthErrorCodeWebSignInUserInteractionFailure - Indicates a general failure during
+ a web sign-in flow.
+ </li>
+ <li>@c FIRAuthErrorCodeWebContextAlreadyPresented - Indicates that an attempt was made to
+ present a new web context while one was already being presented.
+ </li>
+ <li>@c FIRAuthErrorCodeWebContextCancelled - Indicates that the URL presentation was
+ cancelled prematurely by the user.
+ </li>
+ <li>@c FIRAuthErrorCodeAccountExistsWithDifferentCredential - Indicates the email asserted
+ by the credential (e.g. the email in a Facebook access token) is already in use by an
+ existing account, that cannot be authenticated with this sign-in method. Call
+ fetchProvidersForEmail for this user’s email and then prompt them to sign in with any of
+ the sign-in providers returned. This error will only be thrown if the "One account per
+ email address" setting is enabled in the Firebase console, under Auth settings.
+ </li>
+ </ul>
+
+ @remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
+ */
+- (void)signInWithProvider:(id<FIRFederatedAuthProvider>)provider
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn signInAndRetrieveDataWithCredential:completion:
+ @brief Please use signInWithCredential:completion: for Objective-C or "
+ "signIn(with:completion:) for Swift instead.
+ */
+- (void)signInAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion
+ DEPRECATED_MSG_ATTRIBUTE("Please use signInWithCredential:completion: for Objective-C or "
+ "signIn(with:completion:) for Swift instead.");
+
+/** @fn signInWithCredential:completion:
+ @brief Asynchronously signs in to Firebase with the given 3rd-party credentials (e.g. a Facebook
+ login Access Token, a Google ID Token/Access Token pair, etc.) and returns additional
+ identity provider data.
+
+ @param credential The credential supplied by the IdP.
+ @param completion Optionally; a block which is invoked when the sign in flow finishes, or is
+ canceled. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidCredential` - Indicates the supplied credential is invalid.
+ This could happen if it has expired or it is malformed.
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that accounts
+ with the identity provider represented by the credential are not enabled.
+ Enable them in the Auth section of the Firebase console.
+ + `FIRAuthErrorCodeAccountExistsWithDifferentCredential` - Indicates the email asserted
+ by the credential (e.g. the email in a Facebook access token) is already in use by an
+ existing account, that cannot be authenticated with this sign-in method. Call
+ fetchProvidersForEmail for this user’s email and then prompt them to sign in with any of
+ the sign-in providers returned. This error will only be thrown if the "One account per
+ email address" setting is enabled in the Firebase console, under Auth settings.
+ + `FIRAuthErrorCodeUserDisabled` - Indicates the user's account is disabled.
+ + `FIRAuthErrorCodeWrongPassword` - Indicates the user attempted sign in with an
+ incorrect password, if credential is of the type EmailPasswordAuthCredential.
+ + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is malformed.
+ + `FIRAuthErrorCodeMissingVerificationID` - Indicates that the phone auth credential was
+ created with an empty verification ID.
+ + `FIRAuthErrorCodeMissingVerificationCode` - Indicates that the phone auth credential
+ was created with an empty verification code.
+ + `FIRAuthErrorCodeInvalidVerificationCode` - Indicates that the phone auth credential
+ was created with an invalid verification Code.
+ + `FIRAuthErrorCodeInvalidVerificationID` - Indicates that the phone auth credential was
+ created with an invalid verification ID.
+ + `FIRAuthErrorCodeSessionExpired` - Indicates that the SMS code has expired.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods
+*/
+- (void)signInWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn signInAnonymouslyWithCompletion:
+ @brief Asynchronously creates and becomes an anonymous user.
+ @param completion Optionally; a block which is invoked when the sign in finishes, or is
+ canceled. Invoked asynchronously on the main thread in the future.
+
+ @remarks If there is already an anonymous user signed in, that user will be returned instead.
+ If there is any other existing user signed in, that user will be signed out.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that anonymous accounts are
+ not enabled. Enable them in the Auth section of the Firebase console.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)signInAnonymouslyWithCompletion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn signInWithCustomToken:completion:
+ @brief Asynchronously signs in to Firebase with the given Auth token.
+
+ @param token A self-signed custom auth token.
+ @param completion Optionally; a block which is invoked when the sign in finishes, or is
+ canceled. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidCustomToken` - Indicates a validation error with
+ the custom token.
+ + `FIRAuthErrorCodeCustomTokenMismatch` - Indicates the service account and the API key
+ belong to different projects.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)signInWithCustomToken:(NSString *)token
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn createUserWithEmail:password:completion:
+ @brief Creates and, on success, signs in a user with the given email address and password.
+
+ @param email The user's email address.
+ @param password The user's desired password.
+ @param completion Optionally; a block which is invoked when the sign up flow finishes, or is
+ canceled. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is malformed.
+ + `FIRAuthErrorCodeEmailAlreadyInUse` - Indicates the email used to attempt sign up
+ already exists. Call fetchProvidersForEmail to check which sign-in mechanisms the user
+ used, and prompt the user to sign in with one of those.
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that email and password accounts
+ are not enabled. Enable them in the Auth section of the Firebase console.
+ + `FIRAuthErrorCodeWeakPassword` - Indicates an attempt to set a password that is
+ considered too weak. The NSLocalizedFailureReasonErrorKey field in the NSError.userInfo
+ dictionary object will contain more detailed explanation that can be shown to the user.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)createUserWithEmail:(NSString *)email
+ password:(NSString *)password
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn confirmPasswordResetWithCode:newPassword:completion:
+ @brief Resets the password given a code sent to the user outside of the app and a new password
+ for the user.
+
+ @param newPassword The new password.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeWeakPassword` - Indicates an attempt to set a password that is
+ considered too weak.
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates the administrator disabled sign
+ in with the specified identity provider.
+ + `FIRAuthErrorCodeExpiredActionCode` - Indicates the OOB code is expired.
+ + `FIRAuthErrorCodeInvalidActionCode` - Indicates the OOB code is invalid.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)confirmPasswordResetWithCode:(NSString *)code
+ newPassword:(NSString *)newPassword
+ completion:(FIRConfirmPasswordResetCallback)completion;
+
+/** @fn checkActionCode:completion:
+ @brief Checks the validity of an out of band code.
+
+ @param code The out of band code to check validity.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+ */
+- (void)checkActionCode:(NSString *)code completion:(FIRCheckActionCodeCallBack)completion;
+
+/** @fn verifyPasswordResetCode:completion:
+ @brief Checks the validity of a verify password reset code.
+
+ @param code The password reset code to be verified.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+ */
+- (void)verifyPasswordResetCode:(NSString *)code
+ completion:(FIRVerifyPasswordResetCodeCallback)completion;
+
+/** @fn applyActionCode:completion:
+ @brief Applies out of band code.
+
+ @param code The out of band code to be applied.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks This method will not work for out of band codes which require an additional parameter,
+ such as password reset code.
+ */
+- (void)applyActionCode:(NSString *)code completion:(FIRApplyActionCodeCallback)completion;
+
+/** @fn sendPasswordResetWithEmail:completion:
+ @brief Initiates a password reset for the given email address.
+
+ @param email The email address of the user.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidRecipientEmail` - Indicates an invalid recipient email was
+ sent in the request.
+ + `FIRAuthErrorCodeInvalidSender` - Indicates an invalid sender email is set in
+ the console for this action.
+ + `FIRAuthErrorCodeInvalidMessagePayload` - Indicates an invalid email template for
+ sending update email.
+
+
+ */
+- (void)sendPasswordResetWithEmail:(NSString *)email
+ completion:(nullable FIRSendPasswordResetCallback)completion;
+
+/** @fn sendPasswordResetWithEmail:actionCodeSetting:completion:
+ @brief Initiates a password reset for the given email address and @FIRActionCodeSettings object.
+
+ @param email The email address of the user.
+ @param actionCodeSettings An `FIRActionCodeSettings` object containing settings related to
+ handling action codes.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidRecipientEmail` - Indicates an invalid recipient email was
+ sent in the request.
+ + `FIRAuthErrorCodeInvalidSender` - Indicates an invalid sender email is set in
+ the console for this action.
+ + `FIRAuthErrorCodeInvalidMessagePayload` - Indicates an invalid email template for
+ sending update email.
+ + `FIRAuthErrorCodeMissingIosBundleID` - Indicates that the iOS bundle ID is missing when
+ `handleCodeInApp` is set to YES.
+ + `FIRAuthErrorCodeMissingAndroidPackageName` - Indicates that the android package name
+ is missing when the `androidInstallApp` flag is set to true.
+ + `FIRAuthErrorCodeUnauthorizedDomain` - Indicates that the domain specified in the
+ continue URL is not whitelisted in the Firebase console.
+ + `FIRAuthErrorCodeInvalidContinueURI` - Indicates that the domain specified in the
+ continue URI is not valid.
+
+
+ */
+- (void)sendPasswordResetWithEmail:(NSString *)email
+ actionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendPasswordResetCallback)completion;
+
+/** @fn sendSignInLinkToEmail:actionCodeSettings:completion:
+ @brief Sends a sign in with email link to provided email address.
+
+ @param email The email address of the user.
+ @param actionCodeSettings An `FIRActionCodeSettings` object containing settings related to
+ handling action codes.
+ @param completion Optionally; a block which is invoked when the request finishes. Invoked
+ asynchronously on the main thread in the future.
+ */
+- (void)sendSignInLinkToEmail:(NSString *)email
+ actionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRSendSignInLinkToEmailCallback)completion;
+
+/** @fn signOut:
+ @brief Signs out the current user.
+
+ @param error Optionally; if an error occurs, upon return contains an NSError object that
+ describes the problem; is nil otherwise.
+ @return @YES when the sign out request was successful. @NO otherwise.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeKeychainError` - Indicates an error occurred when accessing the
+ keychain. The `NSLocalizedFailureReasonErrorKey` field in the `NSError.userInfo`
+ dictionary will contain more information about the error encountered.
+
+
+
+ */
+- (BOOL)signOut:(NSError *_Nullable *_Nullable)error;
+
+/** @fn isSignInWithEmailLink
+ @brief Checks if link is an email sign-in link.
+
+ @param link The email sign-in link.
+ @return @YES when the link passed matches the expected format of an email sign-in link.
+ */
+- (BOOL)isSignInWithEmailLink:(NSString *)link;
+
+/** @fn addAuthStateDidChangeListener:
+ @brief Registers a block as an "auth state did change" listener. To be invoked when:
+
+ + The block is registered as a listener,
+ + A user with a different UID from the current user has signed in, or
+ + The current user has signed out.
+
+ @param listener The block to be invoked. The block is always invoked asynchronously on the main
+ thread, even for it's initial invocation after having been added as a listener.
+
+ @remarks The block is invoked immediately after adding it according to it's standard invocation
+ semantics, asynchronously on the main thread. Users should pay special attention to
+ making sure the block does not inadvertently retain objects which should not be retained by
+ the long-lived block. The block itself will be retained by `FIRAuth` until it is
+ unregistered or until the `FIRAuth` instance is otherwise deallocated.
+
+ @return A handle useful for manually unregistering the block as a listener.
+ */
+- (FIRAuthStateDidChangeListenerHandle)addAuthStateDidChangeListener:
+ (FIRAuthStateDidChangeListenerBlock)listener;
+
+/** @fn removeAuthStateDidChangeListener:
+ @brief Unregisters a block as an "auth state did change" listener.
+
+ @param listenerHandle The handle for the listener.
+ */
+- (void)removeAuthStateDidChangeListener:(FIRAuthStateDidChangeListenerHandle)listenerHandle;
+
+/** @fn addIDTokenDidChangeListener:
+ @brief Registers a block as an "ID token did change" listener. To be invoked when:
+
+ + The block is registered as a listener,
+ + A user with a different UID from the current user has signed in,
+ + The ID token of the current user has been refreshed, or
+ + The current user has signed out.
+
+ @param listener The block to be invoked. The block is always invoked asynchronously on the main
+ thread, even for it's initial invocation after having been added as a listener.
+
+ @remarks The block is invoked immediately after adding it according to it's standard invocation
+ semantics, asynchronously on the main thread. Users should pay special attention to
+ making sure the block does not inadvertently retain objects which should not be retained by
+ the long-lived block. The block itself will be retained by `FIRAuth` until it is
+ unregistered or until the `FIRAuth` instance is otherwise deallocated.
+
+ @return A handle useful for manually unregistering the block as a listener.
+ */
+- (FIRIDTokenDidChangeListenerHandle)addIDTokenDidChangeListener:
+ (FIRIDTokenDidChangeListenerBlock)listener;
+
+/** @fn removeIDTokenDidChangeListener:
+ @brief Unregisters a block as an "ID token did change" listener.
+
+ @param listenerHandle The handle for the listener.
+ */
+- (void)removeIDTokenDidChangeListener:(FIRIDTokenDidChangeListenerHandle)listenerHandle;
+
+/** @fn useAppLanguage
+ @brief Sets `languageCode` to the app's current language.
+ */
+- (void)useAppLanguage;
+
+#if TARGET_OS_IOS
+
+/** @fn canHandleURL:
+ @brief Whether the specific URL is handled by `FIRAuth` .
+ @param URL The URL received by the application delegate from any of the openURL method.
+ @return Whether or the URL is handled. YES means the URL is for Firebase Auth
+ so the caller should ignore the URL from further processing, and NO means the
+ the URL is for the app (or another libaray) so the caller should continue handling
+ this URL as usual.
+ @remarks If swizzling is disabled, URLs received by the application delegate must be forwarded
+ to this method for phone number auth to work.
+ */
+- (BOOL)canHandleURL:(nonnull NSURL *)URL;
+
+/** @fn setAPNSToken:type:
+ @brief Sets the APNs token along with its type.
+ @remarks If swizzling is disabled, the APNs Token must be set for phone number auth to work,
+ by either setting calling this method or by setting the `APNSToken` property.
+ */
+- (void)setAPNSToken:(NSData *)token type:(FIRAuthAPNSTokenType)type;
+
+/** @fn canHandleNotification:
+ @brief Whether the specific remote notification is handled by `FIRAuth` .
+ @param userInfo A dictionary that contains information related to the
+ notification in question.
+ @return Whether or the notification is handled. YES means the notification is for Firebase Auth
+ so the caller should ignore the notification from further processing, and NO means the
+ the notification is for the app (or another libaray) so the caller should continue handling
+ this notification as usual.
+ @remarks If swizzling is disabled, related remote notifications must be forwarded to this method
+ for phone number auth to work.
+ */
+- (BOOL)canHandleNotification:(NSDictionary *)userInfo;
+
+#endif // TARGET_OS_IOS
+
+#pragma mark - User sharing
+
+/** @fn useUserAccessGroup:error:
+ @brief Switch userAccessGroup and current user to the given accessGroup and the user stored in
+ it.
+ */
+- (BOOL)useUserAccessGroup:(NSString *_Nullable)accessGroup
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** @fn getStoredUserForAccessGroup:error:
+ @brief Get the stored user in the given accessGroup.
+ */
+- (nullable FIRUser *)getStoredUserForAccessGroup:(NSString *_Nullable)accessGroup
+ error:(NSError *_Nullable *_Nullable)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthAPNSTokenType.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthAPNSTokenType.h
new file mode 100644
index 00000000..3ae4b245
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthAPNSTokenType.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * @brief The APNs token type for the app.
+ */
+typedef NS_ENUM(NSInteger, FIRAuthAPNSTokenType) {
+
+ /** Unknown token type.
+ The actual token type will be detected from the provisioning profile in the app's bundle.
+ */
+ FIRAuthAPNSTokenTypeUnknown,
+
+ /** Sandbox token type.
+ */
+ FIRAuthAPNSTokenTypeSandbox,
+
+ /** Production token type.
+ */
+ FIRAuthAPNSTokenTypeProd,
+} NS_SWIFT_NAME(AuthAPNSTokenType);
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthCredential.h
new file mode 100644
index 00000000..106d844f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthCredential.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthCredential
+ @brief Represents a credential.
+ */
+NS_SWIFT_NAME(AuthCredential)
+@interface FIRAuthCredential : NSObject
+
+/** @property provider
+ @brief Gets the name of the identity provider for the credential.
+ */
+@property(nonatomic, copy, readonly) NSString *provider;
+
+/** @fn init
+ @brief This is an abstract base class. Concrete instances should be created via factory
+ methods available in the various authentication provider libraries (like the Facebook
+ provider or the Google provider libraries.)
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthDataResult.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthDataResult.h
new file mode 100644
index 00000000..93c8b3bc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthDataResult.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAdditionalUserInfo;
+@class FIRAuthCredential;
+@class FIRUser;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthDataResult
+ @brief Helper object that contains the result of a successful sign-in, link and reauthenticate
+ action. It contains references to a FIRUser instance and a FIRAdditionalUserInfo instance.
+ */
+NS_SWIFT_NAME(AuthDataResult)
+@interface FIRAuthDataResult : NSObject
+
+/** @fn init
+ @brief This class should not be initialized manually. `FIRAuthDataResult` instance is
+ returned as part of `FIRAuthDataResultCallback`.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @property user
+ @brief The signed in user.
+ */
+@property(nonatomic, readonly) FIRUser *user;
+
+/** @property additionalUserInfo
+ @brief If available contains the additional IdP specific information about signed in user.
+ */
+@property(nonatomic, readonly, nullable) FIRAdditionalUserInfo *additionalUserInfo;
+
+/** @property credential
+ @brief This property will be non-nil after a successful headful-lite sign-in via
+ signInWithProvider:UIDelegate:. May be used to obtain the accessToken and/or IDToken
+ pertaining to a recently signed-in user.
+ */
+@property(nonatomic, readonly, nullable) FIRAuthCredential *credential;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthErrors.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthErrors.h
new file mode 100644
index 00000000..dede5a07
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthErrors.h
@@ -0,0 +1,421 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthErrors
+ @remarks Error Codes common to all API Methods:
+
+ + `FIRAuthErrorCodeNetworkError`
+ + `FIRAuthErrorCodeUserNotFound`
+ + `FIRAuthErrorCodeUserTokenExpired`
+ + `FIRAuthErrorCodeTooManyRequests`
+ + `FIRAuthErrorCodeInvalidAPIKey`
+ + `FIRAuthErrorCodeAppNotAuthorized`
+ + `FIRAuthErrorCodeKeychainError`
+ + `FIRAuthErrorCodeInternalError`
+
+ @remarks Common error codes for `FIRUser` operations:
+
+ + `FIRAuthErrorCodeInvalidUserToken`
+ + `FIRAuthErrorCodeUserDisabled`
+
+ */
+NS_SWIFT_NAME(AuthErrors)
+@interface FIRAuthErrors
+
+/**
+ @brief The Firebase Auth error domain.
+ */
+extern NSString *const FIRAuthErrorDomain NS_SWIFT_NAME(AuthErrorDomain);
+
+/**
+ @brief The name of the key for the error short string of an error code.
+ */
+extern NSString *const FIRAuthErrorUserInfoNameKey NS_SWIFT_NAME(AuthErrorUserInfoNameKey);
+
+/**
+ @brief Errors with one of the following three codes:
+ - `FIRAuthErrorCodeAccountExistsWithDifferentCredential`
+ - `FIRAuthErrorCodeCredentialAlreadyInUse`
+ - `FIRAuthErrorCodeEmailAlreadyInUse`
+ may contain an `NSError.userInfo` dictinary object which contains this key. The value
+ associated with this key is an NSString of the email address of the account that already
+ exists.
+ */
+extern NSString *const FIRAuthErrorUserInfoEmailKey NS_SWIFT_NAME(AuthErrorUserInfoEmailKey);
+
+/**
+ @brief The key used to read the updated Auth credential from the userInfo dictionary of the
+ NSError object returned. This is the updated auth credential the developer should use for
+ recovery if applicable.
+ */
+extern NSString *const FIRAuthErrorUserInfoUpdatedCredentialKey
+ NS_SWIFT_NAME(AuthErrorUserInfoUpdatedCredentialKey);
+
+/**
+ @brief The key used to read the MFA resolver from the userInfo dictionary of the NSError object
+ returned when 2FA is required for sign-incompletion.
+ */
+extern NSString *const FIRAuthErrorUserInfoMultiFactorResolverKey
+ NS_SWIFT_NAME(AuthErrorUserInfoMultiFactorResolverKey);
+
+/**
+ @brief Error codes used by Firebase Auth.
+ */
+typedef NS_ENUM(NSInteger, FIRAuthErrorCode) {
+ /** Indicates a validation error with the custom token.
+ */
+ FIRAuthErrorCodeInvalidCustomToken = 17000,
+
+ /** Indicates the service account and the API key belong to different projects.
+ */
+ FIRAuthErrorCodeCustomTokenMismatch = 17002,
+
+ /** Indicates the IDP token or requestUri is invalid.
+ */
+ FIRAuthErrorCodeInvalidCredential = 17004,
+
+ /** Indicates the user's account is disabled on the server.
+ */
+ FIRAuthErrorCodeUserDisabled = 17005,
+
+ /** Indicates the administrator disabled sign in with the specified identity provider.
+ */
+ FIRAuthErrorCodeOperationNotAllowed = 17006,
+
+ /** Indicates the email used to attempt a sign up is already in use.
+ */
+ FIRAuthErrorCodeEmailAlreadyInUse = 17007,
+
+ /** Indicates the email is invalid.
+ */
+ FIRAuthErrorCodeInvalidEmail = 17008,
+
+ /** Indicates the user attempted sign in with a wrong password.
+ */
+ FIRAuthErrorCodeWrongPassword = 17009,
+
+ /** Indicates that too many requests were made to a server method.
+ */
+ FIRAuthErrorCodeTooManyRequests = 17010,
+
+ /** Indicates the user account was not found.
+ */
+ FIRAuthErrorCodeUserNotFound = 17011,
+
+ /** Indicates account linking is required.
+ */
+ FIRAuthErrorCodeAccountExistsWithDifferentCredential = 17012,
+
+ /** Indicates the user has attemped to change email or password more than 5 minutes after
+ signing in.
+ */
+ FIRAuthErrorCodeRequiresRecentLogin = 17014,
+
+ /** Indicates an attempt to link a provider to which the account is already linked.
+ */
+ FIRAuthErrorCodeProviderAlreadyLinked = 17015,
+
+ /** Indicates an attempt to unlink a provider that is not linked.
+ */
+ FIRAuthErrorCodeNoSuchProvider = 17016,
+
+ /** Indicates user's saved auth credential is invalid, the user needs to sign in again.
+ */
+ FIRAuthErrorCodeInvalidUserToken = 17017,
+
+ /** Indicates a network error occurred (such as a timeout, interrupted connection, or
+ unreachable host). These types of errors are often recoverable with a retry. The
+ `NSUnderlyingError` field in the `NSError.userInfo` dictionary will contain the error
+ encountered.
+ */
+ FIRAuthErrorCodeNetworkError = 17020,
+
+ /** Indicates the saved token has expired, for example, the user may have changed account
+ password on another device. The user needs to sign in again on the device that made this
+ request.
+ */
+ FIRAuthErrorCodeUserTokenExpired = 17021,
+
+ /** Indicates an invalid API key was supplied in the request.
+ */
+ FIRAuthErrorCodeInvalidAPIKey = 17023,
+
+ /** Indicates that an attempt was made to reauthenticate with a user which is not the current
+ user.
+ */
+ FIRAuthErrorCodeUserMismatch = 17024,
+
+ /** Indicates an attempt to link with a credential that has already been linked with a
+ different Firebase account
+ */
+ FIRAuthErrorCodeCredentialAlreadyInUse = 17025,
+
+ /** Indicates an attempt to set a password that is considered too weak.
+ */
+ FIRAuthErrorCodeWeakPassword = 17026,
+
+ /** Indicates the App is not authorized to use Firebase Authentication with the
+ provided API Key.
+ */
+ FIRAuthErrorCodeAppNotAuthorized = 17028,
+
+ /** Indicates the OOB code is expired.
+ */
+ FIRAuthErrorCodeExpiredActionCode = 17029,
+
+ /** Indicates the OOB code is invalid.
+ */
+ FIRAuthErrorCodeInvalidActionCode = 17030,
+
+ /** Indicates that there are invalid parameters in the payload during a "send password reset
+ * email" attempt.
+ */
+ FIRAuthErrorCodeInvalidMessagePayload = 17031,
+
+ /** Indicates that the sender email is invalid during a "send password reset email" attempt.
+ */
+ FIRAuthErrorCodeInvalidSender = 17032,
+
+ /** Indicates that the recipient email is invalid.
+ */
+ FIRAuthErrorCodeInvalidRecipientEmail = 17033,
+
+ /** Indicates that an email address was expected but one was not provided.
+ */
+ FIRAuthErrorCodeMissingEmail = 17034,
+
+ // The enum values 17035 is reserved and should NOT be used for new error codes.
+
+ /** Indicates that the iOS bundle ID is missing when a iOS App Store ID is provided.
+ */
+ FIRAuthErrorCodeMissingIosBundleID = 17036,
+
+ /** Indicates that the android package name is missing when the `androidInstallApp` flag is set
+ to true.
+ */
+ FIRAuthErrorCodeMissingAndroidPackageName = 17037,
+
+ /** Indicates that the domain specified in the continue URL is not whitelisted in the Firebase
+ console.
+ */
+ FIRAuthErrorCodeUnauthorizedDomain = 17038,
+
+ /** Indicates that the domain specified in the continue URI is not valid.
+ */
+ FIRAuthErrorCodeInvalidContinueURI = 17039,
+
+ /** Indicates that a continue URI was not provided in a request to the backend which requires
+ one.
+ */
+ FIRAuthErrorCodeMissingContinueURI = 17040,
+
+ /** Indicates that a phone number was not provided in a call to
+ `verifyPhoneNumber:completion:`.
+ */
+ FIRAuthErrorCodeMissingPhoneNumber = 17041,
+
+ /** Indicates that an invalid phone number was provided in a call to
+ `verifyPhoneNumber:completion:`.
+ */
+ FIRAuthErrorCodeInvalidPhoneNumber = 17042,
+
+ /** Indicates that the phone auth credential was created with an empty verification code.
+ */
+ FIRAuthErrorCodeMissingVerificationCode = 17043,
+
+ /** Indicates that an invalid verification code was used in the verifyPhoneNumber request.
+ */
+ FIRAuthErrorCodeInvalidVerificationCode = 17044,
+
+ /** Indicates that the phone auth credential was created with an empty verification ID.
+ */
+ FIRAuthErrorCodeMissingVerificationID = 17045,
+
+ /** Indicates that an invalid verification ID was used in the verifyPhoneNumber request.
+ */
+ FIRAuthErrorCodeInvalidVerificationID = 17046,
+
+ /** Indicates that the APNS device token is missing in the verifyClient request.
+ */
+ FIRAuthErrorCodeMissingAppCredential = 17047,
+
+ /** Indicates that an invalid APNS device token was used in the verifyClient request.
+ */
+ FIRAuthErrorCodeInvalidAppCredential = 17048,
+
+ // The enum values between 17048 and 17051 are reserved and should NOT be used for new error
+ // codes.
+
+ /** Indicates that the SMS code has expired.
+ */
+ FIRAuthErrorCodeSessionExpired = 17051,
+
+ /** Indicates that the quota of SMS messages for a given project has been exceeded.
+ */
+ FIRAuthErrorCodeQuotaExceeded = 17052,
+
+ /** Indicates that the APNs device token could not be obtained. The app may not have set up
+ remote notification correctly, or may fail to forward the APNs device token to FIRAuth
+ if app delegate swizzling is disabled.
+ */
+ FIRAuthErrorCodeMissingAppToken = 17053,
+
+ /** Indicates that the app fails to forward remote notification to FIRAuth.
+ */
+ FIRAuthErrorCodeNotificationNotForwarded = 17054,
+
+ /** Indicates that the app could not be verified by Firebase during phone number authentication.
+ */
+ FIRAuthErrorCodeAppNotVerified = 17055,
+
+ /** Indicates that the reCAPTCHA token is not valid.
+ */
+ FIRAuthErrorCodeCaptchaCheckFailed = 17056,
+
+ /** Indicates that an attempt was made to present a new web context while one was already being
+ presented.
+ */
+ FIRAuthErrorCodeWebContextAlreadyPresented = 17057,
+
+ /** Indicates that the URL presentation was cancelled prematurely by the user.
+ */
+ FIRAuthErrorCodeWebContextCancelled = 17058,
+
+ /** Indicates a general failure during the app verification flow.
+ */
+ FIRAuthErrorCodeAppVerificationUserInteractionFailure = 17059,
+
+ /** Indicates that the clientID used to invoke a web flow is invalid.
+ */
+ FIRAuthErrorCodeInvalidClientID = 17060,
+
+ /** Indicates that a network request within a SFSafariViewController or WKWebView failed.
+ */
+ FIRAuthErrorCodeWebNetworkRequestFailed = 17061,
+
+ /** Indicates that an internal error occurred within a SFSafariViewController or WKWebView.
+ */
+ FIRAuthErrorCodeWebInternalError = 17062,
+
+ /** Indicates a general failure during a web sign-in flow.
+ */
+ FIRAuthErrorCodeWebSignInUserInteractionFailure = 17063,
+
+ /** Indicates that the local player was not authenticated prior to attempting Game Center
+ signin.
+ */
+ FIRAuthErrorCodeLocalPlayerNotAuthenticated = 17066,
+
+ /** Indicates that a non-null user was expected as an argmument to the operation but a null
+ user was provided.
+ */
+ FIRAuthErrorCodeNullUser = 17067,
+
+ /** Indicates that a Firebase Dynamic Link is not activated.
+ */
+ FIRAuthErrorCodeDynamicLinkNotActivated = 17068,
+
+ /**
+ * Represents the error code for when the given provider id for a web operation is invalid.
+ */
+ FIRAuthErrorCodeInvalidProviderID = 17071,
+
+ /** Indicates that the Firebase Dynamic Link domain used is either not configured or is
+ unauthorized for the current project.
+ */
+ FIRAuthErrorCodeInvalidDynamicLinkDomain = 17074,
+
+ /** Indicates that the credential is rejected because it's misformed or mismatching.
+ */
+ FIRAuthErrorCodeRejectedCredential = 17075,
+
+ /** Indicates that the GameKit framework is not linked prior to attempting Game Center signin.
+ */
+ FIRAuthErrorCodeGameKitNotLinked = 17076,
+
+ /** Indicates that the second factor is required for signin.
+ */
+ FIRAuthErrorCodeSecondFactorRequired = 17078,
+
+ /** Indicates that the multi factor session is missing.
+ */
+ FIRAuthErrorCodeMissingMultiFactorSession = 17081,
+
+ /** Indicates that the multi factor info is missing.
+ */
+ FIRAuthErrorCodeMissingMultiFactorInfo = 17082,
+
+ /** Indicates that the multi factor session is invalid.
+ */
+ FIRAuthErrorCodeInvalidMultiFactorSession = 17083,
+
+ /** Indicates that the multi factor info is not found.
+ */
+ FIRAuthErrorCodeMultiFactorInfoNotFound = 17084,
+
+ /** Indicates that the operation is admin restricted.
+ */
+ FIRAuthErrorCodeAdminRestrictedOperation = 17085,
+
+ /** Indicates that the email is required for verification.
+ */
+ FIRAuthErrorCodeUnverifiedEmail = 17086,
+
+ /** Indicates that the second factor is already enrolled.
+ */
+ FIRAuthErrorCodeSecondFactorAlreadyEnrolled = 17087,
+
+ /** Indicates that the maximum second factor count is exceeded.
+ */
+ FIRAuthErrorCodeMaximumSecondFactorCountExceeded = 17088,
+
+ /** Indicates that the first factor is not supported.
+ */
+ FIRAuthErrorCodeUnsupportedFirstFactor = 17089,
+
+ /** Indicates that the a verifed email is required to changed to.
+ */
+ FIRAuthErrorCodeEmailChangeNeedsVerification = 17090,
+
+ /** Indicates that the nonce is missing or invalid.
+ */
+ FIRAuthErrorCodeMissingOrInvalidNonce = 17094,
+
+ /** Indicates an error for when the client identifier is missing.
+ */
+ FIRAuthErrorCodeMissingClientIdentifier = 17993,
+
+ /** Indicates an error occurred while attempting to access the keychain.
+ */
+ FIRAuthErrorCodeKeychainError = 17995,
+
+ /** Indicates an internal error occurred.
+ */
+ FIRAuthErrorCodeInternalError = 17999,
+
+ /** Raised when a JWT fails to parse correctly. May be accompanied by an underlying error
+ describing which step of the JWT parsing process failed.
+ */
+ FIRAuthErrorCodeMalformedJWT = 18000,
+} NS_SWIFT_NAME(AuthErrorCode);
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthSettings.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthSettings.h
new file mode 100644
index 00000000..60ba7109
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthSettings.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthSettings
+ @brief Determines settings related to an auth object.
+ */
+NS_SWIFT_NAME(AuthSettings)
+@interface FIRAuthSettings : NSObject
+
+/** @property appVerificationDisabledForTesting
+ @brief Flag to determine whether app verification should be disabled for testing or not.
+ */
+@property(nonatomic, assign, getter=isAppVerificationDisabledForTesting)
+ BOOL appVerificationDisabledForTesting;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthTokenResult.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthTokenResult.h
new file mode 100644
index 00000000..3c98c5f8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthTokenResult.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthTokenResult
+ @brief A data class containing the ID token JWT string and other properties associated with the
+ token including the decoded payload claims.
+ */
+NS_SWIFT_NAME(AuthTokenResult)
+@interface FIRAuthTokenResult : NSObject
+
+/** @property token
+ @brief Stores the JWT string of the ID token.
+ */
+@property(nonatomic, readonly) NSString *token;
+
+/** @property expirationDate
+ @brief Stores the ID token's expiration date.
+ */
+@property(nonatomic, readonly) NSDate *expirationDate;
+
+/** @property authDate
+ @brief Stores the ID token's authentication date.
+ @remarks This is the date the user was signed in and NOT the date the token was refreshed.
+ */
+@property(nonatomic, readonly) NSDate *authDate;
+
+/** @property issuedAtDate
+ @brief Stores the date that the ID token was issued.
+ @remarks This is the date last refreshed and NOT the last authentication date.
+ */
+@property(nonatomic, readonly) NSDate *issuedAtDate;
+
+/** @property signInProvider
+ @brief Stores sign-in provider through which the token was obtained.
+ @remarks This does not necessarily map to provider IDs.
+ */
+@property(nonatomic, readonly) NSString *signInProvider;
+
+/** @property signInSecondFactor
+ @brief Stores sign-in second factor through which the token was obtained.
+ */
+@property(nonatomic, readonly) NSString *signInSecondFactor;
+
+/** @property claims
+ @brief Stores the entire payload of claims found on the ID token. This includes the standard
+ reserved claims as well as custom claims set by the developer via the Admin SDK.
+ */
+@property(nonatomic, readonly) NSDictionary<NSString *, id> *claims;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthUIDelegate.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthUIDelegate.h
new file mode 100644
index 00000000..9092e50e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRAuthUIDelegate.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <Foundation/Foundation.h>
+
+@class UIViewController;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @protocol FIRAuthUIDelegate
+ @brief A protocol to handle user interface interactions for Firebase Auth.
+ */
+NS_SWIFT_NAME(AuthUIDelegate)
+@protocol FIRAuthUIDelegate <NSObject>
+
+/** @fn presentViewController:animated:completion:
+ @brief If implemented, this method will be invoked when Firebase Auth needs to display a view
+ controller.
+ @param viewControllerToPresent The view controller to be presented.
+ @param flag Decides whether the view controller presentation should be animated or not.
+ @param completion The block to execute after the presentation finishes. This block has no return
+ value and takes no parameters.
+*/
+- (void)presentViewController:(UIViewController *)viewControllerToPresent
+ animated:(BOOL)flag
+ completion:(void (^_Nullable)(void))completion;
+
+/** @fn dismissViewControllerAnimated:completion:
+ @brief If implemented, this method will be invoked when Firebase Auth needs to display a view
+ controller.
+ @param flag Decides whether removing the view controller should be animated or not.
+ @param completion The block to execute after the presentation finishes. This block has no return
+ value and takes no parameters.
+*/
+- (void)dismissViewControllerAnimated:(BOOL)flag
+ completion:(void (^_Nullable)(void))completion
+ NS_SWIFT_NAME(dismiss(animated:completion:));
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIREmailAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIREmailAuthProvider.h
new file mode 100644
index 00000000..aac0bf0a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIREmailAuthProvider.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief A string constant identifying the email & password identity provider.
+ */
+extern NSString *const FIREmailAuthProviderID NS_SWIFT_NAME(EmailAuthProviderID);
+
+/**
+ @brief A string constant identifying the email-link sign-in method.
+ */
+extern NSString *const FIREmailLinkAuthSignInMethod NS_SWIFT_NAME(EmailLinkAuthSignInMethod);
+
+/**
+ @brief A string constant identifying the email & password sign-in method.
+ */
+extern NSString *const FIREmailPasswordAuthSignInMethod
+ NS_SWIFT_NAME(EmailPasswordAuthSignInMethod);
+
+/** @class FIREmailAuthProvider
+ @brief A concrete implementation of `FIRAuthProvider` for Email & Password Sign In.
+ */
+NS_SWIFT_NAME(EmailAuthProvider)
+@interface FIREmailAuthProvider : NSObject
+
+/** @fn credentialWithEmail:password:
+ @brief Creates an `FIRAuthCredential` for an email & password sign in.
+
+ @param email The user's email address.
+ @param password The user's password.
+ @return A FIRAuthCredential containing the email & password credential.
+ */
++ (FIRAuthCredential *)credentialWithEmail:(NSString *)email password:(NSString *)password;
+
+/** @fn credentialWithEmail:Link:
+ @brief Creates an `FIRAuthCredential` for an email & link sign in.
+
+ @param email The user's email address.
+ @param link The email sign-in link.
+ @return A FIRAuthCredential containing the email & link credential.
+ */
++ (FIRAuthCredential *)credentialWithEmail:(NSString *)email link:(NSString *)link;
+
+/** @fn init
+ @brief This class is not meant to be initialized.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFacebookAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFacebookAuthProvider.h
new file mode 100644
index 00000000..75efe13f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFacebookAuthProvider.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief A string constant identifying the Facebook identity provider.
+ */
+extern NSString *const FIRFacebookAuthProviderID NS_SWIFT_NAME(FacebookAuthProviderID);
+
+/**
+ @brief A string constant identifying the Facebook sign-in method.
+ */
+extern NSString *const _Nonnull FIRFacebookAuthSignInMethod NS_SWIFT_NAME(FacebookAuthSignInMethod);
+
+/** @class FIRFacebookAuthProvider
+ @brief Utility class for constructing Facebook credentials.
+ */
+NS_SWIFT_NAME(FacebookAuthProvider)
+@interface FIRFacebookAuthProvider : NSObject
+
+/** @fn credentialWithAccessToken:
+ @brief Creates an `FIRAuthCredential` for a Facebook sign in.
+
+ @param accessToken The Access Token from Facebook.
+ @return A FIRAuthCredential containing the Facebook credentials.
+ */
++ (FIRAuthCredential *)credentialWithAccessToken:(NSString *)accessToken;
+
+/** @fn init
+ @brief This class should not be initialized.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFederatedAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFederatedAuthProvider.h
new file mode 100644
index 00000000..3effcacb
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRFederatedAuthProvider.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#if TARGET_OS_IOS
+#import "FIRAuthUIDelegate.h"
+#endif // TARGET_OS_IOS
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ Utility type for constructing federated auth provider credentials.
+ */
+NS_SWIFT_NAME(FederatedAuthProvider)
+@protocol FIRFederatedAuthProvider <NSObject>
+
+/** @typedef FIRAuthCredentialCallback
+ @brief The type of block invoked when obtaining an auth credential.
+ @param credential The credential obtained.
+ @param error The error that occurred if any.
+ */
+typedef void (^FIRAuthCredentialCallback)(FIRAuthCredential *_Nullable credential,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(AuthCredentialCallback);
+
+#if TARGET_OS_IOS
+/** @fn getCredentialWithUIDelegate:completion:
+ @brief Used to obtain an auth credential via a mobile web flow.
+ @param UIDelegate An optional UI delegate used to presenet the mobile web flow.
+ @param completion Optionally; a block which is invoked asynchronously on the main thread when
+ the mobile web flow is completed.
+ */
+- (void)getCredentialWithUIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthCredentialCallback)completion;
+#endif // TARGET_OS_IOS
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGameCenterAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGameCenterAuthProvider.h
new file mode 100644
index 00000000..f84492d6
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGameCenterAuthProvider.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief A string constant identifying the Game Center identity provider.
+ */
+extern NSString *const FIRGameCenterAuthProviderID NS_SWIFT_NAME(GameCenterAuthProviderID);
+
+/**
+ @brief A string constant identifying the Game Center sign-in method.
+ */
+extern NSString *const _Nonnull FIRGameCenterAuthSignInMethod NS_SWIFT_NAME(
+ GameCenterAuthSignInMethod);
+
+/** @typedef FIRGameCenterCredentialCallback
+ @brief The type of block invoked when the Game Center credential code has finished.
+ @param credential On success, the credential will be provided, nil otherwise.
+ @param error On error, the error that occurred, nil otherwise.
+ */
+typedef void (^FIRGameCenterCredentialCallback)(FIRAuthCredential *_Nullable credential,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(GameCenterCredentialCallback);
+
+/** @class FIRGameCenterAuthProvider
+ @brief A concrete implementation of @c FIRAuthProvider for Game Center Sign In.
+ */
+NS_SWIFT_NAME(GameCenterAuthProvider)
+@interface FIRGameCenterAuthProvider : NSObject
+
+/** @fn getCredentialWithCompletion:
+ @brief Creates a @c FIRAuthCredential for a Game Center sign in.
+ */
++ (void)getCredentialWithCompletion:(FIRGameCenterCredentialCallback)completion
+ NS_SWIFT_NAME(getCredential(completion:));
+
+/** @fn init
+ @brief This class is not meant to be initialized.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGitHubAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGitHubAuthProvider.h
new file mode 100644
index 00000000..0577c7bc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGitHubAuthProvider.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief A string constant identifying the GitHub identity provider.
+ */
+extern NSString *const FIRGitHubAuthProviderID NS_SWIFT_NAME(GitHubAuthProviderID);
+
+/**
+ @brief A string constant identifying the GitHub sign-in method.
+ */
+extern NSString *const _Nonnull FIRGitHubAuthSignInMethod NS_SWIFT_NAME(GitHubAuthSignInMethod);
+
+/** @class FIRGitHubAuthProvider
+ @brief Utility class for constructing GitHub credentials.
+ */
+NS_SWIFT_NAME(GitHubAuthProvider)
+@interface FIRGitHubAuthProvider : NSObject
+
+/** @fn credentialWithToken:
+ @brief Creates an `FIRAuthCredential` for a GitHub sign in.
+
+ @param token The GitHub OAuth access token.
+ @return A FIRAuthCredential containing the GitHub credential.
+ */
++ (FIRAuthCredential *)credentialWithToken:(NSString *)token;
+
+/** @fn init
+ @brief This class is not meant to be initialized.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGoogleAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGoogleAuthProvider.h
new file mode 100644
index 00000000..7d6fa226
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRGoogleAuthProvider.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief A string constant identifying the Google identity provider.
+ */
+extern NSString *const FIRGoogleAuthProviderID NS_SWIFT_NAME(GoogleAuthProviderID);
+
+/**
+ @brief A string constant identifying the Google sign-in method.
+ */
+extern NSString *const _Nonnull FIRGoogleAuthSignInMethod NS_SWIFT_NAME(GoogleAuthSignInMethod);
+
+/** @class FIRGoogleAuthProvider
+ @brief Utility class for constructing Google Sign In credentials.
+ */
+NS_SWIFT_NAME(GoogleAuthProvider)
+@interface FIRGoogleAuthProvider : NSObject
+
+/** @fn credentialWithIDToken:accessToken:
+ @brief Creates an `FIRAuthCredential` for a Google sign in.
+
+ @param IDToken The ID Token from Google.
+ @param accessToken The Access Token from Google.
+ @return A FIRAuthCredential containing the Google credentials.
+ */
++ (FIRAuthCredential *)credentialWithIDToken:(NSString *)IDToken
+ accessToken:(NSString *)accessToken;
+
+/** @fn init
+ @brief This class should not be initialized.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactor.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactor.h
new file mode 100644
index 00000000..724066e0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactor.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+#import "FIRAuth.h"
+#import "FIRMultiFactorAssertion.h"
+#import "FIRMultiFactorInfo.h"
+#import "FIRMultiFactorSession.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRMultiFactorSessionCallback
+ @brief The callback that triggered when a developer calls `getSessionWithCompletion`.
+ @param session The multi factor session returned, if any.
+ @param error The error which occurred, if any.
+*/
+typedef void (^FIRMultiFactorSessionCallback)(FIRMultiFactorSession *_Nullable session,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(MultiFactorSessionCallback);
+
+/**
+ @brief The string identifier for second factors. e.g. "phone".
+*/
+extern NSString *const _Nonnull FIRPhoneMultiFactorID NS_SWIFT_NAME(PhoneMultiFactorID);
+
+/** @class FIRMultiFactor
+ @brief The interface defining the multi factor related properties and operations pertaining to a
+ user.
+*/
+NS_SWIFT_NAME(MultiFactor)
+@interface FIRMultiFactor : NSObject
+
+@property(nonatomic, readonly) NSArray<FIRMultiFactorInfo *> *enrolledFactors;
+
+/** @fn getSessionWithCompletion:
+ @brief Get a session for a second factor enrollment operation.
+ @param completion A block with the session identifier for a second factor enrollment operation.
+ This is used to identify the current user trying to enroll a second factor.
+*/
+- (void)getSessionWithCompletion:(nullable FIRMultiFactorSessionCallback)completion;
+
+/** @fn enrollWithAssertion:displayName:completion:
+ @brief Enrolls a second factor as identified by the `FIRMultiFactorAssertion` parameter for the
+ current user.
+ @param displayName An optional display name associated with the multi factor to enroll.
+ @param completion The block invoked when the request is complete, or fails.
+*/
+- (void)enrollWithAssertion:(FIRMultiFactorAssertion *)assertion
+ displayName:(nullable NSString *)displayName
+ completion:(nullable FIRAuthVoidErrorCallback)completion;
+
+/** @fn unenrollWithInfo:completion:
+ @brief Unenroll the given multi factor.
+ @param completion The block invoked when the request to send the verification email is complete,
+ or fails.
+*/
+- (void)unenrollWithInfo:(FIRMultiFactorInfo *)factorInfo
+ completion:(nullable FIRAuthVoidErrorCallback)completion;
+
+/** @fn unenrollWithFactorUID:completion:
+ @brief Unenroll the given multi factor.
+ @param completion The block invoked when the request to send the verification email is complete,
+ or fails.
+*/
+- (void)unenrollWithFactorUID:(NSString *)factorUID
+ completion:(nullable FIRAuthVoidErrorCallback)completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorAssertion.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorAssertion.h
new file mode 100644
index 00000000..06d977e0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorAssertion.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRMultiFactorAssertion
+ @brief The base class for asserting ownership of a second factor. This is equivalent to the
+ AuthCredential class.
+*/
+NS_SWIFT_NAME(MultiFactorAssertion)
+@interface FIRMultiFactorAssertion : NSObject
+
+/**
+ @brief The second factor identifier for this opaque object asserting a second factor.
+*/
+@property(nonatomic, readonly, nonnull) NSString *factorID;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h
new file mode 100644
index 00000000..6a7a9ef7
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRMultiFactorInfo
+ @brief Safe public structure used to represent a second factor entity from a client perspective.
+*/
+NS_SWIFT_NAME(MultiFactorInfo)
+@interface FIRMultiFactorInfo : NSObject
+
+/**
+ @brief The multi-factor enrollment ID.
+*/
+@property(nonatomic, readonly) NSString *UID;
+
+/**
+ @brief The user friendly name of the current second factor.
+*/
+@property(nonatomic, readonly, nullable) NSString *displayName;
+
+/**
+ @brief The second factor enrollment date.
+*/
+@property(nonatomic, readonly) NSDate *enrollmentDate;
+
+/**
+ @brief The identifier of the second factor.
+*/
+@property(nonatomic, readonly) NSString *factorID;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorResolver.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorResolver.h
new file mode 100644
index 00000000..50f8d128
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorResolver.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FIRMultiFactor.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRMultiFactorResolver
+ @brief The data structure used to help developers resolve 2nd factor requirements on users that
+ have opted in to 2 factor authentication.
+*/
+NS_SWIFT_NAME(MultiFactorResolver)
+@interface FIRMultiFactorResolver : NSObject
+
+/**
+ @brief The opaque session identifier for the current sign-in flow.
+*/
+@property(nonatomic, readonly) FIRMultiFactorSession *session;
+
+/**
+ @brief The list of hints for the second factors needed to complete the sign-in for the current
+ session.
+*/
+@property(nonatomic, readonly) NSArray<FIRMultiFactorInfo *> *hints NS_SWIFT_NAME(hints);
+
+/**
+ @brief The Auth reference for the current FIRMultiResolver.
+*/
+@property(nonatomic, readonly) FIRAuth *auth;
+
+/** @fn resolveSignInWithAssertion:completion:
+ @brief A helper function to help users complete sign in with a second factor using an
+ FIRMultiFactorAssertion confirming the user successfully completed the second factor
+ challenge.
+ @param completion The block invoked when the request is complete, or fails.
+*/
+- (void)resolveSignInWithAssertion:(FIRMultiFactorAssertion *)assertion
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorSession.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorSession.h
new file mode 100644
index 00000000..fca07177
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRMultiFactorSession.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRMultiFactorSession
+ @brief Opaque object that identifies the current session to enroll a second factor or to
+ complete sign in when previously enrolled.
+ */
+NS_SWIFT_NAME(MultiFactorSession)
+@interface FIRMultiFactorSession : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthCredential.h
new file mode 100644
index 00000000..94abe4f2
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthCredential.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FIRAuthCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIROAuthCredential
+ @brief Internal implementation of FIRAuthCredential for generic credentials.
+ */
+NS_SWIFT_NAME(OAuthCredential)
+@interface FIROAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @property IDToken
+ @brief The ID Token associated with this credential.
+ */
+@property(nonatomic, readonly, nullable) NSString *IDToken;
+
+/** @property accessToken
+ @brief The access token associated with this credential.
+ */
+@property(nonatomic, readonly, nullable) NSString *accessToken;
+
+/** @property secret
+ @brief The secret associated with this credential. This will be nil for OAuth 2.0 providers.
+ @detail OAuthCredential already exposes a providerId getter. This will help the developer
+ determine whether an access token/secret pair is needed.
+ */
+@property(nonatomic, readonly, nullable) NSString *secret;
+
+/** @fn init
+ @brief This class is not supposed to be instantiated directly.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthProvider.h
new file mode 100644
index 00000000..9b6f4f3d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIROAuthProvider.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FIRFederatedAuthProvider.h"
+
+@class FIRAuth;
+@class FIROAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIROAuthProvider
+ @brief A concrete implementation of `FIRAuthProvider` for generic OAuth Providers.
+ */
+NS_SWIFT_NAME(OAuthProvider)
+@interface FIROAuthProvider : NSObject <FIRFederatedAuthProvider>
+
+/** @property scopes
+ @brief Array used to configure the OAuth scopes.
+ */
+@property(nonatomic, copy, nullable) NSArray<NSString *> *scopes;
+
+/** @property customParameters
+ @brief Dictionary used to configure the OAuth custom parameters.
+ */
+@property(nonatomic, copy, nullable) NSDictionary<NSString *, NSString *> *customParameters;
+
+/** @property providerID
+ @brief The provider ID indicating the specific OAuth provider this OAuthProvider instance
+ represents.
+ */
+@property(nonatomic, copy, readonly) NSString *providerID;
+
+/** @fn providerWithProviderID:
+ @param providerID The provider ID of the IDP for which this auth provider instance will be
+ configured.
+ @return An instance of FIROAuthProvider corresponding to the specified provider ID.
+ */
++ (FIROAuthProvider *)providerWithProviderID:(NSString *)providerID;
+
+/** @fn providerWithProviderID:auth:
+ @param providerID The provider ID of the IDP for which this auth provider instance will be
+ configured.
+ @param auth The auth instance to be associated with the FIROAuthProvider instance.
+ @return An instance of FIROAuthProvider corresponding to the specified provider ID.
+ */
++ (FIROAuthProvider *)providerWithProviderID:(NSString *)providerID auth:(FIRAuth *)auth;
+
+/** @fn credentialWithProviderID:IDToken:accessToken:
+ @brief Creates an `FIRAuthCredential` for that OAuth 2 provider identified by providerID, ID
+ token and access token.
+
+ @param providerID The provider ID associated with the Auth credential being created.
+ @param IDToken The IDToken associated with the Auth credential being created.
+ @param accessToken The accessstoken associated with the Auth credential be created, if
+ available.
+ @return A FIRAuthCredential for the specified provider ID, ID token and access token.
+ */
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ IDToken:(NSString *)IDToken
+ accessToken:(nullable NSString *)accessToken;
+
+/** @fn credentialWithProviderID:accessToken:
+ @brief Creates an `FIRAuthCredential` for that OAuth 2 provider identified by providerID using
+ an ID token.
+
+ @param providerID The provider ID associated with the Auth credential being created.
+ @param accessToken The accessstoken associated with the Auth credential be created
+ @return A FIRAuthCredential.
+ */
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ accessToken:(NSString *)accessToken;
+
+/** @fn credentialWithProviderID:IDToken:rawNonce:accessToken:
+ @brief Creates an `FIRAuthCredential` for that OAuth 2 provider identified by providerID, ID
+ token, raw nonce and access token.
+
+ @param providerID The provider ID associated with the Auth credential being created.
+ @param IDToken The IDToken associated with the Auth credential being created.
+ @param rawNonce The raw nonce associated with the Auth credential being created.
+ @param accessToken The accessstoken associated with the Auth credential be created, if
+ available.
+ @return A FIRAuthCredential for the specified provider ID, ID token and access token.
+ */
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ IDToken:(NSString *)IDToken
+ rawNonce:(nullable NSString *)rawNonce
+ accessToken:(nullable NSString *)accessToken;
+
+/** @fn credentialWithProviderID:IDToken:rawNonce:
+ @brief Creates an `FIRAuthCredential` for that OAuth 2 provider identified by providerID using
+ an ID token and raw nonce.
+
+ @param providerID The provider ID associated with the Auth credential being created.
+ @param IDToken The IDToken associated with the Auth credential being created.
+ @param rawNonce The raw nonce associated with the Auth credential being created.
+ @return A FIRAuthCredential.
+ */
++ (FIROAuthCredential *)credentialWithProviderID:(NSString *)providerID
+ IDToken:(NSString *)IDToken
+ rawNonce:(nullable NSString *)rawNonce;
+
+/** @fn init
+ @brief This class is not meant to be initialized.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthCredential.h
new file mode 100644
index 00000000..1547dd24
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthCredential.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+#import "FIRAuthCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRPhoneAuthCredential
+ @brief Implementation of FIRAuthCredential for Phone Auth credentials.
+ */
+NS_SWIFT_NAME(PhoneAuthCredential)
+@interface FIRPhoneAuthCredential : FIRAuthCredential <NSSecureCoding>
+
+/** @fn init
+ @brief This class is not supposed to be instantiated directly.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthProvider.h
new file mode 100644
index 00000000..0a065cbc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneAuthProvider.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuth;
+@class FIRMultiFactorSession;
+@class FIRPhoneAuthCredential;
+@class FIRPhoneMultiFactorInfo;
+@protocol FIRAuthUIDelegate;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var FIRPhoneAuthProviderID
+ @brief A string constant identifying the phone identity provider.
+ */
+extern NSString *const FIRPhoneAuthProviderID NS_SWIFT_NAME(PhoneAuthProviderID);
+
+/** @var FIRPhoneAuthProviderID
+ @brief A string constant identifying the phone sign-in method.
+ */
+extern NSString *const _Nonnull FIRPhoneAuthSignInMethod NS_SWIFT_NAME(PhoneAuthSignInMethod);
+
+/** @typedef FIRVerificationResultCallback
+ @brief The type of block invoked when a request to send a verification code has finished.
+
+ @param verificationID On success, the verification ID provided, nil otherwise.
+ @param error On error, the error that occurred, nil otherwise.
+ */
+typedef void (^FIRVerificationResultCallback)(NSString *_Nullable verificationID,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(VerificationResultCallback);
+
+/** @class FIRPhoneAuthProvider
+ @brief A concrete implementation of `FIRAuthProvider` for phone auth providers.
+ */
+NS_SWIFT_NAME(PhoneAuthProvider)
+@interface FIRPhoneAuthProvider : NSObject
+
+/** @fn provider
+ @brief Returns an instance of `FIRPhoneAuthProvider` for the default `FIRAuth` object.
+ */
++ (instancetype)provider NS_SWIFT_NAME(provider());
+
+/** @fn providerWithAuth:
+ @brief Returns an instance of `FIRPhoneAuthProvider` for the provided `FIRAuth` object.
+ @param auth The auth object to associate with the phone auth provider instance.
+ */
++ (instancetype)providerWithAuth:(FIRAuth *)auth NS_SWIFT_NAME(provider(auth:));
+
+/** @fn verifyPhoneNumber:UIDelegate:completion:
+ @brief Starts the phone number authentication flow by sending a verification code to the
+ specified phone number.
+ @param phoneNumber The phone number to be verified.
+ @param UIDelegate An object used to present the SFSafariViewController. The object is retained
+ by this method until the completion block is executed.
+ @param completion The callback to be invoked when the verification flow is finished.
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeCaptchaCheckFailed` - Indicates that the reCAPTCHA token obtained by
+ the Firebase Auth is invalid or has expired.
+ + `FIRAuthErrorCodeQuotaExceeded` - Indicates that the phone verification quota for this
+ project has been exceeded.
+ + `FIRAuthErrorCodeInvalidPhoneNumber` - Indicates that the phone number provided is
+ invalid.
+ + `FIRAuthErrorCodeMissingPhoneNumber` - Indicates that a phone number was not provided.
+ */
+- (void)verifyPhoneNumber:(NSString *)phoneNumber
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRVerificationResultCallback)completion;
+
+/** @fn verifyPhoneNumber:UIDelegate:multiFactorSession:completion:
+ @brief Verify ownership of the second factor phone number by the current user.
+ @param phoneNumber The phone number to be verified.
+ @param UIDelegate An object used to present the SFSafariViewController. The object is retained
+ by this method until the completion block is executed.
+ @param session A session to identify the MFA flow. For enrollment, this identifies the user
+ trying to enroll. For sign-in, this identifies that the user already passed the first
+ factor challenge.
+ @param completion The callback to be invoked when the verification flow is finished.
+*/
+- (void)verifyPhoneNumber:(NSString *)phoneNumber
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ multiFactorSession:(nullable FIRMultiFactorSession *)session
+ completion:(nullable FIRVerificationResultCallback)completion;
+
+/** @fn verifyPhoneNumberWithMultiFactorInfo:UIDelegate:multiFactorSession:completion:
+ @brief Verify ownership of the second factor phone number by the current user.
+ @param phoneMultiFactorInfo The phone multi factor whose number need to be verified.
+ @param UIDelegate An object used to present the SFSafariViewController. The object is retained
+ by this method until the completion block is executed.
+ @param session A session to identify the MFA flow. For enrollment, this identifies the user
+ trying to enroll. For sign-in, this identifies that the user already passed the first
+ factor challenge.
+ @param completion The callback to be invoked when the verification flow is finished.
+*/
+- (void)verifyPhoneNumberWithMultiFactorInfo:(FIRPhoneMultiFactorInfo *)phoneMultiFactorInfo
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ multiFactorSession:(nullable FIRMultiFactorSession *)session
+ completion:(nullable FIRVerificationResultCallback)completion;
+
+/** @fn credentialWithVerificationID:verificationCode:
+ @brief Creates an `FIRAuthCredential` for the phone number provider identified by the
+ verification ID and verification code.
+
+ @param verificationID The verification ID obtained from invoking
+ verifyPhoneNumber:completion:
+ @param verificationCode The verification code obtained from the user.
+ @return The corresponding phone auth credential for the verification ID and verification code
+ provided.
+ */
+- (FIRPhoneAuthCredential *)credentialWithVerificationID:(NSString *)verificationID
+ verificationCode:(NSString *)verificationCode;
+
+/** @fn init
+ @brief Please use the `provider` or `providerWithAuth:` methods to obtain an instance of
+ `FIRPhoneAuthProvider`.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h
new file mode 100644
index 00000000..25350a7b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorAssertion.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+#import "FIRMultiFactorAssertion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRPhoneMultiFactorAssertion
+ @brief The subclass of base class FIRMultiFactorAssertion, used to assert ownership of a phone
+ second factor.
+*/
+NS_SWIFT_NAME(PhoneMultiFactorAssertion)
+@interface FIRPhoneMultiFactorAssertion : FIRMultiFactorAssertion
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorGenerator.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorGenerator.h
new file mode 100644
index 00000000..26eaf0fc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorGenerator.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+#import "FIRPhoneAuthCredential.h"
+#import "FIRPhoneMultiFactorAssertion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRPhoneMultiFactorGenerator
+ @brief The data structure used to help initialize an assertion for a second factor entity to the
+ Firebase Auth/CICP server. Depending on the type of second factor, this will help generate
+ the assertion.
+*/
+NS_SWIFT_NAME(PhoneMultiFactorGenerator)
+@interface FIRPhoneMultiFactorGenerator : NSObject
+
+/** @fn assertionWithCredential:
+ @brief Initializes the MFA assertion to confirm ownership of the phone second factor. Note that
+ this API is used for both enrolling and signing in with a phone second factor.
+ @param phoneAuthCredential The phone auth credential used for multi factor flows.
+*/
++ (FIRPhoneMultiFactorAssertion *)assertionWithCredential:
+ (FIRPhoneAuthCredential *)phoneAuthCredential;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorInfo.h
new file mode 100644
index 00000000..463e1879
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRPhoneMultiFactorInfo.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+#import "FIRMultiFactorInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRPhoneMultiFactorInfo
+ @brief Extends the FIRMultiFactorInfo class for phone number second factors.
+ The identifier of this second factor is "phone".
+*/
+NS_SWIFT_NAME(PhoneMultiFactorInfo)
+@interface FIRPhoneMultiFactorInfo : FIRMultiFactorInfo
+
+/**
+ @brief This is the phone number associated with the current second factor.
+*/
+@property(nonatomic, readonly, nonnull) NSString *phoneNumber;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRTwitterAuthProvider.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRTwitterAuthProvider.h
new file mode 100644
index 00000000..0f1b28d7
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRTwitterAuthProvider.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief A string constant identifying the Twitter identity provider.
+ */
+extern NSString *const FIRTwitterAuthProviderID NS_SWIFT_NAME(TwitterAuthProviderID);
+/**
+ @brief A string constant identifying the Twitter sign-in method.
+ */
+extern NSString *const _Nonnull FIRTwitterAuthSignInMethod NS_SWIFT_NAME(TwitterAuthSignInMethod);
+
+/** @class FIRTwitterAuthProvider
+ @brief Utility class for constructing Twitter credentials.
+ */
+NS_SWIFT_NAME(TwitterAuthProvider)
+@interface FIRTwitterAuthProvider : NSObject
+
+/** @fn credentialWithToken:secret:
+ @brief Creates an `FIRAuthCredential` for a Twitter sign in.
+
+ @param token The Twitter OAuth token.
+ @param secret The Twitter OAuth secret.
+ @return A FIRAuthCredential containing the Twitter credential.
+ */
++ (FIRAuthCredential *)credentialWithToken:(NSString *)token secret:(NSString *)secret;
+
+/** @fn init
+ @brief This class is not meant to be initialized.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUser.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUser.h
new file mode 100644
index 00000000..15580b8e
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUser.h
@@ -0,0 +1,557 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FIRAuth.h"
+#import "FIRAuthDataResult.h"
+#import "FIRMultiFactor.h"
+#import "FIRUserInfo.h"
+
+@class FIRAuthTokenResult;
+@class FIRPhoneAuthCredential;
+@class FIRUserProfileChangeRequest;
+@class FIRUserMetadata;
+@protocol FIRAuthUIDelegate;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRAuthTokenCallback
+ @brief The type of block called when a token is ready for use.
+ @see FIRUser.getIDTokenWithCompletion:
+ @see FIRUser.getIDTokenForcingRefresh:withCompletion:
+
+ @param token Optionally; an access token if the request was successful.
+ @param error Optionally; the error which occurred - or nil if the request was successful.
+
+ @remarks One of: `token` or `error` will always be non-nil.
+ */
+typedef void (^FIRAuthTokenCallback)(NSString *_Nullable token, NSError *_Nullable error)
+ NS_SWIFT_NAME(AuthTokenCallback);
+
+/** @typedef FIRAuthTokenResultCallback
+ @brief The type of block called when a token is ready for use.
+ @see FIRUser.getIDTokenResultWithCompletion:
+ @see FIRUser.getIDTokenResultForcingRefresh:withCompletion:
+
+ @param tokenResult Optionally; an object containing the raw access token string as well as other
+ useful data pertaining to the token.
+ @param error Optionally; the error which occurred - or nil if the request was successful.
+
+ @remarks One of: `token` or `error` will always be non-nil.
+ */
+typedef void (^FIRAuthTokenResultCallback)(FIRAuthTokenResult *_Nullable tokenResult,
+ NSError *_Nullable error)
+ NS_SWIFT_NAME(AuthTokenResultCallback);
+
+/** @typedef FIRUserProfileChangeCallback
+ @brief The type of block called when a user profile change has finished.
+
+ @param error Optionally; the error which occurred - or nil if the request was successful.
+ */
+typedef void (^FIRUserProfileChangeCallback)(NSError *_Nullable error)
+ NS_SWIFT_NAME(UserProfileChangeCallback);
+
+/** @typedef FIRSendEmailVerificationCallback
+ @brief The type of block called when a request to send an email verification has finished.
+
+ @param error Optionally; the error which occurred - or nil if the request was successful.
+ */
+typedef void (^FIRSendEmailVerificationCallback)(NSError *_Nullable error)
+ NS_SWIFT_NAME(SendEmailVerificationCallback);
+
+/** @class FIRUser
+ @brief Represents a user. Firebase Auth does not attempt to validate users
+ when loading them from the keychain. Invalidated users (such as those
+ whose passwords have been changed on another client) are automatically
+ logged out when an auth-dependent operation is attempted or when the
+ ID token is automatically refreshed.
+ @remarks This class is thread-safe.
+ */
+NS_SWIFT_NAME(User)
+@interface FIRUser : NSObject <FIRUserInfo>
+
+/** @property anonymous
+ @brief Indicates the user represents an anonymous user.
+ */
+@property(nonatomic, readonly, getter=isAnonymous) BOOL anonymous;
+
+/** @property emailVerified
+ @brief Indicates the email address associated with this user has been verified.
+ */
+@property(nonatomic, readonly, getter=isEmailVerified) BOOL emailVerified;
+
+/** @property refreshToken
+ @brief A refresh token; useful for obtaining new access tokens independently.
+ @remarks This property should only be used for advanced scenarios, and is not typically needed.
+ */
+@property(nonatomic, readonly, nullable) NSString *refreshToken;
+
+/** @property providerData
+ @brief Profile data for each identity provider, if any.
+ @remarks This data is cached on sign-in and updated when linking or unlinking.
+ */
+@property(nonatomic, readonly, nonnull) NSArray<id<FIRUserInfo>> *providerData;
+
+/** @property metadata
+ @brief Metadata associated with the Firebase user in question.
+ */
+@property(nonatomic, readonly, nonnull) FIRUserMetadata *metadata;
+
+#if TARGET_OS_IOS
+/** @property multiFactor
+ @brief Multi factor object associated with the user.
+*/
+@property(nonatomic, readonly, nonnull) FIRMultiFactor *multiFactor;
+#endif
+
+/** @fn init
+ @brief This class should not be instantiated.
+ @remarks To retrieve the current user, use `FIRAuth.currentUser`. To sign a user
+ in or out, use the methods on `FIRAuth`.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn updateEmail:completion:
+ @brief Updates the email address for the user. On success, the cached user profile data is
+ updated.
+ @remarks May fail if there is already an account with this email address that was created using
+ email and password authentication.
+
+ @param email The email address for the user.
+ @param completion Optionally; the block invoked when the user profile change has finished.
+ Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidRecipientEmail` - Indicates an invalid recipient email was
+ sent in the request.
+ + `FIRAuthErrorCodeInvalidSender` - Indicates an invalid sender email is set in
+ the console for this action.
+ + `FIRAuthErrorCodeInvalidMessagePayload` - Indicates an invalid email template for
+ sending update email.
+ + `FIRAuthErrorCodeEmailAlreadyInUse` - Indicates the email is already in use by another
+ account.
+ + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is malformed.
+ + `FIRAuthErrorCodeRequiresRecentLogin` - Updating a user’s email is a security
+ sensitive operation that requires a recent login from the user. This error indicates
+ the user has not signed in recently enough. To resolve, reauthenticate the user by
+ invoking reauthenticateWithCredential:completion: on FIRUser.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all FIRUser methods.
+ */
+- (void)updateEmail:(NSString *)email
+ completion:(nullable FIRUserProfileChangeCallback)completion
+ NS_SWIFT_NAME(updateEmail(to:completion:));
+
+/** @fn updatePassword:completion:
+ @brief Updates the password for the user. On success, the cached user profile data is updated.
+
+ @param password The new password for the user.
+ @param completion Optionally; the block invoked when the user profile change has finished.
+ Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates the administrator disabled
+ sign in with the specified identity provider.
+ + `FIRAuthErrorCodeRequiresRecentLogin` - Updating a user’s password is a security
+ sensitive operation that requires a recent login from the user. This error indicates
+ the user has not signed in recently enough. To resolve, reauthenticate the user by
+ invoking reauthenticateWithCredential:completion: on FIRUser.
+ + `FIRAuthErrorCodeWeakPassword` - Indicates an attempt to set a password that is
+ considered too weak. The NSLocalizedFailureReasonErrorKey field in the NSError.userInfo
+ dictionary object will contain more detailed explanation that can be shown to the user.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all FIRUser methods.
+ */
+- (void)updatePassword:(NSString *)password
+ completion:(nullable FIRUserProfileChangeCallback)completion
+ NS_SWIFT_NAME(updatePassword(to:completion:));
+
+#if TARGET_OS_IOS
+/** @fn updatePhoneNumberCredential:completion:
+ @brief Updates the phone number for the user. On success, the cached user profile data is
+ updated.
+
+ @param phoneNumberCredential The new phone number credential corresponding to the phone number
+ to be added to the Firebase account, if a phone number is already linked to the account this
+ new phone number will replace it.
+ @param completion Optionally; the block invoked when the user profile change has finished.
+ Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeRequiresRecentLogin` - Updating a user’s phone number is a security
+ sensitive operation that requires a recent login from the user. This error indicates
+ the user has not signed in recently enough. To resolve, reauthenticate the user by
+ invoking reauthenticateWithCredential:completion: on FIRUser.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all FIRUser methods.
+ */
+- (void)updatePhoneNumberCredential:(FIRPhoneAuthCredential *)phoneNumberCredential
+ completion:(nullable FIRUserProfileChangeCallback)completion;
+#endif
+
+/** @fn profileChangeRequest
+ @brief Creates an object which may be used to change the user's profile data.
+
+ @remarks Set the properties of the returned object, then call
+ `FIRUserProfileChangeRequest.commitChangesWithCallback:` to perform the updates atomically.
+
+ @return An object which may be used to change the user's profile data atomically.
+ */
+- (FIRUserProfileChangeRequest *)profileChangeRequest NS_SWIFT_NAME(createProfileChangeRequest());
+
+/** @fn reloadWithCompletion:
+ @brief Reloads the user's profile data from the server.
+
+ @param completion Optionally; the block invoked when the reload has finished. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks May fail with a `FIRAuthErrorCodeRequiresRecentLogin` error code. In this case
+ you should call `FIRUser.reauthenticateWithCredential:completion:` before re-invoking
+ `FIRUser.updateEmail:completion:`.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)reloadWithCompletion:(nullable FIRUserProfileChangeCallback)completion;
+
+/** @fn reauthenticateWithCredential:completion:
+ @brief Renews the user's authentication tokens by validating a fresh set of credentials supplied
+ by the user and returns additional identity provider data.
+
+ @param credential A user-supplied credential, which will be validated by the server. This can be
+ a successful third-party identity provider sign-in, or an email address and password.
+ @param completion Optionally; the block invoked when the re-authentication operation has
+ finished. Invoked asynchronously on the main thread in the future.
+
+ @remarks If the user associated with the supplied credential is different from the current user,
+ or if the validation of the supplied credentials fails; an error is returned and the current
+ user remains signed in.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidCredential` - Indicates the supplied credential is invalid.
+ This could happen if it has expired or it is malformed.
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that accounts with the
+ identity provider represented by the credential are not enabled. Enable them in the
+ Auth section of the Firebase console.
+ + `FIRAuthErrorCodeEmailAlreadyInUse` - Indicates the email asserted by the credential
+ (e.g. the email in a Facebook access token) is already in use by an existing account,
+ that cannot be authenticated with this method. Call fetchProvidersForEmail for
+ this user’s email and then prompt them to sign in with any of the sign-in providers
+ returned. This error will only be thrown if the "One account per email address"
+ setting is enabled in the Firebase console, under Auth settings. Please note that the
+ error code raised in this specific situation may not be the same on Web and Android.
+ + `FIRAuthErrorCodeUserDisabled` - Indicates the user's account is disabled.
+ + `FIRAuthErrorCodeWrongPassword` - Indicates the user attempted reauthentication with
+ an incorrect password, if credential is of the type EmailPasswordAuthCredential.
+ + `FIRAuthErrorCodeUserMismatch` - Indicates that an attempt was made to
+ reauthenticate with a user which is not the current user.
+ + `FIRAuthErrorCodeInvalidEmail` - Indicates the email address is malformed.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)reauthenticateWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn reauthenticateAndRetrieveDataWithCredential:completion:
+ @brief Please use linkWithCredential:completion: for Objective-C
+ or link(withCredential:completion:) for Swift instead.
+ */
+- (void)reauthenticateAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion
+ DEPRECATED_MSG_ATTRIBUTE("Please use reauthenticateWithCredential:completion: for"
+ " Objective-C or reauthenticate(withCredential:completion:)"
+ " for Swift instead.");
+
+/** @fn reauthenticateWithProvider:UIDelegate:completion:
+ @brief Renews the user's authentication using the provided auth provider instance.
+
+ @param provider An instance of an auth provider used to initiate the reauthenticate flow.
+ @param UIDelegate Optionally an instance of a class conforming to the FIRAuthUIDelegate
+ protocol, this is used for presenting the web context. If nil, a default FIRAuthUIDelegate
+ will be used.
+ @param completion Optionally; a block which is invoked when the reauthenticate flow finishes, or
+ is canceled. Invoked asynchronously on the main thread in the future.
+ */
+// clang-format off
+- (void)reauthenticateWithProvider:(id<FIRFederatedAuthProvider>)provider
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthDataResultCallback)completion
+ NS_SWIFT_NAME(reauthenticate(with:uiDelegate:completion:))
+ API_AVAILABLE(ios(8.0));
+// clang-format on
+
+/** @fn getIDTokenResultWithCompletion:
+ @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
+
+ @param completion Optionally; the block invoked when the token is available. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)getIDTokenResultWithCompletion:(nullable FIRAuthTokenResultCallback)completion
+ NS_SWIFT_NAME(getIDTokenResult(completion:));
+
+/** @fn getIDTokenResultForcingRefresh:completion:
+ @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
+
+ @param forceRefresh Forces a token refresh. Useful if the token becomes invalid for some reason
+ other than an expiration.
+ @param completion Optionally; the block invoked when the token is available. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks The authentication token will be refreshed (by making a network request) if it has
+ expired, or if `forceRefresh` is YES.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)getIDTokenResultForcingRefresh:(BOOL)forceRefresh
+ completion:(nullable FIRAuthTokenResultCallback)completion
+ NS_SWIFT_NAME(getIDTokenResult(forcingRefresh:completion:));
+
+/** @fn getIDTokenWithCompletion:
+ @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
+
+ @param completion Optionally; the block invoked when the token is available. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)getIDTokenWithCompletion:(nullable FIRAuthTokenCallback)completion
+ NS_SWIFT_NAME(getIDToken(completion:));
+
+/** @fn getIDTokenForcingRefresh:completion:
+ @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
+
+ @param forceRefresh Forces a token refresh. Useful if the token becomes invalid for some reason
+ other than an expiration.
+ @param completion Optionally; the block invoked when the token is available. Invoked
+ asynchronously on the main thread in the future.
+
+ @remarks The authentication token will be refreshed (by making a network request) if it has
+ expired, or if `forceRefresh` is YES.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all API methods.
+ */
+- (void)getIDTokenForcingRefresh:(BOOL)forceRefresh
+ completion:(nullable FIRAuthTokenCallback)completion;
+
+/** @fn linkAndRetrieveDataWithCredential:completion:
+ @brief Please use linkWithCredential:completion: for Objective-C
+ or link(withCredential:completion:) for Swift instead.
+ */
+- (void)linkAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion
+ DEPRECATED_MSG_ATTRIBUTE("Please use linkWithCredential:completion: for Objective-C "
+ "or link(withCredential:completion:) for Swift instead.");
+
+/** @fn linkWithCredential:completion:
+ @brief Associates a user account from a third-party identity provider with this user and
+ returns additional identity provider data.
+
+ @param credential The credential for the identity provider.
+ @param completion Optionally; the block invoked when the unlinking is complete, or fails.
+ Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeProviderAlreadyLinked` - Indicates an attempt to link a provider of a
+ type already linked to this account.
+ + `FIRAuthErrorCodeCredentialAlreadyInUse` - Indicates an attempt to link with a
+ credential that has already been linked with a different Firebase account.
+ + `FIRAuthErrorCodeOperationNotAllowed` - Indicates that accounts with the identity
+ provider represented by the credential are not enabled. Enable them in the Auth section
+ of the Firebase console.
+
+ @remarks This method may also return error codes associated with updateEmail:completion: and
+ updatePassword:completion: on FIRUser.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all FIRUser methods.
+ */
+- (void)linkWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion;
+
+/** @fn linkWithProvider:UIDelegate:completion:
+ @brief link the user with the provided auth provider instance.
+
+ @param provider An instance of an auth provider used to initiate the link flow.
+ @param UIDelegate Optionally an instance of a class conforming to the FIRAuthUIDelegate
+ protocol, this is used for presenting the web context. If nil, a default FIRAuthUIDelegate
+ will be used.
+ @param completion Optionally; a block which is invoked when the link flow finishes, or
+ is canceled. Invoked asynchronously on the main thread in the future.
+ */
+// clang-format off
+- (void)linkWithProvider:(id<FIRFederatedAuthProvider>)provider
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthDataResultCallback)completion
+ NS_SWIFT_NAME(link(with:uiDelegate:completion:))
+ API_AVAILABLE(ios(8.0));
+// clang-format on
+
+/** @fn unlinkFromProvider:completion:
+ @brief Disassociates a user account from a third-party identity provider with this user.
+
+ @param provider The provider ID of the provider to unlink.
+ @param completion Optionally; the block invoked when the unlinking is complete, or fails.
+ Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeNoSuchProvider` - Indicates an attempt to unlink a provider
+ that is not linked to the account.
+ + `FIRAuthErrorCodeRequiresRecentLogin` - Updating email is a security sensitive
+ operation that requires a recent login from the user. This error indicates the user
+ has not signed in recently enough. To resolve, reauthenticate the user by invoking
+ reauthenticateWithCredential:completion: on FIRUser.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all FIRUser methods.
+ */
+- (void)unlinkFromProvider:(NSString *)provider
+ completion:(nullable FIRAuthResultCallback)completion;
+
+/** @fn sendEmailVerificationWithCompletion:
+ @brief Initiates email verification for the user.
+
+ @param completion Optionally; the block invoked when the request to send an email verification
+ is complete, or fails. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidRecipientEmail` - Indicates an invalid recipient email was
+ sent in the request.
+ + `FIRAuthErrorCodeInvalidSender` - Indicates an invalid sender email is set in
+ the console for this action.
+ + `FIRAuthErrorCodeInvalidMessagePayload` - Indicates an invalid email template for
+ sending update email.
+ + `FIRAuthErrorCodeUserNotFound` - Indicates the user account was not found.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all FIRUser methods.
+ */
+- (void)sendEmailVerificationWithCompletion:(nullable FIRSendEmailVerificationCallback)completion;
+
+/** @fn sendEmailVerificationWithActionCodeSettings:completion:
+ @brief Initiates email verification for the user.
+
+ @param actionCodeSettings An `FIRActionCodeSettings` object containing settings related to
+ handling action codes.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeInvalidRecipientEmail` - Indicates an invalid recipient email was
+ sent in the request.
+ + `FIRAuthErrorCodeInvalidSender` - Indicates an invalid sender email is set in
+ the console for this action.
+ + `FIRAuthErrorCodeInvalidMessagePayload` - Indicates an invalid email template for
+ sending update email.
+ + `FIRAuthErrorCodeUserNotFound` - Indicates the user account was not found.
+ + `FIRAuthErrorCodeMissingIosBundleID` - Indicates that the iOS bundle ID is missing when
+ a iOS App Store ID is provided.
+ + `FIRAuthErrorCodeMissingAndroidPackageName` - Indicates that the android package name
+ is missing when the `androidInstallApp` flag is set to true.
+ + `FIRAuthErrorCodeUnauthorizedDomain` - Indicates that the domain specified in the
+ continue URL is not whitelisted in the Firebase console.
+ + `FIRAuthErrorCodeInvalidContinueURI` - Indicates that the domain specified in the
+ continue URI is not valid.
+ */
+- (void)sendEmailVerificationWithActionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:
+ (nullable FIRSendEmailVerificationCallback)completion;
+
+/** @fn deleteWithCompletion:
+ @brief Deletes the user account (also signs out the user, if this was the current user).
+
+ @param completion Optionally; the block invoked when the request to delete the account is
+ complete, or fails. Invoked asynchronously on the main thread in the future.
+
+ @remarks Possible error codes:
+
+ + `FIRAuthErrorCodeRequiresRecentLogin` - Updating email is a security sensitive
+ operation that requires a recent login from the user. This error indicates the user
+ has not signed in recently enough. To resolve, reauthenticate the user by invoking
+ reauthenticateWithCredential:completion: on FIRUser.
+
+ @remarks See `FIRAuthErrors` for a list of error codes that are common to all FIRUser methods.
+
+ */
+- (void)deleteWithCompletion:(nullable FIRUserProfileChangeCallback)completion;
+
+/** @fn sendEmailVerificationBeforeUpdatingEmail:completion:
+ @brief Send an email to verify the ownership of the account then update to the new email.
+ @param email The email to be updated to.
+ @param completion Optionally; the block invoked when the request to send the verification
+ email is complete, or fails.
+*/
+- (void)sendEmailVerificationBeforeUpdatingEmail:(nonnull NSString *)email
+ completion:(nullable FIRAuthVoidErrorCallback)completion;
+
+/** @fn sendEmailVerificationBeforeUpdatingEmail:completion:
+ @brief Send an email to verify the ownership of the account then update to the new email.
+ @param email The email to be updated to.
+ @param actionCodeSettings An `FIRActionCodeSettings` object containing settings related to
+ handling action codes.
+ @param completion Optionally; the block invoked when the request to send the verification
+ email is complete, or fails.
+*/
+- (void)sendEmailVerificationBeforeUpdatingEmail:(nonnull NSString *)email
+ actionCodeSettings:(nonnull FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRAuthVoidErrorCallback)completion;
+
+@end
+
+/** @class FIRUserProfileChangeRequest
+ @brief Represents an object capable of updating a user's profile data.
+ @remarks Properties are marked as being part of a profile update when they are set. Setting a
+ property value to nil is not the same as leaving the property unassigned.
+ */
+NS_SWIFT_NAME(UserProfileChangeRequest)
+@interface FIRUserProfileChangeRequest : NSObject
+
+/** @fn init
+ @brief Please use `FIRUser.profileChangeRequest`
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @property displayName
+ @brief The user's display name.
+ @remarks It is an error to set this property after calling
+ `FIRUserProfileChangeRequest.commitChangesWithCallback:`
+ */
+@property(nonatomic, copy, nullable) NSString *displayName;
+
+/** @property photoURL
+ @brief The user's photo URL.
+ @remarks It is an error to set this property after calling
+ `FIRUserProfileChangeRequest.commitChangesWithCallback:`
+ */
+@property(nonatomic, copy, nullable) NSURL *photoURL;
+
+/** @fn commitChangesWithCompletion:
+ @brief Commits any pending changes.
+ @remarks This method should only be called once. Once called, property values should not be
+ changed.
+
+ @param completion Optionally; the block invoked when the user profile change has been applied.
+ Invoked asynchronously on the main thread in the future.
+ */
+- (void)commitChangesWithCompletion:(nullable FIRUserProfileChangeCallback)completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserInfo.h
new file mode 100644
index 00000000..04eca495
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserInfo.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief Represents user data returned from an identity provider.
+ */
+NS_SWIFT_NAME(UserInfo)
+@protocol FIRUserInfo <NSObject>
+
+/** @property providerID
+ @brief The provider identifier.
+ */
+@property(nonatomic, copy, readonly) NSString *providerID;
+
+/** @property uid
+ @brief The provider's user ID for the user.
+ */
+@property(nonatomic, copy, readonly) NSString *uid;
+
+/** @property displayName
+ @brief The name of the user.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *displayName;
+
+/** @property photoURL
+ @brief The URL of the user's profile photo.
+ */
+@property(nonatomic, copy, readonly, nullable) NSURL *photoURL;
+
+/** @property email
+ @brief The user's email address.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *email;
+
+/** @property phoneNumber
+ @brief A phone number associated with the user.
+ @remarks This property is only available for users authenticated via phone number auth.
+ */
+@property(nonatomic, readonly, nullable) NSString *phoneNumber;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserMetadata.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserMetadata.h
new file mode 100644
index 00000000..3ceae38d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FIRUserMetadata.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRUserMetadata
+ @brief A data class representing the metadata corresponding to a Firebase user.
+ */
+NS_SWIFT_NAME(UserMetadata)
+@interface FIRUserMetadata : NSObject
+
+/** @property lastSignInDate
+ @brief Stores the last sign in date for the corresponding Firebase user.
+ */
+@property(copy, nonatomic, readonly, nullable) NSDate *lastSignInDate;
+
+/** @property creationDate
+ @brief Stores the creation date for the corresponding Firebase user.
+ */
+@property(copy, nonatomic, readonly, nullable) NSDate *creationDate;
+
+/** @fn init
+ @brief This class should not be initialized manually, an instance of this class can be obtained
+ from a Firebase user object.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuth.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuth.h
new file mode 100644
index 00000000..4f4d1ca1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuth.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FIRActionCodeSettings.h"
+#import "FIRAdditionalUserInfo.h"
+#import "FIRAuth.h"
+#import "FIRAuthCredential.h"
+#import "FIRAuthDataResult.h"
+#import "FIRAuthErrors.h"
+#import "FIRAuthTokenResult.h"
+#import "FIREmailAuthProvider.h"
+#import "FIRFacebookAuthProvider.h"
+#import "FIRFederatedAuthProvider.h"
+#import "FIRGameCenterAuthProvider.h"
+#import "FIRGitHubAuthProvider.h"
+#import "FIRGoogleAuthProvider.h"
+#import "FIRMultiFactor.h"
+#import "FIRMultiFactorAssertion.h"
+#import "FIRMultiFactorInfo.h"
+#import "FIRMultiFactorResolver.h"
+#import "FIRMultiFactorSession.h"
+#import "FIROAuthCredential.h"
+#import "FIROAuthProvider.h"
+#import "FIRTwitterAuthProvider.h"
+#import "FIRUser.h"
+#import "FIRUserInfo.h"
+#import "FIRUserMetadata.h"
+#import "FirebaseAuthVersion.h"
+
+#if TARGET_OS_IOS
+#import "FIRAuthAPNSTokenType.h"
+#import "FIRAuthSettings.h"
+#import "FIRAuthUIDelegate.h"
+#import "FIRPhoneAuthCredential.h"
+#import "FIRPhoneAuthProvider.h"
+#import "FIRPhoneMultiFactorAssertion.h"
+#import "FIRPhoneMultiFactorGenerator.h"
+#import "FIRPhoneMultiFactorInfo.h"
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuthVersion.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuthVersion.h
new file mode 100644
index 00000000..7b4b94e9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Public/FirebaseAuthVersion.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+/**
+ Version number for FirebaseAuth.
+ */
+extern const double FirebaseAuthVersionNum;
+
+/**
+ Version string for FirebaseAuth.
+ */
+extern const char *const FirebaseAuthVersionStr;
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h
new file mode 100644
index 00000000..ff7c05de
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @brief The protocol for permanant data storage.
+ */
+@protocol FIRAuthStorage <NSObject>
+
+/** @fn initWithService:
+ @brief Initialize a @c FIRAuthStorage instance.
+ @param service The name of the storage service to use.
+ @return An initialized @c FIRAuthStorage instance for the specified service.
+ */
+- (id<FIRAuthStorage>)initWithService:(NSString *)service;
+
+/** @fn dataForKey:error:
+ @brief Gets the data for @c key in the storage. The key is set for the attribute
+ @c kSecAttrAccount of a generic password query.
+ @param key The key to use.
+ @param error The address to store any error that occurs during the process, if not NULL.
+ If the operation was successful, its content is set to @c nil .
+ @return The data stored in the storage for @c key, if any.
+ */
+- (nullable NSData *)dataForKey:(NSString *)key error:(NSError **_Nullable)error;
+
+/** @fn setData:forKey:error:
+ @brief Sets the data for @c key in the storage. The key is set for the attribute
+ @c kSecAttrAccount of a generic password query.
+ @param data The data to store.
+ @param key The key to use.
+ @param error The address to store any error that occurs during the process, if not NULL.
+ @return Whether the operation succeeded or not.
+ */
+- (BOOL)setData:(NSData *)data forKey:(NSString *)key error:(NSError **_Nullable)error;
+
+/** @fn removeDataForKey:error:
+ @brief Removes the data for @c key in the storage. The key is set for the attribute
+ @c kSecAttrAccount of a generic password query.
+ @param key The key to use.
+ @param error The address to store any error that occurs during the process, if not NULL.
+ @return Whether the operation succeeded or not.
+ */
+- (BOOL)removeDataForKey:(NSString *)key error:(NSError **_Nullable)error;
+
+@end
+
+/** @class FIRAuthKeychain
+ @brief The utility class to manipulate data in iOS Keychain.
+ */
+@interface FIRAuthKeychainServices : NSObject <FIRAuthStorage>
+
+/** @fn getItemWithQuery:error:
+ @brief Get the item from keychain by given query.
+ @param query The query to query the keychain.
+ @param outError The address to store any error that occurs during the process, if not nil.
+ @return The item of the given query. nil if not exsit.
+ */
+- (nullable NSData *)getItemWithQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** @fn setItem:withQuery:error:
+ @brief Set the item into keychain with given query.
+ @param item The item to be added into keychain.
+ @param query The query to query the keychain.
+ @param outError The address to store any error that occurs during the process, if not nil.
+ @return Whether the operation succeed.
+ */
+- (BOOL)setItem:(NSData *)item
+ withQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** @fn getItemWithQuery:error:
+ @brief Remove the item with given queryfrom keychain.
+ @param query The query to query the keychain.
+ @param outError The address to store any error that occurs during the process, if not nil.
+ @return Whether the operation succeed.
+ */
+- (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.m
new file mode 100644
index 00000000..aa1683b4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.m
@@ -0,0 +1,323 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h"
+
+#import <Security/Security.h>
+
+#import "FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+/** @var kAccountPrefix
+ @brief The prefix string for keychain item account attribute before the key.
+ @remarks A number "1" is encoded in the prefix in case we need to upgrade the scheme in future.
+ */
+static NSString *const kAccountPrefix = @"firebase_auth_1_";
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthKeychainServices {
+ /** @var _service
+ @brief The name of the keychain service.
+ */
+ NSString *_service;
+
+ /** @var _legacyItemDeletedForKey
+ @brief Indicates whether or not this class knows that the legacy item for a particular key has
+ been deleted.
+ @remarks This dictionary is to avoid unecessary keychain operations against legacy items.
+ */
+ NSMutableDictionary *_legacyEntryDeletedForKey;
+}
+
+- (id<FIRAuthStorage>)initWithService:(NSString *)service {
+ self = [super init];
+ if (self) {
+ _service = [service copy];
+ _legacyEntryDeletedForKey = [[NSMutableDictionary alloc] init];
+ }
+ return self;
+}
+
+- (nullable NSData *)dataForKey:(NSString *)key error:(NSError **_Nullable)error {
+ if (!key.length) {
+ [NSException raise:NSInvalidArgumentException format:@"%@", @"The key cannot be nil or empty."];
+ return nil;
+ }
+ NSData *data = [self itemWithQuery:[self genericPasswordQueryWithKey:key] error:error];
+ if (error && *error) {
+ return nil;
+ }
+ if (data) {
+ return data;
+ }
+ // Check for legacy form.
+ if (_legacyEntryDeletedForKey[key]) {
+ return nil;
+ }
+ data = [self itemWithQuery:[self legacyGenericPasswordQueryWithKey:key] error:error];
+ if (error && *error) {
+ return nil;
+ }
+ if (!data) {
+ // Mark legacy data as non-existing so we don't have to query it again.
+ _legacyEntryDeletedForKey[key] = @YES;
+ return nil;
+ }
+ // Move the data to current form.
+ if (![self setData:data forKey:key error:error]) {
+ return nil;
+ }
+ [self deleteLegacyItemWithKey:key];
+ return data;
+}
+
+- (BOOL)setData:(NSData *)data forKey:(NSString *)key error:(NSError **_Nullable)error {
+ if (!key.length) {
+ [NSException raise:NSInvalidArgumentException format:@"%@", @"The key cannot be nil or empty."];
+ return NO;
+ }
+ NSDictionary *attributes = @{
+ (__bridge id)kSecValueData : data,
+ (__bridge id)kSecAttrAccessible : (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly,
+ };
+ return [self setItemWithQuery:[self genericPasswordQueryWithKey:key]
+ attributes:attributes
+ error:error];
+}
+
+- (BOOL)removeDataForKey:(NSString *)key error:(NSError **_Nullable)error {
+ if (!key.length) {
+ [NSException raise:NSInvalidArgumentException format:@"%@", @"The key cannot be nil or empty."];
+ return NO;
+ }
+ if (![self deleteItemWithQuery:[self genericPasswordQueryWithKey:key] error:error]) {
+ return NO;
+ }
+ // Legacy form item, if exists, also needs to be removed, otherwise it will be exposed when
+ // current form item is removed, leading to incorrect semantics.
+ [self deleteLegacyItemWithKey:key];
+ return YES;
+}
+
+#pragma mark - Private methods for non-sharing keychain operations
+
+- (nullable NSData *)itemWithQuery:(NSDictionary *)query error:(NSError **_Nullable)error {
+ NSMutableDictionary *returningQuery = [query mutableCopy];
+ returningQuery[(__bridge id)kSecReturnData] = @YES;
+ returningQuery[(__bridge id)kSecReturnAttributes] = @YES;
+ // Using a match limit of 2 means that we can check whether there is more than one item.
+ // If we used a match limit of 1 we would never find out.
+ returningQuery[(__bridge id)kSecMatchLimit] = @2;
+
+ CFArrayRef result = NULL;
+ OSStatus status =
+ SecItemCopyMatching((__bridge CFDictionaryRef)returningQuery, (CFTypeRef *)&result);
+
+ if (status == noErr && result != NULL) {
+ NSArray *items = (__bridge_transfer NSArray *)result;
+ if (items.count != 1) {
+ if (error) {
+ *error = [FIRAuthErrorUtils keychainErrorWithFunction:@"SecItemCopyMatching" status:status];
+ }
+ return nil;
+ }
+
+ if (error) {
+ *error = nil;
+ }
+ NSDictionary *item = items[0];
+ return item[(__bridge id)kSecValueData];
+ }
+
+ if (status == errSecItemNotFound) {
+ if (error) {
+ *error = nil;
+ }
+ } else {
+ if (error) {
+ *error = [FIRAuthErrorUtils keychainErrorWithFunction:@"SecItemCopyMatching" status:status];
+ }
+ }
+ return nil;
+}
+
+- (BOOL)setItemWithQuery:(NSDictionary *)query
+ attributes:(NSDictionary *)attributes
+ error:(NSError **_Nullable)error {
+ NSMutableDictionary *combined = [attributes mutableCopy];
+ [combined addEntriesFromDictionary:query];
+ BOOL hasItem = NO;
+ OSStatus status = SecItemAdd((__bridge CFDictionaryRef)combined, NULL);
+
+ if (status == errSecDuplicateItem) {
+ hasItem = YES;
+ status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributes);
+ }
+
+ if (status == noErr) {
+ return YES;
+ }
+ if (error) {
+ NSString *function = hasItem ? @"SecItemUpdate" : @"SecItemAdd";
+ *error = [FIRAuthErrorUtils keychainErrorWithFunction:function status:status];
+ }
+ return NO;
+}
+
+- (BOOL)deleteItemWithQuery:(NSDictionary *)query error:(NSError **_Nullable)error {
+ OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query);
+ if (status == noErr || status == errSecItemNotFound) {
+ return YES;
+ }
+ if (error) {
+ *error = [FIRAuthErrorUtils keychainErrorWithFunction:@"SecItemDelete" status:status];
+ }
+ return NO;
+}
+
+/** @fn deleteLegacyItemsWithKey:
+ @brief Deletes legacy item from the keychain if it is not already known to be deleted.
+ @param key The key for the item.
+ */
+- (void)deleteLegacyItemWithKey:(NSString *)key {
+ if (_legacyEntryDeletedForKey[key]) {
+ return;
+ }
+ NSDictionary *query = [self legacyGenericPasswordQueryWithKey:key];
+ SecItemDelete((__bridge CFDictionaryRef)query);
+ _legacyEntryDeletedForKey[key] = @YES;
+}
+
+/** @fn genericPasswordQueryWithKey:
+ @brief Returns a keychain query of generic password to be used to manipulate key'ed value.
+ @param key The key for the value being manipulated, used as the account field in the query.
+ */
+- (NSDictionary *)genericPasswordQueryWithKey:(NSString *)key {
+ return @{
+ (__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
+ (__bridge id)kSecAttrAccount : [kAccountPrefix stringByAppendingString:key],
+ (__bridge id)kSecAttrService : _service,
+ };
+}
+
+/** @fn legacyGenericPasswordQueryWithKey:
+ @brief Returns a keychain query of generic password without service field, which is used by
+ previous version of this class.
+ @param key The key for the value being manipulated, used as the account field in the query.
+ */
+- (NSDictionary *)legacyGenericPasswordQueryWithKey:(NSString *)key {
+ return @{
+ (__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword,
+ (__bridge id)kSecAttrAccount : key,
+ };
+}
+
+#pragma mark - Private methods for shared keychain operations
+
+- (nullable NSData *)getItemWithQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError {
+ NSMutableDictionary *mutableQuery = [query mutableCopy];
+
+ mutableQuery[(__bridge id)kSecReturnData] = @YES;
+ mutableQuery[(__bridge id)kSecReturnAttributes] = @YES;
+ mutableQuery[(__bridge id)kSecMatchLimit] = @2;
+
+ CFArrayRef result = NULL;
+ OSStatus status =
+ SecItemCopyMatching((__bridge CFDictionaryRef)mutableQuery, (CFTypeRef *)&result);
+
+ if (status == noErr && result != NULL) {
+ NSArray *items = (__bridge_transfer NSArray *)result;
+ if (items.count != 1) {
+ if (outError) {
+ *outError = [FIRAuthErrorUtils keychainErrorWithFunction:@"SecItemCopyMatching"
+ status:status];
+ }
+ return nil;
+ }
+
+ if (outError) {
+ *outError = nil;
+ }
+ NSDictionary *item = items[0];
+ return item[(__bridge id)kSecValueData];
+ }
+
+ if (status == errSecItemNotFound) {
+ if (outError) {
+ *outError = nil;
+ }
+ } else {
+ if (outError) {
+ *outError = [FIRAuthErrorUtils keychainErrorWithFunction:@"SecItemCopyMatching"
+ status:status];
+ }
+ }
+ return nil;
+}
+
+- (BOOL)setItem:(NSData *)item
+ withQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError {
+ NSData *existingItem = [self getItemWithQuery:query error:outError];
+ if (outError && *outError) {
+ return NO;
+ }
+
+ OSStatus status;
+ if (!existingItem) {
+ NSMutableDictionary *queryWithItem = [query mutableCopy];
+ [queryWithItem setObject:item forKey:(__bridge id)kSecValueData];
+ status = SecItemAdd((__bridge CFDictionaryRef)queryWithItem, NULL);
+ } else {
+ NSDictionary *attributes = @{(__bridge id)kSecValueData : item};
+ status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributes);
+ }
+
+ if (status == noErr) {
+ if (outError) {
+ *outError = nil;
+ }
+ return YES;
+ }
+
+ NSString *function = existingItem ? @"SecItemUpdate" : @"SecItemAdd";
+ if (outError) {
+ *outError = [FIRAuthErrorUtils keychainErrorWithFunction:function status:status];
+ }
+ return NO;
+}
+
+- (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError {
+ OSStatus status = SecItemDelete((__bridge CFDictionaryRef)query);
+
+ if (status == noErr || status == errSecItemNotFound) {
+ if (outError) {
+ *outError = nil;
+ }
+ return YES;
+ }
+
+ if (outError) {
+ *outError = [FIRAuthErrorUtils keychainErrorWithFunction:@"SecItemDelete" status:status];
+ }
+ return NO;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.h
new file mode 100644
index 00000000..dfd8aad9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthUserDefaults
+ @brief The utility class to storage data in NSUserDefaults.
+ */
+@interface FIRAuthUserDefaults : NSObject <FIRAuthStorage>
+
+/** @fn clear
+ @brief Clears all data from the storage.
+ @remarks This method is only supposed to be called from tests.
+ */
+- (void)clear;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.m
new file mode 100644
index 00000000..b1094505
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.m
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+static NSString *const kPersistentDomainNamePrefix = @"com.google.Firebase.Auth.";
+
+@implementation FIRAuthUserDefaults {
+ /** @var _persistentDomainName
+ @brief The name of the persistent domain in user defaults.
+ */
+ NSString *_persistentDomainName;
+
+ /** @var _storage
+ @brief The backing NSUserDefaults storage for this instance.
+ */
+ NSUserDefaults *_storage;
+}
+
+- (instancetype)initWithService:(NSString *)service {
+ self = [super init];
+ if (self) {
+ _persistentDomainName = [kPersistentDomainNamePrefix stringByAppendingString:service];
+ _storage = [[NSUserDefaults alloc] init];
+ }
+ return self;
+}
+
+- (nullable NSData *)dataForKey:(NSString *)key error:(NSError **_Nullable)error {
+ if (error) {
+ *error = nil;
+ }
+ NSDictionary<NSString *, id> *allData = [_storage persistentDomainForName:_persistentDomainName];
+ return allData[key];
+}
+
+- (BOOL)setData:(NSData *)data forKey:(NSString *)key error:(NSError **_Nullable)error {
+ NSMutableDictionary<NSString *, id> *allData =
+ [([_storage persistentDomainForName:_persistentDomainName] ?: @{}) mutableCopy];
+ allData[key] = data;
+ [_storage setPersistentDomain:allData forName:_persistentDomainName];
+ return YES;
+}
+
+- (BOOL)removeDataForKey:(NSString *)key error:(NSError **_Nullable)error {
+ NSMutableDictionary<NSString *, id> *allData =
+ [[_storage persistentDomainForName:_persistentDomainName] mutableCopy];
+ [allData removeObjectForKey:key];
+ [_storage setPersistentDomain:allData forName:_persistentDomainName];
+ return YES;
+}
+
+- (void)clear {
+ [_storage setPersistentDomain:@{} forName:_persistentDomainName];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h
new file mode 100644
index 00000000..8633d2e5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRAuthAPNSTokenType.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthAPNSToken
+ @brief A data structure for an APNs token.
+ */
+@interface FIRAuthAPNSToken : NSObject
+
+/** @property data
+ @brief The APNs token data.
+ */
+@property(nonatomic, strong, readonly) NSData *data;
+
+/** @property string
+ @brief The uppercase hexadecimal string form of the APNs token data.
+ */
+@property(nonatomic, strong, readonly) NSString *string;
+
+/** @property type
+ @brief The APNs token type.
+ */
+@property(nonatomic, assign, readonly) FIRAuthAPNSTokenType type;
+
+/** @fn initWithData:type:
+ @brief Initializes the instance.
+ @param data The APNs token data.
+ @param type The APNs token type.
+ @return The initialized instance.
+ */
+- (instancetype)initWithData:(NSData *)data
+ type:(FIRAuthAPNSTokenType)type NS_DESIGNATED_INITIALIZER;
+
+/** @fn init
+ @brief Call @c initWithData:type: to get an instance of this class.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.m
new file mode 100644
index 00000000..49379428
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.m
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthAPNSToken {
+ /** @var _string
+ @brief The lazy-initialized string form of the token data.
+ */
+ NSString *_string;
+}
+
+- (instancetype)initWithData:(NSData *)data type:(FIRAuthAPNSTokenType)type {
+ self = [super init];
+ if (self) {
+ _data = [data copy];
+ _type = type;
+ }
+ return self;
+}
+
+- (NSString *)string {
+ if (!_string) {
+ NSUInteger capacity = _data.length * 2;
+ NSMutableString *tokenString = [NSMutableString stringWithCapacity:capacity];
+ const unsigned char *tokenData = _data.bytes;
+ for (int idx = 0; idx < _data.length; ++idx) {
+ [tokenString appendFormat:@"%02X", (int)tokenData[idx]];
+ }
+ _string = tokenString;
+ }
+ return _string;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.h
new file mode 100644
index 00000000..99e290ec
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@class FIRAuthAPNSToken;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRAuthAPNSTokenCallback
+ @brief The type of block to receive an APNs token.
+ @param token The APNs token if one is available.
+ @param error The error happened if any.
+ @remarks Both `token` and `error` being `nil` means the request timed-out.
+ */
+typedef void (^FIRAuthAPNSTokenCallback)(FIRAuthAPNSToken *_Nullable token,
+ NSError *_Nullable error);
+
+/** @class FIRAuthAPNSTokenManager
+ @brief A class to manage APNs token in memory.
+ */
+@interface FIRAuthAPNSTokenManager : NSObject
+
+/** @property token
+ @brief The APNs token, if one is available.
+ @remarks Setting a token with FIRAuthAPNSTokenTypeUnknown will automatically converts it to
+ a token with the automatically detected type.
+ */
+@property(nonatomic, strong, nullable) FIRAuthAPNSToken *token;
+
+/** @property timeout
+ @brief The timeout for registering for remote notification.
+ @remarks Only tests should access this property.
+ */
+@property(nonatomic, assign) NSTimeInterval timeout;
+
+/** @fn init
+ @brief Call @c initWithApplication: to initialize an instance of this class.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithApplication:bundle
+ @brief Initializes the instance.
+ @param application The @c UIApplication to request the token from.
+ @return The initialized instance.
+ */
+- (instancetype)initWithApplication:(UIApplication *)application NS_DESIGNATED_INITIALIZER;
+
+/** @fn getTokenWithCallback:
+ @brief Attempts to get the APNs token.
+ @param callback The block to be called either immediately or in future, either when a token
+ becomes available, or when timeout occurs, whichever happens earlier.
+ */
+- (void)getTokenWithCallback:(FIRAuthAPNSTokenCallback)callback;
+
+/** @fn cancelWithError:
+ @brief Cancels any pending `getTokenWithCallback:` request.
+ @param error The error to return.
+ */
+- (void)cancelWithError:(NSError *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.m
new file mode 100644
index 00000000..04274bdf
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.m
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAPNSToken.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAPNSTokenManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kRegistrationTimeout
+ @brief Timeout for registration for remote notification.
+ @remarks Once we start to handle `application:didFailToRegisterForRemoteNotificationsWithError:`
+ we probably don't have to use timeout at all.
+ */
+static const NSTimeInterval kRegistrationTimeout = 5;
+
+/** @var kLegacyRegistrationTimeout
+ @brief Timeout for registration for remote notification on iOS 7.
+ */
+static const NSTimeInterval kLegacyRegistrationTimeout = 30;
+
+@implementation FIRAuthAPNSTokenManager {
+ /** @var _application
+ @brief The @c UIApplication to request the token from.
+ */
+ UIApplication *_application;
+
+ /** @var _pendingCallbacks
+ @brief The list of all pending callbacks for the APNs token.
+ */
+ NSMutableArray<FIRAuthAPNSTokenCallback> *_pendingCallbacks;
+}
+
+- (instancetype)initWithApplication:(UIApplication *)application {
+ self = [super init];
+ if (self) {
+ _application = application;
+ _timeout = [_application respondsToSelector:@selector(registerForRemoteNotifications)]
+ ? kRegistrationTimeout
+ : kLegacyRegistrationTimeout;
+ }
+ return self;
+}
+
+- (void)getTokenWithCallback:(FIRAuthAPNSTokenCallback)callback {
+ if (_token) {
+ callback(_token, nil);
+ return;
+ }
+ if (_pendingCallbacks) {
+ [_pendingCallbacks addObject:callback];
+ return;
+ }
+ _pendingCallbacks =
+ [[NSMutableArray<FIRAuthAPNSTokenCallback> alloc] initWithObjects:callback, nil];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if ([self->_application respondsToSelector:@selector(registerForRemoteNotifications)]) {
+ [self->_application registerForRemoteNotifications];
+ } else {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#if TARGET_OS_IOS
+ [self->_application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert];
+#endif // TARGET_OS_IOS
+#pragma clang diagnostic pop
+ }
+ });
+ NSArray<FIRAuthAPNSTokenCallback> *applicableCallbacks = _pendingCallbacks;
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_timeout * NSEC_PER_SEC)),
+ FIRAuthGlobalWorkQueue(), ^{
+ // Only cancel if the pending callbacks remain the same, i.e., not triggered yet.
+ if (applicableCallbacks == self->_pendingCallbacks) {
+ [self callBackWithToken:nil error:nil];
+ }
+ });
+}
+
+- (void)setToken:(nullable FIRAuthAPNSToken *)token {
+ if (!token) {
+ _token = nil;
+ return;
+ }
+ if (token.type == FIRAuthAPNSTokenTypeUnknown) {
+ static FIRAuthAPNSTokenType detectedTokenType = FIRAuthAPNSTokenTypeUnknown;
+ if (detectedTokenType == FIRAuthAPNSTokenTypeUnknown) {
+ detectedTokenType =
+ [[self class] isProductionApp] ? FIRAuthAPNSTokenTypeProd : FIRAuthAPNSTokenTypeSandbox;
+ }
+ token = [[FIRAuthAPNSToken alloc] initWithData:token.data type:detectedTokenType];
+ }
+ _token = token;
+ [self callBackWithToken:token error:nil];
+}
+
+- (void)cancelWithError:(NSError *)error {
+ [self callBackWithToken:nil error:error];
+}
+
+#pragma mark - Internal methods
+
+/** @fn callBack
+ @brief Calls back all pending callbacks with APNs token or error.
+ @param token The APNs token if one is available.
+ @param error The error occurred, if any.
+ */
+- (void)callBackWithToken:(nullable FIRAuthAPNSToken *)token error:(nullable NSError *)error {
+ if (!_pendingCallbacks) {
+ return;
+ }
+ NSArray<FIRAuthAPNSTokenCallback> *allCallbacks = _pendingCallbacks;
+ _pendingCallbacks = nil;
+ for (FIRAuthAPNSTokenCallback callback in allCallbacks) {
+ callback(token, error);
+ }
+};
+
+/** @fn isProductionApp
+ @brief Whether or not the app has production (versus sandbox) provisioning profile.
+ @remarks This method is adapted from @c FIRInstanceID .
+ */
++ (BOOL)isProductionApp {
+ const BOOL defaultAppTypeProd = YES;
+
+ NSError *error = nil;
+
+ if ([GULAppEnvironmentUtil isSimulator]) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000006", @"Assuming prod APNs token type on simulator.");
+ return defaultAppTypeProd;
+ }
+
+ // Apps distributed via AppStore or TestFlight use the Production APNS certificates.
+ if ([GULAppEnvironmentUtil isFromAppStore]) {
+ return defaultAppTypeProd;
+ }
+ NSString *path = [[[NSBundle mainBundle] bundlePath]
+ stringByAppendingPathComponent:@"embedded.mobileprovision"];
+ if ([GULAppEnvironmentUtil isAppStoreReceiptSandbox] && !path.length) {
+ // Distributed via TestFlight
+ return defaultAppTypeProd;
+ }
+
+ NSMutableData *profileData = [NSMutableData dataWithContentsOfFile:path options:0 error:&error];
+
+ if (!profileData.length || error) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000007", @"Error while reading embedded mobileprovision %@",
+ error);
+ return defaultAppTypeProd;
+ }
+
+ // The "embedded.mobileprovision" sometimes contains characters with value 0, which signals the
+ // end of a c-string and halts the ASCII parser, or with value > 127, which violates strict 7-bit
+ // ASCII. Replace any 0s or invalid characters in the input.
+ uint8_t *profileBytes = (uint8_t *)profileData.bytes;
+ for (int i = 0; i < profileData.length; i++) {
+ uint8_t currentByte = profileBytes[i];
+ if (!currentByte || currentByte > 127) {
+ profileBytes[i] = '.';
+ }
+ }
+
+ NSString *embeddedProfile = [[NSString alloc] initWithBytesNoCopy:profileBytes
+ length:profileData.length
+ encoding:NSASCIIStringEncoding
+ freeWhenDone:NO];
+
+ if (error || !embeddedProfile.length) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000008", @"Error while reading embedded mobileprovision %@",
+ error);
+ return defaultAppTypeProd;
+ }
+
+ NSScanner *scanner = [NSScanner scannerWithString:embeddedProfile];
+ NSString *plistContents;
+ if ([scanner scanUpToString:@"<plist" intoString:nil]) {
+ if ([scanner scanUpToString:@"</plist>" intoString:&plistContents]) {
+ plistContents = [plistContents stringByAppendingString:@"</plist>"];
+ }
+ }
+
+ if (!plistContents.length) {
+ return defaultAppTypeProd;
+ }
+
+ NSData *data = [plistContents dataUsingEncoding:NSUTF8StringEncoding];
+ if (!data.length) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000009",
+ @"Couldn't read plist fetched from embedded mobileprovision");
+ return defaultAppTypeProd;
+ }
+
+ NSError *plistMapError;
+ id plistData = [NSPropertyListSerialization propertyListWithData:data
+ options:NSPropertyListImmutable
+ format:nil
+ error:&plistMapError];
+ if (plistMapError || ![plistData isKindOfClass:[NSDictionary class]]) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000010", @"Error while converting assumed plist to dict %@",
+ plistMapError.localizedDescription);
+ return defaultAppTypeProd;
+ }
+ NSDictionary *plistMap = (NSDictionary *)plistData;
+
+ if ([plistMap valueForKeyPath:@"ProvisionedDevices"]) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000011",
+ @"Provisioning profile has specifically provisioned devices, "
+ @"most likely a Dev profile.");
+ }
+
+ NSString *apsEnvironment = [plistMap valueForKeyPath:@"Entitlements.aps-environment"];
+ FIRLogDebug(kFIRLoggerAuth, @"I-AUT000012", @"APNS Environment in profile: %@", apsEnvironment);
+
+ // No aps-environment in the profile.
+ if (!apsEnvironment.length) {
+ FIRLogInfo(kFIRLoggerAuth, @"I-AUT000013",
+ @"No aps-environment set. If testing on a device APNS is not "
+ @"correctly configured. Please recheck your provisioning profiles.");
+ return defaultAppTypeProd;
+ }
+
+ if ([apsEnvironment isEqualToString:@"development"]) {
+ return NO;
+ }
+
+ return defaultAppTypeProd;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h
new file mode 100644
index 00000000..ceb93e29
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthAppCredential
+ @brief A class represents a credential that proves the identity of the app.
+ */
+@interface FIRAuthAppCredential : NSObject <NSSecureCoding>
+
+/** @property receipt
+ @brief The server acknowledgement of receiving client's claim of identity.
+ */
+@property(nonatomic, strong, readonly) NSString *receipt;
+
+/** @property secret
+ @brief The secret that the client received from server via a trusted channel, if ever.
+ */
+@property(nonatomic, strong, readonly, nullable) NSString *secret;
+
+/** @fn initWithReceipt:secret:
+ @brief Initializes the instance.
+ @param receipt The server acknowledgement of receiving client's claim of identity.
+ @param secret The secret that the client received from server via a trusted channel, if ever.
+ @return The initialized instance.
+ */
+- (instancetype)initWithReceipt:(NSString *)receipt
+ secret:(nullable NSString *)secret NS_DESIGNATED_INITIALIZER;
+
+/** @fn init
+ @brief Call @c initWithReceipt:secret: to get an instance of this class.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.m
new file mode 100644
index 00000000..7bf1021a
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.m
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kReceiptKey
+ @brief The key used to encode the receipt property for NSSecureCoding.
+ */
+static NSString *const kReceiptKey = @"receipt";
+
+/** @var kSecretKey
+ @brief The key used to encode the secret property for NSSecureCoding.
+ */
+static NSString *const kSecretKey = @"secret";
+
+@implementation FIRAuthAppCredential
+
+- (instancetype)initWithReceipt:(NSString *)receipt secret:(nullable NSString *)secret {
+ self = [super init];
+ if (self) {
+ _receipt = [receipt copy];
+ _secret = [secret copy];
+ }
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *receipt = [aDecoder decodeObjectOfClass:[NSString class] forKey:kReceiptKey];
+ if (!receipt) {
+ return nil;
+ }
+ NSString *secret = [aDecoder decodeObjectOfClass:[NSString class] forKey:kSecretKey];
+ return [self initWithReceipt:receipt secret:secret];
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_receipt forKey:kReceiptKey];
+ [aCoder encodeObject:_secret forKey:kSecretKey];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h
new file mode 100644
index 00000000..efbbe7a0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <Foundation/Foundation.h>
+
+#import "FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRAuthAppCredentialCallback
+ @brief The type of block to receive an app crdential.
+ @param credential The best available app credential at the time.
+ */
+typedef void (^FIRAuthAppCredentialCallback)(FIRAuthAppCredential *credential);
+
+/** @class FIRAuthAppCredentialManager
+ @brief A class to manage app credentials backed by iOS Keychain.
+ */
+@interface FIRAuthAppCredentialManager : NSObject
+
+/** @property credential
+ @brief The full credential (which has a secret) to be used by the app, if one is available.
+ */
+@property(nonatomic, strong, readonly, nullable) FIRAuthAppCredential *credential;
+
+/** @property maximumNumberOfPendingReceipts
+ @brief The maximum (but not necessarily the minimum) number of pending receipts to be kept.
+ @remarks Only tests should access this property.
+ */
+@property(nonatomic, assign, readonly) NSUInteger maximumNumberOfPendingReceipts;
+
+/** @fn init
+ @brief Call @c initWithKeychain: to initialize an instance of this class.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithKeychain:
+ @brief Initializes the instance.
+ @param keychain The iOS Keychain storage to back up the app credential with.
+ @return The initialized instance.
+ */
+- (instancetype)initWithKeychain:(FIRAuthKeychainServices *)keychain NS_DESIGNATED_INITIALIZER;
+
+/** @fn didStartVerificationWithReceipt:timeout:callback:
+ @brief Notifies that the app verification process has started.
+ @param receipt The receipt for verification.
+ @param timeout The timeout value for how long the callback is waited to be called.
+ @param callback The block to be called in future either when the verification finishes, or
+ when timeout occurs, whichever happens earlier.
+ */
+- (void)didStartVerificationWithReceipt:(NSString *)receipt
+ timeout:(NSTimeInterval)timeout
+ callback:(FIRAuthAppCredentialCallback)callback;
+
+/** @fn canFinishVerificationWithReceipt:
+ @brief Attempts to finish verification.
+ @param receipt The receipt to match the original receipt obtained when verification started.
+ @param secret The secret to complete the verification.
+ @return Whether or not the receipt matches a pending verification, and finishes verification
+ if it does.
+ */
+- (BOOL)canFinishVerificationWithReceipt:(NSString *)receipt secret:(NSString *)secret;
+
+/** @fn clearCredential
+ @brief Clears the saved credential, to be used in the case that it is rejected by the server.
+ */
+- (void)clearCredential;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.m
new file mode 100644
index 00000000..4cb4e678
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kKeychainDataKey
+ @brief The keychain key for the data.
+ */
+static NSString *const kKeychainDataKey = @"app_credentials";
+
+/** @var kFullCredentialKey
+ @brief The data key for the full app credential.
+ */
+static NSString *const kFullCredentialKey = @"full_credential";
+
+/** @var kPendingReceiptsKey
+ @brief The data key for the array of pending receipts.
+ */
+static NSString *const kPendingReceiptsKey = @"pending_receipts";
+
+/** @var kMaximumNumberOfPendingReceipts
+ @brief The maximum number of partial credentials kept by this class.
+ */
+static const NSUInteger kMaximumNumberOfPendingReceipts = 32;
+
+@implementation FIRAuthAppCredentialManager {
+ /** @var _keychainServices
+ @brief The keychain for app credentials to load from and to save to.
+ */
+ FIRAuthKeychainServices *_keychainServices;
+
+ /** @var _pendingReceipts
+ @brief A list of pending receipts sorted in the order they were recorded.
+ */
+ NSMutableArray<NSString *> *_pendingReceipts;
+
+ /** @var _callbacksByReceipt
+ @brief A map from pending receipts to callbacks.
+ */
+ NSMutableDictionary<NSString *, FIRAuthAppCredentialCallback> *_callbacksByReceipt;
+}
+
+- (instancetype)initWithKeychain:(FIRAuthKeychainServices *)keychain {
+ self = [super init];
+ if (self) {
+ _keychainServices = keychain;
+ // Load the credentials from keychain if possible.
+ NSError *error;
+ NSData *encodedData = [_keychainServices dataForKey:kKeychainDataKey error:&error];
+ if (!error && encodedData) {
+// iOS 12 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedUnarchiver *unarchiver =
+ [[NSKeyedUnarchiver alloc] initForReadingWithData:encodedData];
+#pragma clang diagnostic pop
+ FIRAuthAppCredential *credential =
+ [unarchiver decodeObjectOfClass:[FIRAuthAppCredential class] forKey:kFullCredentialKey];
+ if ([credential isKindOfClass:[FIRAuthAppCredential class]]) {
+ _credential = credential;
+ }
+ NSSet<Class> *allowedClasses =
+ [NSSet<Class> setWithObjects:[NSArray class], [NSString class], nil];
+ NSArray<NSString *> *pendingReceipts = [unarchiver decodeObjectOfClasses:allowedClasses
+ forKey:kPendingReceiptsKey];
+ if ([pendingReceipts isKindOfClass:[NSArray class]]) {
+ _pendingReceipts = [pendingReceipts mutableCopy];
+ }
+ }
+ if (!_pendingReceipts) {
+ _pendingReceipts = [[NSMutableArray<NSString *> alloc] init];
+ }
+ _callbacksByReceipt =
+ [[NSMutableDictionary<NSString *, FIRAuthAppCredentialCallback> alloc] init];
+ }
+ return self;
+}
+
+- (NSUInteger)maximumNumberOfPendingReceipts {
+ return kMaximumNumberOfPendingReceipts;
+}
+
+- (void)didStartVerificationWithReceipt:(NSString *)receipt
+ timeout:(NSTimeInterval)timeout
+ callback:(FIRAuthAppCredentialCallback)callback {
+ [_pendingReceipts removeObject:receipt];
+ if (_pendingReceipts.count >= kMaximumNumberOfPendingReceipts) {
+ [_pendingReceipts removeObjectAtIndex:0];
+ }
+ [_pendingReceipts addObject:receipt];
+ _callbacksByReceipt[receipt] = callback;
+ [self saveData];
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)),
+ FIRAuthGlobalWorkQueue(), ^{
+ [self callBackWithReceipt:receipt];
+ });
+}
+
+- (BOOL)canFinishVerificationWithReceipt:(NSString *)receipt secret:(NSString *)secret {
+ if (![_pendingReceipts containsObject:receipt]) {
+ return NO;
+ }
+ [_pendingReceipts removeObject:receipt];
+ _credential = [[FIRAuthAppCredential alloc] initWithReceipt:receipt secret:secret];
+ [self saveData];
+ [self callBackWithReceipt:receipt];
+ return YES;
+}
+
+- (void)clearCredential {
+ _credential = nil;
+ [self saveData];
+}
+
+#pragma mark - Internal methods
+
+/** @fn saveData
+ @brief Save the data in memory to the keychain ignoring any errors.
+ */
+- (void)saveData {
+ NSMutableData *archiveData = [NSMutableData data];
+// iOS 12 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:archiveData];
+#pragma clang diagnostic pop
+ [archiver encodeObject:_credential forKey:kFullCredentialKey];
+ [archiver encodeObject:_pendingReceipts forKey:kPendingReceiptsKey];
+ [archiver finishEncoding];
+ [_keychainServices setData:archiveData forKey:kKeychainDataKey error:NULL];
+}
+
+/** @fn callBackWithReceipt:
+ @brief Calls the saved callback for the specifc receipt.
+ @param receipt The receipt associated with the callback.
+ */
+- (void)callBackWithReceipt:(NSString *)receipt {
+ FIRAuthAppCredentialCallback callback = _callbacksByReceipt[receipt];
+ if (!callback) {
+ return;
+ }
+ [_callbacksByReceipt removeObjectForKey:receipt];
+ if (_credential) {
+ callback(_credential);
+ } else {
+ callback([[FIRAuthAppCredential alloc] initWithReceipt:receipt secret:nil]);
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.h
new file mode 100644
index 00000000..82a12cb1
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@class FIRAuthAppCredentialManager;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRAuthNotificationForwardingCallback
+ @brief The type of block to receive whether or not remote notifications are being forwarded.
+ @param isNotificationBeingForwarded Whether or not remote notifications are being forwarded.
+ */
+typedef void (^FIRAuthNotificationForwardingCallback)(BOOL isNotificationBeingForwarded);
+
+/** @class FIRAuthNotificationManager
+ */
+@interface FIRAuthNotificationManager : NSObject
+
+/** @property timeout
+ @brief The timeout for checking for notification forwarding.
+ @remarks Only tests should access this property.
+ */
+@property(nonatomic, assign) NSTimeInterval timeout;
+
+/** @fn initWithApplication:appCredentialManager:
+ @brief Initializes the instance.
+ @param application The application.
+ @param appCredentialManager The object to handle app credentials delivered via notification.
+ @return The initialized instance.
+ */
+- (instancetype)initWithApplication:(UIApplication *)application
+ appCredentialManager:(FIRAuthAppCredentialManager *)appCredentialManager
+ NS_DESIGNATED_INITIALIZER;
+
+/** @fn init
+ @brief please use initWithAppCredentialManager: instead.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn checkNotificationForwardingWithCallback:
+ @brief Checks whether or not remote notifications are being forwarded to this class.
+ @param callback The block to be called either immediately or in future once a result
+ is available.
+ */
+- (void)checkNotificationForwardingWithCallback:(FIRAuthNotificationForwardingCallback)callback;
+
+/** @fn canHandleNotification:
+ @brief Attempts to handle the remote notification.
+ @param notification The notification in question.
+ @return Whether or the notification has been handled.
+ */
+- (BOOL)canHandleNotification:(NSDictionary *)notification;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.m
new file mode 100644
index 00000000..f6abb700
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.m
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredential.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthAppCredentialManager.h"
+#import "FirebaseAuth/Sources/SystemService/FIRAuthNotificationManager.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kNotificationKey
+ @brief The key to locate payload data in the remote notification.
+ */
+static NSString *const kNotificationDataKey = @"com.google.firebase.auth";
+
+/** @var kNotificationReceiptKey
+ @brief The key for the receipt in the remote notification payload data.
+ */
+static NSString *const kNotificationReceiptKey = @"receipt";
+
+/** @var kNotificationSecretKey
+ @brief The key for the secret in the remote notification payload data.
+ */
+static NSString *const kNotificationSecretKey = @"secret";
+
+/** @var kNotificationProberKey
+ @brief The key for marking the prober in the remote notification payload data.
+ */
+static NSString *const kNotificationProberKey = @"warning";
+
+/** @var kProbingTimeout
+ @brief Timeout for probing whether the app delegate forwards the remote notification to us.
+ */
+static const NSTimeInterval kProbingTimeout = 1;
+
+@implementation FIRAuthNotificationManager {
+ /** @var _application
+ @brief The application.
+ */
+ UIApplication *_application;
+
+ /** @var _appCredentialManager
+ @brief The object to handle app credentials delivered via notification.
+ */
+ FIRAuthAppCredentialManager *_appCredentialManager;
+
+ /** @var _hasCheckedNotificationForwarding
+ @brief Whether notification forwarding has been checked or not.
+ */
+ BOOL _hasCheckedNotificationForwarding;
+
+ /** @var _isNotificationBeingForwarded
+ @brief Whether or not notification is being forwarded
+ */
+ BOOL _isNotificationBeingForwarded;
+
+ /** @var _pendingCallbacks
+ @brief All pending callbacks while a check is being performed.
+ */
+ NSMutableArray<FIRAuthNotificationForwardingCallback> *_pendingCallbacks;
+}
+
+- (instancetype)initWithApplication:(UIApplication *)application
+ appCredentialManager:(FIRAuthAppCredentialManager *)appCredentialManager {
+ self = [super init];
+ if (self) {
+ _application = application;
+ _appCredentialManager = appCredentialManager;
+ _timeout = kProbingTimeout;
+ }
+ return self;
+}
+
+- (void)checkNotificationForwardingWithCallback:(FIRAuthNotificationForwardingCallback)callback {
+ if (_pendingCallbacks) {
+ [_pendingCallbacks addObject:callback];
+ return;
+ }
+ if (_hasCheckedNotificationForwarding) {
+ callback(_isNotificationBeingForwarded);
+ return;
+ }
+ _hasCheckedNotificationForwarding = YES;
+ _pendingCallbacks =
+ [[NSMutableArray<FIRAuthNotificationForwardingCallback> alloc] initWithObjects:callback, nil];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ NSDictionary *proberNotification = @{
+ kNotificationDataKey : @{
+ kNotificationProberKey : @"This fake notification should be forwarded to Firebase Auth."
+ }
+ };
+ if ([self->_application.delegate
+ respondsToSelector:@selector(application:
+ didReceiveRemoteNotification:fetchCompletionHandler:)]) {
+ [self->_application.delegate application:self->_application
+ didReceiveRemoteNotification:proberNotification
+ fetchCompletionHandler:^(UIBackgroundFetchResult result){
+ }];
+#if !TARGET_OS_TV
+ } else if ([self->_application.delegate
+ respondsToSelector:@selector(application:didReceiveRemoteNotification:)]) {
+// iOS 10 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ [self->_application.delegate application:self->_application
+ didReceiveRemoteNotification:proberNotification];
+#pragma clang diagnostic pop
+#endif
+ } else {
+ FIRLogWarning(kFIRLoggerAuth, @"I-AUT000015",
+ @"The UIApplicationDelegate must handle remote notification for phone number "
+ @"authentication to work.");
+ }
+ });
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_timeout * NSEC_PER_SEC)),
+ FIRAuthGlobalWorkQueue(), ^{
+ [self callBack];
+ });
+}
+
+- (BOOL)canHandleNotification:(NSDictionary *)notification {
+ NSDictionary *data = notification[kNotificationDataKey];
+ if ([data isKindOfClass:[NSString class]]) {
+ // Deserialize in case the data is a JSON string.
+ NSData *JSONData = [((NSString *)data) dataUsingEncoding:NSUTF8StringEncoding];
+ data = [NSJSONSerialization JSONObjectWithData:JSONData options:0 error:NULL];
+ }
+ if (![data isKindOfClass:[NSDictionary class]]) {
+ return NO;
+ }
+ if (data[kNotificationProberKey]) {
+ if (!_pendingCallbacks) {
+ // The prober notification probably comes from another instance, so pass it along.
+ return NO;
+ }
+ _isNotificationBeingForwarded = YES;
+ [self callBack];
+ return YES;
+ }
+ NSString *receipt = data[kNotificationReceiptKey];
+ if (![receipt isKindOfClass:[NSString class]]) {
+ return NO;
+ }
+ NSString *secret = data[kNotificationSecretKey];
+ if (![receipt isKindOfClass:[NSString class]]) {
+ return NO;
+ }
+ return [_appCredentialManager canFinishVerificationWithReceipt:receipt secret:secret];
+}
+
+#pragma mark - Internal methods
+
+/** @fn callBack
+ @brief Calls back all pending callbacks with the result of notification forwarding check.
+ */
+- (void)callBack {
+ if (!_pendingCallbacks) {
+ return;
+ }
+ NSArray<FIRAuthNotificationForwardingCallback> *allCallbacks = _pendingCallbacks;
+ _pendingCallbacks = nil;
+ for (FIRAuthNotificationForwardingCallback callback in allCallbacks) {
+ callback(_isNotificationBeingForwarded);
+ }
+};
+
+@end
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.h
new file mode 100644
index 00000000..9879f457
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRUser.h"
+
+#import "FirebaseAuth/Sources/Storage/FIRAuthKeychainServices.h"
+#import "FirebaseAuth/Sources/Storage/FIRAuthUserDefaults.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthStoredUserManager : NSObject
+
+/** @property keychain
+ @brief The mediator object to access to the system Keychain services.
+ */
+@property(readonly, nonatomic, strong) FIRAuthKeychainServices *keychainServices;
+
+/** @property userDefaults
+ @brief The mediator object to access to the system User Defaults services.
+ */
+@property(readonly, nonatomic, strong) FIRAuthUserDefaults *userDefaults;
+
+/** @fn init
+ @brief The default initializer is disabled.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithServiceName:
+ @brief The designated initializer.
+ @param serviceName The service name to initialize with.
+ */
+- (instancetype)initWithServiceName:(NSString *)serviceName NS_DESIGNATED_INITIALIZER;
+
+/** @fn getStoredUserAccessGroupWithError:
+ @brief Get the user access group stored locally.
+ @param outError Return value for any error which occurs.
+ */
+- (NSString *_Nullable)getStoredUserAccessGroupWithError:(NSError *_Nullable *_Nullable)outError;
+
+/** @fn setStoredUserAccessGroup:error:
+ @brief The setter of the user access group stored locally.
+ @param accessGroup The access group to be set.
+ @param outError Return value for any error which occurs.
+ */
+- (BOOL)setStoredUserAccessGroup:(NSString *_Nullable)accessGroup
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** @fn getStoredUserForAccessGroup:projectID:error:
+ @brief The getter of the user stored locally.
+ @param accessGroup The access group to retrieve the user from.
+ @param projectIdentifier An identifier of the project that the user associates with. Currently,
+ we use API KEY.
+ @param outError Return value for any error which occurs.
+ */
+- (FIRUser *)getStoredUserForAccessGroup:(NSString *)accessGroup
+ projectIdentifier:(NSString *)projectIdentifier
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** @fn setStoredUser:forAccessGroup:projectID:error:
+ @brief The setter of the user stored locally.
+ @param user The user to be stored.
+ @param accessGroup The access group to store the user in.
+ @param projectIdentifier An identifier of the project that the user associates with. Currently,
+ we use API KEY.
+ @param outError Return value for any error which occurs.
+ */
+- (BOOL)setStoredUser:(FIRUser *)user
+ forAccessGroup:(NSString *)accessGroup
+ projectIdentifier:(NSString *)projectIdentifier
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** @fn removeStoredUserForAccessGroup:projectID:error:
+ @brief Remove the user that stored locally.
+ @param accessGroup The access group to remove the user from.
+ @param projectIdentifier An identifier of the project that the user associates with. Currently,
+ we use API KEY.
+ @param outError Return value for any error which occurs.
+ */
+- (BOOL)removeStoredUserForAccessGroup:(NSString *)accessGroup
+ projectIdentifier:(NSString *)projectIdentifier
+ error:(NSError *_Nullable *_Nullable)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.m
new file mode 100644
index 00000000..0eeb3e81
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.m
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/SystemService/FIRAuthStoredUserManager.h"
+
+/** @var kUserAccessGroupKey
+ @brief Key of user access group stored in user defaults. Used for retrieve the user access
+ group at launch.
+ */
+static NSString *kStoredUserAccessGroupKey = @"firebase_auth_stored_user_access_group";
+
+/** @var kSharedKeychainAccountValue
+ @brief Default value for kSecAttrAccount of shared keychain items.
+ */
+static NSString *kSharedKeychainAccountValue = @"firebase_auth_firebase_user";
+
+/** @var kStoredUserCoderKey
+ @brief The key to encode and decode the stored user.
+ */
+static NSString *kStoredUserCoderKey = @"firebase_auth_stored_user_coder_key";
+
+@implementation FIRAuthStoredUserManager
+
+#pragma mark - Initializers
+
+- (instancetype)initWithServiceName:(NSString *)serviceName {
+ self = [super init];
+ if (self) {
+ _keychainServices = [[FIRAuthKeychainServices alloc] initWithService:serviceName];
+ _userDefaults = [[FIRAuthUserDefaults alloc] initWithService:serviceName];
+ }
+ return self;
+}
+
+#pragma mark - User Access Group
+
+- (NSString *_Nullable)getStoredUserAccessGroupWithError:(NSError *_Nullable *_Nullable)outError {
+ NSData *data = [self.userDefaults dataForKey:kStoredUserAccessGroupKey error:outError];
+ if (data) {
+ NSString *userAccessGroup = [NSString stringWithUTF8String:data.bytes];
+ return userAccessGroup;
+ } else {
+ return nil;
+ }
+}
+
+- (BOOL)setStoredUserAccessGroup:(NSString *_Nullable)accessGroup
+ error:(NSError *_Nullable *_Nullable)outError {
+ NSData *data = [accessGroup dataUsingEncoding:NSUTF8StringEncoding];
+ if (!data) {
+ return [self.userDefaults removeDataForKey:kStoredUserAccessGroupKey error:outError];
+ } else {
+ return [self.userDefaults setData:data forKey:kStoredUserAccessGroupKey error:outError];
+ }
+}
+
+#pragma mark - User for Access Group
+
+- (FIRUser *)getStoredUserForAccessGroup:(NSString *)accessGroup
+ projectIdentifier:(NSString *)projectIdentifier
+ error:(NSError *_Nullable *_Nullable)outError {
+ NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
+ query[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword;
+
+ query[(__bridge id)kSecAttrAccessGroup] = accessGroup;
+ query[(__bridge id)kSecAttrService] = projectIdentifier;
+ query[(__bridge id)kSecAttrAccount] = kSharedKeychainAccountValue;
+
+ NSData *data = [self.keychainServices getItemWithQuery:query error:outError];
+// iOS 12 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
+#pragma clang diagnostic pop
+ FIRUser *user = [unarchiver decodeObjectOfClass:[FIRUser class] forKey:kStoredUserCoderKey];
+
+ return user;
+}
+
+- (BOOL)setStoredUser:(FIRUser *)user
+ forAccessGroup:(NSString *)accessGroup
+ projectIdentifier:(NSString *)projectIdentifier
+ error:(NSError *_Nullable *_Nullable)outError {
+ NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
+ query[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword;
+ query[(__bridge id)kSecAttrAccessible] =
+ (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;
+
+ query[(__bridge id)kSecAttrAccessGroup] = accessGroup;
+ query[(__bridge id)kSecAttrService] = projectIdentifier;
+ query[(__bridge id)kSecAttrAccount] = kSharedKeychainAccountValue;
+
+ NSMutableData *data = [NSMutableData data];
+// iOS 12 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
+#pragma clang diagnostic pop
+ [archiver encodeObject:user forKey:kStoredUserCoderKey];
+ [archiver finishEncoding];
+
+ return [self.keychainServices setItem:data withQuery:query error:outError];
+}
+
+- (BOOL)removeStoredUserForAccessGroup:(NSString *)accessGroup
+ projectIdentifier:(NSString *)projectIdentifier
+ error:(NSError *_Nullable *_Nullable)outError {
+ NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
+ query[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword;
+ query[(__bridge id)kSecAttrAccessible] =
+ (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly;
+
+ query[(__bridge id)kSecAttrAccessGroup] = accessGroup;
+ query[(__bridge id)kSecAttrService] = projectIdentifier;
+ query[(__bridge id)kSecAttrAccount] = kSharedKeychainAccountValue;
+
+ return [self.keychainServices removeItemWithQuery:query error:outError];
+}
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.h
new file mode 100644
index 00000000..ba03b7dd
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthRequestConfiguration;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRFetchAccessTokenCallback
+ @brief The callback used to return the value of attempting to fetch an access token.
+
+ In the event the operation was successful @c token will be set and @c error will be @c nil.
+ In the event of failure @c token will be @c nil and @c error will be set.
+ @c tokenUpdated indicates whether either the access or the refresh token has been updated.
+
+ The token returned should be considered ephemeral and not cached. It should be used immediately
+ and discarded. All operations that need this token should call fetchAccessToken and do their
+ work from the callback.
+ */
+typedef void (^FIRFetchAccessTokenCallback)(NSString *_Nullable token,
+ NSError *_Nullable error,
+ BOOL tokenUpdated);
+
+/** @class FIRSecureTokenService
+ @brief Provides services for token exchanges and refreshes.
+ */
+@interface FIRSecureTokenService : NSObject <NSSecureCoding>
+
+/** @property requestConfiguration
+ @brief The configuration for making requests to server.
+ */
+@property(nonatomic, strong) FIRAuthRequestConfiguration *requestConfiguration;
+
+/** @property rawAccessToken
+ @brief The cached access token.
+ @remarks This method is specifically for providing the access token to internal clients during
+ deserialization and sign-in events, and should not be used to retrieve the access token by
+ anyone else.
+ */
+@property(nonatomic, copy, readonly) NSString *rawAccessToken;
+
+/** @property refreshToken
+ @brief The refresh token for the user, or @c nil if the user has yet completed sign-in flow.
+ @remarks This property needs to be set manually after the instance is decoded from archive.
+ */
+@property(nonatomic, copy, readonly, nullable) NSString *refreshToken;
+
+/** @property accessTokenExpirationDate
+ @brief The expiration date of the cached access token.
+ */
+@property(nonatomic, copy, readonly, nullable) NSDate *accessTokenExpirationDate;
+
+/** @fn initWithRequestConfiguration:authorizationCode:
+ @brief Creates a @c FIRSecureTokenService with an authroization code.
+ @param requestConfiguration The configuration for making requests to server.
+ @param authorizationCode An authorization code which needs to be exchanged for STS tokens.
+ */
+- (instancetype)initWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ authorizationCode:(NSString *)authorizationCode;
+
+/** @fn initWithRequestConfiguration:accessToken:accessTokenExpirationDate:refreshToken
+ @brief Creates a @c FIRSecureTokenService with access and refresh tokens.
+ @param requestConfiguration The configuration for making requests to server.
+ @param accessToken The STS access token.
+ @param accessTokenExpirationDate The approximate expiration date of the access token.
+ @param refreshToken The STS refresh token.
+ */
+- (instancetype)initWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ accessToken:(nullable NSString *)accessToken
+ accessTokenExpirationDate:(nullable NSDate *)accessTokenExpirationDate
+ refreshToken:(NSString *)refreshToken;
+
+/** @fn fetchAccessTokenForcingRefresh:callback:
+ @brief Fetch a fresh ephemeral access token for the ID associated with this instance. The token
+ received in the callback should be considered short lived and not cached.
+ @param forceRefresh Forces the token to be refreshed.
+ @param callback Callback block that will be called to return either the token or an error.
+ Invoked asyncronously on the auth global work queue in the future.
+ */
+- (void)fetchAccessTokenForcingRefresh:(BOOL)forceRefresh
+ callback:(FIRFetchAccessTokenCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.m
new file mode 100644
index 00000000..12efe09f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/SystemService/FIRSecureTokenService.m
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/SystemService/FIRSecureTokenService.h"
+
+#import "FirebaseAuth/Sources/Public/FIRAuth.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSecureTokenResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kAPIKeyCodingKey
+ @brief The key used to encode the APIKey for NSSecureCoding.
+ */
+static NSString *const kAPIKeyCodingKey = @"APIKey";
+
+/** @var kRefreshTokenKey
+ @brief The key used to encode the refresh token for NSSecureCoding.
+ */
+static NSString *const kRefreshTokenKey = @"refreshToken";
+
+/** @var kAccessTokenKey
+ @brief The key used to encode the access token for NSSecureCoding.
+ */
+static NSString *const kAccessTokenKey = @"accessToken";
+
+/** @var kAccessTokenExpirationDateKey
+ @brief The key used to encode the access token expiration date for NSSecureCoding.
+ */
+static NSString *const kAccessTokenExpirationDateKey = @"accessTokenExpirationDate";
+
+/** @var kFiveMinutes
+ @brief Five minutes (in seconds.)
+ */
+static const NSTimeInterval kFiveMinutes = 5 * 60;
+
+@interface FIRSecureTokenService ()
+- (instancetype)init NS_DESIGNATED_INITIALIZER;
+@end
+
+@implementation FIRSecureTokenService {
+ /** @var _taskQueue
+ @brief Used to serialize all requests for access tokens.
+ */
+ FIRAuthSerialTaskQueue *_taskQueue;
+
+ /** @var _authorizationCode
+ @brief An authorization code which needs to be exchanged for Secure Token Service tokens.
+ */
+ NSString *_Nullable _authorizationCode;
+
+ /** @var _accessToken
+ @brief The currently cached access token. Or |nil| if no token is currently cached.
+ */
+ NSString *_Nullable _accessToken;
+}
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _taskQueue = [[FIRAuthSerialTaskQueue alloc] init];
+ }
+ return self;
+}
+
+- (instancetype)initWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ authorizationCode:(NSString *)authorizationCode {
+ self = [self init];
+ if (self) {
+ _requestConfiguration = requestConfiguration;
+ _authorizationCode = [authorizationCode copy];
+ }
+ return self;
+}
+
+- (instancetype)initWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ accessToken:(nullable NSString *)accessToken
+ accessTokenExpirationDate:(nullable NSDate *)accessTokenExpirationDate
+ refreshToken:(NSString *)refreshToken {
+ self = [self init];
+ if (self) {
+ _requestConfiguration = requestConfiguration;
+ _accessToken = [accessToken copy];
+ _accessTokenExpirationDate = [accessTokenExpirationDate copy];
+ _refreshToken = [refreshToken copy];
+ }
+ return self;
+}
+
+- (void)fetchAccessTokenForcingRefresh:(BOOL)forceRefresh
+ callback:(FIRFetchAccessTokenCallback)callback {
+ [_taskQueue enqueueTask:^(FIRAuthSerialTaskCompletionBlock complete) {
+ if (!forceRefresh && [self hasValidAccessToken]) {
+ complete();
+ callback(self->_accessToken, nil, NO);
+ } else {
+ [self requestAccessToken:^(NSString *_Nullable token, NSError *_Nullable error,
+ BOOL tokenUpdated) {
+ complete();
+ callback(token, error, tokenUpdated);
+ }];
+ }
+ }];
+}
+
+- (NSString *)rawAccessToken {
+ return _accessToken;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *refreshToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:kRefreshTokenKey];
+ NSString *accessToken = [aDecoder decodeObjectOfClass:[NSString class] forKey:kAccessTokenKey];
+ NSDate *accessTokenExpirationDate = [aDecoder decodeObjectOfClass:[NSDate class]
+ forKey:kAccessTokenExpirationDateKey];
+ if (!refreshToken) {
+ return nil;
+ }
+ self = [self init];
+ if (self) {
+ _refreshToken = refreshToken;
+ _accessToken = accessToken;
+ _accessTokenExpirationDate = accessTokenExpirationDate;
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ // The API key is encoded even it is not used in decoding to be compatible with previous versions
+ // of the library.
+ [aCoder encodeObject:_requestConfiguration.APIKey forKey:kAPIKeyCodingKey];
+ // Authorization code is not encoded because it is not long-lived.
+ [aCoder encodeObject:_refreshToken forKey:kRefreshTokenKey];
+ [aCoder encodeObject:_accessToken forKey:kAccessTokenKey];
+ [aCoder encodeObject:_accessTokenExpirationDate forKey:kAccessTokenExpirationDateKey];
+}
+
+#pragma mark - Private methods
+
+/** @fn requestAccessToken:
+ @brief Makes a request to STS for an access token.
+ @details This handles both the case that the token has not been granted yet and that it just
+ needs to be refreshed. The caller is responsible for making sure that this is occurring in
+ a @c _taskQueue task.
+ @param callback Called when the fetch is complete. Invoked asynchronously on the main thread in
+ the future.
+ @remarks Because this method is guaranteed to only be called from tasks enqueued in
+ @c _taskQueue, we do not need any @synchronized guards around access to _accessToken/etc.
+ since only one of those tasks is ever running at a time, and those tasks are the only
+ access to and mutation of these instance variables.
+ */
+- (void)requestAccessToken:(FIRFetchAccessTokenCallback)callback {
+ FIRSecureTokenRequest *request;
+ if (_refreshToken.length) {
+ request = [FIRSecureTokenRequest refreshRequestWithRefreshToken:_refreshToken
+ requestConfiguration:_requestConfiguration];
+ } else {
+ request = [FIRSecureTokenRequest authCodeRequestWithCode:_authorizationCode
+ requestConfiguration:_requestConfiguration];
+ }
+ [FIRAuthBackend
+ secureToken:request
+ callback:^(FIRSecureTokenResponse *_Nullable response, NSError *_Nullable error) {
+ BOOL tokenUpdated = NO;
+ NSString *newAccessToken = response.accessToken;
+ if (newAccessToken.length && ![newAccessToken isEqualToString:self->_accessToken]) {
+ self->_accessToken = [newAccessToken copy];
+ self->_accessTokenExpirationDate = response.approximateExpirationDate;
+ tokenUpdated = YES;
+ }
+ NSString *newRefreshToken = response.refreshToken;
+ if (newRefreshToken.length && ![newRefreshToken isEqualToString:self->_refreshToken]) {
+ self->_refreshToken = [newRefreshToken copy];
+ tokenUpdated = YES;
+ }
+ callback(newAccessToken, error, tokenUpdated);
+ }];
+}
+
+- (BOOL)hasValidAccessToken {
+ return _accessToken && [_accessTokenExpirationDate timeIntervalSinceNow] > kFiveMinutes;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo.m
new file mode 100644
index 00000000..52f56c4f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo.m
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h"
+#import "FirebaseAuth/Sources/User/FIRAdditionalUserInfo_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAdditionalUserInfo
+
+/** @var kProviderIDCodingKey
+ @brief The key used to encode the providerID property for NSSecureCoding.
+ */
+static NSString *const kProviderIDCodingKey = @"providerID";
+
+/** @var kProfileCodingKey
+ @brief The key used to encode the profile property for NSSecureCoding.
+ */
+static NSString *const kProfileCodingKey = @"profile";
+
+/** @var kUsernameCodingKey
+ @brief The key used to encode the username property for NSSecureCoding.
+ */
+static NSString *const kUsernameCodingKey = @"username";
+
+/** @var kNewUserKey
+ @brief The key used to encode the newUser property for NSSecureCoding.
+ */
+static NSString *const kNewUserKey = @"newUser";
+
++ (nullable instancetype)userInfoWithVerifyAssertionResponse:
+ (FIRVerifyAssertionResponse *)verifyAssertionResponse {
+ return [[self alloc] initWithProviderID:verifyAssertionResponse.providerID
+ profile:verifyAssertionResponse.profile
+ username:verifyAssertionResponse.username
+ isNewUser:verifyAssertionResponse.isNewUser];
+}
+
+- (nullable instancetype)initWithProviderID:(nullable NSString *)providerID
+ profile:(nullable NSDictionary<NSString *, NSObject *> *)profile
+ username:(nullable NSString *)username
+ isNewUser:(BOOL)isNewUser {
+ self = [super init];
+ if (self) {
+ _providerID = [providerID copy];
+ if (profile) {
+ _profile = [[NSDictionary alloc] initWithDictionary:profile copyItems:YES];
+ }
+ _username = [username copy];
+ _newUser = isNewUser;
+ }
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *providerID = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kProviderIDCodingKey];
+ NSDictionary<NSString *, NSObject *> *profile = [aDecoder decodeObjectOfClass:[NSDictionary class]
+ forKey:kProfileCodingKey];
+ NSString *username = [aDecoder decodeObjectOfClass:[NSString class] forKey:kUsernameCodingKey];
+ NSNumber *isNewUser = [aDecoder decodeObjectOfClass:[NSNumber class] forKey:kNewUserKey];
+
+ return [self initWithProviderID:providerID
+ profile:profile
+ username:username
+ isNewUser:isNewUser.boolValue];
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_providerID forKey:kProviderIDCodingKey];
+ [aCoder encodeObject:_profile forKey:kProfileCodingKey];
+ [aCoder encodeObject:_username forKey:kUsernameCodingKey];
+ [aCoder encodeObject:[NSNumber numberWithBool:_newUser] forKey:kNewUserKey];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo_Internal.h
new file mode 100644
index 00000000..24e57601
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRAdditionalUserInfo_Internal.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRAdditionalUserInfo.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAdditionalUserInfo () <NSSecureCoding>
+
+/** @fn userInfoWithVerifyAssertionResponse:
+ @brief A convenience factory method for constructing a @c FIRAdditionalUserInfo instance from
+ data returned by the verifyAssertion endpoint.
+ @param verifyAssertionResponse Data returned by the verifyAssertion endpoint.
+ @return A new instance of @c FIRAdditionalUserInfo using data from the verifyAssertion endpoint.
+ */
++ (nullable instancetype)userInfoWithVerifyAssertionResponse:
+ (FIRVerifyAssertionResponse *)verifyAssertionResponse;
+
+/** @fn initWithProviderID:profile:username:
+ @brief Designated initializer.
+ @param providerID The provider identifier.
+ @param profile Dictionary containing the additional IdP specific information.
+ @param username The name of the user.
+ @param isNewUser Indicates whether or not the current user was signed in for the first time.
+ */
+- (nullable instancetype)initWithProviderID:(nullable NSString *)providerID
+ profile:(nullable NSDictionary<NSString *, NSObject *> *)profile
+ username:(nullable NSString *)username
+ isNewUser:(BOOL)isNewUser NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser.m
new file mode 100644
index 00000000..dc2a17a0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser.m
@@ -0,0 +1,1604 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRAuth.h"
+#import "FirebaseAuth/Sources/Public/FIREmailAuthProvider.h"
+#import "FirebaseAuth/Sources/Public/FIRFederatedAuthProvider.h"
+#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthDataResult_Internal.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuthOperationType.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuthSerialTaskQueue.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuthTokenResult_Internal.h"
+#import "FirebaseAuth/Sources/Auth/FIRAuth_Internal.h"
+#import "FirebaseAuth/Sources/AuthProvider/Email/FIREmailPasswordAuthCredential.h"
+#import "FirebaseAuth/Sources/AuthProvider/FIRAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/AuthProvider/GameCenter/FIRGameCenterAuthCredential.h"
+#import "FirebaseAuth/Sources/AuthProvider/OAuth/FIROAuthCredential_Internal.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+#import "FirebaseAuth/Sources/Backend/FIRAuthRequestConfiguration.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRDeleteAccountResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIREmailLinkSignInRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetOOBConfirmationCodeResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSetAccountInfoResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRSignInWithGameCenterResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyAssertionResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyCustomTokenResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPasswordResponse.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRVerifyPhoneNumberResponse.h"
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactor+Internal.h"
+#import "FirebaseAuth/Sources/SystemService/FIRSecureTokenService.h"
+#import "FirebaseAuth/Sources/User/FIRAdditionalUserInfo_Internal.h"
+#import "FirebaseAuth/Sources/User/FIRUserInfoImpl.h"
+#import "FirebaseAuth/Sources/User/FIRUserMetadata_Internal.h"
+#import "FirebaseAuth/Sources/User/FIRUser_Internal.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h"
+
+#if TARGET_OS_IOS
+#import "FirebaseAuth/Sources/Public/FIRPhoneAuthProvider.h"
+
+#import "FirebaseAuth/Sources/AuthProvider/Phone/FIRPhoneAuthCredential_Internal.h"
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kUserIDCodingKey
+ @brief The key used to encode the user ID for NSSecureCoding.
+ */
+static NSString *const kUserIDCodingKey = @"userID";
+
+/** @var kHasEmailPasswordCredentialCodingKey
+ @brief The key used to encode the hasEmailPasswordCredential property for NSSecureCoding.
+ */
+static NSString *const kHasEmailPasswordCredentialCodingKey = @"hasEmailPassword";
+
+/** @var kAnonymousCodingKey
+ @brief The key used to encode the anonymous property for NSSecureCoding.
+ */
+static NSString *const kAnonymousCodingKey = @"anonymous";
+
+/** @var kEmailCodingKey
+ @brief The key used to encode the email property for NSSecureCoding.
+ */
+static NSString *const kEmailCodingKey = @"email";
+
+/** @var kPhoneNumberCodingKey
+ @brief The key used to encode the phoneNumber property for NSSecureCoding.
+ */
+static NSString *const kPhoneNumberCodingKey = @"phoneNumber";
+
+/** @var kEmailVerifiedCodingKey
+ @brief The key used to encode the isEmailVerified property for NSSecureCoding.
+ */
+static NSString *const kEmailVerifiedCodingKey = @"emailVerified";
+
+/** @var kDisplayNameCodingKey
+ @brief The key used to encode the displayName property for NSSecureCoding.
+ */
+static NSString *const kDisplayNameCodingKey = @"displayName";
+
+/** @var kPhotoURLCodingKey
+ @brief The key used to encode the photoURL property for NSSecureCoding.
+ */
+static NSString *const kPhotoURLCodingKey = @"photoURL";
+
+/** @var kProviderDataKey
+ @brief The key used to encode the providerData instance variable for NSSecureCoding.
+ */
+static NSString *const kProviderDataKey = @"providerData";
+
+/** @var kAPIKeyCodingKey
+ @brief The key used to encode the APIKey instance variable for NSSecureCoding.
+ */
+static NSString *const kAPIKeyCodingKey = @"APIKey";
+
+/** @var kTokenServiceCodingKey
+ @brief The key used to encode the tokenService instance variable for NSSecureCoding.
+ */
+static NSString *const kTokenServiceCodingKey = @"tokenService";
+
+/** @var kMetadataCodingKey
+ @brief The key used to encode the metadata instance variable for NSSecureCoding.
+ */
+static NSString *const kMetadataCodingKey = @"metadata";
+
+static NSString *const kMultiFactorCodingKey = @"multiFactor";
+
+/** @var kMissingUsersErrorMessage
+ @brief The error message when there is no users array in the getAccountInfo response.
+ */
+static NSString *const kMissingUsersErrorMessage = @"users";
+
+/** @typedef CallbackWithError
+ @brief The type for a callback block that only takes an error parameter.
+ */
+typedef void (^CallbackWithError)(NSError *_Nullable);
+
+/** @typedef CallbackWithUserAndError
+ @brief The type for a callback block that takes a user parameter and an error parameter.
+ */
+typedef void (^CallbackWithUserAndError)(FIRUser *_Nullable, NSError *_Nullable);
+
+/** @typedef CallbackWithUserAndError
+ @brief The type for a callback block that takes a user parameter and an error parameter.
+ */
+typedef void (^CallbackWithAuthDataResultAndError)(FIRAuthDataResult *_Nullable,
+ NSError *_Nullable);
+
+/** @var kMissingPasswordReason
+ @brief The reason why the @c FIRAuthErrorCodeWeakPassword error is thrown.
+ @remarks This error message will be localized in the future.
+ */
+static NSString *const kMissingPasswordReason = @"Missing Password";
+
+/** @fn callInMainThreadWithError
+ @brief Calls a callback in main thread with error.
+ @param callback The callback to be called in main thread.
+ @param error The error to pass to callback.
+ */
+static void callInMainThreadWithError(_Nullable CallbackWithError callback,
+ NSError *_Nullable error) {
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(error);
+ });
+ }
+}
+
+/** @fn callInMainThreadWithUserAndError
+ @brief Calls a callback in main thread with user and error.
+ @param callback The callback to be called in main thread.
+ @param user The user to pass to callback if there is no error.
+ @param error The error to pass to callback.
+ */
+static void callInMainThreadWithUserAndError(_Nullable CallbackWithUserAndError callback,
+ FIRUser *_Nonnull user,
+ NSError *_Nullable error) {
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(error ? nil : user, error);
+ });
+ }
+}
+
+/** @fn callInMainThreadWithUserAndError
+ @brief Calls a callback in main thread with user and error.
+ @param callback The callback to be called in main thread.
+ @param result The result to pass to callback if there is no error.
+ @param error The error to pass to callback.
+ */
+static void callInMainThreadWithAuthDataResultAndError(
+ _Nullable CallbackWithAuthDataResultAndError callback,
+ FIRAuthDataResult *_Nullable result,
+ NSError *_Nullable error) {
+ if (callback) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ callback(result, error);
+ });
+ }
+}
+
+@interface FIRUserProfileChangeRequest ()
+
+/** @fn initWithUser:
+ @brief Designated initializer.
+ @param user The user for which we are updating profile information.
+ */
+- (nullable instancetype)initWithUser:(FIRUser *)user NS_DESIGNATED_INITIALIZER;
+
+@end
+
+@interface FIRUser ()
+
+/** @property anonymous
+ @brief Whether the current user is anonymous.
+ */
+@property(nonatomic, readwrite) BOOL anonymous;
+
+@end
+
+@implementation FIRUser {
+ /** @var _hasEmailPasswordCredential
+ @brief Whether or not the user can be authenticated by using Firebase email and password.
+ */
+ BOOL _hasEmailPasswordCredential;
+
+ /** @var _providerData
+ @brief Provider specific user data.
+ */
+ NSDictionary<NSString *, FIRUserInfoImpl *> *_providerData;
+
+ /** @var _taskQueue
+ @brief Used to serialize the update profile calls.
+ */
+ FIRAuthSerialTaskQueue *_taskQueue;
+
+ /** @var _tokenService
+ @brief A secure token service associated with this user. For performing token exchanges and
+ refreshing access tokens.
+ */
+ FIRSecureTokenService *_tokenService;
+}
+
+#pragma mark - Properties
+
+// Explicitly @synthesize because these properties are defined in FIRUserInfo protocol.
+@synthesize uid = _userID;
+@synthesize displayName = _displayName;
+@synthesize photoURL = _photoURL;
+@synthesize email = _email;
+@synthesize phoneNumber = _phoneNumber;
+
+#pragma mark -
+
++ (void)retrieveUserWithAuth:(FIRAuth *)auth
+ accessToken:(nullable NSString *)accessToken
+ accessTokenExpirationDate:(nullable NSDate *)accessTokenExpirationDate
+ refreshToken:(nullable NSString *)refreshToken
+ anonymous:(BOOL)anonymous
+ callback:(FIRRetrieveUserCallback)callback {
+ FIRSecureTokenService *tokenService =
+ [[FIRSecureTokenService alloc] initWithRequestConfiguration:auth.requestConfiguration
+ accessToken:accessToken
+ accessTokenExpirationDate:accessTokenExpirationDate
+ refreshToken:refreshToken];
+ FIRUser *user = [[self alloc] initWithTokenService:tokenService];
+ user.auth = auth;
+ user.requestConfiguration = auth.requestConfiguration;
+ [user internalGetTokenWithCallback:^(NSString *_Nullable accessToken, NSError *_Nullable error) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ FIRGetAccountInfoRequest *getAccountInfoRequest =
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:accessToken
+ requestConfiguration:auth.requestConfiguration];
+ [FIRAuthBackend
+ getAccountInfo:getAccountInfoRequest
+ callback:^(FIRGetAccountInfoResponse *_Nullable response, NSError *_Nullable error) {
+ if (error) {
+ // No need to sign out user here for errors because the user hasn't been signed in
+ // yet.
+ callback(nil, error);
+ return;
+ }
+ user.anonymous = anonymous;
+ [user updateWithGetAccountInfoResponse:response];
+ callback(user, nil);
+ }];
+ }];
+}
+
+- (instancetype)initWithTokenService:(FIRSecureTokenService *)tokenService {
+ self = [super init];
+ if (self) {
+ _providerData = @{};
+ _taskQueue = [[FIRAuthSerialTaskQueue alloc] init];
+ _tokenService = tokenService;
+ }
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *userID = [aDecoder decodeObjectOfClass:[NSString class] forKey:kUserIDCodingKey];
+ BOOL hasAnonymousKey = [aDecoder containsValueForKey:kAnonymousCodingKey];
+ BOOL anonymous = [aDecoder decodeBoolForKey:kAnonymousCodingKey];
+ BOOL hasEmailPasswordCredential =
+ [aDecoder decodeBoolForKey:kHasEmailPasswordCredentialCodingKey];
+ NSString *displayName = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kDisplayNameCodingKey];
+ NSURL *photoURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:kPhotoURLCodingKey];
+ NSString *email = [aDecoder decodeObjectOfClass:[NSString class] forKey:kEmailCodingKey];
+ NSString *phoneNumber = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kPhoneNumberCodingKey];
+ BOOL emailVerified = [aDecoder decodeBoolForKey:kEmailVerifiedCodingKey];
+ NSSet *providerDataClasses =
+ [NSSet setWithArray:@[ [NSDictionary class], [NSString class], [FIRUserInfoImpl class] ]];
+ NSDictionary<NSString *, FIRUserInfoImpl *> *providerData =
+ [aDecoder decodeObjectOfClasses:providerDataClasses forKey:kProviderDataKey];
+ FIRSecureTokenService *tokenService = [aDecoder decodeObjectOfClass:[FIRSecureTokenService class]
+ forKey:kTokenServiceCodingKey];
+ FIRUserMetadata *metadata = [aDecoder decodeObjectOfClass:[FIRUserMetadata class]
+ forKey:kMetadataCodingKey];
+ NSString *APIKey = [aDecoder decodeObjectOfClass:[NSString class] forKey:kAPIKeyCodingKey];
+#if TARGET_OS_IOS
+ FIRMultiFactor *multiFactor = [aDecoder decodeObjectOfClass:[FIRMultiFactor class]
+ forKey:kMultiFactorCodingKey];
+#endif
+ if (!userID || !tokenService) {
+ return nil;
+ }
+ self = [self initWithTokenService:tokenService];
+ if (self) {
+ _userID = userID;
+ // Previous version of this code didn't save 'anonymous' bit directly but deduced it from
+ // 'hasEmailPasswordCredential' and 'providerData' instead, so here backward compatibility is
+ // provided to read old format data.
+ _anonymous = hasAnonymousKey ? anonymous : (!hasEmailPasswordCredential && !providerData.count);
+ _hasEmailPasswordCredential = hasEmailPasswordCredential;
+ _email = email;
+ _emailVerified = emailVerified;
+ _displayName = displayName;
+ _photoURL = photoURL;
+ _providerData = providerData;
+ _phoneNumber = phoneNumber;
+ _metadata = metadata ?: [[FIRUserMetadata alloc] initWithCreationDate:nil lastSignInDate:nil];
+ _requestConfiguration = [[FIRAuthRequestConfiguration alloc] initWithAPIKey:APIKey];
+#if TARGET_OS_IOS
+ _multiFactor = multiFactor ?: [[FIRMultiFactor alloc] init];
+#endif
+ }
+ return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_userID forKey:kUserIDCodingKey];
+ [aCoder encodeBool:self.anonymous forKey:kAnonymousCodingKey];
+ [aCoder encodeBool:_hasEmailPasswordCredential forKey:kHasEmailPasswordCredentialCodingKey];
+ [aCoder encodeObject:_providerData forKey:kProviderDataKey];
+ [aCoder encodeObject:_email forKey:kEmailCodingKey];
+ [aCoder encodeObject:_phoneNumber forKey:kPhoneNumberCodingKey];
+ [aCoder encodeBool:_emailVerified forKey:kEmailVerifiedCodingKey];
+ [aCoder encodeObject:_photoURL forKey:kPhotoURLCodingKey];
+ [aCoder encodeObject:_displayName forKey:kDisplayNameCodingKey];
+ [aCoder encodeObject:_metadata forKey:kMetadataCodingKey];
+ [aCoder encodeObject:_auth.requestConfiguration.APIKey forKey:kAPIKeyCodingKey];
+ [aCoder encodeObject:_tokenService forKey:kTokenServiceCodingKey];
+#if TARGET_OS_IOS
+ [aCoder encodeObject:_multiFactor forKey:kMultiFactorCodingKey];
+#endif
+}
+
+#pragma mark -
+
+- (void)setAuth:(nullable FIRAuth *)auth {
+ _auth = auth;
+ _tokenService.requestConfiguration = auth.requestConfiguration;
+}
+
+- (NSString *)providerID {
+ return @"Firebase";
+}
+
+- (NSArray<id<FIRUserInfo>> *)providerData {
+ return _providerData.allValues;
+}
+
+/** @fn getAccountInfoRefreshingCache:
+ @brief Gets the users's account data from the server, updating our local values.
+ @param callback Invoked when the request to getAccountInfo has completed, or when an error has
+ been detected. Invoked asynchronously on the auth global work queue in the future.
+ */
+- (void)getAccountInfoRefreshingCache:(void (^)(FIRGetAccountInfoResponseUser *_Nullable user,
+ NSError *_Nullable error))callback {
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken, NSError *_Nullable error) {
+ if (error) {
+ callback(nil, error);
+ return;
+ }
+ FIRGetAccountInfoRequest *getAccountInfoRequest =
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:accessToken
+ requestConfiguration:self->_auth.requestConfiguration];
+ [FIRAuthBackend
+ getAccountInfo:getAccountInfoRequest
+ callback:^(FIRGetAccountInfoResponse *_Nullable response, NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ callback(nil, error);
+ return;
+ }
+ [self updateWithGetAccountInfoResponse:response];
+ if (![self updateKeychain:&error]) {
+ callback(nil, error);
+ return;
+ }
+ callback(response.users.firstObject, nil);
+ }];
+ }];
+}
+
+- (void)updateWithGetAccountInfoResponse:(FIRGetAccountInfoResponse *)response {
+ FIRGetAccountInfoResponseUser *user = response.users.firstObject;
+ _userID = user.localID;
+ _email = user.email;
+ _emailVerified = user.emailVerified;
+ _displayName = user.displayName;
+ _photoURL = user.photoURL;
+ _phoneNumber = user.phoneNumber;
+ _hasEmailPasswordCredential = user.passwordHash.length > 0;
+ _metadata = [[FIRUserMetadata alloc] initWithCreationDate:user.creationDate
+ lastSignInDate:user.lastLoginDate];
+ NSMutableDictionary<NSString *, FIRUserInfoImpl *> *providerData =
+ [NSMutableDictionary dictionary];
+ for (FIRGetAccountInfoResponseProviderUserInfo *providerUserInfo in user.providerUserInfo) {
+ FIRUserInfoImpl *userInfo =
+ [FIRUserInfoImpl userInfoWithGetAccountInfoResponseProviderUserInfo:providerUserInfo];
+ if (userInfo) {
+ providerData[providerUserInfo.providerID] = userInfo;
+ }
+ }
+ _providerData = [providerData copy];
+#if TARGET_OS_IOS
+ _multiFactor = [[FIRMultiFactor alloc] initWithMFAEnrollments:user.MFAEnrollments];
+ _multiFactor.user = self;
+#endif
+}
+
+/** @fn executeUserUpdateWithChanges:callback:
+ @brief Performs a setAccountInfo request by mutating the results of a getAccountInfo response,
+ atomically in regards to other calls to this method.
+ @param changeBlock A block responsible for mutating a template @c FIRSetAccountInfoRequest
+ @param callback A block to invoke when the change is complete. Invoked asynchronously on the
+ auth global work queue in the future.
+ */
+- (void)executeUserUpdateWithChanges:(void (^)(FIRGetAccountInfoResponseUser *,
+ FIRSetAccountInfoRequest *))changeBlock
+ callback:(nonnull FIRUserProfileChangeCallback)callback {
+ [_taskQueue enqueueTask:^(FIRAuthSerialTaskCompletionBlock _Nonnull complete) {
+ [self getAccountInfoRefreshingCache:^(FIRGetAccountInfoResponseUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (error) {
+ complete();
+ callback(error);
+ return;
+ }
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ if (error) {
+ complete();
+ callback(error);
+ return;
+ }
+ FIRAuthRequestConfiguration *configuration = self->_auth.requestConfiguration;
+ // Mutate setAccountInfoRequest in block:
+ FIRSetAccountInfoRequest *setAccountInfoRequest =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:configuration];
+ setAccountInfoRequest.accessToken = accessToken;
+ changeBlock(user, setAccountInfoRequest);
+ // Execute request:
+ [FIRAuthBackend
+ setAccountInfo:setAccountInfoRequest
+ callback:^(FIRSetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ complete();
+ callback(error);
+ return;
+ }
+ if (response.IDToken && response.refreshToken) {
+ FIRSecureTokenService *tokenService = [[FIRSecureTokenService alloc]
+ initWithRequestConfiguration:configuration
+ accessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken];
+ [self setTokenService:tokenService
+ callback:^(NSError *_Nullable error) {
+ complete();
+ callback(error);
+ }];
+ return;
+ }
+ complete();
+ callback(nil);
+ }];
+ }];
+ }];
+ }];
+}
+
+/** @fn updateKeychain:
+ @brief Updates the keychain for user token or info changes.
+ @param error The error if NO is returned.
+ @return Whether the operation is successful.
+ */
+- (BOOL)updateKeychain:(NSError *_Nullable *_Nullable)error {
+ return [_auth updateKeychainWithUser:self error:error];
+}
+
+/** @fn setTokenService:callback:
+ @brief Sets a new token service for the @c FIRUser instance.
+ @param tokenService The new token service object.
+ @param callback The block to be called in the global auth working queue once finished.
+ @remarks The method makes sure the token service has access and refresh token and the new tokens
+ are saved in the keychain before calling back.
+ */
+- (void)setTokenService:(FIRSecureTokenService *)tokenService
+ callback:(nonnull CallbackWithError)callback {
+ [tokenService fetchAccessTokenForcingRefresh:NO
+ callback:^(NSString *_Nullable token,
+ NSError *_Nullable error, BOOL tokenUpdated) {
+ if (error) {
+ callback(error);
+ return;
+ }
+ self->_tokenService = tokenService;
+ if (![self updateKeychain:&error]) {
+ callback(error);
+ return;
+ }
+ callback(nil);
+ }];
+}
+
+#pragma mark -
+
+/** @fn updateEmail:password:callback:
+ @brief Updates email address and/or password for the current user.
+ @remarks May fail if there is already an email/password-based account for the same email
+ address.
+ @param email The email address for the user, if to be updated.
+ @param password The new password for the user, if to be updated.
+ @param callback The block called when the user profile change has finished. Invoked
+ asynchronously on the auth global work queue in the future.
+ @remarks May fail with a @c FIRAuthErrorCodeRequiresRecentLogin error code.
+ Call @c reauthentateWithCredential:completion: beforehand to avoid this error case.
+ */
+- (void)updateEmail:(nullable NSString *)email
+ password:(nullable NSString *)password
+ callback:(nonnull FIRUserProfileChangeCallback)callback {
+ if (password && ![password length]) {
+ callback([FIRAuthErrorUtils weakPasswordErrorWithServerResponseReason:kMissingPasswordReason]);
+ return;
+ }
+ BOOL hadEmailPasswordCredential = _hasEmailPasswordCredential;
+ [self
+ executeUserUpdateWithChanges:^(FIRGetAccountInfoResponseUser *user,
+ FIRSetAccountInfoRequest *request) {
+ if (email) {
+ request.email = email;
+ }
+ if (password) {
+ request.password = password;
+ }
+ }
+ callback:^(NSError *error) {
+ if (error) {
+ callback(error);
+ return;
+ }
+ if (email) {
+ self->_email = [email copy];
+ }
+ if (self->_email) {
+ if (!hadEmailPasswordCredential) {
+ // The list of providers need to be updated for the newly added email-password provider.
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ if (error) {
+ callback(error);
+ return;
+ }
+ FIRAuthRequestConfiguration *requestConfiguration = self->_auth.requestConfiguration;
+ FIRGetAccountInfoRequest *getAccountInfoRequest =
+ [[FIRGetAccountInfoRequest alloc] initWithAccessToken:accessToken
+ requestConfiguration:requestConfiguration];
+ [FIRAuthBackend
+ getAccountInfo:getAccountInfoRequest
+ callback:^(FIRGetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ callback(error);
+ return;
+ }
+ for (FIRGetAccountInfoResponseUser *userAccountInfo in response.users) {
+ // Set the account to non-anonymous if there are any providers, even if
+ // they're not email/password ones.
+ if (userAccountInfo.providerUserInfo.count > 0) {
+ self.anonymous = NO;
+ }
+ for (FIRGetAccountInfoResponseProviderUserInfo
+ *providerUserInfo in userAccountInfo.providerUserInfo) {
+ if ([providerUserInfo.providerID
+ isEqualToString:FIREmailAuthProviderID]) {
+ self->_hasEmailPasswordCredential = YES;
+ break;
+ }
+ }
+ }
+ [self updateWithGetAccountInfoResponse:response];
+ if (![self updateKeychain:&error]) {
+ callback(error);
+ return;
+ }
+ callback(nil);
+ }];
+ }];
+ return;
+ }
+ }
+ if (![self updateKeychain:&error]) {
+ callback(error);
+ return;
+ }
+ callback(nil);
+ }];
+}
+
+- (void)updateEmail:(NSString *)email completion:(nullable FIRUserProfileChangeCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self updateEmail:email
+ password:nil
+ callback:^(NSError *_Nullable error) {
+ callInMainThreadWithError(completion, error);
+ }];
+ });
+}
+
+- (void)updatePassword:(NSString *)password
+ completion:(nullable FIRUserProfileChangeCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self updateEmail:nil
+ password:password
+ callback:^(NSError *_Nullable error) {
+ callInMainThreadWithError(completion, error);
+ }];
+ });
+}
+
+#if TARGET_OS_IOS
+/** @fn internalUpdateOrLinkPhoneNumberCredential:completion:
+ @brief Updates the phone number for the user. On success, the cached user profile data is
+ updated.
+
+ @param phoneAuthCredential The new phone number credential corresponding to the phone number
+ to be added to the Firebase account, if a phone number is already linked to the account this
+ new phone number will replace it.
+ @param isLinkOperation Boolean value indicating whether or not this is a link operation.
+ @param completion Optionally; the block invoked when the user profile change has finished.
+ Invoked asynchronously on the global work queue in the future.
+ */
+- (void)internalUpdateOrLinkPhoneNumberCredential:(FIRPhoneAuthCredential *)phoneAuthCredential
+ isLinkOperation:(BOOL)isLinkOperation
+ completion:(FIRUserProfileChangeCallback)completion {
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken, NSError *_Nullable error) {
+ if (error) {
+ completion(error);
+ return;
+ }
+ FIRAuthOperationType operation =
+ isLinkOperation ? FIRAuthOperationTypeLink : FIRAuthOperationTypeUpdate;
+ FIRVerifyPhoneNumberRequest *request = [[FIRVerifyPhoneNumberRequest alloc]
+ initWithVerificationID:phoneAuthCredential.verificationID
+ verificationCode:phoneAuthCredential.verificationCode
+ operation:operation
+ requestConfiguration:self->_auth.requestConfiguration];
+ request.accessToken = accessToken;
+ [FIRAuthBackend verifyPhoneNumber:request
+ callback:^(FIRVerifyPhoneNumberResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ completion(error);
+ return;
+ }
+ // Get account info to update cached user info.
+ [self getAccountInfoRefreshingCache:^(
+ FIRGetAccountInfoResponseUser *_Nullable user,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ completion(error);
+ return;
+ }
+ self.anonymous = NO;
+ if (![self updateKeychain:&error]) {
+ completion(error);
+ return;
+ }
+ completion(nil);
+ }];
+ }];
+ }];
+}
+
+- (void)updatePhoneNumberCredential:(FIRPhoneAuthCredential *)phoneAuthCredential
+ completion:(nullable FIRUserProfileChangeCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self internalUpdateOrLinkPhoneNumberCredential:phoneAuthCredential
+ isLinkOperation:NO
+ completion:^(NSError *_Nullable error) {
+ callInMainThreadWithError(completion, error);
+ }];
+ });
+}
+#endif
+
+- (FIRUserProfileChangeRequest *)profileChangeRequest {
+ __block FIRUserProfileChangeRequest *result;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ result = [[FIRUserProfileChangeRequest alloc] initWithUser:self];
+ });
+ return result;
+}
+
+- (void)setDisplayName:(NSString *)displayName {
+ _displayName = [displayName copy];
+}
+
+- (void)setPhotoURL:(NSURL *)photoURL {
+ _photoURL = [photoURL copy];
+}
+
+- (NSString *)rawAccessToken {
+ return _tokenService.rawAccessToken;
+}
+
+- (NSDate *)accessTokenExpirationDate {
+ return _tokenService.accessTokenExpirationDate;
+}
+
+#pragma mark -
+
+- (void)reloadWithCompletion:(nullable FIRUserProfileChangeCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self getAccountInfoRefreshingCache:^(FIRGetAccountInfoResponseUser *_Nullable user,
+ NSError *_Nullable error) {
+ callInMainThreadWithError(completion, error);
+ }];
+ });
+}
+
+#pragma mark -
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (void)reauthenticateWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ [self reauthenticateAndRetrieveDataWithCredential:credential completion:completion];
+}
+#pragma clang diagnostic pop
+
+- (void)reauthenticateAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self->_auth
+ internalSignInAndRetrieveDataWithCredential:credential
+ isReauthentication:YES
+ callback:^(FIRAuthDataResult *_Nullable authResult,
+ NSError *_Nullable error) {
+ if (error) {
+ // If "user not found" error returned by backend,
+ // translate to user mismatch error which is more
+ // accurate.
+ if (error.code == FIRAuthErrorCodeUserNotFound) {
+ error = [FIRAuthErrorUtils userMismatchError];
+ }
+ callInMainThreadWithAuthDataResultAndError(
+ completion, authResult, error);
+ return;
+ }
+ if (![authResult.user.uid
+ isEqual:[self->_auth getUserID]]) {
+ callInMainThreadWithAuthDataResultAndError(
+ completion, authResult,
+ [FIRAuthErrorUtils userMismatchError]);
+ return;
+ }
+ // Successful reauthenticate
+ [self
+ setTokenService:authResult.user->_tokenService
+ callback:^(NSError *_Nullable error) {
+ callInMainThreadWithAuthDataResultAndError(
+ completion, authResult, error);
+ }];
+ }];
+ });
+}
+
+- (void)reauthenticateWithProvider:(id<FIRFederatedAuthProvider>)provider
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthDataResultCallback)completion {
+#if TARGET_OS_IOS
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [provider getCredentialWithUIDelegate:UIDelegate
+ completion:^(FIRAuthCredential *_Nullable credential,
+ NSError *_Nullable error) {
+ [self reauthenticateWithCredential:credential
+ completion:completion];
+ }];
+ });
+#endif // TARGET_OS_IOS
+}
+
+- (nullable NSString *)refreshToken {
+ __block NSString *result;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ result = self->_tokenService.refreshToken;
+ });
+ return result;
+}
+
+- (void)getIDTokenWithCompletion:(nullable FIRAuthTokenCallback)completion {
+ // |getIDTokenForcingRefresh:completion:| is also a public API so there is no need to dispatch to
+ // global work queue here.
+ [self getIDTokenForcingRefresh:NO completion:completion];
+}
+
+- (void)getIDTokenForcingRefresh:(BOOL)forceRefresh
+ completion:(nullable FIRAuthTokenCallback)completion {
+ [self getIDTokenResultForcingRefresh:forceRefresh
+ completion:^(FIRAuthTokenResult *_Nullable tokenResult,
+ NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(tokenResult.token, error);
+ });
+ }
+ }];
+}
+
+- (void)getIDTokenResultWithCompletion:(nullable FIRAuthTokenResultCallback)completion {
+ [self getIDTokenResultForcingRefresh:NO
+ completion:^(FIRAuthTokenResult *_Nullable tokenResult,
+ NSError *_Nullable error) {
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(tokenResult, error);
+ });
+ }
+ }];
+}
+
+- (void)getIDTokenResultForcingRefresh:(BOOL)forceRefresh
+ completion:(nullable FIRAuthTokenResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self internalGetTokenForcingRefresh:forceRefresh
+ callback:^(NSString *_Nullable token, NSError *_Nullable error) {
+ FIRAuthTokenResult *tokenResult;
+ if (token) {
+ tokenResult = [FIRAuthTokenResult tokenResultWithToken:token];
+ }
+ if (completion) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ completion(tokenResult, error);
+ });
+ }
+ }];
+ });
+}
+
+/** @fn parseIDToken:error:
+ @brief Parses the provided IDToken and returns an instance of FIRAuthTokenResult containing
+ claims obtained from the IDToken.
+
+ @param token The raw text of the Firebase IDToken encoded in base64.
+ @param error An out parameter which would contain any error that occurs during parsing.
+ @return An instance of FIRAuthTokenResult containing claims obtained from the IDToken.
+
+ @remarks IDToken returned from the backend in some cases is of a length that is not a multiple
+ of 4. In these cases this function pads the token with as many "=" characters as needed and
+ then attempts to parse the token. If the token cannot be parsed an error is returned via the
+ "error" out parameter.
+ */
+- (nullable FIRAuthTokenResult *)parseIDToken:(NSString *)token error:(NSError **)error {
+ // Though this is an internal method, errors returned here are surfaced in user-visible
+ // callbacks.
+ if (error) {
+ *error = nil;
+ }
+ NSArray *tokenStringArray = [token componentsSeparatedByString:@"."];
+
+ // The JWT should have three parts, though we only use the second in this method.
+ if (tokenStringArray.count != 3) {
+ if (error) {
+ *error = [FIRAuthErrorUtils malformedJWTErrorWithToken:token underlyingError:nil];
+ }
+ return nil;
+ }
+
+ // The token payload is always the second index of the array.
+ NSString *IDToken = tokenStringArray[1];
+
+ // Convert the base64URL encoded string to a base64 encoded string.
+ // Replace "_" with "/"
+ NSMutableString *tokenPayload = [[IDToken stringByReplacingOccurrencesOfString:@"_"
+ withString:@"/"] mutableCopy];
+
+ // Replace "-" with "+"
+ [tokenPayload replaceOccurrencesOfString:@"-"
+ withString:@"+"
+ options:kNilOptions
+ range:NSMakeRange(0, tokenPayload.length)];
+
+ // Pad the token payload with "=" signs if the payload's length is not a multiple of 4.
+ while ((tokenPayload.length % 4) != 0) {
+ [tokenPayload appendFormat:@"="];
+ }
+ NSData *decodedTokenPayloadData =
+ [[NSData alloc] initWithBase64EncodedString:tokenPayload
+ options:NSDataBase64DecodingIgnoreUnknownCharacters];
+ if (!decodedTokenPayloadData) {
+ if (error) {
+ *error = [FIRAuthErrorUtils malformedJWTErrorWithToken:token underlyingError:nil];
+ }
+ return nil;
+ }
+ NSError *jsonError = nil;
+ NSJSONReadingOptions options = NSJSONReadingMutableContainers | NSJSONReadingAllowFragments;
+ NSDictionary *tokenPayloadDictionary =
+ [NSJSONSerialization JSONObjectWithData:decodedTokenPayloadData
+ options:options
+ error:&jsonError];
+ if (jsonError != nil) {
+ if (error) {
+ *error = [FIRAuthErrorUtils malformedJWTErrorWithToken:token underlyingError:jsonError];
+ }
+ return nil;
+ }
+
+ if (!tokenPayloadDictionary) {
+ if (error) {
+ *error = [FIRAuthErrorUtils malformedJWTErrorWithToken:token underlyingError:nil];
+ }
+ return nil;
+ }
+
+ FIRAuthTokenResult *result = [FIRAuthTokenResult tokenResultWithToken:token];
+ return result;
+}
+
+/** @fn internalGetTokenForcingRefresh:callback:
+ @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
+ @param callback The block to invoke when the token is available. Invoked asynchronously on the
+ global work thread in the future.
+ */
+- (void)internalGetTokenWithCallback:(nonnull FIRAuthTokenCallback)callback {
+ [self internalGetTokenForcingRefresh:NO callback:callback];
+}
+
+- (void)internalGetTokenForcingRefresh:(BOOL)forceRefresh
+ callback:(nonnull FIRAuthTokenCallback)callback {
+ [_tokenService fetchAccessTokenForcingRefresh:forceRefresh
+ callback:^(NSString *_Nullable token,
+ NSError *_Nullable error, BOOL tokenUpdated) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ callback(nil, error);
+ return;
+ }
+ if (tokenUpdated) {
+ if (![self updateKeychain:&error]) {
+ callback(nil, error);
+ return;
+ }
+ }
+ callback(token, nil);
+ }];
+}
+
+- (void)sendEmailVerificationBeforeUpdatingEmail:(nonnull NSString *)email
+ completion:(nullable FIRAuthVoidErrorCallback)completion {
+ [self internalVerifyBeforeUpdateEmailWithNewEmail:email
+ actionCodeSettings:nil
+ completion:completion];
+}
+
+- (void)sendEmailVerificationBeforeUpdatingEmail:(nonnull NSString *)email
+ actionCodeSettings:(nonnull FIRActionCodeSettings *)actionCodeSettings
+ completion:(nullable FIRAuthVoidErrorCallback)completion {
+ [self internalVerifyBeforeUpdateEmailWithNewEmail:email
+ actionCodeSettings:actionCodeSettings
+ completion:completion];
+}
+
+- (void)internalVerifyBeforeUpdateEmailWithNewEmail:(NSString *)newEmail
+ actionCodeSettings:
+ (nullable FIRActionCodeSettings *)actionCodeSettings
+ completion:(FIRVerifyBeforeUpdateEmailCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self
+ internalGetTokenWithCallback:^(NSString *_Nullable accessToken, NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithError(completion, error);
+ return;
+ }
+ FIRAuthRequestConfiguration *configuration = self->_auth.requestConfiguration;
+ FIRActionCodeSettings *settings = actionCodeSettings;
+ FIRGetOOBConfirmationCodeRequest *request = [FIRGetOOBConfirmationCodeRequest
+ verifyBeforeUpdateEmailWithAccessToken:accessToken
+ newEmail:newEmail
+ actionCodeSettings:settings
+ requestConfiguration:configuration];
+ [FIRAuthBackend
+ getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ callInMainThreadWithError(completion, error);
+ }];
+ }];
+ });
+}
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (void)linkWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ [self linkAndRetrieveDataWithCredential:credential completion:completion];
+}
+#pragma clang diagnostic pop
+
+- (void)linkAndRetrieveDataWithCredential:(FIRAuthCredential *)credential
+ completion:(nullable FIRAuthDataResultCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ if (self->_providerData[credential.provider]) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil,
+ [FIRAuthErrorUtils providerAlreadyLinkedError]);
+ return;
+ }
+ FIRAuthDataResult *result = [[FIRAuthDataResult alloc] initWithUser:self
+ additionalUserInfo:nil];
+ if ([credential isKindOfClass:[FIREmailPasswordAuthCredential class]]) {
+ if (self->_hasEmailPasswordCredential) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil,
+ [FIRAuthErrorUtils providerAlreadyLinkedError]);
+ return;
+ }
+ FIREmailPasswordAuthCredential *emailPasswordCredential =
+ (FIREmailPasswordAuthCredential *)credential;
+ if (emailPasswordCredential.password) {
+ [self updateEmail:emailPasswordCredential.email
+ password:emailPasswordCredential.password
+ callback:^(NSError *error) {
+ if (error) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil, error);
+ } else {
+ callInMainThreadWithAuthDataResultAndError(completion, result, nil);
+ }
+ }];
+ } else {
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ NSDictionary<NSString *, NSString *> *queryItems =
+ [FIRAuthWebUtils parseURL:emailPasswordCredential.link];
+ if (![queryItems count]) {
+ NSURLComponents *urlComponents =
+ [NSURLComponents componentsWithString:emailPasswordCredential.link];
+ queryItems = [FIRAuthWebUtils parseURL:urlComponents.query];
+ }
+ NSString *actionCode = queryItems[@"oobCode"];
+ FIRAuthRequestConfiguration *requestConfiguration = self.auth.requestConfiguration;
+ FIREmailLinkSignInRequest *request =
+ [[FIREmailLinkSignInRequest alloc] initWithEmail:emailPasswordCredential.email
+ oobCode:actionCode
+ requestConfiguration:requestConfiguration];
+ request.IDToken = accessToken;
+ [FIRAuthBackend
+ emailLinkSignin:request
+ callback:^(FIREmailLinkSignInResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil, error);
+ } else {
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil, error);
+ return;
+ }
+
+ FIRGetAccountInfoRequest *getAccountInfoRequest =
+ [[FIRGetAccountInfoRequest alloc]
+ initWithAccessToken:accessToken
+ requestConfiguration:requestConfiguration];
+ [FIRAuthBackend
+ getAccountInfo:getAccountInfoRequest
+ callback:^(FIRGetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ callInMainThreadWithAuthDataResultAndError(completion, nil,
+ error);
+ return;
+ }
+ self.anonymous = NO;
+ [self updateWithGetAccountInfoResponse:response];
+ if (![self updateKeychain:&error]) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil,
+ error);
+ return;
+ }
+ callInMainThreadWithAuthDataResultAndError(completion,
+ result, nil);
+ }];
+ }];
+ }
+ }];
+ }];
+ }
+ return;
+ }
+
+ if ([credential isKindOfClass:[FIRGameCenterAuthCredential class]]) {
+ FIRGameCenterAuthCredential *gameCenterCredential = (FIRGameCenterAuthCredential *)credential;
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ FIRAuthRequestConfiguration *requestConfiguration = self.auth.requestConfiguration;
+ FIRSignInWithGameCenterRequest *gameCenterRequest = [[FIRSignInWithGameCenterRequest alloc]
+ initWithPlayerID:gameCenterCredential.playerID
+ publicKeyURL:gameCenterCredential.publicKeyURL
+ signature:gameCenterCredential.signature
+ salt:gameCenterCredential.salt
+ timestamp:gameCenterCredential.timestamp
+ displayName:gameCenterCredential.displayName
+ requestConfiguration:requestConfiguration];
+ gameCenterRequest.accessToken = accessToken;
+
+ [FIRAuthBackend
+ signInWithGameCenter:gameCenterRequest
+ callback:^(FIRSignInWithGameCenterResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil, error);
+ } else {
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithAuthDataResultAndError(completion, nil, error);
+ return;
+ }
+
+ FIRGetAccountInfoRequest *getAccountInfoRequest =
+ [[FIRGetAccountInfoRequest alloc]
+ initWithAccessToken:accessToken
+ requestConfiguration:requestConfiguration];
+ [FIRAuthBackend
+ getAccountInfo:getAccountInfoRequest
+ callback:^(FIRGetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ callInMainThreadWithAuthDataResultAndError(completion,
+ nil, error);
+ return;
+ }
+ self.anonymous = NO;
+ [self updateWithGetAccountInfoResponse:response];
+ if (![self updateKeychain:&error]) {
+ callInMainThreadWithAuthDataResultAndError(completion,
+ nil, error);
+ return;
+ }
+ callInMainThreadWithAuthDataResultAndError(completion,
+ result, nil);
+ }];
+ }];
+ }
+ }];
+ }];
+ return;
+ }
+
+#if TARGET_OS_IOS
+ if ([credential isKindOfClass:[FIRPhoneAuthCredential class]]) {
+ FIRPhoneAuthCredential *phoneAuthCredential = (FIRPhoneAuthCredential *)credential;
+ [self internalUpdateOrLinkPhoneNumberCredential:phoneAuthCredential
+ isLinkOperation:YES
+ completion:^(NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithAuthDataResultAndError(
+ completion, nil, error);
+ } else {
+ callInMainThreadWithAuthDataResultAndError(
+ completion, result, nil);
+ }
+ }];
+ return;
+ }
+#endif
+
+ [self->_taskQueue enqueueTask:^(FIRAuthSerialTaskCompletionBlock _Nonnull complete) {
+ CallbackWithAuthDataResultAndError completeWithError =
+ ^(FIRAuthDataResult *result, NSError *error) {
+ complete();
+ callInMainThreadWithAuthDataResultAndError(completion, result, error);
+ };
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ if (error) {
+ completeWithError(nil, error);
+ return;
+ }
+ FIRAuthRequestConfiguration *requestConfiguration = self->_auth.requestConfiguration;
+ FIRVerifyAssertionRequest *request =
+ [[FIRVerifyAssertionRequest alloc] initWithProviderID:credential.provider
+ requestConfiguration:requestConfiguration];
+ [credential prepareVerifyAssertionRequest:request];
+ request.accessToken = accessToken;
+ [FIRAuthBackend
+ verifyAssertion:request
+ callback:^(FIRVerifyAssertionResponse *response, NSError *error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ completeWithError(nil, error);
+ return;
+ }
+ FIRAdditionalUserInfo *additionalUserInfo =
+ [FIRAdditionalUserInfo userInfoWithVerifyAssertionResponse:response];
+ FIROAuthCredential *updatedOAuthCredential =
+ [[FIROAuthCredential alloc] initWithVerifyAssertionResponse:response];
+ FIRAuthDataResult *result =
+ [[FIRAuthDataResult alloc] initWithUser:self
+ additionalUserInfo:additionalUserInfo
+ credential:updatedOAuthCredential];
+ // Update the new token and refresh user info again.
+ self->_tokenService = [[FIRSecureTokenService alloc]
+ initWithRequestConfiguration:requestConfiguration
+ accessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken];
+ [self internalGetTokenWithCallback:^(NSString *_Nullable accessToken,
+ NSError *_Nullable error) {
+ if (error) {
+ completeWithError(nil, error);
+ return;
+ }
+ FIRGetAccountInfoRequest *getAccountInfoRequest =
+ [[FIRGetAccountInfoRequest alloc]
+ initWithAccessToken:accessToken
+ requestConfiguration:requestConfiguration];
+ [FIRAuthBackend
+ getAccountInfo:getAccountInfoRequest
+ callback:^(FIRGetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ completeWithError(nil, error);
+ return;
+ }
+ self.anonymous = NO;
+ [self updateWithGetAccountInfoResponse:response];
+ if (![self updateKeychain:&error]) {
+ completeWithError(nil, error);
+ return;
+ }
+ completeWithError(result, nil);
+ }];
+ }];
+ }];
+ }];
+ }];
+ });
+}
+
+- (void)linkWithProvider:(id<FIRFederatedAuthProvider>)provider
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ completion:(nullable FIRAuthDataResultCallback)completion {
+#if TARGET_OS_IOS
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [provider getCredentialWithUIDelegate:UIDelegate
+ completion:^(FIRAuthCredential *_Nullable credential,
+ NSError *_Nullable error) {
+ [self linkWithCredential:credential completion:completion];
+ }];
+ });
+#endif // TARGET_OS_IOS
+}
+
+- (void)unlinkFromProvider:(NSString *)provider
+ completion:(nullable FIRAuthResultCallback)completion {
+ [_taskQueue enqueueTask:^(FIRAuthSerialTaskCompletionBlock _Nonnull complete) {
+ CallbackWithError completeAndCallbackWithError = ^(NSError *error) {
+ complete();
+ callInMainThreadWithUserAndError(completion, self, error);
+ };
+ [self
+ internalGetTokenWithCallback:^(NSString *_Nullable accessToken, NSError *_Nullable error) {
+ if (error) {
+ completeAndCallbackWithError(error);
+ return;
+ }
+ FIRAuthRequestConfiguration *requestConfiguration = self->_auth.requestConfiguration;
+ FIRSetAccountInfoRequest *setAccountInfoRequest =
+ [[FIRSetAccountInfoRequest alloc] initWithRequestConfiguration:requestConfiguration];
+ setAccountInfoRequest.accessToken = accessToken;
+
+ if (!self->_providerData[provider]) {
+ completeAndCallbackWithError([FIRAuthErrorUtils noSuchProviderError]);
+ return;
+ }
+ setAccountInfoRequest.deleteProviders = @[ provider ];
+
+ [FIRAuthBackend
+ setAccountInfo:setAccountInfoRequest
+ callback:^(FIRSetAccountInfoResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ completeAndCallbackWithError(error);
+ return;
+ }
+
+ // We can't just use the provider info objects in FIRSetAccountInfoResponse
+ // because they don't have localID and email fields. Remove the specific
+ // provider manually.
+ NSMutableDictionary *mutableProviderData = [self->_providerData mutableCopy];
+ [mutableProviderData removeObjectForKey:provider];
+ self->_providerData = [mutableProviderData copy];
+
+ if ([provider isEqualToString:FIREmailAuthProviderID]) {
+ self->_hasEmailPasswordCredential = NO;
+ }
+#if TARGET_OS_IOS
+ // After successfully unlinking a phone auth provider, remove the phone number
+ // from the cached user info.
+ if ([provider isEqualToString:FIRPhoneAuthProviderID]) {
+ self->_phoneNumber = nil;
+ }
+#endif
+
+ if (response.IDToken && response.refreshToken) {
+ FIRSecureTokenService *tokenService = [[FIRSecureTokenService alloc]
+ initWithRequestConfiguration:requestConfiguration
+ accessToken:response.IDToken
+ accessTokenExpirationDate:response.approximateExpirationDate
+ refreshToken:response.refreshToken];
+ [self setTokenService:tokenService
+ callback:^(NSError *_Nullable error) {
+ completeAndCallbackWithError(error);
+ }];
+ return;
+ }
+ if (![self updateKeychain:&error]) {
+ completeAndCallbackWithError(error);
+ return;
+ }
+ completeAndCallbackWithError(nil);
+ }];
+ }];
+ }];
+}
+
+- (void)sendEmailVerificationWithCompletion:(nullable FIRSendEmailVerificationCallback)completion {
+ [self sendEmailVerificationWithNullableActionCodeSettings:nil completion:completion];
+}
+
+- (void)sendEmailVerificationWithActionCodeSettings:(FIRActionCodeSettings *)actionCodeSettings
+ completion:
+ (nullable FIRSendEmailVerificationCallback)completion {
+ [self sendEmailVerificationWithNullableActionCodeSettings:actionCodeSettings
+ completion:completion];
+}
+
+/** @fn sendEmailVerificationWithNullableActionCodeSettings:completion:
+ @brief Initiates email verification for the user.
+
+ @param actionCodeSettings Optionally, a @c FIRActionCodeSettings object containing settings
+ related to the handling action codes.
+ */
+- (void)sendEmailVerificationWithNullableActionCodeSettings:
+ (nullable FIRActionCodeSettings *)actionCodeSettings
+ completion:
+ (nullable FIRSendEmailVerificationCallback)
+ completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self
+ internalGetTokenWithCallback:^(NSString *_Nullable accessToken, NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithError(completion, error);
+ return;
+ }
+ FIRAuthRequestConfiguration *configuration = self->_auth.requestConfiguration;
+ FIRGetOOBConfirmationCodeRequest *request =
+ [FIRGetOOBConfirmationCodeRequest verifyEmailRequestWithAccessToken:accessToken
+ actionCodeSettings:actionCodeSettings
+ requestConfiguration:configuration];
+ [FIRAuthBackend
+ getOOBConfirmationCode:request
+ callback:^(FIRGetOOBConfirmationCodeResponse *_Nullable response,
+ NSError *_Nullable error) {
+ [self signOutIfTokenIsInvalidWithError:error];
+ callInMainThreadWithError(completion, error);
+ }];
+ }];
+ });
+}
+
+- (void)deleteWithCompletion:(nullable FIRUserProfileChangeCallback)completion {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^{
+ [self
+ internalGetTokenWithCallback:^(NSString *_Nullable accessToken, NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithError(completion, error);
+ return;
+ }
+ FIRDeleteAccountRequest *deleteUserRequest =
+ [[FIRDeleteAccountRequest alloc] initWitLocalID:self->_userID
+ accessToken:accessToken
+ requestConfiguration:self->_auth.requestConfiguration];
+ [FIRAuthBackend deleteAccount:deleteUserRequest
+ callback:^(NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithError(completion, error);
+ return;
+ }
+ if (![self->_auth signOutByForceWithUserID:self->_userID
+ error:&error]) {
+ callInMainThreadWithError(completion, error);
+ return;
+ }
+ callInMainThreadWithError(completion, error);
+ }];
+ }];
+ });
+}
+
+/** @fn signOutIfTokenIsInvalidWithError:
+ @brief Signs out this user if the user or the token is invalid.
+ @param error The error from the server.
+ */
+- (void)signOutIfTokenIsInvalidWithError:(nullable NSError *)error {
+ NSInteger errorCode = error.code;
+ if (errorCode == FIRAuthErrorCodeUserNotFound || errorCode == FIRAuthErrorCodeUserDisabled ||
+ errorCode == FIRAuthErrorCodeInvalidUserToken ||
+ errorCode == FIRAuthErrorCodeUserTokenExpired) {
+ FIRLogNotice(kFIRLoggerAuth, @"I-AUT000016",
+ @"Invalid user token detected, user is automatically signed out.");
+ [_auth signOutByForceWithUserID:_userID error:NULL];
+ }
+}
+
+@end
+
+@implementation FIRUserProfileChangeRequest {
+ /** @var _user
+ @brief The user associated with the change request.
+ */
+ FIRUser *_user;
+
+ /** @var _displayName
+ @brief The display name value to set if @c _displayNameSet is YES.
+ */
+ NSString *_displayName;
+
+ /** @var _displayNameSet
+ @brief Indicates the display name should be part of the change request.
+ */
+ BOOL _displayNameSet;
+
+ /** @var _photoURL
+ @brief The photo URL value to set if @c _displayNameSet is YES.
+ */
+ NSURL *_photoURL;
+
+ /** @var _photoURLSet
+ @brief Indicates the photo URL should be part of the change request.
+ */
+ BOOL _photoURLSet;
+
+ /** @var _consumed
+ @brief Indicates the @c commitChangesWithCallback: method has already been invoked.
+ */
+ BOOL _consumed;
+}
+
+- (nullable instancetype)initWithUser:(FIRUser *)user {
+ self = [super init];
+ if (self) {
+ _user = user;
+ }
+ return self;
+}
+
+- (nullable NSString *)displayName {
+ return _displayName;
+}
+
+- (void)setDisplayName:(nullable NSString *)displayName {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ if (self->_consumed) {
+ [NSException
+ raise:NSInternalInconsistencyException
+ format:@"%@", @"Invalid call to setDisplayName: after commitChangesWithCallback:."];
+ return;
+ }
+ self->_displayNameSet = YES;
+ self->_displayName = [displayName copy];
+ });
+}
+
+- (nullable NSURL *)photoURL {
+ return _photoURL;
+}
+
+- (void)setPhotoURL:(nullable NSURL *)photoURL {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ if (self->_consumed) {
+ [NSException raise:NSInternalInconsistencyException
+ format:@"%@", @"Invalid call to setPhotoURL: after commitChangesWithCallback:."];
+ return;
+ }
+ self->_photoURLSet = YES;
+ self->_photoURL = [photoURL copy];
+ });
+}
+
+/** @fn hasUpdates
+ @brief Indicates at least one field has a value which needs to be committed.
+ */
+- (BOOL)hasUpdates {
+ return _displayNameSet || _photoURLSet;
+}
+
+- (void)commitChangesWithCompletion:(nullable FIRUserProfileChangeCallback)completion {
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^{
+ if (self->_consumed) {
+ [NSException raise:NSInternalInconsistencyException
+ format:@"%@", @"commitChangesWithCallback: should only be called once."];
+ return;
+ }
+ self->_consumed = YES;
+ // Return fast if there is nothing to update:
+ if (![self hasUpdates]) {
+ callInMainThreadWithError(completion, nil);
+ return;
+ }
+ NSString *displayName = [self->_displayName copy];
+ BOOL displayNameWasSet = self->_displayNameSet;
+ NSURL *photoURL = [self->_photoURL copy];
+ BOOL photoURLWasSet = self->_photoURLSet;
+ [self->_user
+ executeUserUpdateWithChanges:^(FIRGetAccountInfoResponseUser *user,
+ FIRSetAccountInfoRequest *request) {
+ if (photoURLWasSet) {
+ request.photoURL = photoURL;
+ }
+ if (displayNameWasSet) {
+ request.displayName = displayName;
+ }
+ }
+ callback:^(NSError *_Nullable error) {
+ if (error) {
+ callInMainThreadWithError(completion, error);
+ return;
+ }
+ if (displayNameWasSet) {
+ [self->_user setDisplayName:displayName];
+ }
+ if (photoURLWasSet) {
+ [self->_user setPhotoURL:photoURL];
+ }
+ if (![self->_user updateKeychain:&error]) {
+ callInMainThreadWithError(completion, error);
+ return;
+ }
+ callInMainThreadWithError(completion, nil);
+ }];
+ });
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.h
new file mode 100644
index 00000000..3a6ad9f9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRUserInfo.h"
+
+@class FIRGetAccountInfoResponseProviderUserInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRUserInfoImpl : NSObject <FIRUserInfo, NSSecureCoding>
+
+/** @fn userInfoWithGetAccountInfoResponseProviderUserInfo:
+ @brief A convenience factory method for constructing a @c FIRUserInfo instance from data
+ returned by the getAccountInfo endpoint.
+ @param providerUserInfo Data returned by the getAccountInfo endpoint.
+ @return A new instance of @c FIRUserInfo using data from the getAccountInfo endpoint.
+ */
++ (nullable instancetype)userInfoWithGetAccountInfoResponseProviderUserInfo:
+ (FIRGetAccountInfoResponseProviderUserInfo *)providerUserInfo;
+
+/** @fn init
+ @brief This class should not be initialized manually.
+ @see FIRUser.providerData
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn initWithProviderID:userID:displayName:photoURL:email:
+ @brief Designated initializer.
+ @param providerID The provider identifier.
+ @param userID The unique user ID for the user (the value of the @c uid field in the token.)
+ @param displayName The name of the user.
+ @param photoURL The URL of the user's profile photo.
+ @param email The user's email address.
+ @param phoneNumber The user's phone number.
+ */
+- (nullable instancetype)initWithProviderID:(NSString *)providerID
+ userID:(NSString *)userID
+ displayName:(nullable NSString *)displayName
+ photoURL:(nullable NSURL *)photoURL
+ email:(nullable NSString *)email
+ phoneNumber:(nullable NSString *)phoneNumber
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.m
new file mode 100644
index 00000000..50926067
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserInfoImpl.m
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/User/FIRUserInfoImpl.h"
+
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetAccountInfoResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var kProviderIDCodingKey
+ @brief The key used to encode the providerID property for NSSecureCoding.
+ */
+static NSString *const kProviderIDCodingKey = @"providerID";
+
+/** @var kUserIDCodingKey
+ @brief The key used to encode the userID property for NSSecureCoding.
+ */
+static NSString *const kUserIDCodingKey = @"userID";
+
+/** @var kDisplayNameCodingKey
+ @brief The key used to encode the displayName property for NSSecureCoding.
+ */
+static NSString *const kDisplayNameCodingKey = @"displayName";
+
+/** @var kProfileURLCodingKey
+ @brief The key used to encode the profileURL property for NSSecureCoding.
+ */
+static NSString *const kProfileURLCodingKey = @"profileURL";
+
+/** @var kPhotoURLCodingKey
+ @brief The key used to encode the photoURL property for NSSecureCoding.
+ */
+static NSString *const kPhotoURLCodingKey = @"photoURL";
+
+/** @var kEmailCodingKey
+ @brief The key used to encode the email property for NSSecureCoding.
+ */
+static NSString *const kEmailCodingKey = @"email";
+
+/** @var kPhoneNumberCodingKey
+ @brief The key used to encode the phoneNumber property for NSSecureCoding.
+ */
+static NSString *const kPhoneNumberCodingKey = @"phoneNumber";
+
+@implementation FIRUserInfoImpl
+
+@synthesize providerID = _providerID;
+@synthesize uid = _userID;
+@synthesize displayName = _displayName;
+@synthesize photoURL = _photoURL;
+@synthesize email = _email;
+@synthesize phoneNumber = _phoneNumber;
+
++ (nullable instancetype)userInfoWithGetAccountInfoResponseProviderUserInfo:
+ (FIRGetAccountInfoResponseProviderUserInfo *)providerUserInfo {
+ return [[self alloc] initWithProviderID:providerUserInfo.providerID
+ userID:providerUserInfo.federatedID
+ displayName:providerUserInfo.displayName
+ photoURL:providerUserInfo.photoURL
+ email:providerUserInfo.email
+ phoneNumber:providerUserInfo.phoneNumber];
+}
+
+- (nullable instancetype)initWithProviderID:(NSString *)providerID
+ userID:(NSString *)userID
+ displayName:(nullable NSString *)displayName
+ photoURL:(nullable NSURL *)photoURL
+ email:(nullable NSString *)email
+ phoneNumber:(nullable NSString *)phoneNumber {
+ self = [super init];
+ if (self) {
+ _providerID = [providerID copy];
+ _userID = [userID copy];
+ _displayName = [displayName copy];
+ _photoURL = [photoURL copy];
+ _email = [email copy];
+ _phoneNumber = [phoneNumber copy];
+ }
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSString *providerID = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kProviderIDCodingKey];
+ NSString *userID = [aDecoder decodeObjectOfClass:[NSString class] forKey:kUserIDCodingKey];
+ NSString *displayName = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kDisplayNameCodingKey];
+ NSURL *photoURL = [aDecoder decodeObjectOfClass:[NSURL class] forKey:kPhotoURLCodingKey];
+ NSString *email = [aDecoder decodeObjectOfClass:[NSString class] forKey:kEmailCodingKey];
+ NSString *phoneNumber = [aDecoder decodeObjectOfClass:[NSString class]
+ forKey:kPhoneNumberCodingKey];
+
+ return [self initWithProviderID:providerID
+ userID:userID
+ displayName:displayName
+ photoURL:photoURL
+ email:email
+ phoneNumber:phoneNumber];
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_providerID forKey:kProviderIDCodingKey];
+ [aCoder encodeObject:_userID forKey:kUserIDCodingKey];
+ [aCoder encodeObject:_displayName forKey:kDisplayNameCodingKey];
+ [aCoder encodeObject:_photoURL forKey:kPhotoURLCodingKey];
+ [aCoder encodeObject:_email forKey:kEmailCodingKey];
+ [aCoder encodeObject:_phoneNumber forKey:kPhoneNumberCodingKey];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata.m
new file mode 100644
index 00000000..ba46ebd4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata.m
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/User/FIRUserMetadata_Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRUserMetadata
+
+/** @var kCreationDateCodingKey
+ @brief The key used to encode the creationDate property for NSSecureCoding.
+ */
+static NSString *const kCreationDateCodingKey = @"creationDate";
+
+/** @var kLastSignInDateCodingKey
+ @brief The key used to encode the lastSignInDate property for NSSecureCoding.
+ */
+static NSString *const kLastSignInDateCodingKey = @"lastSignInDate";
+
+- (instancetype)initWithCreationDate:(nullable NSDate *)creationDate
+ lastSignInDate:(nullable NSDate *)lastSignInDate {
+ self = [super init];
+ if (self) {
+ _creationDate = [creationDate copy];
+ _lastSignInDate = [lastSignInDate copy];
+ }
+ return self;
+}
+
+#pragma mark - NSSecureCoding
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {
+ NSDate *creationDate = [aDecoder decodeObjectOfClass:[NSDate class]
+ forKey:kCreationDateCodingKey];
+ NSDate *lastSignInDate = [aDecoder decodeObjectOfClass:[NSDate class]
+ forKey:kLastSignInDateCodingKey];
+ return [self initWithCreationDate:creationDate lastSignInDate:lastSignInDate];
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder {
+ [aCoder encodeObject:_creationDate forKey:kCreationDateCodingKey];
+ [aCoder encodeObject:_lastSignInDate forKey:kLastSignInDateCodingKey];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata_Internal.h
new file mode 100644
index 00000000..cb91bec0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUserMetadata_Internal.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRUserMetadata.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @extension FIRUserMetadata
+ @brief An internal class used to expose internal methods of FIRUserMetadata.
+ */
+@interface FIRUserMetadata () <NSSecureCoding>
+
+/** @fn initWithCreationDate:lastSignInDate:
+ @brief Designated initializer.
+ @param creationDate The creation date of the corresponding user.
+ @param lastSignInDate The date of the last recorded sign-in of the corresponding user.
+ */
+- (instancetype)initWithCreationDate:(nullable NSDate *)creationDate
+ lastSignInDate:(nullable NSDate *)lastSignInDate NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser_Internal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser_Internal.h
new file mode 100644
index 00000000..409d8efa
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/User/FIRUser_Internal.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Public/FIRUser.h"
+
+@class FIRAuth;
+@class FIRAuthRequestConfiguration;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRRetrieveUserCallback
+ @brief The type of block that is invoked when the construction of a user succeeds or fails.
+ @param user The user that was constructed, or nil if user construction failed.
+ @param error The error which occurred, or nil if the request was successful.
+ */
+typedef void (^FIRRetrieveUserCallback)(FIRUser *_Nullable user, NSError *_Nullable error);
+
+/** @typedef FIRVerifyBeforeUpdateEmailCallback
+ @brief The type of block called when a request to verify before update email has finished.
+ @param error Optionally; the error which occurred - or nil if the request was successful.
+ */
+typedef void (^FIRVerifyBeforeUpdateEmailCallback)(NSError *_Nullable error);
+
+@interface FIRUser () <NSSecureCoding>
+
+/** @property rawAccessToken
+ @brief The cached access token.
+ @remarks This method is specifically for providing the access token to internal clients during
+ deserialization and sign-in events, and should not be used to retrieve the access token by
+ anyone else.
+ */
+@property(nonatomic, copy, readonly) NSString *rawAccessToken;
+
+/** @property auth
+ @brief A weak reference to a FIRAuth instance associated with this instance.
+ */
+@property(nonatomic, weak) FIRAuth *auth;
+
+/** @property auth
+ @brief A strong reference to a requestConfiguration instance associated with this user instance.
+ */
+@property(nonatomic, strong) FIRAuthRequestConfiguration *requestConfiguration;
+
+/** @var accessTokenExpirationDate
+ @brief The expiration date of the cached access token.
+ */
+@property(nonatomic, copy, readonly) NSDate *accessTokenExpirationDate;
+
+/** @fn retrieveUserWithAuth:accessToken:accessTokenExpirationDate:refreshToken:callback:
+ @brief Constructs a user with Secure Token Service tokens, and obtains user details from the
+ getAccountInfo endpoint.
+ @param auth The associated FIRAuth instance.
+ @param accessToken The Secure Token Service access token.
+ @param accessTokenExpirationDate The approximate expiration date of the access token.
+ @param refreshToken The Secure Token Service refresh token.
+ @param anonymous Whether or not the user is anonymous.
+ @param callback A block which is invoked when the construction succeeds or fails. Invoked
+ asynchronously on the auth global work queue in the future.
+ */
++ (void)retrieveUserWithAuth:(FIRAuth *)auth
+ accessToken:(nullable NSString *)accessToken
+ accessTokenExpirationDate:(nullable NSDate *)accessTokenExpirationDate
+ refreshToken:(nullable NSString *)refreshToken
+ anonymous:(BOOL)anonymous
+ callback:(FIRRetrieveUserCallback)callback;
+
+/** @fn internalGetTokenForcingRefresh:callback:
+ @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
+ @param forceRefresh Forces a token refresh. Useful if the token becomes invalid for some reason
+ other than an expiration.
+ @param callback The block to invoke when the token is available. Invoked asynchronously on the
+ global work thread in the future.
+ */
+- (void)internalGetTokenForcingRefresh:(BOOL)forceRefresh
+ callback:(nonnull FIRAuthTokenCallback)callback;
+
+/** @fn internalVerifyBeforeUpdateEmailWithNewEmail:actionCodeSettings:callback:
+ @brief Sends a verification email to newEmail. Upon redemption of the link in the email,
+ this user's email will be changed to newEmail and that email will be marked verified.
+ @param newEmail the user's new email.
+ @param actionCodeSettings the optional FIRActionCodeSettings object to allow linking back
+ to your app in the email.
+ @param completion The block to invoke when the call succeeds or fails. Invoked asynchronously on
+ the global work thread in the future.
+
+ */
+- (void)internalVerifyBeforeUpdateEmailWithNewEmail:(NSString *)newEmail
+ actionCodeSettings:
+ (nullable FIRActionCodeSettings *)actionCodeSettings
+ completion:(FIRVerifyBeforeUpdateEmailCallback)completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.h
new file mode 100644
index 00000000..ec7e97cb
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRAuthUIDelegate.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthDefaultUIDelegate
+ @brief Class responsible for providing a default FIRAuthUIDelegte.
+ @remarks This class should be used in the case that a UIDelegate was expected and necessary to
+ continue a given flow, but none was provided.
+ */
+@interface FIRAuthDefaultUIDelegate : NSObject <FIRAuthUIDelegate>
+
+/** @fn defaultUIDelegate
+ @brief Unavailable. Please use @c +defaultUIDelegate:
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/** @fn defaultUIDelegate
+ @brief Returns a default FIRAuthUIDelegate object.
+ @return The default FIRAuthUIDelegate object.
+ */
++ (id<FIRAuthUIDelegate>)defaultUIDelegate;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.m
new file mode 100644
index 00000000..494ba7dc
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.m
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if !TARGET_OS_OSX
+
+#import <UIKit/UIKit.h>
+#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h"
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthDefaultUIDelegate ()
+
+/** @fn initWithViewController:
+ @brief Initializes the instance with a view controller.
+ @param viewController The view controller as the presenting view controller in @c
+ FIRAuthUIDelegate.
+ @return The initialized instance.
+ */
+- (instancetype)initWithViewController:(nullable UIViewController *)viewController
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+@implementation FIRAuthDefaultUIDelegate {
+ /** @var _viewController
+ @brief The presenting view controller.
+ */
+ UIViewController *_viewController;
+}
+
+- (instancetype)initWithViewController:(nullable UIViewController *)viewController {
+ self = [super init];
+ if (self) {
+ _viewController = viewController;
+ }
+ return self;
+}
+
+- (void)presentViewController:(UIViewController *)viewControllerToPresent
+ animated:(BOOL)flag
+ completion:(nullable void (^)(void))completion {
+ [_viewController presentViewController:viewControllerToPresent
+ animated:flag
+ completion:completion];
+}
+
+- (void)dismissViewControllerAnimated:(BOOL)flag completion:(nullable void (^)(void))completion {
+ [_viewController dismissViewControllerAnimated:flag completion:completion];
+}
+
++ (id<FIRAuthUIDelegate>)defaultUIDelegate {
+ // iOS App extensions should not call [UIApplication sharedApplication], even if UIApplication
+ // responds to it.
+ static Class applicationClass = nil;
+ if (![GULAppEnvironmentUtil isAppExtension]) {
+ Class cls = NSClassFromString(@"UIApplication");
+ if (cls && [cls respondsToSelector:NSSelectorFromString(@"sharedApplication")]) {
+ applicationClass = cls;
+ }
+ }
+
+ UIViewController *topViewController;
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+ if (@available(iOS 13.0, tvOS 13.0, *)) {
+ UIApplication *application = [applicationClass sharedApplication];
+ NSSet<UIScene *> *connectedScenes = application.connectedScenes;
+ for (UIScene *scene in connectedScenes) {
+ if ([scene isKindOfClass:[UIWindowScene class]]) {
+ UIWindowScene *windowScene = (UIWindowScene *)scene;
+ for (UIWindow *window in windowScene.windows) {
+ if (window.isKeyWindow) {
+ topViewController = window.rootViewController;
+ }
+ }
+ }
+ }
+ } else {
+ UIApplication *application = [applicationClass sharedApplication];
+// iOS 13 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ topViewController = application.keyWindow.rootViewController;
+#pragma clang diagnostic pop
+ }
+#else
+ UIApplication *application = [applicationClass sharedApplication];
+ topViewController = application.keyWindow.rootViewController;
+#endif
+
+ while (true) {
+ if (topViewController.presentedViewController) {
+ topViewController = topViewController.presentedViewController;
+ } else if ([topViewController isKindOfClass:[UINavigationController class]]) {
+ UINavigationController *nav = (UINavigationController *)topViewController;
+ topViewController = nav.topViewController;
+ } else if ([topViewController isKindOfClass:[UITabBarController class]]) {
+ UITabBarController *tab = (UITabBarController *)topViewController;
+ topViewController = tab.selectedViewController;
+ } else {
+ break;
+ }
+ }
+ return [[FIRAuthDefaultUIDelegate alloc] initWithViewController:topViewController];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h
new file mode 100644
index 00000000..06b9e00c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h
@@ -0,0 +1,585 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRMultiFactorInfo.h"
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthInternalErrors.h"
+
+@class FIRAuthCredential;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthErrorUtils
+ @brief Utility class used to construct @c NSError instances.
+ */
+@interface FIRAuthErrorUtils : NSObject
+
++ (NSError *)errorWithCode:(FIRAuthInternalErrorCode)code message:(nullable NSString *)message;
+
+/** @fn RPCRequestEncodingErrorWithUnderlyingError
+ @brief Constructs an @c NSError with the @c FIRAuthInternalErrorCodeRPCRequestEncodingError
+ code and a populated @c NSUnderlyingErrorKey in the @c NSError.userInfo dictionary.
+ @param underlyingError The value of the @c NSUnderlyingErrorKey key.
+ @remarks This error is used when an @c FIRAuthRPCRequest.unencodedHTTPRequestBodyWithError:
+ invocation returns an error. The error returned is wrapped in this internal error code.
+ */
++ (NSError *)RPCRequestEncodingErrorWithUnderlyingError:(NSError *)underlyingError;
+
+/** @fn JSONSerializationErrorForUnencodableType
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeJSONSerializationError code.
+ @remarks This error is used when an @c NSJSONSerialization.isValidJSONObject: check fails, not
+ for when an error is returned from @c NSJSONSerialization.dataWithJSONObject:options:error:.
+ */
++ (NSError *)JSONSerializationErrorForUnencodableType;
+
+/** @fn JSONSerializationErrorWithUnderlyingError:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeJSONSerializationError code, and the
+ @c underlyingError as the @c NSUnderlyingErrorKey value in the @c NSError.userInfo
+ dictionary.
+ @param underlyingError The value of the @c NSUnderlyingErrorKey key.
+ @remarks This error is used when an invocation of
+ @c NSJSONSerialization.dataWithJSONObject:options:error: returns an error.
+ */
++ (NSError *)JSONSerializationErrorWithUnderlyingError:(NSError *)underlyingError;
+
+/** @fn networkErrorWithUnderlyingError:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeNetworkError code, and the
+ @c underlyingError as the @c NSUnderlyingErrorKey value in the @c NSError.userInfo
+ dictionary.
+ @param underlyingError The value of the @c NSUnderlyingErrorKey key. Should be the error from
+ GTM.
+ @remarks This error is used when a network request results in an error, and no body data was
+ returned.
+ */
++ (NSError *)networkErrorWithUnderlyingError:(NSError *)underlyingError;
+
+/** @fn unexpectedErrorResponseWithUnderlyingError:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeNetworkError code, and the
+ @c underlyingError as the @c NSUnderlyingErrorKey value.
+ @param data The value of the @c FIRAuthErrorUserInfoDataKey key in the @c NSError.userInfo
+ dictionary.
+ @param underlyingError The value of the @c NSUnderlyingErrorKey key in the @c NSError.userInfo
+ dictionary.
+ @remarks This error is used when a network request results in an error, and unserializable body
+ data was returned.
+ */
++ (NSError *)unexpectedErrorResponseWithData:(NSData *)data
+ underlyingError:(NSError *)underlyingError;
+
+/** @fn unexpectedErrorResponseWithDeserializedResponse:
+ @brief Constructs an @c NSError with the @c FIRAuthInternalErrorCodeUnexpectedErrorResponse
+ code, and a populated @c FIRAuthErrorUserInfoDeserializedResponseKey key in the
+ @c NSError.userInfo dictionary.
+ @param deserializedResponse The value of the @c FIRAuthErrorUserInfoDeserializedResponseKey key.
+ @remarks This error is used when a network request results in an error, and the body data was
+ deserializable as JSON, but couldn't be decoded as an error.
+ */
++ (NSError *)unexpectedErrorResponseWithDeserializedResponse:(id)deserializedResponse;
+
+/** @fn malformedJWTErrorWithToken:underlyingError:
+ @brief Constructs an @c NSError with the code set to @c FIRAuthErrorCodeMalformedJWT and
+ populates the userInfo dictionary with an error message, the bad token, and an underlying
+ error that may have occurred when parsing.
+ @param token The token that failed to parse.
+ @param underlyingError The error that caused this error. If this parameter is nil, the
+ NSUnderlyingErrorKey value will not be set.
+ @remarks This error is returned when JWT parsing fails.
+ @returns An @c FIRAuthErrorCodeMalformedJWT error wrapping an underlying error, if available.
+ */
++ (NSError *)malformedJWTErrorWithToken:(NSString *)token
+ underlyingError:(NSError *_Nullable)underlyingError;
+
+/** @fn unexpectedResponseWithData:underlyingError:
+ @brief Constructs an @c NSError with the @c FIRAuthInternalErrorCodeUnexpectedResponse
+ code, and a populated @c FIRAuthErrorUserInfoDataKey key in the @c NSError.userInfo
+ dictionary.
+ @param data The value of the @c FIRAuthErrorUserInfoDataKey key in the @c NSError.userInfo
+ dictionary.
+ @param underlyingError The value of the @c NSUnderlyingErrorKey key in the @c NSError.userInfo
+ dictionary.
+ @remarks This error is used when a network request is apparently successful, but the body data
+ couldn't be deserialized as JSON.
+ */
++ (NSError *)unexpectedResponseWithData:(NSData *)data underlyingError:(NSError *)underlyingError;
+;
+
+/** @fn unexpectedResponseWithDeserializedResponse:
+ @brief Constructs an @c NSError with the @c FIRAuthInternalErrorCodeUnexpectedResponse
+ code, and a populated @c FIRAuthErrorUserInfoDeserializedResponseKey key in the
+ @c NSError.userInfo dictionary.
+ @param deserializedResponse The value of the @c FIRAuthErrorUserInfoDeserializedResponseKey key.
+ @remarks This error is used when a network request is apparently successful, the body data was
+ successfully deserialized as JSON, but the JSON wasn't a dictionary.
+ */
++ (NSError *)unexpectedResponseWithDeserializedResponse:(id)deserializedResponse;
+
+/** @fn unexpectedResponseWithDeserializedResponse:underlyingError:
+ @brief Constructs an @c NSError with the @c FIRAuthInternalErrorCodeUnexpectedResponse
+ code, and populated @c FIRAuthErrorUserInfoDeserializedResponseKey and
+ @c NSUnderlyingErrorKey keys in the @c NSError.userInfo dictionary.
+ @param deserializedResponse The value of the @c FIRAuthErrorUserInfoDeserializedResponseKey key.
+ @param underlyingError The value of the @c NSUnderlyingErrorKey key.
+ @remarks This error is used when a network request was apparently successful, the body data was
+ successfully deserialized as JSON, but the data type of the response was unexpected.
+ */
++ (NSError *)unexpectedResponseWithDeserializedResponse:(nullable id)deserializedResponse
+ underlyingError:(NSError *)underlyingError;
+
+/** @fn RPCResponseDecodingErrorWithDeserializedResponse:underlyingError:
+ @brief Constructs an @c NSError with the @c FIRAuthInternalErrorCodeRPCResponseDecodingError
+ code, and populated @c FIRAuthErrorUserInfoDeserializedResponseKey and
+ @c NSUnderlyingErrorKey keys in the @c NSError.userInfo dictionary.
+ @param deserializedResponse The value of the @c FIRAuthErrorUserInfoDeserializedResponseKey key.
+ @param underlyingError The value of the @c NSUnderlyingErrorKey key.
+ @remarks This error is used when an invocation of @c FIRAuthRPCResponse.setWithDictionary:error:
+ resulted in an error.
+ */
++ (NSError *)RPCResponseDecodingErrorWithDeserializedResponse:(id)deserializedResponse
+ underlyingError:(NSError *)underlyingError;
+
+/** @fn emailAlreadyInUseErrorWithEmail:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeEmailExists code.
+ @param email The email address that is already in use.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)emailAlreadyInUseErrorWithEmail:(nullable NSString *)email;
+
+/** @fn userDisabledErrorWithMessageWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeUserDisabled code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)userDisabledErrorWithMessage:(nullable NSString *)message;
+
+/** @fn wrongPasswordErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeWrongPassword code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)wrongPasswordErrorWithMessage:(nullable NSString *)message;
+
+/** @fn tooManyRequestsErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeTooManyRequests Code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)tooManyRequestsErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidCustomTokenErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidCustomToken code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidCustomTokenErrorWithMessage:(nullable NSString *)message;
+
+/** @fn customTokenMistmatchErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeCustomTokenMismatch code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)customTokenMistmatchErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidCredentialErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidCredential code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidCredentialErrorWithMessage:(nullable NSString *)message;
+
+/** @fn requiresRecentLoginError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeRequiresRecentLogin code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)requiresRecentLoginErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidUserTokenErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidUserToken code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidUserTokenErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidEmailErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidEmail code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidEmailErrorWithMessage:(nullable NSString *)message;
+
+/** @fn accountExistsWithDifferentCredentialErrorWithEmail:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorAccountExistsWithDifferentCredential
+ code.
+ @param email The email address that is already associated with an existing account
+ @param updatedCredential The updated credential for the existing account
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)accountExistsWithDifferentCredentialErrorWithEmail:(nullable NSString *)email
+ updatedCredential:
+ (nullable FIRAuthCredential *)updatedCredential;
+
+/** @fn providerAlreadyLinkedErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeProviderAlreadyLinked code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)providerAlreadyLinkedError;
+
+/** @fn noSuchProviderError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeNoSuchProvider code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)noSuchProviderError;
+
+/** @fn userTokenExpiredErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeUserTokenExpired code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)userTokenExpiredErrorWithMessage:(nullable NSString *)message;
+
+/** @fn userNotFoundErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeUserNotFound code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)userNotFoundErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidLocalAPIKeyErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidAPIKey code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidAPIKeyError;
+
+/** @fn userMismatchError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeUserMismatch code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)userMismatchError;
+
+/** @fn credentialAlreadyInUseErrorWithMessage:email:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeCredentialAlreadyInUse code.
+ @param message Error message from the backend, if any.
+ @param credential Auth credential to be added to the Error User Info dictionary.
+ @param email Email to be added to the Error User Info dictionary.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)credentialAlreadyInUseErrorWithMessage:(nullable NSString *)message
+ credential:(nullable FIRAuthCredential *)credential
+ email:(nullable NSString *)email;
+/** @fn operationNotAllowedErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeOperationNotAllowed code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)operationNotAllowedErrorWithMessage:(nullable NSString *)message;
+
+/** @fn weakPasswordErrorWithServerResponseReason:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeWeakPassword code.
+ @param serverResponseReason A more detailed explanation string from server response.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)weakPasswordErrorWithServerResponseReason:(nullable NSString *)serverResponseReason;
+
+/** @fn appNotAuthorizedError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeAppNotAuthorized code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)appNotAuthorizedError;
+
+/** @fn expiredActionCodeErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeExpiredActionCode code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)expiredActionCodeErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidActionCodeErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidActionCode code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidActionCodeErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidMessagePayloadError:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidMessagePayload code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidMessagePayloadErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidSenderErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidSender code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidSenderErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidRecipientEmailError:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidRecipientEmail code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidRecipientEmailErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingIosBundleIDErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingIosBundleID code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingIosBundleIDErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingAndroidPackageNameErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingAndroidPackageName code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingAndroidPackageNameErrorWithMessage:(nullable NSString *)message;
+
+/** @fn unauthorizedDomainErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeUnauthorizedDomain code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)unauthorizedDomainErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidContinueURIErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidContinueURI code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidContinueURIErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingContinueURIErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingContinueURI code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingContinueURIErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingEmailErrorWithMessage
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingEmail code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingEmailErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingPhoneNumberErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingPhoneNumber code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingPhoneNumberErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidPhoneNumberErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidPhoneNumber code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidPhoneNumberErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingVerificationCodeErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingVerificationCode code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingVerificationCodeErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidVerificationCodeErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidVerificationCode code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidVerificationCodeErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingVerificationIDErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingVerificationID code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingVerificationIDErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidVerificationIDErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidVerificationID code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidVerificationIDErrorWithMessage:(nullable NSString *)message;
+
+/** @fn sessionExpiredErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeSessionExpired code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)sessionExpiredErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingAppCredentialWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorMissingCredential code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingAppCredentialWithMessage:(nullable NSString *)message;
+
+/** @fn invalidAppCredentialWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorInvalidCredential code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)invalidAppCredentialWithMessage:(nullable NSString *)message;
+
+/** @fn quotaExceededErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeQuotaExceeded code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)quotaExceededErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingAppTokenErrorWithUnderlyingError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingAppToken code.
+ @param underlyingError The underlying error, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingAppTokenErrorWithUnderlyingError:(nullable NSError *)underlyingError;
+
+/** @fn localPlayerNotAuthenticatedError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeLocalPlayerNotAuthenticated code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)localPlayerNotAuthenticatedError;
+
+/** @fn gameKitNotLinkedError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeGameKitNotLinked code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)gameKitNotLinkedError;
+
+/** @fn notificationNotForwardedError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeNotificationNotForwarded code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)notificationNotForwardedError;
+
+#if TARGET_OS_IOS
+/** @fn secondFactorRequiredError
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeSecondFactorRequired code.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)secondFactorRequiredErrorWithPendingCredential:(NSString *)MFAPendingCredential
+ hints:(NSArray<FIRMultiFactorInfo *> *)
+ multiFactorInfo;
+#endif
+
+/** @fn appNotVerifiedErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeAppNotVerified code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)appNotVerifiedErrorWithMessage:(nullable NSString *)message;
+
+/** @fn missingClientIdentifierErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeMissingClientIdentifier code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)missingClientIdentifierErrorWithMessage:(nullable NSString *)message;
+
+/** @fn captchaCheckFailedErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCaptchaCheckFailed code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)captchaCheckFailedErrorWithMessage:(nullable NSString *)message;
+
+/** @fn webContextAlreadyPresentedErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeWebContextAlreadyPresented code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)webContextAlreadyPresentedErrorWithMessage:(nullable NSString *)message;
+
+/** @fn webContextCancelledErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeWebContextCancelled code.
+ @param message Error message from the backend, if any.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)webContextCancelledErrorWithMessage:(nullable NSString *)message;
+
+/** @fn appVerificationUserInteractionFailureWithReason:
+ @brief Constructs an @c NSError with the @c
+ FIRAuthErrorCodeAppVerificationUserInteractionFailure code.
+ @param reason Reason for error, returned via URL response.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)appVerificationUserInteractionFailureWithReason:(NSString *)reason;
+
+/** @fn webSignInUserInteractionFailureWithReason:
+ @brief Constructs an @c NSError with the @c
+ FIRAuthErrorCodeWebSignInUserInteractionFailure code.
+ @param reason Reason for error, returned via URL response.
+ @return The NSError instance associated with the given FIRAuthError.
+ */
++ (NSError *)webSignInUserInteractionFailureWithReason:(nullable NSString *)reason;
+
+/** @fn URLResponseErrorWithCode:message:
+ @brief Constructs an @c NSError with the code and message provided.
+ @param message Error message from the backend, if any.
+ @return The nullable NSError instance associated with the given error message, if one is found.
+ */
++ (nullable NSError *)URLResponseErrorWithCode:(NSString *)code
+ message:(nullable NSString *)message;
+
+/** @fn nullUserErrorWithMessage:
+ @brief Constructs an @c NSError with the code and message provided.
+ @param message Error message from the backend, if any.
+ @return The nullable NSError instance associated with the given error message, if one is found.
+ */
++ (NSError *)nullUserErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidProviderIDErrorWithMessage:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeInvalidProviderID code.
+ @param message Error message from the backend, if any.
+ @remarks This error indicates that the provider id given for the web operation is invalid.
+ */
++ (NSError *)invalidProviderIDErrorWithMessage:(nullable NSString *)message;
+
+/** @fn invalidDynamicLinkDomainErrorWithMessage:
+ @brief Constructs an @c NSError with the code and message provided.
+ @param message Error message from the backend, if any.
+ @return The nullable NSError instance associated with the given error message, if one is found.
+ */
++ (NSError *)invalidDynamicLinkDomainErrorWithMessage:(nullable NSString *)message;
+
+/** @fn keychainErrorWithFunction:status:
+ @brief Constructs an @c NSError with the @c FIRAuthErrorCodeKeychainError code.
+ @param keychainFunction The keychain function which was invoked and yielded an unexpected
+ response. The @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo
+ dictionary will contain a string partially comprised of this value.
+ @param status The response status from the invoked keychain function. The
+ @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo dictionary will contain
+ a string partially comprised of this value.
+ */
++ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status;
+
+/** @fn missingOrInvalidNonceErrorWithMessage:
+ @brief Constructs an @c NSError with the code and message provided.
+ @param message Error message from the backend, if any.
+ @return The nullable NSError instance associated with the given error message, if one is found.
+*/
++ (NSError *)missingOrInvalidNonceErrorWithMessage:(nullable NSString *)message;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.m
new file mode 100644
index 00000000..2dacb784
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.m
@@ -0,0 +1,1368 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+#import "FirebaseAuth/Sources/Public/FIRAuthCredential.h"
+
+#import "FirebaseAuth/Sources/MultiFactor/FIRMultiFactorResolver+Internal.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+NSString *const FIRAuthErrorDomain = @"FIRAuthErrorDomain";
+
+NSString *const FIRAuthInternalErrorDomain = @"FIRAuthInternalErrorDomain";
+
+NSString *const FIRAuthErrorUserInfoDeserializedResponseKey =
+ @"FIRAuthErrorUserInfoDeserializedResponseKey";
+
+NSString *const FIRAuthErrorUserInfoDataKey = @"FIRAuthErrorUserInfoDataKey";
+
+NSString *const FIRAuthErrorUserInfoEmailKey = @"FIRAuthErrorUserInfoEmailKey";
+
+NSString *const FIRAuthErrorUserInfoUpdatedCredentialKey =
+ @"FIRAuthErrorUserInfoUpdatedCredentialKey";
+
+NSString *const FIRAuthErrorUserInfoNameKey = @"FIRAuthErrorUserInfoNameKey";
+
+NSString *const FIRAuthErrorUserInfoMultiFactorResolverKey =
+ @"FIRAuthErrorUserInfoMultiFactorResolverKey";
+
+/** @var kServerErrorDetailMarker
+ @brief This marker indicates that the server error message contains a detail error message which
+ should be used instead of the hardcoded client error message.
+ */
+static NSString *const kServerErrorDetailMarker = @" : ";
+
+#pragma mark - URL response error codes
+
+/** @var kURLResponseErrorCodeInvalidClientID
+ @brief Error code that indicates that the client ID provided was invalid.
+ */
+static NSString *const kURLResponseErrorCodeInvalidClientID = @"auth/invalid-oauth-client-id";
+
+/** @var kURLResponseErrorCodeNetworkRequestFailed
+ @brief Error code that indicates that a network request within the SFSafariViewController or
+ WKWebView failed.
+ */
+static NSString *const kURLResponseErrorCodeNetworkRequestFailed = @"auth/network-request-failed";
+
+/** @var kURLResponseErrorCodeInternalError
+ @brief Error code that indicates that an internal error occurred within the
+ SFSafariViewController or WKWebView failed.
+ */
+static NSString *const kURLResponseErrorCodeInternalError = @"auth/internal-error";
+
+#pragma mark - Standard Error Messages
+
+/** @var kFIRAuthErrorMessageInvalidCustomToken
+ @brief Message for @c FIRAuthErrorCodeInvalidCustomToken error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidCustomToken =
+ @"The custom token format is "
+ "incorrect. Please check the documentation.";
+
+/** @var kFIRAuthErrorMessageCustomTokenMismatch
+ @brief Message for @c FIRAuthErrorCodeCustomTokenMismatch error code.
+ */
+static NSString *const kFIRAuthErrorMessageCustomTokenMismatch = @"The custom token corresponds to "
+ "a different audience.";
+
+/** @var kFIRAuthErrorMessageInvalidEmail
+ @brief Message for @c FIRAuthErrorCodeInvalidEmail error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidEmail = @"The email address is badly formatted.";
+
+/** @var kFIRAuthErrorMessageInvalidCredential
+ @brief Message for @c FIRAuthErrorCodeInvalidCredential error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidCredential = @"The supplied auth credential is "
+ "malformed or has expired.";
+
+/** @var kFIRAuthErrorMessageUserDisabled
+ @brief Message for @c FIRAuthErrorCodeUserDisabled error code.
+ */
+static NSString *const kFIRAuthErrorMessageUserDisabled = @"The user account has been disabled by "
+ "an administrator.";
+
+/** @var kFIRAuthErrorMessageEmailAlreadyInUse
+ @brief Message for @c FIRAuthErrorCodeEmailAlreadyInUse error code.
+ */
+static NSString *const kFIRAuthErrorMessageEmailAlreadyInUse = @"The email address is already in "
+ "use by another account.";
+
+/** @var kFIRAuthErrorMessageWrongPassword
+ @brief Message for @c FIRAuthErrorCodeWrongPassword error code.
+ */
+static NSString *const kFIRAuthErrorMessageWrongPassword = @"The password is invalid or the user "
+ "does not have a password.";
+
+/** @var kFIRAuthErrorMessageTooManyRequests
+ @brief Message for @c FIRAuthErrorCodeTooManyRequests error code.
+ */
+static NSString *const kFIRAuthErrorMessageTooManyRequests =
+ @"We have blocked all requests from "
+ "this device due to unusual activity. Try again later.";
+
+/** @var kFIRAuthErrorMessageAccountExistsWithDifferentCredential
+ @brief Message for @c FIRAuthErrorCodeAccountExistsWithDifferentCredential error code.
+ */
+static NSString *const kFIRAuthErrorMessageAccountExistsWithDifferentCredential =
+ @"An account "
+ "already exists with the same email address but different sign-in credentials. Sign in using "
+ "a "
+ "provider associated with this email address.";
+
+/** @var kFIRAuthErrorMessageRequiresRecentLogin
+ @brief Message for @c FIRAuthErrorCodeRequiresRecentLogin error code.
+ */
+static NSString *const kFIRAuthErrorMessageRequiresRecentLogin =
+ @"This operation is sensitive and "
+ "requires recent authentication. Log in again before retrying this request.";
+
+/** @var kFIRAuthErrorMessageProviderAlreadyLinked
+ @brief Message for @c FIRAuthErrorCodeProviderAlreadyExists error code.
+ */
+static NSString *const kFIRAuthErrorMessageProviderAlreadyLinked =
+ @"[ERROR_PROVIDER_ALREADY_LINKED] - User can only be linked to one identity for the given "
+ "provider.";
+
+/** @var kFIRAuthErrorMessageNoSuchProvider
+ @brief Message for @c FIRAuthErrorCodeNoSuchProvider error code.
+ */
+static NSString *const kFIRAuthErrorMessageNoSuchProvider = @"User was not linked to an account "
+ "with the given provider.";
+
+/** @var kFIRAuthErrorMessageInvalidUserToken
+ @brief Message for @c FIRAuthErrorCodeInvalidUserToken error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidUserToken =
+ @"This user's credential isn't valid "
+ "for this project. This can happen if the user's token has been tampered with, or if the user "
+ "doesn’t belong to the project associated with the API key used in your request.";
+
+/** @var kFIRAuthErrorMessageNetworkError
+ @brief Message for @c FIRAuthErrorCodeNetworkError error code.
+ */
+static NSString *const kFIRAuthErrorMessageNetworkError =
+ @"Network error (such as timeout, "
+ "interrupted connection or unreachable host) has occurred.";
+
+/** @var kFIRAuthErrorMessageKeychainError
+ @brief Message for @c FIRAuthErrorCodeKeychainError error code.
+ */
+static NSString *const kFIRAuthErrorMessageKeychainError =
+ @"An error occurred when accessing the "
+ "keychain. The @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo "
+ "dictionary "
+ "will contain more information about the error encountered";
+
+/** @var kFIRAuthErrorMessageMissingClientIdentifier
+ @brief Message for @c FIRAuthErrorCodeMissingClientIdentifier error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingClientIdentifier =
+ @"The request does not contain "
+ "any client identifier.";
+
+/** @var kFIRAuthErrorMessageUserTokenExpired
+ @brief Message for @c FIRAuthErrorCodeTokenExpired error code.
+ */
+static NSString *const kFIRAuthErrorMessageUserTokenExpired =
+ @"The user's credential is no longer "
+ "valid. The user must sign in again.";
+
+/** @var kFIRAuthErrorMessageUserNotFound
+ @brief Message for @c FIRAuthErrorCodeUserNotFound error code.
+ */
+static NSString *const kFIRAuthErrorMessageUserNotFound =
+ @"There is no user record corresponding "
+ "to this identifier. The user may have been deleted.";
+
+/** @var kFIRAuthErrorMessageInvalidAPIKey
+ @brief Message for @c FIRAuthErrorCodeInvalidAPIKey error code.
+ @remarks This error is not thrown by the server.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidAPIKey = @"An invalid API Key was supplied in "
+ "the request.";
+
+/** @var kFIRAuthErrorMessageUserMismatch.
+ @brief Message for @c FIRAuthErrorCodeInvalidAPIKey error code.
+ */
+static NSString *const FIRAuthErrorMessageUserMismatch =
+ @"The supplied credentials do not "
+ "correspond to the previously signed in user.";
+
+/** @var kFIRAuthErrorMessageCredentialAlreadyInUse
+ @brief Message for @c FIRAuthErrorCodeCredentialAlreadyInUse error code.
+ */
+static NSString *const kFIRAuthErrorMessageCredentialAlreadyInUse =
+ @"This credential is already "
+ "associated with a different user account.";
+
+/** @var kFIRAuthErrorMessageOperationNotAllowed
+ @brief Message for @c FIRAuthErrorCodeOperationNotAllowed error code.
+ */
+static NSString *const kFIRAuthErrorMessageOperationNotAllowed =
+ @"The given sign-in provider is "
+ "disabled for this Firebase project. Enable it in the Firebase console, under the sign-in "
+ "method tab of the Auth section.";
+
+/** @var kFIRAuthErrorMessageWeakPassword
+ @brief Message for @c FIRAuthErrorCodeWeakPassword error code.
+ */
+static NSString *const kFIRAuthErrorMessageWeakPassword = @"The password must be 6 characters long "
+ "or more.";
+
+/** @var kFIRAuthErrorMessageAppNotAuthorized
+ @brief Message for @c FIRAuthErrorCodeAppNotAuthorized error code.
+ */
+static NSString *const kFIRAuthErrorMessageAppNotAuthorized =
+ @"This app is not authorized to use "
+ "Firebase Authentication with the provided API key. Review your key configuration in the "
+ "Google API console and ensure that it accepts requests from your app's bundle ID.";
+
+/** @var kFIRAuthErrorMessageExpiredActionCode
+ @brief Message for @c FIRAuthErrorCodeExpiredActionCode error code.
+ */
+static NSString *const kFIRAuthErrorMessageExpiredActionCode = @"The action code has expired.";
+
+/** @var kFIRAuthErrorMessageInvalidActionCode
+ @brief Message for @c FIRAuthErrorCodeInvalidActionCode error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidActionCode =
+ @"The action code is invalid. This "
+ "can happen if the code is malformed, expired, or has already been used.";
+
+/** @var kFIRAuthErrorMessageInvalidMessagePayload
+ @brief Message for @c FIRAuthErrorCodeInvalidMessagePayload error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidMessagePayload =
+ @"The action code is invalid. "
+ "This can happen if the code is malformed, expired, or has already been used.";
+
+/** @var kFIRAuthErrorMessageInvalidSender
+ @brief Message for @c FIRAuthErrorCodeInvalidSender error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidSender =
+ @"The email template corresponding to "
+ "this action contains invalid characters in its message. Please fix by going to the Auth "
+ "email "
+ "templates section in the Firebase Console.";
+
+/** @var kFIRAuthErrorMessageInvalidRecipientEmail
+ @brief Message for @c FIRAuthErrorCodeInvalidRecipient error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidRecipientEmail =
+ @"The action code is invalid. "
+ "This can happen if the code is malformed, expired, or has already been used.";
+
+/** @var kFIRAuthErrorMessageMissingIosBundleID
+ @brief Message for @c FIRAuthErrorCodeMissingIosbundleID error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingIosBundleID =
+ @"An iOS Bundle ID must be provided if an App Store ID is provided.";
+
+/** @var kFIRAuthErrorMessageMissingAndroidPackageName
+ @brief Message for @c FIRAuthErrorCodeMissingAndroidPackageName error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingAndroidPackageName =
+ @"An Android Package Name must be provided if the Android App is required to be installed.";
+
+/** @var kFIRAuthErrorMessageUnauthorizedDomain
+ @brief Message for @c FIRAuthErrorCodeUnauthorizedDomain error code.
+ */
+static NSString *const kFIRAuthErrorMessageUnauthorizedDomain =
+ @"The domain of the continue URL "
+ "is not whitelisted. Please whitelist the domain in the Firebase console.";
+
+/** @var kFIRAuthErrorMessageInvalidContinueURI
+ @brief Message for @c FIRAuthErrorCodeInvalidContinueURI error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidContinueURI =
+ @"The continue URL provided in the request is invalid.";
+
+/** @var kFIRAuthErrorMessageMissingEmail
+ @brief Message for @c FIRAuthErrorCodeMissingEmail error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingEmail = @"An email address must be provided.";
+
+/** @var kFIRAuthErrorMessageMissingContinueURI
+ @brief Message for @c FIRAuthErrorCodeMissingContinueURI error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingContinueURI =
+ @"A continue URL must be provided in the request.";
+
+/** @var kFIRAuthErrorMessageMissingPhoneNumber
+ @brief Message for @c FIRAuthErrorCodeMissingPhoneNumber error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingPhoneNumber =
+ @"To send verification codes, provide a phone number for the recipient.";
+
+/** @var kFIRAuthErrorMessageInvalidPhoneNumber
+ @brief Message for @c FIRAuthErrorCodeInvalidPhoneNumber error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidPhoneNumber =
+ @"The format of the phone number provided is incorrect. Please enter the phone number in a "
+ "format that can be parsed into E.164 format. E.164 phone numbers are written in the format "
+ "[+][country code][subscriber number including area code].";
+
+/** @var kFIRAuthErrorMessageMissingVerificationCode
+ @brief Message for @c FIRAuthErrorCodeMissingVerificationCode error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingVerificationCode =
+ @"The phone auth credential was created with an empty SMS verification Code.";
+
+/** @var kFIRAuthErrorMessageInvalidVerificationCode
+ @brief Message for @c FIRAuthErrorCodeInvalidVerificationCode error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidVerificationCode =
+ @"The SMS verification code used to create the phone auth credential is invalid. Please resend "
+ "the verification code SMS and be sure to use the verification code provided by the user.";
+
+/** @var kFIRAuthErrorMessageMissingVerificationID
+ @brief Message for @c FIRAuthErrorCodeInvalidVerificationID error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingVerificationID =
+ @"The phone auth credential was created with an empty verification ID.";
+
+/** @var kFIRAuthErrorMessageInvalidVerificationID
+ @brief Message for @c FIRAuthErrorCodeInvalidVerificationID error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidVerificationID =
+ @"The verification ID used to create the phone auth credential is invalid.";
+
+/** @var kFIRAuthErrorMessageLocalPlayerNotAuthenticated
+ @brief Message for @c FIRAuthErrorCodeLocalPlayerNotAuthenticated error code.
+ */
+static NSString *const kFIRAuthErrorMessageLocalPlayerNotAuthenticated =
+ @"The local player is not authenticated. Please log the local player in to Game Center.";
+
+/** @var kFIRAuthErrorMessageGameKitNotLinked
+ @brief Message for @c kFIRAuthErrorMessageGameKitNotLinked error code.
+ */
+static NSString *const kFIRAuthErrorMessageGameKitNotLinked =
+ @"The GameKit framework is not linked. Please turn on the Game Center capability.";
+
+/** @var kFIRAuthErrorMessageSessionExpired
+ @brief Message for @c FIRAuthErrorCodeSessionExpired error code.
+ */
+static NSString *const kFIRAuthErrorMessageSessionExpired =
+ @"The SMS code has expired. Please "
+ @"re-send the verification code to try again.";
+
+/** @var kFIRAuthErrorMessageMissingAppCredential
+ @brief Message for @c FIRAuthErrorCodeMissingAppCredential error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingAppCredential =
+ @"The phone verification request "
+ "is missing an APNs Device token. Firebase Auth automatically detects APNs Device Tokens, "
+ "however, if method swizzling is disabled, the APNs token must be set via the APNSToken "
+ "property on FIRAuth or by calling setAPNSToken:type on FIRAuth.";
+
+/** @var kFIRAuthErrorMessageInvalidAppCredential
+ @brief Message for @c FIRAuthErrorCodeInvalidAppCredential error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidAppCredential =
+ @"The APNs device token provided "
+ "is either incorrect or does not match the private certificate uploaded to the Firebase "
+ "Console.";
+
+/** @var kFIRAuthErrorMessageQuotaExceeded
+ @brief Message for @c FIRAuthErrorCodeQuotaExceeded error code.
+ */
+static NSString *const kFIRAuthErrorMessageQuotaExceeded = @"The quota for this operation "
+ "has been exceeded.";
+
+/** @var kFIRAuthErrorMessageMissingAppToken
+ @brief Message for @c FIRAuthErrorCodeMissingAppToken error code.
+ */
+static NSString *const kFIRAuthErrorMessageMissingAppToken =
+ @"There seems to be a problem with "
+ "your project's Firebase phone number authentication set-up, please make sure to follow the "
+ "instructions found at https://firebase.google.com/docs/auth/ios/phone-auth";
+
+/** @var kFIRAuthErrorMessageMissingAppToken
+ @brief Message for @c FIRAuthErrorCodeMissingAppToken error code.
+ */
+static NSString *const kFIRAuthErrorMessageNotificationNotForwarded =
+ @"If app delegate swizzling "
+ "is disabled, remote notifications received by UIApplicationDelegate need to be forwarded to "
+ "FIRAuth's canHandleNotificaton: method.";
+
+/** @var kFIRAuthErrorMessageAppNotVerified
+ @brief Message for @c FIRAuthErrorCodeMissingAppToken error code.
+ */
+static NSString *const kFIRAuthErrorMessageAppNotVerified =
+ @"Firebase could not retrieve the "
+ "silent push notification and therefore could not verify your app. Ensure that you configured "
+ "your app correctly to receive push notifications.";
+
+/** @var kFIRAuthErrorMessageCaptchaCheckFailed
+ @brief Message for @c FIRAuthErrorCodeCaptchaCheckFailed error code.
+ */
+static NSString *const kFIRAuthErrorMessageCaptchaCheckFailed =
+ @"The reCAPTCHA response token "
+ "provided is either invalid, expired or already";
+
+/** @var kFIRAuthErrorMessageWebContextAlreadyPresented
+ @brief Message for @c FIRAuthErrorCodeWebContextAlreadyPresented error code.
+ */
+static NSString *const kFIRAuthErrorMessageWebContextAlreadyPresented =
+ @"User interaction is "
+ "still ongoing, another view cannot be presented.";
+
+/** @var kFIRAuthErrorMessageWebContextCancelled
+ @brief Message for @c FIRAuthErrorCodeWebContextCancelled error code.
+ */
+static NSString *const kFIRAuthErrorMessageWebContextCancelled = @"The interaction was cancelled "
+ "by the user.";
+
+/** @var kFIRAuthErrorMessageInvalidClientID
+ @brief Message for @c FIRAuthErrorCodeInvalidClientID error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidClientID =
+ @"The OAuth client ID provided is "
+ "either invalid or does not match the specified API key.";
+
+/** @var kFIRAuthErrorMessageWebRequestFailed
+ @brief Message for @c FIRAuthErrorCodeWebRequestFailed error code.
+ */
+static NSString *const kFIRAuthErrorMessageWebRequestFailed =
+ @"A network error (such as timeout, "
+ "interrupted connection, or unreachable host) has occurred within the web context.";
+
+/** @var kFIRAuthErrorMessageWebInternalError
+ @brief Message for @c FIRAuthErrorCodeWebInternalError error code.
+ */
+static NSString *const kFIRAuthErrorMessageWebInternalError =
+ @"An internal error has occurred "
+ "within the SFSafariViewController or WKWebView.";
+
+/** @var kFIRAuthErrorMessageAppVerificationUserInteractionFailure
+ @brief Message for @c FIRAuthErrorCodeInvalidClientID error code.
+ */
+static NSString *const kFIRAuthErrorMessageAppVerificationUserInteractionFailure =
+ @"The app "
+ "verification process has failed, print and inspect the error details for more information";
+
+/** @var kFIRAuthErrorMessageNullUser
+ @brief Message for @c FIRAuthErrorCodeNullUser error code.
+ */
+static NSString *const kFIRAuthErrorMessageNullUser =
+ @"A null user object was provided as the "
+ "argument for an operation which requires a non-null user object.";
+
+/** @var kFIRAuthErrorMessageInvalidProviderID
+ @brief Message for @c FIRAuthErrorCodeInvalidProviderID error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidProviderID =
+ @"The provider ID provided for the "
+ "attempted web operation is invalid.";
+
+/** @var kFIRAuthErrorMessageInvalidDynamicLinkDomain
+ @brief Message for @c kFIRAuthErrorMessageInvalidDynamicLinkDomain error code.
+ */
+static NSString *const kFIRAuthErrorMessageInvalidDynamicLinkDomain =
+ @"The "
+ "Firebase Dynamic Link domain used is either not configured or is unauthorized "
+ "for the current project.";
+
+/** @var kFIRAuthErrorMessageInternalError
+ @brief Message for @c FIRAuthErrorCodeInternalError error code.
+ */
+static NSString *const kFIRAuthErrorMessageInternalError =
+ @"An internal error has occurred, "
+ "print and inspect the error details for more information.";
+
+/** @var kFIRAuthErrorMessageMalformedJWT
+ @brief Error message constant describing @c FIRAuthErrorCodeMalformedJWT errors.
+ */
+static NSString *const kFIRAuthErrorMessageMalformedJWT =
+ @"Failed to parse JWT. Check the userInfo dictionary for the full token.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const kFIRAuthErrorMessageSecondFactorRequired =
+ @"Please complete a second factor challenge to finish signing into this account.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageMissingMultiFactorSession =
+ @"The request is missing proof of first factor successful sign-in.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageMissingMultiFactorInfo =
+ @"No second factor identifier is provided.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageInvalidMultiFactorSession =
+ @"The request does not contain a valid proof of first factor successful sign-in.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageMultiFactorInfoNotFound =
+ @"The user does not have a second factor matching the identifier provided.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageAdminRestrictedOperation =
+ @"This operation is restricted to administrators only.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageUnverifiedEmail =
+ @"The operation requires a verified email.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageSecondFactorAlreadyEnrolled =
+ @"The second factor is already enrolled on this account.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageMaximumSecondFactorCountExceeded =
+ @"The maximum allowed number of second factors on a user has been exceeded.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageUnsupportedFirstFactor =
+ @"Enrolling a second factor or signing in with a multi-factor account requires sign-in with a "
+ @"supported first factor.";
+
+/** @var kFIRAuthErrorMessageSecondFactorRequired
+ @brief Message for @c kFIRAuthErrorMessageSecondFactorRequired error code.
+ */
+static NSString *const FIRAuthErrorMessageEmailChangeNeedsVerification =
+ @"Multi-factor users must always have a verified email.";
+
+/** @var kFIRAuthErrorMessageDynamicLinkNotActivated
+ @brief Error message constant describing @c FIRAuthErrorCodeDynamicLinkNotActivated errors.
+ */
+static NSString *const kFIRAuthErrorMessageDynamicLinkNotActivated =
+ @"Please activate Dynamic Links in the Firebase Console and agree to the terms and conditions.";
+
+/** @var kFIRAuthErrorMessageRejectedCredential
+ @brief Error message constant describing @c FIRAuthErrorCodeRejectedCredential errors.
+ */
+static NSString *const kFIRAuthErrorMessageRejectedCredential =
+ @"The request contains malformed or mismatching credentials.";
+
+/** @var kFIRAuthErrorMessageMissingOrInvalidNonce
+ @brief Error message constant describing @c FIRAuthErrorCodeMissingOrInvalidNonce errors.
+ */
+static NSString *const kFIRAuthErrorMessageMissingOrInvalidNonce =
+ @"The request contains malformed or mismatched credentials.";
+
+/** @var FIRAuthErrorDescription
+ @brief The error descrioption, based on the error code.
+ @remarks No default case so that we get a compiler warning if a new value was added to the enum.
+ */
+static NSString *FIRAuthErrorDescription(FIRAuthErrorCode code) {
+ switch (code) {
+ case FIRAuthErrorCodeInvalidCustomToken:
+ return kFIRAuthErrorMessageInvalidCustomToken;
+ case FIRAuthErrorCodeCustomTokenMismatch:
+ return kFIRAuthErrorMessageCustomTokenMismatch;
+ case FIRAuthErrorCodeInvalidEmail:
+ return kFIRAuthErrorMessageInvalidEmail;
+ case FIRAuthErrorCodeInvalidCredential:
+ return kFIRAuthErrorMessageInvalidCredential;
+ case FIRAuthErrorCodeUserDisabled:
+ return kFIRAuthErrorMessageUserDisabled;
+ case FIRAuthErrorCodeEmailAlreadyInUse:
+ return kFIRAuthErrorMessageEmailAlreadyInUse;
+ case FIRAuthErrorCodeWrongPassword:
+ return kFIRAuthErrorMessageWrongPassword;
+ case FIRAuthErrorCodeTooManyRequests:
+ return kFIRAuthErrorMessageTooManyRequests;
+ case FIRAuthErrorCodeAccountExistsWithDifferentCredential:
+ return kFIRAuthErrorMessageAccountExistsWithDifferentCredential;
+ case FIRAuthErrorCodeRequiresRecentLogin:
+ return kFIRAuthErrorMessageRequiresRecentLogin;
+ case FIRAuthErrorCodeProviderAlreadyLinked:
+ return kFIRAuthErrorMessageProviderAlreadyLinked;
+ case FIRAuthErrorCodeNoSuchProvider:
+ return kFIRAuthErrorMessageNoSuchProvider;
+ case FIRAuthErrorCodeInvalidUserToken:
+ return kFIRAuthErrorMessageInvalidUserToken;
+ case FIRAuthErrorCodeNetworkError:
+ return kFIRAuthErrorMessageNetworkError;
+ case FIRAuthErrorCodeKeychainError:
+ return kFIRAuthErrorMessageKeychainError;
+ case FIRAuthErrorCodeMissingClientIdentifier:
+ return kFIRAuthErrorMessageMissingClientIdentifier;
+ case FIRAuthErrorCodeUserTokenExpired:
+ return kFIRAuthErrorMessageUserTokenExpired;
+ case FIRAuthErrorCodeUserNotFound:
+ return kFIRAuthErrorMessageUserNotFound;
+ case FIRAuthErrorCodeInvalidAPIKey:
+ return kFIRAuthErrorMessageInvalidAPIKey;
+ case FIRAuthErrorCodeCredentialAlreadyInUse:
+ return kFIRAuthErrorMessageCredentialAlreadyInUse;
+ case FIRAuthErrorCodeInternalError:
+ return kFIRAuthErrorMessageInternalError;
+ case FIRAuthErrorCodeUserMismatch:
+ return FIRAuthErrorMessageUserMismatch;
+ case FIRAuthErrorCodeOperationNotAllowed:
+ return kFIRAuthErrorMessageOperationNotAllowed;
+ case FIRAuthErrorCodeWeakPassword:
+ return kFIRAuthErrorMessageWeakPassword;
+ case FIRAuthErrorCodeAppNotAuthorized:
+ return kFIRAuthErrorMessageAppNotAuthorized;
+ case FIRAuthErrorCodeExpiredActionCode:
+ return kFIRAuthErrorMessageExpiredActionCode;
+ case FIRAuthErrorCodeInvalidActionCode:
+ return kFIRAuthErrorMessageInvalidActionCode;
+ case FIRAuthErrorCodeInvalidSender:
+ return kFIRAuthErrorMessageInvalidSender;
+ case FIRAuthErrorCodeInvalidMessagePayload:
+ return kFIRAuthErrorMessageInvalidMessagePayload;
+ case FIRAuthErrorCodeInvalidRecipientEmail:
+ return kFIRAuthErrorMessageInvalidRecipientEmail;
+ case FIRAuthErrorCodeMissingIosBundleID:
+ return kFIRAuthErrorMessageMissingIosBundleID;
+ case FIRAuthErrorCodeMissingAndroidPackageName:
+ return kFIRAuthErrorMessageMissingAndroidPackageName;
+ case FIRAuthErrorCodeUnauthorizedDomain:
+ return kFIRAuthErrorMessageUnauthorizedDomain;
+ case FIRAuthErrorCodeInvalidContinueURI:
+ return kFIRAuthErrorMessageInvalidContinueURI;
+ case FIRAuthErrorCodeMissingContinueURI:
+ return kFIRAuthErrorMessageMissingContinueURI;
+ case FIRAuthErrorCodeMissingEmail:
+ return kFIRAuthErrorMessageMissingEmail;
+ case FIRAuthErrorCodeMissingPhoneNumber:
+ return kFIRAuthErrorMessageMissingPhoneNumber;
+ case FIRAuthErrorCodeInvalidPhoneNumber:
+ return kFIRAuthErrorMessageInvalidPhoneNumber;
+ case FIRAuthErrorCodeMissingVerificationCode:
+ return kFIRAuthErrorMessageMissingVerificationCode;
+ case FIRAuthErrorCodeInvalidVerificationCode:
+ return kFIRAuthErrorMessageInvalidVerificationCode;
+ case FIRAuthErrorCodeMissingVerificationID:
+ return kFIRAuthErrorMessageMissingVerificationID;
+ case FIRAuthErrorCodeInvalidVerificationID:
+ return kFIRAuthErrorMessageInvalidVerificationID;
+ case FIRAuthErrorCodeSessionExpired:
+ return kFIRAuthErrorMessageSessionExpired;
+ case FIRAuthErrorCodeMissingAppCredential:
+ return kFIRAuthErrorMessageMissingAppCredential;
+ case FIRAuthErrorCodeInvalidAppCredential:
+ return kFIRAuthErrorMessageInvalidAppCredential;
+ case FIRAuthErrorCodeQuotaExceeded:
+ return kFIRAuthErrorMessageQuotaExceeded;
+ case FIRAuthErrorCodeMissingAppToken:
+ return kFIRAuthErrorMessageMissingAppToken;
+ case FIRAuthErrorCodeNotificationNotForwarded:
+ return kFIRAuthErrorMessageNotificationNotForwarded;
+ case FIRAuthErrorCodeAppNotVerified:
+ return kFIRAuthErrorMessageAppNotVerified;
+ case FIRAuthErrorCodeCaptchaCheckFailed:
+ return kFIRAuthErrorMessageCaptchaCheckFailed;
+ case FIRAuthErrorCodeWebContextAlreadyPresented:
+ return kFIRAuthErrorMessageWebContextAlreadyPresented;
+ case FIRAuthErrorCodeWebContextCancelled:
+ return kFIRAuthErrorMessageWebContextCancelled;
+ case FIRAuthErrorCodeInvalidClientID:
+ return kFIRAuthErrorMessageInvalidClientID;
+ case FIRAuthErrorCodeAppVerificationUserInteractionFailure:
+ return kFIRAuthErrorMessageAppVerificationUserInteractionFailure;
+ case FIRAuthErrorCodeWebNetworkRequestFailed:
+ return kFIRAuthErrorMessageWebRequestFailed;
+ case FIRAuthErrorCodeNullUser:
+ return kFIRAuthErrorMessageNullUser;
+ case FIRAuthErrorCodeInvalidProviderID:
+ return kFIRAuthErrorMessageInvalidProviderID;
+ case FIRAuthErrorCodeInvalidDynamicLinkDomain:
+ return kFIRAuthErrorMessageInvalidDynamicLinkDomain;
+ case FIRAuthErrorCodeWebInternalError:
+ return kFIRAuthErrorMessageWebInternalError;
+ case FIRAuthErrorCodeWebSignInUserInteractionFailure:
+ return kFIRAuthErrorMessageAppVerificationUserInteractionFailure;
+ case FIRAuthErrorCodeMalformedJWT:
+ return kFIRAuthErrorMessageMalformedJWT;
+ case FIRAuthErrorCodeLocalPlayerNotAuthenticated:
+ return kFIRAuthErrorMessageLocalPlayerNotAuthenticated;
+ case FIRAuthErrorCodeGameKitNotLinked:
+ return kFIRAuthErrorMessageGameKitNotLinked;
+ case FIRAuthErrorCodeSecondFactorRequired:
+ return kFIRAuthErrorMessageSecondFactorRequired;
+ case FIRAuthErrorCodeMissingMultiFactorSession:
+ return FIRAuthErrorMessageMissingMultiFactorSession;
+ case FIRAuthErrorCodeMissingMultiFactorInfo:
+ return FIRAuthErrorMessageMissingMultiFactorInfo;
+ case FIRAuthErrorCodeInvalidMultiFactorSession:
+ return FIRAuthErrorMessageInvalidMultiFactorSession;
+ case FIRAuthErrorCodeMultiFactorInfoNotFound:
+ return FIRAuthErrorMessageMultiFactorInfoNotFound;
+ case FIRAuthErrorCodeAdminRestrictedOperation:
+ return FIRAuthErrorMessageAdminRestrictedOperation;
+ case FIRAuthErrorCodeUnverifiedEmail:
+ return FIRAuthErrorMessageUnverifiedEmail;
+ case FIRAuthErrorCodeSecondFactorAlreadyEnrolled:
+ return FIRAuthErrorMessageSecondFactorAlreadyEnrolled;
+ case FIRAuthErrorCodeMaximumSecondFactorCountExceeded:
+ return FIRAuthErrorMessageMaximumSecondFactorCountExceeded;
+ case FIRAuthErrorCodeUnsupportedFirstFactor:
+ return FIRAuthErrorMessageUnsupportedFirstFactor;
+ case FIRAuthErrorCodeEmailChangeNeedsVerification:
+ return FIRAuthErrorMessageEmailChangeNeedsVerification;
+ case FIRAuthErrorCodeDynamicLinkNotActivated:
+ return kFIRAuthErrorMessageDynamicLinkNotActivated;
+ case FIRAuthErrorCodeRejectedCredential:
+ return kFIRAuthErrorMessageRejectedCredential;
+ case FIRAuthErrorCodeMissingOrInvalidNonce:
+ return kFIRAuthErrorMessageMissingOrInvalidNonce;
+ }
+}
+
+/** @var FIRAuthErrorCodeString
+ @brief The the error short string, based on the error code.
+ @remarks No default case so that we get a compiler warning if a new value was added to the enum.
+ */
+static NSString *const FIRAuthErrorCodeString(FIRAuthErrorCode code) {
+ switch (code) {
+ case FIRAuthErrorCodeInvalidCustomToken:
+ return @"ERROR_INVALID_CUSTOM_TOKEN";
+ case FIRAuthErrorCodeCustomTokenMismatch:
+ return @"ERROR_CUSTOM_TOKEN_MISMATCH";
+ case FIRAuthErrorCodeInvalidEmail:
+ return @"ERROR_INVALID_EMAIL";
+ case FIRAuthErrorCodeInvalidCredential:
+ return @"ERROR_INVALID_CREDENTIAL";
+ case FIRAuthErrorCodeUserDisabled:
+ return @"ERROR_USER_DISABLED";
+ case FIRAuthErrorCodeEmailAlreadyInUse:
+ return @"ERROR_EMAIL_ALREADY_IN_USE";
+ case FIRAuthErrorCodeWrongPassword:
+ return @"ERROR_WRONG_PASSWORD";
+ case FIRAuthErrorCodeTooManyRequests:
+ return @"ERROR_TOO_MANY_REQUESTS";
+ case FIRAuthErrorCodeAccountExistsWithDifferentCredential:
+ return @"ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL";
+ case FIRAuthErrorCodeRequiresRecentLogin:
+ return @"ERROR_REQUIRES_RECENT_LOGIN";
+ case FIRAuthErrorCodeProviderAlreadyLinked:
+ return @"ERROR_PROVIDER_ALREADY_LINKED";
+ case FIRAuthErrorCodeNoSuchProvider:
+ return @"ERROR_NO_SUCH_PROVIDER";
+ case FIRAuthErrorCodeInvalidUserToken:
+ return @"ERROR_INVALID_USER_TOKEN";
+ case FIRAuthErrorCodeNetworkError:
+ return @"ERROR_NETWORK_REQUEST_FAILED";
+ case FIRAuthErrorCodeKeychainError:
+ return @"ERROR_KEYCHAIN_ERROR";
+ case FIRAuthErrorCodeMissingClientIdentifier:
+ return @"ERROR_MISSING_CLIENT_IDENTIFIER";
+ case FIRAuthErrorCodeUserTokenExpired:
+ return @"ERROR_USER_TOKEN_EXPIRED";
+ case FIRAuthErrorCodeUserNotFound:
+ return @"ERROR_USER_NOT_FOUND";
+ case FIRAuthErrorCodeInvalidAPIKey:
+ return @"ERROR_INVALID_API_KEY";
+ case FIRAuthErrorCodeCredentialAlreadyInUse:
+ return @"ERROR_CREDENTIAL_ALREADY_IN_USE";
+ case FIRAuthErrorCodeInternalError:
+ return @"ERROR_INTERNAL_ERROR";
+ case FIRAuthErrorCodeUserMismatch:
+ return @"ERROR_USER_MISMATCH";
+ case FIRAuthErrorCodeOperationNotAllowed:
+ return @"ERROR_OPERATION_NOT_ALLOWED";
+ case FIRAuthErrorCodeWeakPassword:
+ return @"ERROR_WEAK_PASSWORD";
+ case FIRAuthErrorCodeAppNotAuthorized:
+ return @"ERROR_APP_NOT_AUTHORIZED";
+ case FIRAuthErrorCodeExpiredActionCode:
+ return @"ERROR_EXPIRED_ACTION_CODE";
+ case FIRAuthErrorCodeInvalidActionCode:
+ return @"ERROR_INVALID_ACTION_CODE";
+ case FIRAuthErrorCodeInvalidMessagePayload:
+ return @"ERROR_INVALID_MESSAGE_PAYLOAD";
+ case FIRAuthErrorCodeInvalidSender:
+ return @"ERROR_INVALID_SENDER";
+ case FIRAuthErrorCodeInvalidRecipientEmail:
+ return @"ERROR_INVALID_RECIPIENT_EMAIL";
+ case FIRAuthErrorCodeMissingIosBundleID:
+ return @"ERROR_MISSING_IOS_BUNDLE_ID";
+ case FIRAuthErrorCodeMissingAndroidPackageName:
+ return @"ERROR_MISSING_ANDROID_PKG_NAME";
+ case FIRAuthErrorCodeUnauthorizedDomain:
+ return @"ERROR_UNAUTHORIZED_DOMAIN";
+ case FIRAuthErrorCodeInvalidContinueURI:
+ return @"ERROR_INVALID_CONTINUE_URI";
+ case FIRAuthErrorCodeMissingContinueURI:
+ return @"ERROR_MISSING_CONTINUE_URI";
+ case FIRAuthErrorCodeMissingEmail:
+ return @"ERROR_MISSING_EMAIL";
+ case FIRAuthErrorCodeMissingPhoneNumber:
+ return @"ERROR_MISSING_PHONE_NUMBER";
+ case FIRAuthErrorCodeInvalidPhoneNumber:
+ return @"ERROR_INVALID_PHONE_NUMBER";
+ case FIRAuthErrorCodeMissingVerificationCode:
+ return @"ERROR_MISSING_VERIFICATION_CODE";
+ case FIRAuthErrorCodeInvalidVerificationCode:
+ return @"ERROR_INVALID_VERIFICATION_CODE";
+ case FIRAuthErrorCodeMissingVerificationID:
+ return @"ERROR_MISSING_VERIFICATION_ID";
+ case FIRAuthErrorCodeInvalidVerificationID:
+ return @"ERROR_INVALID_VERIFICATION_ID";
+ case FIRAuthErrorCodeSessionExpired:
+ return @"ERROR_SESSION_EXPIRED";
+ case FIRAuthErrorCodeMissingAppCredential:
+ return @"MISSING_APP_CREDENTIAL";
+ case FIRAuthErrorCodeInvalidAppCredential:
+ return @"INVALID_APP_CREDENTIAL";
+ case FIRAuthErrorCodeQuotaExceeded:
+ return @"ERROR_QUOTA_EXCEEDED";
+ case FIRAuthErrorCodeMissingAppToken:
+ return @"ERROR_MISSING_APP_TOKEN";
+ case FIRAuthErrorCodeNotificationNotForwarded:
+ return @"ERROR_NOTIFICATION_NOT_FORWARDED";
+ case FIRAuthErrorCodeAppNotVerified:
+ return @"ERROR_APP_NOT_VERIFIED";
+ case FIRAuthErrorCodeCaptchaCheckFailed:
+ return @"ERROR_CAPTCHA_CHECK_FAILED";
+ case FIRAuthErrorCodeWebContextAlreadyPresented:
+ return @"ERROR_WEB_CONTEXT_ALREADY_PRESENTED";
+ case FIRAuthErrorCodeWebContextCancelled:
+ return @"ERROR_WEB_CONTEXT_CANCELLED";
+ case FIRAuthErrorCodeInvalidClientID:
+ return @"ERROR_INVALID_CLIENT_ID";
+ case FIRAuthErrorCodeAppVerificationUserInteractionFailure:
+ return @"ERROR_APP_VERIFICATION_FAILED";
+ case FIRAuthErrorCodeWebNetworkRequestFailed:
+ return @"ERROR_WEB_NETWORK_REQUEST_FAILED";
+ case FIRAuthErrorCodeNullUser:
+ return @"ERROR_NULL_USER";
+ case FIRAuthErrorCodeInvalidProviderID:
+ return @"ERROR_INVALID_PROVIDER_ID";
+ case FIRAuthErrorCodeInvalidDynamicLinkDomain:
+ return @"ERROR_INVALID_DYNAMIC_LINK_DOMAIN";
+ case FIRAuthErrorCodeWebInternalError:
+ return @"ERROR_WEB_INTERNAL_ERROR";
+ case FIRAuthErrorCodeWebSignInUserInteractionFailure:
+ return @"ERROR_WEB_USER_INTERACTION_FAILURE";
+ case FIRAuthErrorCodeMalformedJWT:
+ return @"ERROR_MALFORMED_JWT";
+ case FIRAuthErrorCodeLocalPlayerNotAuthenticated:
+ return @"ERROR_LOCAL_PLAYER_NOT_AUTHENTICATED";
+ case FIRAuthErrorCodeGameKitNotLinked:
+ return @"ERROR_GAME_KIT_NOT_LINKED";
+ case FIRAuthErrorCodeSecondFactorRequired:
+ return @"ERROR_SECOND_FACTOR_REQUIRED";
+ case FIRAuthErrorCodeMissingMultiFactorSession:
+ return @"ERROR_MISSING_MULTI_FACTOR_SESSION";
+ case FIRAuthErrorCodeMissingMultiFactorInfo:
+ return @"ERROR_MISSING_MULTI_FACTOR_INFO";
+ case FIRAuthErrorCodeInvalidMultiFactorSession:
+ return @"ERROR_INVALID_MULTI_FACTOR_SESSION";
+ case FIRAuthErrorCodeMultiFactorInfoNotFound:
+ return @"ERROR_MULTI_FACTOR_INFO_NOT_FOUND";
+ case FIRAuthErrorCodeAdminRestrictedOperation:
+ return @"ERROR_ADMIN_RESTRICTED_OPERATION";
+ case FIRAuthErrorCodeUnverifiedEmail:
+ return @"ERROR_UNVERIFIED_EMAIL";
+ case FIRAuthErrorCodeSecondFactorAlreadyEnrolled:
+ return @"ERROR_SECOND_FACTOR_ALREADY_ENROLLED";
+ case FIRAuthErrorCodeMaximumSecondFactorCountExceeded:
+ return @"ERROR_MAXIMUM_SECOND_FACTOR_COUNT_EXCEEDED";
+ case FIRAuthErrorCodeUnsupportedFirstFactor:
+ return @"ERROR_UNSUPPORTED_FIRST_FACTOR";
+ case FIRAuthErrorCodeEmailChangeNeedsVerification:
+ return @"ERROR_EMAIL_CHANGE_NEEDS_VERIFICATION";
+ case FIRAuthErrorCodeDynamicLinkNotActivated:
+ return @"ERROR_DYNAMIC_LINK_NOT_ACTIVATED";
+ case FIRAuthErrorCodeRejectedCredential:
+ return @"ERROR_REJECTED_CREDENTIAL";
+ case FIRAuthErrorCodeMissingOrInvalidNonce:
+ return @"ERROR_MISSING_OR_INVALID_NONCE";
+ }
+}
+
+@implementation FIRAuthErrorUtils
+
++ (NSError *)errorWithCode:(FIRAuthInternalErrorCode)code {
+ return [self errorWithCode:code message:nil];
+}
+
++ (NSError *)errorWithCode:(FIRAuthInternalErrorCode)code message:(nullable NSString *)message {
+ NSDictionary *userInfo = nil;
+ if (message.length) {
+ userInfo = @{NSLocalizedDescriptionKey : message};
+ }
+ return [self errorWithCode:code userInfo:userInfo];
+}
+
++ (NSError *)errorWithCode:(FIRAuthInternalErrorCode)code
+ underlyingError:(nullable NSError *)underlyingError {
+ NSDictionary *errorUserInfo;
+ if (underlyingError) {
+ errorUserInfo = @{NSUnderlyingErrorKey : underlyingError};
+ }
+ return [self errorWithCode:code userInfo:errorUserInfo];
+}
+
++ (NSError *)errorWithCode:(FIRAuthInternalErrorCode)code
+ userInfo:(nullable NSDictionary *)userInfo {
+ BOOL isPublic = (code & FIRAuthPublicErrorCodeFlag) == FIRAuthPublicErrorCodeFlag;
+ if (isPublic) {
+ // This is a public error. Return it as a public error and add a description.
+ NSInteger errorCode = code & ~FIRAuthPublicErrorCodeFlag;
+ NSMutableDictionary *errorUserInfo = [NSMutableDictionary dictionary];
+ if (userInfo) {
+ [errorUserInfo addEntriesFromDictionary:userInfo];
+ }
+ if (!errorUserInfo[NSLocalizedDescriptionKey]) {
+ errorUserInfo[NSLocalizedDescriptionKey] = FIRAuthErrorDescription(errorCode);
+ }
+ errorUserInfo[FIRAuthErrorUserInfoNameKey] = FIRAuthErrorCodeString(errorCode);
+ return [NSError errorWithDomain:FIRAuthErrorDomain code:errorCode userInfo:errorUserInfo];
+ } else {
+ // This is an internal error. Wrap it in an internal error.
+ NSError *error = [NSError errorWithDomain:FIRAuthInternalErrorDomain
+ code:code
+ userInfo:userInfo];
+ return [self errorWithCode:FIRAuthInternalErrorCodeInternalError underlyingError:error];
+ }
+}
+
++ (NSError *)RPCRequestEncodingErrorWithUnderlyingError:(NSError *)underlyingError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeRPCRequestEncodingError
+ underlyingError:underlyingError];
+}
+
++ (NSError *)JSONSerializationErrorForUnencodableType {
+ return [self errorWithCode:FIRAuthInternalErrorCodeJSONSerializationError];
+}
+
++ (NSError *)JSONSerializationErrorWithUnderlyingError:(NSError *)underlyingError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeJSONSerializationError
+ underlyingError:underlyingError];
+}
+
++ (NSError *)networkErrorWithUnderlyingError:(NSError *)underlyingError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeNetworkError underlyingError:underlyingError];
+}
+
++ (NSError *)unexpectedErrorResponseWithData:(NSData *)data
+ underlyingError:(NSError *)underlyingError {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ if (data) {
+ userInfo[FIRAuthErrorUserInfoDataKey] = data;
+ }
+ if (underlyingError) {
+ userInfo[NSUnderlyingErrorKey] = underlyingError;
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeUnexpectedErrorResponse
+ userInfo:[userInfo copy]];
+}
+
++ (NSError *)unexpectedErrorResponseWithDeserializedResponse:(id)deserializedResponse {
+ NSDictionary *userInfo;
+ if (deserializedResponse) {
+ userInfo = @{
+ FIRAuthErrorUserInfoDeserializedResponseKey : deserializedResponse,
+ };
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeUnexpectedErrorResponse userInfo:userInfo];
+}
+
++ (NSError *)malformedJWTErrorWithToken:(NSString *)token
+ underlyingError:(NSError *_Nullable)underlyingError {
+ NSMutableDictionary *userInfo =
+ [NSMutableDictionary dictionaryWithObject:kFIRAuthErrorMessageMalformedJWT
+ forKey:NSLocalizedDescriptionKey];
+ [userInfo setObject:token forKey:FIRAuthErrorUserInfoDataKey];
+ if (underlyingError != nil) {
+ [userInfo setObject:underlyingError forKey:NSUnderlyingErrorKey];
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeMalformedJWT userInfo:[userInfo copy]];
+}
+
++ (NSError *)unexpectedResponseWithData:(NSData *)data underlyingError:(NSError *)underlyingError {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ if (data) {
+ userInfo[FIRAuthErrorUserInfoDataKey] = data;
+ }
+ if (underlyingError) {
+ userInfo[NSUnderlyingErrorKey] = underlyingError;
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeUnexpectedResponse userInfo:[userInfo copy]];
+}
+
++ (NSError *)unexpectedResponseWithDeserializedResponse:(id)deserializedResponse {
+ NSDictionary *userInfo;
+ if (deserializedResponse) {
+ userInfo = @{
+ FIRAuthErrorUserInfoDeserializedResponseKey : deserializedResponse,
+ };
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeUnexpectedResponse userInfo:userInfo];
+}
+
++ (NSError *)unexpectedResponseWithDeserializedResponse:(nullable id)deserializedResponse
+ underlyingError:(NSError *)underlyingError {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ if (deserializedResponse) {
+ userInfo[FIRAuthErrorUserInfoDeserializedResponseKey] = deserializedResponse;
+ }
+ if (underlyingError) {
+ userInfo[NSUnderlyingErrorKey] = underlyingError;
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeUnexpectedResponse userInfo:[userInfo copy]];
+}
+
++ (NSError *)RPCResponseDecodingErrorWithDeserializedResponse:(id)deserializedResponse
+ underlyingError:(NSError *)underlyingError {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ if (deserializedResponse) {
+ userInfo[FIRAuthErrorUserInfoDeserializedResponseKey] = deserializedResponse;
+ }
+ if (underlyingError) {
+ userInfo[NSUnderlyingErrorKey] = underlyingError;
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeRPCResponseDecodingError
+ userInfo:[userInfo copy]];
+}
+
++ (NSError *)emailAlreadyInUseErrorWithEmail:(nullable NSString *)email {
+ NSDictionary *userInfo;
+ if (email.length) {
+ userInfo = @{
+ FIRAuthErrorUserInfoEmailKey : email,
+ };
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeEmailAlreadyInUse userInfo:userInfo];
+}
+
++ (NSError *)userDisabledErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeUserDisabled message:message];
+}
+
++ (NSError *)wrongPasswordErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeWrongPassword message:message];
+}
+
++ (NSError *)tooManyRequestsErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeTooManyRequests message:message];
+}
+
++ (NSError *)invalidCustomTokenErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidCustomToken message:message];
+}
+
++ (NSError *)customTokenMistmatchErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeCustomTokenMismatch message:message];
+}
+
++ (NSError *)invalidCredentialErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidCredential message:message];
+}
+
++ (NSError *)requiresRecentLoginErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeRequiresRecentLogin message:message];
+}
+
++ (NSError *)invalidUserTokenErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidUserToken message:message];
+}
+
++ (NSError *)invalidEmailErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidEmail message:message];
+}
+
++ (NSError *)accountExistsWithDifferentCredentialErrorWithEmail:(nullable NSString *)email
+ updatedCredential:
+ (nullable FIRAuthCredential *)updatedCredential {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ if (email) {
+ userInfo[FIRAuthErrorUserInfoEmailKey] = email;
+ }
+ if (updatedCredential) {
+ userInfo[FIRAuthErrorUserInfoUpdatedCredentialKey] = updatedCredential;
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeAccountExistsWithDifferentCredential
+ userInfo:userInfo];
+}
+
++ (NSError *)providerAlreadyLinkedError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeProviderAlreadyLinked];
+}
+
++ (NSError *)noSuchProviderError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeNoSuchProvider];
+}
+
++ (NSError *)userTokenExpiredErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeUserTokenExpired message:message];
+}
+
++ (NSError *)userNotFoundErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeUserNotFound message:message];
+}
+
++ (NSError *)invalidAPIKeyError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidAPIKey];
+}
+
++ (NSError *)userMismatchError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeUserMismatch];
+}
+
++ (NSError *)credentialAlreadyInUseErrorWithMessage:(nullable NSString *)message
+ credential:(nullable FIRAuthCredential *)credential
+ email:(nullable NSString *)email {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ if (credential) {
+ userInfo[FIRAuthErrorUserInfoUpdatedCredentialKey] = credential;
+ }
+ if (email.length) {
+ userInfo[FIRAuthErrorUserInfoEmailKey] = email;
+ }
+ if (userInfo.count) {
+ return [self errorWithCode:FIRAuthInternalErrorCodeCredentialAlreadyInUse userInfo:userInfo];
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeCredentialAlreadyInUse message:message];
+}
+
++ (NSError *)operationNotAllowedErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeOperationNotAllowed message:message];
+}
+
++ (NSError *)weakPasswordErrorWithServerResponseReason:(nullable NSString *)reason {
+ NSDictionary *userInfo;
+ if (reason.length) {
+ userInfo = @{
+ NSLocalizedFailureReasonErrorKey : reason,
+ };
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeWeakPassword userInfo:userInfo];
+}
+
++ (NSError *)appNotAuthorizedError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeAppNotAuthorized];
+}
+
++ (NSError *)expiredActionCodeErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeExpiredActionCode message:message];
+}
+
++ (NSError *)invalidActionCodeErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidActionCode message:message];
+}
+
++ (NSError *)invalidMessagePayloadErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidMessagePayload message:message];
+}
+
++ (NSError *)invalidSenderErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidSender message:message];
+}
+
++ (NSError *)invalidRecipientEmailErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidRecipientEmail message:message];
+}
+
++ (NSError *)missingIosBundleIDErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthinternalErrorCodeMissingIosBundleID message:message];
+}
+
++ (NSError *)missingAndroidPackageNameErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingAndroidPackageName message:message];
+}
+
++ (NSError *)unauthorizedDomainErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeUnauthorizedDomain message:message];
+}
+
++ (NSError *)invalidContinueURIErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidContinueURI message:message];
+}
+
++ (NSError *)missingContinueURIErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingContinueURI message:message];
+}
+
++ (NSError *)missingEmailErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingEmail message:message];
+}
+
++ (NSError *)missingPhoneNumberErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingPhoneNumber message:message];
+}
+
++ (NSError *)invalidPhoneNumberErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidPhoneNumber message:message];
+}
+
++ (NSError *)missingVerificationCodeErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingVerificationCode message:message];
+}
+
++ (NSError *)invalidVerificationCodeErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidVerificationCode message:message];
+}
+
++ (NSError *)missingVerificationIDErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingVerificationID message:message];
+}
+
++ (NSError *)invalidVerificationIDErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidVerificationID message:message];
+}
+
++ (NSError *)sessionExpiredErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeSessionExpired message:message];
+}
+
++ (NSError *)missingAppCredentialWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingAppCredential message:message];
+}
+
++ (NSError *)invalidAppCredentialWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidAppCredential message:message];
+}
+
++ (NSError *)quotaExceededErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeQuotaExceeded message:message];
+}
+
++ (NSError *)missingAppTokenErrorWithUnderlyingError:(nullable NSError *)underlyingError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingAppToken
+ underlyingError:underlyingError];
+}
+
++ (NSError *)localPlayerNotAuthenticatedError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeLocalPlayerNotAuthenticated];
+}
+
++ (NSError *)gameKitNotLinkedError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeGameKitNotLinked];
+}
+
+#if TARGET_OS_IOS
++ (NSError *)secondFactorRequiredErrorWithPendingCredential:(NSString *)MFAPendingCredential
+ hints:(NSArray<FIRMultiFactorInfo *> *)hints {
+ NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
+ if (MFAPendingCredential && hints) {
+ FIRMultiFactorResolver *resolver =
+ [[FIRMultiFactorResolver alloc] initWithMFAPendingCredential:MFAPendingCredential
+ hints:hints];
+ userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey] = resolver;
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeSecondFactorRequired userInfo:userInfo];
+}
+#endif
+
++ (NSError *)notificationNotForwardedError {
+ return [self errorWithCode:FIRAuthInternalErrorCodeNotificationNotForwarded];
+}
+
++ (NSError *)appNotVerifiedErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeAppNotVerified message:message];
+}
+
++ (NSError *)missingClientIdentifierErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingClientIdentifier message:message];
+}
+
++ (NSError *)captchaCheckFailedErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeCaptchaCheckFailed message:message];
+}
+
++ (NSError *)webContextAlreadyPresentedErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeWebContextAlreadyPresented message:message];
+}
+
++ (NSError *)webContextCancelledErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeWebContextCancelled message:message];
+}
+
++ (NSError *)appVerificationUserInteractionFailureWithReason:(NSString *)reason {
+ NSDictionary *userInfo;
+ if (reason.length) {
+ userInfo = @{
+ NSLocalizedFailureReasonErrorKey : reason,
+ };
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeAppVerificationUserInteractionFailure
+ userInfo:userInfo];
+}
+
++ (NSError *)webSignInUserInteractionFailureWithReason:(nullable NSString *)reason {
+ NSDictionary *userInfo;
+ if (reason.length) {
+ userInfo = @{
+ NSLocalizedFailureReasonErrorKey : reason,
+ };
+ }
+ return [self errorWithCode:FIRAuthInternalErrorCodeWebSignInUserInteractionFailure
+ userInfo:userInfo];
+}
+
++ (nullable NSError *)URLResponseErrorWithCode:(NSString *)code
+ message:(nullable NSString *)message {
+ if ([code isEqualToString:kURLResponseErrorCodeInvalidClientID]) {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidClientID message:message];
+ }
+ if ([code isEqualToString:kURLResponseErrorCodeNetworkRequestFailed]) {
+ return [self errorWithCode:FIRAuthInternalErrorCodeWebNetworkRequestFailed message:message];
+ }
+ if ([code isEqualToString:kURLResponseErrorCodeInternalError]) {
+ return [self errorWithCode:FIRAuthInternalErrorCodeWebInternalError message:message];
+ }
+ return nil;
+}
+
++ (NSError *)nullUserErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeNullUser message:message];
+}
+
++ (NSError *)invalidProviderIDErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidProviderID message:message];
+}
+
++ (NSError *)invalidDynamicLinkDomainErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeInvalidDynamicLinkDomain message:message];
+}
+
++ (NSError *)missingOrInvalidNonceErrorWithMessage:(nullable NSString *)message {
+ return [self errorWithCode:FIRAuthInternalErrorCodeMissingOrInvalidNonce message:message];
+}
+
++ (NSError *)keychainErrorWithFunction:(NSString *)keychainFunction status:(OSStatus)status {
+ NSString *failureReason = [NSString stringWithFormat:@"%@ (%li)", keychainFunction, (long)status];
+ return [self errorWithCode:FIRAuthInternalErrorCodeKeychainError
+ userInfo:@{
+ NSLocalizedFailureReasonErrorKey : failureReason,
+ }];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h
new file mode 100644
index 00000000..3ae9159d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthExceptionUtils
+ @brief Utility class used to raise standardized Auth related exceptions.
+*/
+@interface FIRAuthExceptionUtils : NSObject
+
+/** @fn raiseInvalidParameterExceptionWithReason:
+ @brief raises the "invalid parameter" exception
+ @param reason string will contain a description of the error.
+ */
++ (void)raiseInvalidParameterExceptionWithReason:(nullable NSString *)reason;
+
+/** @fn raiseMethodNotImplementedExceptionWithReason:
+ @brief raises the "method not implemented" exception
+ @param reason string will contain a description of the error.
+ @see FIRMethodNotImplementedException
+ */
++ (void)raiseMethodNotImplementedExceptionWithReason:(nullable NSString *)reason;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.m
new file mode 100644
index 00000000..783d4a41
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.m
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthExceptionUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var FIRMethodNotImplementedException
+ @brief The name of the "Method Not Implemented" exception.
+ */
+static NSString *const FIRMethodNotImplementedException = @"FIRMethodNotImplementedException";
+
+@implementation FIRAuthExceptionUtils
+
++ (void)raiseInvalidParameterExceptionWithReason:(nullable NSString *)reason {
+ [NSException raise:NSInvalidArgumentException format:@"%@", reason];
+}
+
++ (void)raiseMethodNotImplementedExceptionWithReason:(nullable NSString *)reason {
+ NSException *exception = [NSException exceptionWithName:FIRMethodNotImplementedException
+ reason:reason
+ userInfo:nil];
+ [exception raise];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthInternalErrors.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthInternalErrors.h
new file mode 100644
index 00000000..b0287057
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthInternalErrors.h
@@ -0,0 +1,530 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "FirebaseAuth/Sources/Public/FIRAuthErrors.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @var FIRAuthPublicErrorCodeFlag
+ @brief Bitmask value indicating the error represents a public error code when this bit is
+ zeroed. Error codes which don't contain this flag will be wrapped in an @c NSError whose
+ code is @c FIRAuthErrorCodeInternalError.
+ */
+static const NSInteger FIRAuthPublicErrorCodeFlag = 1 << 20;
+
+/** @var FIRAuthInternalErrorDomain
+ @brief The Firebase Auth error domain for internal errors.
+ */
+extern NSString *const FIRAuthInternalErrorDomain;
+
+/** @var FIRAuthErrorUserInfoDeserializedResponseKey
+ @brief Errors with the code @c FIRAuthErrorCodeUnexpectedResponseError,
+ @c FIRAuthErrorCodeUnexpectedErrorResponseError, and
+ @c FIRAuthInternalErrorCodeRPCResponseDecodingError may contain an @c NSError.userInfo
+ dictionary which contains this key. The value associated with this key is an object of
+ unspecified contents containing the deserialized server response.
+ */
+extern NSString *const FIRAuthErrorUserInfoDeserializedResponseKey;
+
+/** @var FIRAuthErrorUserInfoDataKey
+ @brief Errors with the code @c FIRAuthErrorCodeUnexpectedResponseError or
+ @c FIRAuthErrorCodeUnexpectedErrorResponseError may contain an @c NSError.userInfo
+ dictionary which contains this key. The value associated with this key is an @c NSString
+ which represents the response from a server to an RPC which could not be deserialized.
+ */
+extern NSString *const FIRAuthErrorUserInfoDataKey;
+
+/** @var FIRAuthInternalErrorCode
+ @brief Error codes used internally by Firebase Auth.
+ @remarks All errors are generated using an internal error code. These errors are automatically
+ converted to the appropriate public version of the @c NSError by the methods in
+ @c FIRAuthErrorUtils
+ */
+typedef NS_ENUM(NSInteger, FIRAuthInternalErrorCode) {
+ /** @var FIRAuthInternalErrorCodeNetworkError
+ @brief Indicates a network error occurred (such as a timeout, interrupted connection, or
+ unreachable host.)
+ @remarks These types of errors are often recoverable with a retry.
+
+ See the @c NSUnderlyingError value in the @c NSError.userInfo dictionary for details about
+ the network error which occurred.
+ */
+ FIRAuthInternalErrorCodeNetworkError = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeNetworkError,
+
+ /** @var FIRAuthInternalErrorCodeEmailAlreadyInUse
+ @brief The email used to attempt a sign-up already exists.
+ */
+ FIRAuthInternalErrorCodeEmailAlreadyInUse = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeEmailAlreadyInUse,
+
+ /** @var FIRAuthInternalErrorCodeUserDisabled
+ @brief Indicates the user's account is disabled on the server side.
+ */
+ FIRAuthInternalErrorCodeUserDisabled = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeUserDisabled,
+
+ /** @var FIRAuthInternalErrorCodeWrongPassword
+ @brief Indicates the user attempted sign in with a wrong password
+ */
+ FIRAuthInternalErrorCodeWrongPassword = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeWrongPassword,
+
+ /** @var FIRAuthInternalErrorCodeKeychainError
+ @brief Indicates an error occurred accessing the keychain.
+ @remarks The @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo dictionary
+ will contain more information about the error encountered.
+ */
+ FIRAuthInternalErrorCodeKeychainError = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeKeychainError,
+
+ /** @var FIRAuthInternalErrorCodeMissingClientIdentifier
+ @brief Indicates an error for when the client identifier is missing.
+ */
+ FIRAuthInternalErrorCodeMissingClientIdentifier = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingClientIdentifier,
+
+ /** @var FIRAuthInternalErrorCodeInternalError
+ @brief An internal error occurred.
+ @remarks This value is here for consistency. It's also used to make the implementation of
+ wrapping internal errors simpler.
+ */
+ FIRAuthInternalErrorCodeInternalError = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInternalError,
+
+ /** @var FIRAuthInternalErrorCodeTooManyRequests
+ @brief Indicates that too many requests were made to a server method.
+ */
+ FIRAuthInternalErrorCodeTooManyRequests = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeTooManyRequests,
+
+ /** @var FIRAuthInternalErrorCodeInvalidCustomToken
+ @brief Indicates a validation error with the custom token.
+ */
+ FIRAuthInternalErrorCodeInvalidCustomToken = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidCustomToken,
+
+ /** @var FIRAuthInternalErrorCodeCredentialMismatch
+ @brief Indicates the service account and the API key belong to different projects.
+ */
+ FIRAuthInternalErrorCodeCustomTokenMismatch = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeCustomTokenMismatch,
+
+ /** @var FIRAuthInternalErrorCodeInvalidCredential
+ @brief Indicates the IDP token or requestUri is invalid.
+ */
+ FIRAuthInternalErrorCodeInvalidCredential = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidCredential,
+
+ /** @var FIRAuthInternalErrorCodeRequiresRecentLogin
+ @brief Indicates the user has attemped to change email or password more than 5 minutes after
+ signing in.
+ */
+ FIRAuthInternalErrorCodeRequiresRecentLogin = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeRequiresRecentLogin,
+
+ /** @var FIRAuthInternalErrorCodeInvalidUserToken
+ @brief Indicates user's saved auth credential is invalid, the user needs to sign in again.
+ */
+ FIRAuthInternalErrorCodeInvalidUserToken = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidUserToken,
+
+ /** @var FIRAuthInternalErrorCodeInvalidEmail
+ @brief Indicates the email identifier is invalid.
+ */
+ FIRAuthInternalErrorCodeInvalidEmail = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeInvalidEmail,
+
+ /** @var FIRAuthInternalErrorCodeAccountExistsWithDifferentCredential
+ @brief Indicates account linking is needed.
+ */
+ FIRAuthInternalErrorCodeAccountExistsWithDifferentCredential =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeAccountExistsWithDifferentCredential,
+
+ /** @var FIRAuthInternalErrorCodeProviderAlreadyLinked
+ @brief Indicates an attempt to link a provider to which we are already linked.
+ */
+ FIRAuthInternalErrorCodeProviderAlreadyLinked = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeProviderAlreadyLinked,
+
+ /** @var FIRAuthInternalErrorCodeNoSuchProvider
+ @brief Indicates an attempt to unlink a provider that is not is not linked.
+ */
+ FIRAuthInternalErrorCodeNoSuchProvider = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeNoSuchProvider,
+
+ /** @var FIRAuthInternalErrorCodeUserTokenExpired
+ @brief Indicates the token issue time is older than account's valid_since time.
+ */
+ FIRAuthInternalErrorCodeUserTokenExpired = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeUserTokenExpired,
+
+ /** @var FIRAuthInternalErrorCodeUserNotFound
+ @brief Indicates the user account was been found.
+ */
+ FIRAuthInternalErrorCodeUserNotFound = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeUserNotFound,
+
+ /** @var FIRAuthInternalErrorCodeInvalidAPIKey
+ @brief Indicates an invalid API Key was supplied in the request.
+ */
+ FIRAuthInternalErrorCodeInvalidAPIKey = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidAPIKey,
+
+ /** @var FIRAuthInternalErrorCodeOperationNotAllowed
+ @brief Indicates that admin disabled sign-in with the specified IDP.
+ */
+ FIRAuthInternalErrorCodeOperationNotAllowed = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeOperationNotAllowed,
+
+ /** @var FIRAuthInternalErrorCodeUserMismatch
+ @brief Indicates that user attempted to reauthenticate with a user other than the current
+ user.
+ */
+ FIRAuthInternalErrorCodeUserMismatch = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeUserMismatch,
+
+ /** @var FIRAuthInternalErrorCodeCredentialAlreadyInUse
+ @brief Indicates an attempt to link with a credential that has already been linked with a
+ different Firebase account.
+ */
+ FIRAuthInternalErrorCodeCredentialAlreadyInUse = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeCredentialAlreadyInUse,
+
+ /** @var FIRAuthInternalErrorCodeWeakPassword
+ @brief Indicates an attempt to set a password that is considered too weak.
+ */
+ FIRAuthInternalErrorCodeWeakPassword = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeWeakPassword,
+
+ /** @var FIRAuthInternalErrorCodeAppNotAuthorized
+ @brief Indicates the App is not authorized to use Firebase Authentication with the
+ provided API Key.
+ */
+ FIRAuthInternalErrorCodeAppNotAuthorized = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeAppNotAuthorized,
+
+ /** @var FIRAuthInternalErrorCodeExpiredActionCode
+ @brief Indicates the OOB code is expired.
+ */
+ FIRAuthInternalErrorCodeExpiredActionCode = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeExpiredActionCode,
+
+ /** @var FIRAuthInternalErrorCodeInvalidActionCode
+ @brief Indicates the OOB code is invalid.
+ */
+ FIRAuthInternalErrorCodeInvalidActionCode = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidActionCode,
+
+ /** Indicates that there are invalid parameters in the payload during a "send password reset email
+ * " attempt.
+ */
+ FIRAuthInternalErrorCodeInvalidMessagePayload = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidMessagePayload,
+
+ /** Indicates that the sender email is invalid during a "send password reset email" attempt.
+ */
+ FIRAuthInternalErrorCodeInvalidSender = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidSender,
+
+ /** Indicates that the recipient email is invalid.
+ */
+ FIRAuthInternalErrorCodeInvalidRecipientEmail = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidRecipientEmail,
+
+ /** Indicates that the iOS bundle ID is missing when a iOS App Store ID is provided.
+ */
+ FIRAuthinternalErrorCodeMissingIosBundleID = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingIosBundleID,
+
+ /** Indicates that the android package name is missing when the @c androidInstallApp flag is set
+ to true.
+ */
+ FIRAuthInternalErrorCodeMissingAndroidPackageName = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingAndroidPackageName,
+
+ /** Indicates that the domain specified in the continue URL is not whitelisted in the Firebase
+ console.
+ */
+ FIRAuthInternalErrorCodeUnauthorizedDomain = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeUnauthorizedDomain,
+
+ /** Indicates that the domain specified in the continue URI is not valid.
+ */
+ FIRAuthInternalErrorCodeInvalidContinueURI = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidContinueURI,
+
+ /** Indicates that a continue URI was not provided in a request to the backend which requires
+ one.
+ */
+ FIRAuthInternalErrorCodeMissingContinueURI = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingContinueURI,
+
+ /** Indicates that an email address was expected but one was not provided.
+ */
+ FIRAuthInternalErrorCodeMissingEmail = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeMissingEmail,
+
+ /** Indicates that a phone number was not provided in a call to @c verifyPhoneNumber:completion:.
+ */
+ FIRAuthInternalErrorCodeMissingPhoneNumber = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingPhoneNumber,
+
+ /** Indicates that an invalid phone number was provided in a call to @c
+ verifyPhoneNumber:completion:.
+ */
+ FIRAuthInternalErrorCodeInvalidPhoneNumber = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidPhoneNumber,
+
+ /** Indicates that the phone auth credential was created with an empty verification code.
+ */
+ FIRAuthInternalErrorCodeMissingVerificationCode = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingVerificationCode,
+
+ /** Indicates that an invalid verification code was used in the verifyPhoneNumber request.
+ */
+ FIRAuthInternalErrorCodeInvalidVerificationCode = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidVerificationCode,
+
+ /** Indicates that the phone auth credential was created with an empty verification ID.
+ */
+ FIRAuthInternalErrorCodeMissingVerificationID = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingVerificationID,
+
+ /** Indicates that the APNS device token is missing in the verifyClient request.
+ */
+ FIRAuthInternalErrorCodeMissingAppCredential = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingAppCredential,
+
+ /** Indicates that an invalid APNS device token was used in the verifyClient request.
+ */
+ FIRAuthInternalErrorCodeInvalidAppCredential = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidAppCredential,
+
+ /** Indicates that the reCAPTCHA token is not valid.
+ */
+ FIRAuthInternalErrorCodeCaptchaCheckFailed = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeCaptchaCheckFailed,
+
+ /** Indicates that an invalid verification ID was used in the verifyPhoneNumber request.
+ */
+ FIRAuthInternalErrorCodeInvalidVerificationID = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidVerificationID,
+
+ /** Indicates that the quota of SMS messages for a given project has been exceeded.
+ */
+ FIRAuthInternalErrorCodeQuotaExceeded = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeQuotaExceeded,
+
+ /** Indicates that an attempt was made to present a new web context while one was already being
+ presented.
+ */
+ FIRAuthInternalErrorCodeWebContextAlreadyPresented = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeWebContextAlreadyPresented,
+
+ /** Indicates that the URL presentation was cancelled prematurely by the user.
+ */
+ FIRAuthInternalErrorCodeWebContextCancelled = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeWebContextCancelled,
+
+ /** Indicates a general failure during the app verification flow.
+ */
+ FIRAuthInternalErrorCodeAppVerificationUserInteractionFailure =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeAppVerificationUserInteractionFailure,
+
+ /** Indicates that the clientID used to invoke a web flow is invalid.
+ */
+ FIRAuthInternalErrorCodeInvalidClientID = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidClientID,
+
+ /** Indicates that a network request within a SFSafariViewController or WKWebView failed.
+ */
+ FIRAuthInternalErrorCodeWebNetworkRequestFailed = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeWebNetworkRequestFailed,
+
+ /** Indicates that an internal error occurred within a SFSafariViewController or WKWebView.
+ */
+ FIRAuthInternalErrorCodeWebInternalError = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeWebInternalError,
+
+ /** Indicates that an internal error occurred within a SFSafariViewController or WKWebView.
+ */
+ FIRAuthInternalErrorCodeWebSignInUserInteractionFailure =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeWebSignInUserInteractionFailure,
+
+ // The enum values between 17046 and 17051 are reserved and should NOT be used for new error
+ // codes.
+
+ /** Indicates that the SMS code has expired
+ */
+ FIRAuthInternalErrorCodeSessionExpired = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeSessionExpired,
+
+ FIRAuthInternalErrorCodeMissingAppToken = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingAppToken,
+
+ FIRAuthInternalErrorCodeNotificationNotForwarded = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeNotificationNotForwarded,
+
+ FIRAuthInternalErrorCodeAppNotVerified = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeAppNotVerified,
+
+ /** Indicates that the Game Center local player was not authenticated.
+ */
+ FIRAuthInternalErrorCodeLocalPlayerNotAuthenticated = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeLocalPlayerNotAuthenticated,
+
+ /** Indicates that the Game Center local player was not authenticated.
+ */
+ FIRAuthInternalErrorCodeGameKitNotLinked = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeGameKitNotLinked,
+
+ /** Indicates that the second factor is required for sign in.
+ */
+ FIRAuthInternalErrorCodeSecondFactorRequired = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeSecondFactorRequired,
+
+ /** Indicates that the multi factor session is missing.
+ */
+ FIRAuthInternalErrorCodeMissingMultiFactorSession = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingMultiFactorSession,
+
+ /** Indicates that the multi factor info is missing.
+ */
+ FIRAuthInternalErrorCodeMissingMultiFactorInfo = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingMultiFactorInfo,
+
+ /** Indicates that the multi factor session is invalid.
+ */
+ FIRAuthInternalErrorCodeInvalidMultiFactorSession = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidMultiFactorSession,
+
+ /** Indicates that the multi factor info is not found.
+ */
+ FIRAuthInternalErrorCodeMultiFactorInfoNotFound = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMultiFactorInfoNotFound,
+
+ /** Indicates that the operation is admin only.
+ */
+ FIRAuthInternalErrorCodeAdminRestrictedOperation = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeAdminRestrictedOperation,
+
+ /** Indicates that the email is unverified.
+ */
+ FIRAuthInternalErrorCodeUnverifiedEmail = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeUnverifiedEmail,
+
+ /** Indicates that the second factor is already enrolled.
+ */
+ FIRAuthInternalErrorCodeSecondFactorAlreadyEnrolled = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeSecondFactorAlreadyEnrolled,
+
+ /** Indicates that the number of multi factors reached the limit.
+ */
+ FIRAuthInternalErrorCodeMaximumSecondFactorCountExceeded =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeMaximumSecondFactorCountExceeded,
+
+ /** Indicates that the first factor is not supportted.
+ */
+ FIRAuthInternalErrorCodeUnsupportedFirstFactor = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeUnsupportedFirstFactor,
+
+ /** Indicates that the email needs to be verified before changed.
+ */
+ FIRAuthInternalErrorCodeEmailChangeNeedsVerification =
+ FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeEmailChangeNeedsVerification,
+
+ /** Indicates that the nonce is missing or invalid.
+ */
+ FIRAuthInternalErrorCodeMissingOrInvalidNonce = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeMissingOrInvalidNonce,
+
+ /** Indicates that a non-null user was expected as an argmument to the operation but a null
+ user was provided.
+ */
+ FIRAuthInternalErrorCodeNullUser = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeNullUser,
+
+ /** Indicates that the provider id given for the web operation is invalid.
+ */
+ FIRAuthInternalErrorCodeInvalidProviderID = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidProviderID,
+
+ /** Indicates that the Firebase Dynamic Link domain used is either not configured or is
+ unauthorized for the current project.
+ */
+ FIRAuthInternalErrorCodeInvalidDynamicLinkDomain = FIRAuthPublicErrorCodeFlag |
+ FIRAuthErrorCodeInvalidDynamicLinkDomain,
+
+ FIRAuthInternalErrorCodeMalformedJWT = FIRAuthPublicErrorCodeFlag | FIRAuthErrorCodeMalformedJWT,
+
+ /** @var FIRAuthInternalErrorCodeRPCRequestEncodingError
+ @brief Indicates an error encoding the RPC request.
+ @remarks This is typically due to some sort of unexpected input value.
+
+ See the @c NSUnderlyingError value in the @c NSError.userInfo dictionary for details.
+ */
+ FIRAuthInternalErrorCodeRPCRequestEncodingError = 1,
+
+ /** @var FIRAuthInternalErrorCodeJSONSerializationError
+ @brief Indicates an error serializing an RPC request.
+ @remarks This is typically due to some sort of unexpected input value.
+
+ If an @c NSJSONSerialization.isValidJSONObject: check fails, the error will contain no
+ @c NSUnderlyingError key in the @c NSError.userInfo dictionary. If an error was
+ encountered calling @c NSJSONSerialization.dataWithJSONObject:options:error:, the
+ resulting error will be associated with the @c NSUnderlyingError key in the
+ @c NSError.userInfo dictionary.
+ */
+ FIRAuthInternalErrorCodeJSONSerializationError = 2,
+
+ /** @var FIRAuthInternalErrorCodeUnexpectedErrorResponse
+ @brief Indicates an HTTP error occurred and the data returned either couldn't be deserialized
+ or couldn't be decoded.
+ @remarks See the @c NSUnderlyingError value in the @c NSError.userInfo dictionary for details
+ about the HTTP error which occurred.
+
+ If the response could be deserialized as JSON then the @c NSError.userInfo dictionary will
+ contain a value for the key @c FIRAuthErrorUserInfoDeserializedResponseKey which is the
+ deserialized response value.
+
+ If the response could not be deserialized as JSON then the @c NSError.userInfo dictionary
+ will contain values for the @c NSUnderlyingErrorKey and @c FIRAuthErrorUserInfoDataKey
+ keys.
+ */
+ FIRAuthInternalErrorCodeUnexpectedErrorResponse = 3,
+
+ /** @var FIRAuthInternalErrorCodeUnexpectedResponse
+ @brief Indicates the HTTP response indicated the request was a successes, but the response
+ contains something other than a JSON-encoded dictionary, or the data type of the response
+ indicated it is different from the type of response we expected.
+ @remarks See the @c NSUnderlyingError value in the @c NSError.userInfo dictionary.
+ If this key is present in the dictionary, it may contain an error from
+ @c NSJSONSerialization error (indicating the response received was of the wrong data
+ type).
+
+ See the @c FIRAuthErrorUserInfoDeserializedResponseKey value in the @c NSError.userInfo
+ dictionary. If the response could be deserialized, it's deserialized representation will
+ be associated with this key. If the @c NSUnderlyingError value in the @c NSError.userInfo
+ dictionary is @c nil, this indicates the JSON didn't represent a dictionary.
+ */
+ FIRAuthInternalErrorCodeUnexpectedResponse = 4,
+
+ /** @var FIRAuthInternalErrorCodeRPCResponseDecodingError
+ @brief Indicates an error decoding the RPC response.
+ This is typically due to some sort of unexpected response value from the server.
+ @remarks See the @c NSUnderlyingError value in the @c NSError.userInfo dictionary for details.
+
+ See the @c FIRErrorUserInfoDecodedResponseKey value in the @c NSError.userInfo dictionary.
+ The deserialized representation of the response will be associated with this key.
+ */
+ FIRAuthInternalErrorCodeRPCResponseDecodingError = 5,
+};
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h
new file mode 100644
index 00000000..9201305c
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol FIRAuthUIDelegate;
+
+/** @typedef FIRAuthURLPresentationCompletion
+ @brief The type of block invoked when the URLPresentation completes.
+ @param callbackURL The callback URL if the presentation ends with a matching callback.
+ @param error The error if the presentation fails to start or ends with an error.
+ */
+typedef void (^FIRAuthURLPresentationCompletion)(NSURL *_Nullable callbackURL,
+ NSError *_Nullable error);
+
+/** @typedef FIRAuthCallbackMatcher
+ @brief The type of block invoked for checking whether a callback URL matches.
+ @param callbackURL The callback URL to check for match.
+ @return Whether or not the specific callback URL matches or not.
+ */
+typedef BOOL (^FIRAuthURLCallbackMatcher)(NSURL *_Nullable callbackURL);
+
+/** @class FIRAuthURLPresenter
+ @brief A Class responsible for presenting URL via SFSafariViewController or WKWebView.
+ */
+@interface FIRAuthURLPresenter : NSObject
+
+/** @fn presentURL:UIDelegate:callbackMatcher:completion:
+ @brief Presents an URL to interact with user.
+ @param URL The URL to present.
+ @param UIDelegate The UI delegate to present view controller.
+ @param completion A block to be called either synchronously if the presentation fails to start,
+ or asynchronously in future on an unspecified thread once the presentation finishes.
+ */
+- (void)presentURL:(NSURL *)URL
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ callbackMatcher:(FIRAuthURLCallbackMatcher)callbackMatcher
+ completion:(FIRAuthURLPresentationCompletion)completion;
+
+/** @fn canHandleURL:
+ @brief Determines if a URL was produced by the currently presented URL.
+ @param URL The URL to handle.
+ @return Whether the URL could be handled or not.
+ */
+- (BOOL)canHandleURL:(NSURL *)URL;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.m
new file mode 100644
index 00000000..2c714644
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.m
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <SafariServices/SafariServices.h>
+#import "FirebaseAuth/Sources/Public/FIRAuthUIDelegate.h"
+
+#import "FirebaseAuth/Sources/Auth/FIRAuthGlobalWorkQueue.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthDefaultUIDelegate.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthURLPresenter.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthURLPresenter () <SFSafariViewControllerDelegate, FIRAuthWebViewControllerDelegate>
+@end
+
+// Disable unguarded availability warnings because SFSafariViewController is been used throughout
+// the code, including as an iVar, which cannot be simply excluded by @available check.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability"
+
+@implementation FIRAuthURLPresenter {
+ /** @var _isPresenting
+ @brief Whether or not some web-based content is being presented.
+ Accesses to this property are serialized on the global Auth work queue
+ and thus this variable should not be read or written outside of the work queue.
+ */
+ BOOL _isPresenting;
+
+ /** @var _callbackMatcher
+ @brief The callback URL matcher for the current presentation, if one is active.
+ */
+ FIRAuthURLCallbackMatcher _Nullable _callbackMatcher;
+
+ /** @var _safariViewController
+ @brief The SFSafariViewController used for the current presentation, if any.
+ */
+ SFSafariViewController *_Nullable _safariViewController;
+
+ /** @var _webViewController
+ @brief The FIRAuthWebViewController used for the current presentation, if any.
+ */
+ FIRAuthWebViewController *_Nullable _webViewController;
+
+ /** @var _UIDelegate
+ @brief The UIDelegate used to present the SFSafariViewController.
+ */
+ id<FIRAuthUIDelegate> _UIDelegate;
+
+ /** @var _completion
+ @brief The completion handler for the current presentation, if one is active.
+ Accesses to this variable are serialized on the global Auth work queue
+ and thus this variable should not be read or written outside of the work queue.
+ @remarks This variable is also used as a flag to indicate a presentation is active.
+ */
+ FIRAuthURLPresentationCompletion _Nullable _completion;
+}
+
+- (void)presentURL:(NSURL *)URL
+ UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
+ callbackMatcher:(FIRAuthURLCallbackMatcher)callbackMatcher
+ completion:(FIRAuthURLPresentationCompletion)completion {
+ if (_isPresenting) {
+ // Unable to start a new presentation on top of another.
+ // Invoke the new completion closure and leave the old one as-is
+ // to be invoked when the presentation finishes.
+ dispatch_async(dispatch_get_main_queue(), ^() {
+ completion(nil, [FIRAuthErrorUtils webContextAlreadyPresentedErrorWithMessage:nil]);
+ });
+ return;
+ }
+ _isPresenting = YES;
+ _callbackMatcher = callbackMatcher;
+ _completion = [completion copy];
+ dispatch_async(dispatch_get_main_queue(), ^() {
+ self->_UIDelegate = UIDelegate ?: [FIRAuthDefaultUIDelegate defaultUIDelegate];
+ if ([SFSafariViewController class]) {
+ self->_safariViewController = [[SFSafariViewController alloc] initWithURL:URL];
+ self->_safariViewController.delegate = self;
+ [self->_UIDelegate presentViewController:self->_safariViewController
+ animated:YES
+ completion:nil];
+ return;
+ } else {
+ self->_webViewController = [[FIRAuthWebViewController alloc] initWithURL:URL delegate:self];
+ UINavigationController *navController =
+ [[UINavigationController alloc] initWithRootViewController:self->_webViewController];
+ [self->_UIDelegate presentViewController:navController animated:YES completion:nil];
+ }
+ });
+}
+
+- (BOOL)canHandleURL:(NSURL *)URL {
+ if (_isPresenting && _callbackMatcher && _callbackMatcher(URL)) {
+ [self finishPresentationWithURL:URL error:nil];
+ return YES;
+ }
+ return NO;
+}
+
+#pragma mark - SFSafariViewControllerDelegate
+
+- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^() {
+ if (controller == self->_safariViewController) {
+ self->_safariViewController = nil;
+ // TODO:Ensure that the SFSafariViewController is actually removed from the screen before
+ // invoking finishPresentationWithURL:error:
+ [self finishPresentationWithURL:nil
+ error:[FIRAuthErrorUtils webContextCancelledErrorWithMessage:nil]];
+ }
+ });
+}
+
+#pragma mark - FIRAuthwebViewControllerDelegate
+
+- (BOOL)webViewController:(FIRAuthWebViewController *)webViewController canHandleURL:(NSURL *)URL {
+ __block BOOL result = NO;
+ dispatch_sync(FIRAuthGlobalWorkQueue(), ^() {
+ if (webViewController == self->_webViewController) {
+ result = [self canHandleURL:URL];
+ }
+ });
+ return result;
+}
+
+- (void)webViewControllerDidCancel:(FIRAuthWebViewController *)webViewController {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^() {
+ if (webViewController == self->_webViewController) {
+ [self finishPresentationWithURL:nil
+ error:[FIRAuthErrorUtils webContextCancelledErrorWithMessage:nil]];
+ }
+ });
+}
+
+- (void)webViewController:(FIRAuthWebViewController *)webViewController
+ didFailWithError:(NSError *)error {
+ dispatch_async(FIRAuthGlobalWorkQueue(), ^() {
+ if (webViewController == self->_webViewController) {
+ [self finishPresentationWithURL:nil error:error];
+ }
+ });
+}
+
+#pragma mark - Private methods
+
+/** @fn finishPresentationWithURL:error:
+ @brief Finishes the presentation for a given URL, if any.
+ @param URL The URL to finish presenting.
+ @param error The error with which to finish presenting, if any.
+ */
+- (void)finishPresentationWithURL:(nullable NSURL *)URL error:(nullable NSError *)error {
+ _callbackMatcher = nil;
+ id<FIRAuthUIDelegate> UIDelegate = _UIDelegate;
+ _UIDelegate = nil;
+ FIRAuthURLPresentationCompletion completion = [_completion copy];
+ _completion = NULL;
+ void (^finishBlock)(void) = ^() {
+ self->_isPresenting = NO;
+ completion(URL, error);
+ };
+ SFSafariViewController *safariViewController = _safariViewController;
+ _safariViewController = nil;
+ FIRAuthWebViewController *webViewController = _webViewController;
+ _webViewController = nil;
+ if (safariViewController || webViewController) {
+ dispatch_async(dispatch_get_main_queue(), ^() {
+ [UIDelegate dismissViewControllerAnimated:YES
+ completion:^() {
+ dispatch_async(FIRAuthGlobalWorkQueue(), finishBlock);
+ }];
+ });
+ } else {
+ finishBlock();
+ }
+}
+
+#pragma clang diagnostic pop // ignored "-Wunguarded-availability"
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h
new file mode 100644
index 00000000..7a3d080b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRAuthRequestConfiguration;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRFetchAuthDomainCallback
+ @brief The callback invoked at the end of the flow to fetch the Auth domain.
+ @param authDomain The Auth domain.
+ @param error The error that occurred while fetching the auth domain, if any.
+ */
+typedef void (^FIRFetchAuthDomainCallback)(NSString *_Nullable authDomain,
+ NSError *_Nullable error);
+
+/** @class FIRAuthURLUtils
+ @brief A utility class used to facilitate the creation of auth related URLs.
+ */
+@interface FIRAuthWebUtils : NSObject
+
+/** @fn randomStringWithLength:
+ @brief Generates a random string of a specified length.
+ */
++ (NSString *)randomStringWithLength:(NSUInteger)length;
+
+/** @fn isCallbackSchemeRegisteredForCustomURLScheme:
+ @brief Checks whether or not the provided custom URL scheme has been registered by the app.
+ @param URLScheme The custom URL scheme to be checked against all custom URL schemes registered
+ by the app.
+ @return whether or not the provided custom URL scheme has been registered by the app.
+ */
++ (BOOL)isCallbackSchemeRegisteredForCustomURLScheme:(NSString *)URLScheme;
+
+/** @fn isExpectedCallbackURL:eventID:authType
+ @brief Parses a URL into all available query items.
+ @param URL The actual callback URL.
+ @param eventID The expected event ID.
+ @param authType The expected auth type.
+ @param callbackScheme The expected callback custom scheme.
+ @return Whether or not the actual callback URL matches the expected callback URL.
+ */
++ (BOOL)isExpectedCallbackURL:(nullable NSURL *)URL
+ eventID:(NSString *)eventID
+ authType:(NSString *)authType
+ callbackScheme:(NSString *)callbackScheme;
+
+/** @fn fetchAuthDomainWithCompletion:completion:
+ @brief Fetches the auth domain associated with the Firebase Project.
+ @param completion The callback invoked after the auth domain has been constructed or an error
+ has been encountered.
+ */
++ (void)fetchAuthDomainWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ completion:(FIRFetchAuthDomainCallback)completion;
+
+/** @fn queryItemValue:from:
+ @brief Utility function to get a value from a NSURLQueryItem array.
+ @param name The key.
+ @param queryList The NSURLQueryItem array.
+ @return The value for the key.
+ */
+
++ (nullable NSString *)queryItemValue:(NSString *)name from:(NSArray<NSURLQueryItem *> *)queryList;
+
+/** @fn dictionaryWithHttpArgumentsString:
+ @brief Utility function to get a dictionary from a http argument string.
+ @param argString The http argument string.
+ @return The resulting dictionary of query arguments.
+ */
++ (NSDictionary *)dictionaryWithHttpArgumentsString:(NSString *)argString;
+
+/** @fn stringByUnescapingFromURLArgument:from:
+ @brief Utility function to get a string by unescapting URL arguments.
+ @param argument The argument string.
+ @return The resulting string after unescaping URL argument.
+ */
++ (NSString *)stringByUnescapingFromURLArgument:(NSString *)argument;
+
+/** @fn parseURL:
+ @brief Parses an incoming URL into all available query items.
+ @param urlString The url to be parsed.
+ @return A dictionary of available query items in the target URL.
+ */
++ (NSDictionary<NSString *, NSString *> *)parseURL:(NSString *)urlString;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.m
new file mode 100644
index 00000000..f117bb18
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.m
@@ -0,0 +1,205 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebUtils.h"
+
+#import "FirebaseAuth/Sources/Backend/FIRAuthBackend.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigRequest.h"
+#import "FirebaseAuth/Sources/Backend/RPC/FIRGetProjectConfigResponse.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthErrorUtils.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthWebUtils
+
++ (NSArray<NSString *> *)supportedAuthDomains {
+ return @[ @"firebaseapp.com", @"web.app" ];
+}
+
++ (NSString *)randomStringWithLength:(NSUInteger)length {
+ NSMutableString *randomString = [[NSMutableString alloc] init];
+ for (int i = 0; i < length; i++) {
+ [randomString
+ appendString:[NSString stringWithFormat:@"%c", 'a' + arc4random_uniform('z' - 'a' + 1)]];
+ }
+ return randomString;
+}
+
++ (BOOL)isCallbackSchemeRegisteredForCustomURLScheme:(NSString *)URLScheme {
+ NSString *expectedCustomScheme = [URLScheme lowercaseString];
+ NSArray *urlTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
+ for (NSDictionary *urlType in urlTypes) {
+ NSArray *urlTypeSchemes = urlType[@"CFBundleURLSchemes"];
+ for (NSString *urlTypeScheme in urlTypeSchemes) {
+ if ([urlTypeScheme.lowercaseString isEqualToString:expectedCustomScheme]) {
+ return YES;
+ }
+ }
+ }
+ return NO;
+}
+
++ (BOOL)isExpectedCallbackURL:(nullable NSURL *)URL
+ eventID:(NSString *)eventID
+ authType:(NSString *)authType
+ callbackScheme:(NSString *)callbackScheme {
+ if (!URL) {
+ return NO;
+ }
+ NSURLComponents *actualURLComponents = [NSURLComponents componentsWithURL:URL
+ resolvingAgainstBaseURL:NO];
+ actualURLComponents.query = nil;
+ actualURLComponents.fragment = nil;
+
+ NSURLComponents *expectedURLComponents = [[NSURLComponents alloc] init];
+ expectedURLComponents.scheme = callbackScheme;
+ expectedURLComponents.host = @"firebaseauth";
+ expectedURLComponents.path = @"/link";
+
+ if (![expectedURLComponents.URL isEqual:actualURLComponents.URL]) {
+ return NO;
+ }
+ NSDictionary<NSString *, NSString *> *URLQueryItems =
+ [self dictionaryWithHttpArgumentsString:URL.query];
+ NSURL *deeplinkURL = [NSURL URLWithString:URLQueryItems[@"deep_link_id"]];
+ NSDictionary<NSString *, NSString *> *deeplinkQueryItems =
+ [self dictionaryWithHttpArgumentsString:deeplinkURL.query];
+ if ([deeplinkQueryItems[@"authType"] isEqualToString:authType] &&
+ [deeplinkQueryItems[@"eventId"] isEqualToString:eventID]) {
+ return YES;
+ }
+ return NO;
+}
+
++ (void)fetchAuthDomainWithRequestConfiguration:(FIRAuthRequestConfiguration *)requestConfiguration
+ completion:(FIRFetchAuthDomainCallback)completion {
+ FIRGetProjectConfigRequest *request =
+ [[FIRGetProjectConfigRequest alloc] initWithRequestConfiguration:requestConfiguration];
+
+ [FIRAuthBackend
+ getProjectConfig:request
+ callback:^(FIRGetProjectConfigResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if (error) {
+ completion(nil, error);
+ return;
+ }
+ // Look up an authorized domain ends with one of the supportedAuthDomains.
+ // The sequence of supportedAuthDomains matters. ("firebaseapp.com", "web.app")
+ // The searching ends once the first valid suportedAuthDomain is found.
+ NSString *authDomain;
+ for (NSString *domain in response.authorizedDomains) {
+ for (NSString *suportedAuthDomain in [self supportedAuthDomains]) {
+ NSInteger index = domain.length - suportedAuthDomain.length;
+ if (index >= 2) {
+ if ([domain hasSuffix:suportedAuthDomain] &&
+ domain.length >= suportedAuthDomain.length + 2) {
+ authDomain = domain;
+ break;
+ }
+ }
+ }
+ if (authDomain != nil) {
+ break;
+ }
+ }
+ if (!authDomain.length) {
+ completion(nil, [FIRAuthErrorUtils
+ unexpectedErrorResponseWithDeserializedResponse:response]);
+ return;
+ }
+ completion(authDomain, nil);
+ }];
+}
+
+/** @fn queryItemValue:from:
+ @brief Utility function to get a value from a NSURLQueryItem array.
+ @param name The key.
+ @param queryList The NSURLQueryItem array.
+ @return The value for the key.
+ */
++ (nullable NSString *)queryItemValue:(NSString *)name from:(NSArray<NSURLQueryItem *> *)queryList {
+ for (NSURLQueryItem *item in queryList) {
+ if ([item.name isEqualToString:name]) {
+ return item.value;
+ }
+ }
+ return nil;
+}
+
++ (NSDictionary *)dictionaryWithHttpArgumentsString:(NSString *)argString {
+ NSMutableDictionary *ret = [NSMutableDictionary dictionary];
+ NSArray *components = [argString componentsSeparatedByString:@"&"];
+ NSString *component;
+ // Use reverse order so that the first occurrence of a key replaces
+ // those subsequent.
+ for (component in [components reverseObjectEnumerator]) {
+ if (component.length == 0) continue;
+ NSRange pos = [component rangeOfString:@"="];
+ NSString *key;
+ NSString *val;
+ if (pos.location == NSNotFound) {
+ key = [self stringByUnescapingFromURLArgument:component];
+ val = @"";
+ } else {
+ key = [self stringByUnescapingFromURLArgument:[component substringToIndex:pos.location]];
+ val = [self stringByUnescapingFromURLArgument:[component substringFromIndex:pos.location +
+ pos.length]];
+ }
+ // returns nil on invalid UTF8 and NSMutableDictionary raises an exception when passed nil
+ // values.
+ if (!key) key = @"";
+ if (!val) val = @"";
+ [ret setObject:val forKey:key];
+ }
+ return ret;
+}
+
++ (NSString *)stringByUnescapingFromURLArgument:(NSString *)argument {
+ NSMutableString *resultString = [NSMutableString stringWithString:argument];
+ [resultString replaceOccurrencesOfString:@"+"
+ withString:@" "
+ options:NSLiteralSearch
+ range:NSMakeRange(0, [resultString length])];
+ return [resultString stringByRemovingPercentEncoding];
+}
+
++ (NSDictionary<NSString *, NSString *> *)parseURL:(NSString *)urlString {
+ NSString *linkURL = [NSURLComponents componentsWithString:urlString].query;
+ if (!linkURL) {
+ return @{};
+ }
+ NSArray<NSString *> *URLComponents = [linkURL componentsSeparatedByString:@"&"];
+ NSMutableDictionary<NSString *, NSString *> *queryItems =
+ [[NSMutableDictionary alloc] initWithCapacity:URLComponents.count];
+ for (NSString *component in URLComponents) {
+ NSRange equalRange = [component rangeOfString:@"="];
+ if (equalRange.location != NSNotFound) {
+ NSString *queryItemKey =
+ [[component substringToIndex:equalRange.location] stringByRemovingPercentEncoding];
+ NSString *queryItemValue =
+ [[component substringFromIndex:equalRange.location + 1] stringByRemovingPercentEncoding];
+ if (queryItemKey && queryItemValue) {
+ queryItems[queryItemKey] = queryItemValue;
+ }
+ }
+ }
+ return queryItems;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.h
new file mode 100644
index 00000000..1a837c28
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <UIKit/UIKit.h>
+#import <WebKit/WebKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @class FIRAuthWebView
+ @brief A class reponsible for creating a WKWebView for use within Firebase Auth.
+ */
+@interface FIRAuthWebView : UIView
+
+/** @property webView
+ * @brief The web view.
+ */
+@property(nonatomic, weak) WKWebView *webView;
+
+/** @property spinner
+ * @brief The spinner that indicates web view loading.
+ */
+@property(nonatomic, weak) UIActivityIndicatorView *spinner;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.m
new file mode 100644
index 00000000..2ea8df83
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebView.m
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation FIRAuthWebView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+ self = [super initWithFrame:frame];
+ if (self) {
+ self.backgroundColor = [UIColor whiteColor];
+ [self initializeSubviews];
+ }
+ return self;
+}
+
+/** @fn initializeSubviews
+ @brief Initializes the subviews of this view.
+ */
+- (void)initializeSubviews {
+ WKWebView *webView = [self createWebView];
+ UIActivityIndicatorView *spinner = [self createSpinner];
+
+ // The order of the following controls z-order.
+ [self addSubview:webView];
+ [self addSubview:spinner];
+
+ [self layoutSubviews];
+ _webView = webView;
+ _spinner = spinner;
+}
+
+- (void)layoutSubviews {
+ CGFloat height = self.bounds.size.height;
+ CGFloat width = self.bounds.size.width;
+ _webView.frame = CGRectMake(0, 0, width, height);
+ _spinner.center = _webView.center;
+}
+
+/** @fn createWebView
+ @brief Creates a web view to be used by this view.
+ @return The newly created web view.
+ */
+- (WKWebView *)createWebView {
+ WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero];
+ // Trickery to make the web view not do weird things (like showing a black background when
+ // the prompt in the navigation bar animates changes.)
+ webView.opaque = NO;
+ webView.backgroundColor = [UIColor clearColor];
+ webView.scrollView.opaque = NO;
+ webView.scrollView.backgroundColor = [UIColor clearColor];
+ webView.scrollView.bounces = NO;
+ webView.scrollView.alwaysBounceVertical = NO;
+ webView.scrollView.alwaysBounceHorizontal = NO;
+ return webView;
+}
+
+/** @fn createSpinner
+ @brief Creates a spinner to be used by this view.
+ @return The newly created spinner.
+ */
+- (UIActivityIndicatorView *)createSpinner {
+ UIActivityIndicatorViewStyle spinnerStyle;
+#if defined(TARGET_OS_MACCATALYST)
+ if (@available(iOS 13.0, *)) {
+ spinnerStyle = UIActivityIndicatorViewStyleMedium;
+ } else {
+// iOS 13 deprecation
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ spinnerStyle = UIActivityIndicatorViewStyleGray;
+#pragma clang diagnostic pop
+ }
+#else
+ spinnerStyle = UIActivityIndicatorViewStyleGray;
+#endif
+ UIActivityIndicatorView *spinner =
+ [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:spinnerStyle];
+ return spinner;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.h
new file mode 100644
index 00000000..2f01ed23
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import <UIKit/UIKit.h>
+
+@class FIRAuthWebViewController;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @protocol FIRAuthWebViewControllerDelegate
+ @brief Defines a delegate for FIRAuthWebViewController
+ */
+@protocol FIRAuthWebViewControllerDelegate <NSObject>
+
+/** @fn webViewController:canHandleURL:
+ @brief Determines if a URL should be handled by the delegate.
+ @param URL The URL to handle.
+ @return Whether the URL could be handled or not.
+ */
+- (BOOL)webViewController:(FIRAuthWebViewController *)webViewController canHandleURL:(NSURL *)URL;
+
+/** @fn webViewControllerDidCancel:
+ @brief Notifies the delegate that the web view controller is being cancelled by the user.
+ @param webViewController The web view controller in question.
+ */
+- (void)webViewControllerDidCancel:(FIRAuthWebViewController *)webViewController;
+
+/** @fn webViewController:didFailWithError:
+ @brief Notifies the delegate that the web view controller failed to load a page.
+ @param webViewController The web view controller in question.
+ @param error The error that has occurred.
+ */
+- (void)webViewController:(FIRAuthWebViewController *)webViewController
+ didFailWithError:(NSError *)error;
+
+@end
+
+/** @class FIRAuthWebViewController
+ @brief Reponsible for creating a UIViewController for presenting a FIRAutWebView.
+ */
+@interface FIRAuthWebViewController : UIViewController
+
+/** @fn initWithNibName:bundle:
+ * @brief Please call initWithURL:delegate:
+ */
+- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil
+ bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE;
+
+/** @fn initWithCoder:
+ * @brief Please call initWithURL:delegate:
+ */
+- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE;
+
+- (instancetype)initWithURL:(NSURL *)URL
+ delegate:(__weak id<FIRAuthWebViewControllerDelegate>)delegate
+ NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.m
new file mode 100644
index 00000000..acedd127
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.m
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <TargetConditionals.h>
+#if TARGET_OS_IOS
+
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebView.h"
+#import "FirebaseAuth/Sources/Utilities/FIRAuthWebViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRAuthWebViewController () <WKNavigationDelegate>
+@end
+
+@implementation FIRAuthWebViewController {
+ /** @var _URL
+ @brief The initial URL to display.
+ */
+ NSURL *_URL;
+
+ /** @var _delegate
+ @brief The delegate to call.
+ */
+ __weak id<FIRAuthWebViewControllerDelegate> _delegate;
+
+ /** @var _webView;
+ @brief The web view instance for easier access.
+ */
+ __weak FIRAuthWebView *_webView;
+}
+
+- (instancetype)initWithURL:(NSURL *)URL
+ delegate:(__weak id<FIRAuthWebViewControllerDelegate>)delegate {
+ self = [super initWithNibName:nil bundle:nil];
+ if (self) {
+ _URL = URL;
+ _delegate = delegate;
+ }
+ return self;
+}
+
+#pragma mark - Lifecycle
+
+- (void)loadView {
+ FIRAuthWebView *webView = [[FIRAuthWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+ webView.webView.navigationDelegate = self;
+ self.view = webView;
+ _webView = webView;
+ self.navigationItem.leftBarButtonItem =
+ [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
+ target:self
+ action:@selector(cancel)];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+ [super viewDidAppear:animated];
+
+ // Loads the requested URL in the web view.
+ [_webView.webView loadRequest:[NSURLRequest requestWithURL:_URL]];
+}
+
+#pragma mark - UI Targets
+
+- (void)cancel {
+ [_delegate webViewControllerDidCancel:self];
+}
+
+#pragma mark - WKNavigationDelegate
+
+- (void)webView:(WKWebView *)webView
+ decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
+ decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
+ [_delegate webViewController:self canHandleURL:navigationAction.request.URL];
+ decisionHandler(WKNavigationActionPolicyAllow);
+}
+
+- (void)webView:(WKWebView *)webView
+ didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation {
+ _webView.spinner.hidden = NO;
+ [_webView.spinner startAnimating];
+}
+
+- (void)webView:(WKWebView *)webView
+ didFinishNavigation:(null_unspecified WKNavigation *)navigation {
+ _webView.spinner.hidden = YES;
+ [_webView.spinner stopAnimating];
+}
+
+- (void)webView:(WKWebView *)webView
+ didFailNavigation:(null_unspecified WKNavigation *)navigation
+ withError:(NSError *)error {
+ if ([error.domain isEqualToString:NSURLErrorDomain] && error.code == NSURLErrorCancelled) {
+ // It's okay for the page to be redirected before it is completely loaded. See b/32028062 .
+ return;
+ }
+ // Forward notification to our delegate.
+ [self webView:webView didFinishNavigation:navigation];
+ [_delegate webViewController:self didFailWithError:error];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.h
new file mode 100644
index 00000000..114cbfd9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSData (FIRBase64)
+
+/** @fn fir_base64URLEncodedStringWithOptions:
+ @brief Get a web safe base64 encoded string
+ @param options The base64 encoding options
+ */
+- (NSString *)fir_base64URLEncodedStringWithOptions:(NSDataBase64EncodingOptions)options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.m b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.m
new file mode 100644
index 00000000..0afc53b8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseAuth/Sources/Utilities/NSData+FIRBase64.m
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "FirebaseAuth/Sources/Utilities/NSData+FIRBase64.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation NSData (FIRBase64)
+
+- (NSString *)fir_base64URLEncodedStringWithOptions:(NSDataBase64EncodingOptions)options {
+ NSString *string = [self base64EncodedStringWithOptions:options];
+ string = [string stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
+ string = [string stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
+ string = [string stringByReplacingOccurrencesOfString:@"=" withString:@""];
+ return string;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRAppInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRAppInternal.h
new file mode 100644
index 00000000..9a0c943d
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRAppInternal.h
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIRApp.h"
+#else
+#import <FirebaseCore/FIRApp.h>
+#endif
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find FIRErrors.h
+#if __has_include("FirebaseCore/Sources/Private/FIRErrors.h")
+#import "FirebaseCore/Sources/Private/FIRErrors.h"
+#else
+#import <FirebaseCore/FIRErrors.h>
+#endif
+
+@class FIRComponentContainer;
+@protocol FIRLibrary;
+
+/**
+ * The internal interface to FIRApp. This is meant for first-party integrators, who need to receive
+ * FIRApp notifications, log info about the success or failure of their configuration, and access
+ * other internal functionality of FIRApp.
+ *
+ * TODO(b/28296561): Restructure this header.
+ */
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, FIRConfigType) {
+ FIRConfigTypeCore = 1,
+ FIRConfigTypeSDK = 2,
+};
+
+extern NSString *const kFIRDefaultAppName;
+extern NSString *const kFIRAppReadyToConfigureSDKNotification;
+extern NSString *const kFIRAppDeleteNotification;
+extern NSString *const kFIRAppIsDefaultAppKey;
+extern NSString *const kFIRAppNameKey;
+extern NSString *const kFIRGoogleAppIDKey;
+
+/**
+ * The format string for the User Defaults key used for storing the data collection enabled flag.
+ * This includes formatting to append the Firebase App's name.
+ */
+extern NSString *const kFIRGlobalAppDataCollectionEnabledDefaultsKeyFormat;
+
+/**
+ * The plist key used for storing the data collection enabled flag.
+ */
+extern NSString *const kFIRGlobalAppDataCollectionEnabledPlistKey;
+
+/**
+ * A notification fired containing diagnostic information when SDK errors occur.
+ */
+extern NSString *const kFIRAppDiagnosticsNotification;
+
+/** @var FIRAuthStateDidChangeInternalNotification
+ @brief The name of the @c NSNotificationCenter notification which is posted when the auth state
+ changes (e.g. a new token has been produced, a user logs in or out). The object parameter of
+ the notification is a dictionary possibly containing the key:
+ @c FIRAuthStateDidChangeInternalNotificationTokenKey (the new access token.) If it does not
+ contain this key it indicates a sign-out event took place.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotification;
+
+/** @var FIRAuthStateDidChangeInternalNotificationTokenKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the new access token.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationTokenKey;
+
+/** @var FIRAuthStateDidChangeInternalNotificationAppKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the FIRApp associated with the auth instance.
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationAppKey;
+
+/** @var FIRAuthStateDidChangeInternalNotificationUIDKey
+ @brief A key present in the dictionary object parameter of the
+ @c FIRAuthStateDidChangeInternalNotification notification. The value associated with this
+ key will contain the new user's UID (or nil if there is no longer a user signed in).
+ */
+extern NSString *const FIRAuthStateDidChangeInternalNotificationUIDKey;
+
+@interface FIRApp ()
+
+/**
+ * A flag indicating if this is the default app (has the default app name).
+ */
+@property(nonatomic, readonly) BOOL isDefaultApp;
+
+/*
+ * The container of interop SDKs for this app.
+ */
+@property(nonatomic) FIRComponentContainer *container;
+
+/**
+ * Creates an error for failing to configure a subspec service. This method is called by each
+ * FIRApp notification listener.
+ */
++ (NSError *)errorForSubspecConfigurationFailureWithDomain:(NSString *)domain
+ errorCode:(FIRErrorCode)code
+ service:(NSString *)service
+ reason:(NSString *)reason;
+/**
+ * Checks if the default app is configured without trying to configure it.
+ */
++ (BOOL)isDefaultAppConfigured;
+
+/**
+ * Registers a given third-party library with the given version number to be reported for
+ * analytics.
+ *
+ * @param name Name of the library.
+ * @param version Version of the library.
+ */
++ (void)registerLibrary:(nonnull NSString *)name withVersion:(nonnull NSString *)version;
+
+/**
+ * Registers a given internal library with the given version number to be reported for
+ * analytics.
+ *
+ * @param library Optional parameter for component registration.
+ * @param name Name of the library.
+ * @param version Version of the library.
+ */
++ (void)registerInternalLibrary:(nonnull Class<FIRLibrary>)library
+ withName:(nonnull NSString *)name
+ withVersion:(nonnull NSString *)version;
+
+/**
+ * A concatenated string representing all the third-party libraries and version numbers.
+ */
++ (NSString *)firebaseUserAgent;
+
+/**
+ * Used by each SDK to send logs about SDK configuration status to Clearcut.
+ *
+ * @note This API is a no-op, please remove calls to it.
+ */
+- (void)sendLogsWithServiceName:(NSString *)serviceName
+ version:(NSString *)version
+ error:(NSError *)error;
+
+/**
+ * Can be used by the unit tests in eack SDK to reset FIRApp. This method is thread unsafe.
+ */
++ (void)resetApps;
+
+/**
+ * Can be used by the unit tests in each SDK to set customized options.
+ */
+- (instancetype)initInstanceWithName:(NSString *)name options:(FIROptions *)options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponent.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponent.h
new file mode 100644
index 00000000..cb51ee70
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponent.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRApp;
+@class FIRComponentContainer;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provides a system to clean up cached instances returned from the component system.
+NS_SWIFT_NAME(ComponentLifecycleMaintainer)
+@protocol FIRComponentLifecycleMaintainer
+/// The associated app will be deleted, clean up any resources as they are about to be deallocated.
+- (void)appWillBeDeleted:(FIRApp *)app;
+@end
+
+typedef _Nullable id (^FIRComponentCreationBlock)(FIRComponentContainer *container,
+ BOOL *isCacheable)
+ NS_SWIFT_NAME(ComponentCreationBlock);
+
+@class FIRDependency;
+
+/// Describes the timing of instantiation. Note: new components should default to lazy unless there
+/// is a strong reason to be eager.
+typedef NS_ENUM(NSInteger, FIRInstantiationTiming) {
+ FIRInstantiationTimingLazy,
+ FIRInstantiationTimingAlwaysEager,
+ FIRInstantiationTimingEagerInDefaultApp
+} NS_SWIFT_NAME(InstantiationTiming);
+
+/// A component that can be used from other Firebase SDKs.
+NS_SWIFT_NAME(Component)
+@interface FIRComponent : NSObject
+
+/// The protocol describing functionality provided from the Component.
+@property(nonatomic, strong, readonly) Protocol *protocol;
+
+/// The timing of instantiation.
+@property(nonatomic, readonly) FIRInstantiationTiming instantiationTiming;
+
+/// An array of dependencies for the component.
+@property(nonatomic, copy, readonly) NSArray<FIRDependency *> *dependencies;
+
+/// A block to instantiate an instance of the component with the appropriate dependencies.
+@property(nonatomic, copy, readonly) FIRComponentCreationBlock creationBlock;
+
+// There's an issue with long NS_SWIFT_NAMES that causes compilation to fail, disable clang-format
+// for the next two methods.
+// clang-format off
+
+/// Creates a component with no dependencies that will be lazily initialized.
++ (instancetype)componentWithProtocol:(Protocol *)protocol
+ creationBlock:(FIRComponentCreationBlock)creationBlock
+NS_SWIFT_NAME(init(_:creationBlock:));
+
+/// Creates a component to be registered with the component container.
+///
+/// @param protocol - The protocol describing functionality provided by the component.
+/// @param instantiationTiming - When the component should be initialized. Use .lazy unless there's
+/// a good reason to be instantiated earlier.
+/// @param dependencies - Any dependencies the `implementingClass` has, optional or required.
+/// @param creationBlock - A block to instantiate the component with a container, and if
+/// @return A component that can be registered with the component container.
++ (instancetype)componentWithProtocol:(Protocol *)protocol
+ instantiationTiming:(FIRInstantiationTiming)instantiationTiming
+ dependencies:(NSArray<FIRDependency *> *)dependencies
+ creationBlock:(FIRComponentCreationBlock)creationBlock
+NS_SWIFT_NAME(init(_:instantiationTiming:dependencies:creationBlock:));
+
+// clang-format on
+
+/// Unavailable.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentContainer.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentContainer.h
new file mode 100644
index 00000000..db2bafef
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentContainer.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <Foundation/Foundation.h>
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find the headers.
+#if __has_include("FirebaseCore/Sources/Private/FIRComponentType.h")
+#import "FirebaseCore/Sources/Private/FIRComponentType.h"
+#import "FirebaseCore/Sources/Private/FIRLibrary.h"
+#else
+#import <FirebaseCore/FIRComponentType.h>
+#import <FirebaseCore/FIRLibrary.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A type-safe macro to retrieve a component from a container. This should be used to retrieve
+/// components instead of using the container directly.
+#define FIR_COMPONENT(type, container) \
+ [FIRComponentType<id<type>> instanceForProtocol:@protocol(type) inContainer:container]
+
+@class FIRApp;
+
+/// A container that holds different components that are registered via the
+/// `registerAsComponentRegistrant:` call. These classes should conform to `FIRComponentRegistrant`
+/// in order to properly register components for Core.
+NS_SWIFT_NAME(FirebaseComponentContainer)
+@interface FIRComponentContainer : NSObject
+
+/// A weak reference to the app that an instance of the container belongs to.
+@property(nonatomic, weak, readonly) FIRApp *app;
+
+/// Unavailable. Use the `container` property on `FIRApp`.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentType.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentType.h
new file mode 100644
index 00000000..6f2aca7b
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRComponentType.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRComponentContainer;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Do not use directly. A placeholder type in order to provide a macro that will warn users of
+/// mis-matched protocols.
+NS_SWIFT_NAME(ComponentType)
+@interface FIRComponentType<__covariant T> : NSObject
+
+/// Do not use directly. A factory method to retrieve an instance that provides a specific
+/// functionality.
++ (T)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
new file mode 100644
index 00000000..76c0c05f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FIRDiagnosticsData;
+@class FIROptions;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** Connects FIRCore with the CoreDiagnostics library. */
+@interface FIRCoreDiagnosticsConnector : NSObject
+
+/** Logs FirebaseCore related data.
+ *
+ * @param options The options object containing data to log.
+ */
++ (void)logCoreTelemetryWithOptions:(FIROptions *)options;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRDependency.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRDependency.h
new file mode 100644
index 00000000..46e9b7ea
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRDependency.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A dependency on a specific protocol's functionality.
+NS_SWIFT_NAME(Dependency)
+@interface FIRDependency : NSObject
+
+/// The protocol describing functionality being depended on.
+@property(nonatomic, strong, readonly) Protocol *protocol;
+
+/// A flag to specify if the dependency is required or not.
+@property(nonatomic, readonly) BOOL isRequired;
+
+/// Initializes a dependency that is required. Calls `initWithProtocol:isRequired` with `YES` for
+/// the required parameter.
+/// Creates a required dependency on the specified protocol's functionality.
++ (instancetype)dependencyWithProtocol:(Protocol *)protocol;
+
+/// Creates a dependency on the specified protocol's functionality and specify if it's required for
+/// the class's functionality.
++ (instancetype)dependencyWithProtocol:(Protocol *)protocol isRequired:(BOOL)required;
+
+/// Use `dependencyWithProtocol:isRequired:` instead.
+- (instancetype)init NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrorCode.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrorCode.h
new file mode 100644
index 00000000..c90d9eec
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrorCode.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** Error codes in Firebase error domain. */
+typedef NS_ENUM(NSInteger, FIRErrorCode) {
+ /**
+ * Unknown error.
+ */
+ FIRErrorCodeUnknown = 0,
+ /**
+ * Loading data from the GoogleService-Info.plist file failed. This is a fatal error and should
+ * not be ignored. Further calls to the API will fail and/or possibly cause crashes.
+ */
+ FIRErrorCodeInvalidPlistFile = -100,
+
+ /**
+ * Validating the Google App ID format failed.
+ */
+ FIRErrorCodeInvalidAppID = -101,
+
+ /**
+ * Error code for failing to configure a specific service. It's deprecated, but
+ * still used after copybara.
+ */
+ FIRErrorCodeConfigFailed = -114,
+};
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrors.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrors.h
new file mode 100644
index 00000000..19e47328
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRErrors.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#include "FIRErrorCode.h"
+
+extern NSString *const kFirebaseErrorDomain;
+extern NSString *const kFirebaseConfigErrorDomain;
+extern NSString *const kFirebaseCoreErrorDomain;
+extern NSString *const kFirebasePerfErrorDomain;
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
new file mode 100644
index 00000000..bfff73e5
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h
@@ -0,0 +1,39 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FIRHeartbeatInfo : NSObject
+
+// Enum representing the different heartbeat codes.
+typedef NS_ENUM(NSInteger, FIRHeartbeatInfoCode) {
+ FIRHeartbeatInfoCodeNone = 0,
+ FIRHeartbeatInfoCodeSDK = 1,
+ FIRHeartbeatInfoCodeGlobal = 2,
+ FIRHeartbeatInfoCodeCombined = 3,
+};
+
+/**
+ * Get heartbeat code requred for the sdk.
+ * @param heartbeatTag String representing the sdk heartbeat tag.
+ * @return Heartbeat code indicating whether or not an sdk/global heartbeat
+ * needs to be sent
+ */
++ (FIRHeartbeatInfoCode)heartbeatCodeForTag:(NSString *)heartbeatTag;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLibrary.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLibrary.h
new file mode 100644
index 00000000..e7a9e077
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLibrary.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FIRLibrary_h
+#define FIRLibrary_h
+
+#import <Foundation/Foundation.h>
+
+// The has_include is a workaround so the old IID needed for the FIS tests can find the headers.
+#if __has_include("FirebaseCore/Sources/Private/FIRComponent.h")
+#import "FirebaseCore/Sources/Private/FIRComponent.h"
+#else
+#import <FirebaseCore/FIRComponent.h>
+#endif
+
+@class FIRApp;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Provide an interface to register a library for userAgent logging and availability to others.
+NS_SWIFT_NAME(Library)
+@protocol FIRLibrary
+
+/// Returns one or more FIRComponents that will be registered in
+/// FIRApp and participate in dependency resolution and injection.
++ (NSArray<FIRComponent *> *)componentsToRegister;
+
+@optional
+/// Implement this method if the library needs notifications for lifecycle events. This method is
+/// called when the developer calls `FirebaseApp.configure()`.
++ (void)configureWithApp:(FIRApp *)app;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* FIRLibrary_h */
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLogger.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLogger.h
new file mode 100644
index 00000000..6fd77844
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIRLogger.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIRLoggerLevel.h"
+#else
+#import <FirebaseCore/FIRLoggerLevel.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * The Firebase services used in Firebase logger.
+ */
+typedef NSString *const FIRLoggerService;
+
+extern FIRLoggerService kFIRLoggerABTesting;
+extern FIRLoggerService kFIRLoggerAdMob;
+extern FIRLoggerService kFIRLoggerAnalytics;
+extern FIRLoggerService kFIRLoggerAuth;
+extern FIRLoggerService kFIRLoggerCrash;
+extern FIRLoggerService kFIRLoggerCore;
+extern FIRLoggerService kFIRLoggerMLKit;
+extern FIRLoggerService kFIRLoggerPerf;
+extern FIRLoggerService kFIRLoggerRemoteConfig;
+
+/**
+ * The key used to store the logger's error count.
+ */
+extern NSString *const kFIRLoggerErrorCountKey;
+
+/**
+ * The key used to store the logger's warning count.
+ */
+extern NSString *const kFIRLoggerWarningCountKey;
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/**
+ * Enables or disables Analytics debug mode.
+ * If set to YES, the logging level for Analytics will be set to FIRLoggerLevelDebug.
+ * Enabling the debug mode has no effect if the app is running from App Store.
+ * (required) analytics debug mode flag.
+ */
+void FIRSetAnalyticsDebugMode(BOOL analyticsDebugMode);
+
+/**
+ * Changes the default logging level of FIRLoggerLevelNotice to a user-specified level.
+ * The default level cannot be set above FIRLoggerLevelNotice if the app is running from App Store.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ */
+void FIRSetLoggerLevel(FIRLoggerLevel loggerLevel);
+
+/**
+ * Checks if the specified logger level is loggable given the current settings.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) whether or not this function is called from the Analytics component.
+ */
+BOOL FIRIsLoggableLevel(FIRLoggerLevel loggerLevel, BOOL analyticsComponent);
+
+/**
+ * Logs a message to the Xcode console and the device log. If running from AppStore, will
+ * not log any messages with a level higher than FIRLoggerLevelNotice to avoid log spamming.
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+extern void FIRLogBasic(FIRLoggerLevel level,
+ FIRLoggerService service,
+ NSString *messageCode,
+ NSString *message,
+// On 64-bit simulators, va_list is not a pointer, so cannot be marked nullable
+// See: http://stackoverflow.com/q/29095469
+#if __LP64__ && TARGET_OS_SIMULATOR || TARGET_OS_OSX
+ va_list args_ptr
+#else
+ va_list _Nullable args_ptr
+#endif
+);
+
+/**
+ * The following functions accept the following parameters in order:
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting from "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * See go/firebase-log-proposal for details.
+ * (required) message string which can be a format string.
+ * (optional) the list of arguments to substitute into the format string.
+ * Example usage:
+ * FIRLogError(kFIRLoggerCore, @"I-COR000001", @"Configuration of %@ failed.", app.name);
+ */
+extern void FIRLogError(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogWarning(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogNotice(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogInfo(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+extern void FIRLogDebug(FIRLoggerService service, NSString *messageCode, NSString *message, ...)
+ NS_FORMAT_FUNCTION(3, 4);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif // __cplusplus
+
+@interface FIRLoggerWrapper : NSObject
+
+/**
+ * Objective-C wrapper for FIRLogBasic to allow weak linking to FIRLogger
+ * (required) log level (one of the FIRLoggerLevel enum values).
+ * (required) service name of type FIRLoggerService.
+ * (required) message code starting with "I-" which means iOS, followed by a capitalized
+ * three-character service identifier and a six digit integer message ID that is unique
+ * within the service.
+ * An example of the message code is @"I-COR000001".
+ * (required) message string which can be a format string.
+ * (optional) variable arguments list obtained from calling va_start, used when message is a format
+ * string.
+ */
+
++ (void)logWithLevel:(FIRLoggerLevel)level
+ withService:(FIRLoggerService)service
+ withCode:(NSString *)messageCode
+ withMessage:(NSString *)message
+ withArgs:(va_list)args;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIROptionsInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIROptionsInternal.h
new file mode 100644
index 00000000..acaf4586
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FIROptionsInternal.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if SWIFT_PACKAGE
+// TODO(paulb777): Investigate if there's a common strategy for both Cocoapods and Swift PM.
+#import "FIROptions.h"
+#else
+#import <FirebaseCore/FIROptions.h>
+#endif
+
+/**
+ * Keys for the strings in the plist file.
+ */
+extern NSString *const kFIRAPIKey;
+extern NSString *const kFIRTrackingID;
+extern NSString *const kFIRGoogleAppID;
+extern NSString *const kFIRClientID;
+extern NSString *const kFIRGCMSenderID;
+extern NSString *const kFIRAndroidClientID;
+extern NSString *const kFIRDatabaseURL;
+extern NSString *const kFIRStorageBucket;
+extern NSString *const kFIRBundleID;
+extern NSString *const kFIRProjectID;
+
+/**
+ * Keys for the plist file name
+ */
+extern NSString *const kServiceInfoFileName;
+
+extern NSString *const kServiceInfoFileType;
+
+/**
+ * This header file exposes the initialization of FIROptions to internal use.
+ */
+@interface FIROptions ()
+
+/**
+ * resetDefaultOptions and initInternalWithOptionsDictionary: are exposed only for unit tests.
+ */
++ (void)resetDefaultOptions;
+
+/**
+ * Initializes the options with dictionary. The above strings are the keys of the dictionary.
+ * This is the designated initializer.
+ */
+- (instancetype)initInternalWithOptionsDictionary:(NSDictionary *)serviceInfoDictionary;
+
+/**
+ * defaultOptions and defaultOptionsDictionary are exposed in order to be used in FIRApp and
+ * other first party services.
+ */
++ (FIROptions *)defaultOptions;
+
++ (NSDictionary *)defaultOptionsDictionary;
+
+/**
+ * Indicates whether or not Analytics collection was explicitly enabled via a plist flag or at
+ * runtime.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionExplicitlySet;
+
+/**
+ * Whether or not Analytics Collection was enabled. Analytics Collection is enabled unless
+ * explicitly disabled in GoogleService-Info.plist.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionEnabled;
+
+/**
+ * Whether or not Analytics Collection was completely disabled. If YES, then
+ * isAnalyticsCollectionEnabled will be NO.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsCollectionDeactivated;
+
+/**
+ * The version ID of the client library, e.g. @"1100000".
+ */
+@property(nonatomic, readonly, copy) NSString *libraryVersionID;
+
+/**
+ * The flag indicating whether this object was constructed with the values in the default plist
+ * file.
+ */
+@property(nonatomic) BOOL usingOptionsFromDefaultPlist;
+
+/**
+ * Whether or not Measurement was enabled. Measurement is enabled unless explicitly disabled in
+ * GoogleService-Info.plist.
+ */
+@property(nonatomic, readonly) BOOL isMeasurementEnabled;
+
+/**
+ * Whether or not Analytics was enabled in the developer console.
+ */
+@property(nonatomic, readonly) BOOL isAnalyticsEnabled;
+
+/**
+ * Whether or not SignIn was enabled in the developer console.
+ */
+@property(nonatomic, readonly) BOOL isSignInEnabled;
+
+/**
+ * Whether or not editing is locked. This should occur after FIROptions has been set on a FIRApp.
+ */
+@property(nonatomic, getter=isEditingLocked) BOOL editingLocked;
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FirebaseCoreInternal.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FirebaseCoreInternal.h
new file mode 100644
index 00000000..93af6cb8
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/FirebaseCore/Sources/Private/FirebaseCoreInternal.h
@@ -0,0 +1,31 @@
+// Copyright 2020 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// An umbrella header, for any other libraries in this repo to access Firebase Public and Private
+// headers. Any package manager complexity should be handled here.
+
+#if SWIFT_PACKAGE
+@import FirebaseCore;
+#else
+#import <FirebaseCore/FirebaseCore.h>
+#endif
+
+#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
+#import "FirebaseCore/Sources/Private/FIRComponent.h"
+#import "FirebaseCore/Sources/Private/FIRComponentContainer.h"
+#import "FirebaseCore/Sources/Private/FIRDependency.h"
+#import "FirebaseCore/Sources/Private/FIRHeartbeatInfo.h"
+#import "FirebaseCore/Sources/Private/FIRLibrary.h"
+#import "FirebaseCore/Sources/Private/FIRLogger.h"
+#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h
new file mode 100644
index 00000000..b15925f4
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULAppDelegateSwizzler.h
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2018 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#if SWIFT_PACKAGE
+#import "GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h"
+#else
+#import <GoogleUtilities/GULApplication.h>
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NSString *const GULAppDelegateInterceptorID;
+
+/** This class contains methods that isa swizzle the app delegate. */
+@interface GULAppDelegateSwizzler : NSProxy
+
+/** Registers an app delegate interceptor whose methods will be invoked as they're invoked on the
+ * original app delegate.
+ *
+ * @param interceptor An instance of a class that conforms to the application delegate protocol.
+ * The interceptor is NOT retained.
+ * @return A unique GULAppDelegateInterceptorID if interceptor was successfully registered; nil
+ * if it fails.
+ */
++ (nullable GULAppDelegateInterceptorID)registerAppDelegateInterceptor:
+ (id<GULApplicationDelegate>)interceptor;
+
+/** Unregisters an interceptor with the given ID if it exists.
+ *
+ * @param interceptorID The object that was generated when the interceptor was registered.
+ */
++ (void)unregisterAppDelegateInterceptorWithID:(GULAppDelegateInterceptorID)interceptorID;
+
+/** This method ensures that the original app delegate has been proxied. Call this before
+ * registering your interceptor. This method is safe to call multiple times (but it only proxies
+ * the app delegate once).
+ *
+ * This method doesn't proxy APNS related methods:
+ * @code
+ * - application:didRegisterForRemoteNotificationsWithDeviceToken:
+ * - application:didFailToRegisterForRemoteNotificationsWithError:
+ * - application:didReceiveRemoteNotification:fetchCompletionHandler:
+ * - application:didReceiveRemoteNotification:
+ * @endcode
+ *
+ * To proxy these methods use +[GULAppDelegateSwizzler
+ * proxyOriginalDelegateIncludingAPNSMethods]. The methods have to be proxied separately to
+ * avoid potential warnings from Apple review about missing Push Notification Entitlement (e.g.
+ * https://github.com/firebase/firebase-ios-sdk/issues/2807)
+ *
+ * The method has no effect for extensions.
+ *
+ * @see proxyOriginalDelegateIncludingAPNSMethods
+ */
++ (void)proxyOriginalDelegate;
+
+/** This method ensures that the original app delegate has been proxied including APNS related
+ * methods. Call this before registering your interceptor. This method is safe to call multiple
+ * times (but it only proxies the app delegate once) or
+ * after +[GULAppDelegateSwizzler proxyOriginalDelegate]
+ *
+ * This method calls +[GULAppDelegateSwizzler proxyOriginalDelegate] under the hood.
+ * After calling this method the following App Delegate methods will be proxied in addition to
+ * the methods proxied by proxyOriginalDelegate:
+ * @code
+ * - application:didRegisterForRemoteNotificationsWithDeviceToken:
+ * - application:didFailToRegisterForRemoteNotificationsWithError:
+ * - application:didReceiveRemoteNotification:fetchCompletionHandler:
+ * - application:didReceiveRemoteNotification:
+ * @endcode
+ *
+ * The method has no effect for extensions.
+ *
+ * @see proxyOriginalDelegate
+ */
++ (void)proxyOriginalDelegateIncludingAPNSMethods;
+
+/** Indicates whether app delegate proxy is explicitly disabled or enabled. Enabled by default.
+ *
+ * @return YES if AppDelegateProxy is Enabled, NO otherwise.
+ */
++ (BOOL)isAppDelegateProxyEnabled;
+
+/** Returns the current sharedApplication.
+ *
+ * @return the current application instance if in an app, or nil if in extension or if it doesn't
+ * exist.
+ */
++ (nullable GULApplication *)sharedApplication;
+
+/** Do not initialize this class. */
+- (instancetype)init NS_UNAVAILABLE;
+
+NS_ASSUME_NONNULL_END
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h
new file mode 100644
index 00000000..80672124
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/AppDelegateSwizzler/Private/GULApplication.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#if TARGET_OS_IOS || TARGET_OS_TV
+
+#import <UIKit/UIKit.h>
+
+#define GULApplication UIApplication
+#define GULApplicationDelegate UIApplicationDelegate
+#define GULUserActivityRestoring UIUserActivityRestoring
+
+static NSString *const kGULApplicationClassName = @"UIApplication";
+
+#elif TARGET_OS_OSX
+
+#import <AppKit/AppKit.h>
+
+#define GULApplication NSApplication
+#define GULApplicationDelegate NSApplicationDelegate
+#define GULUserActivityRestoring NSUserActivityRestoring
+
+static NSString *const kGULApplicationClassName = @"NSApplication";
+
+#elif TARGET_OS_WATCH
+
+#import <WatchKit/WatchKit.h>
+
+// We match the according watchOS API but swizzling should not work in watch
+#define GULApplication WKExtension
+#define GULApplicationDelegate WKExtensionDelegate
+#define GULUserActivityRestoring NSUserActivityRestoring
+
+static NSString *const kGULApplicationClassName = @"WKExtension";
+
+#endif
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h
new file mode 100644
index 00000000..2fb16226
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@interface GULAppEnvironmentUtil : NSObject
+
+/// Indicates whether the app is from Apple Store or not. Returns NO if the app is on simulator,
+/// development environment or sideloaded.
++ (BOOL)isFromAppStore;
+
+/// Indicates whether the app is a Testflight app. Returns YES if the app has sandbox receipt.
+/// Returns NO otherwise.
++ (BOOL)isAppStoreReceiptSandbox;
+
+/// Indicates whether the app is on simulator or not at runtime depending on the device
+/// architecture.
++ (BOOL)isSimulator;
+
+/// The current device model. Returns an empty string if device model cannot be retrieved.
++ (NSString *)deviceModel;
+
+/// The current operating system version. Returns an empty string if the system version cannot be
+/// retrieved.
++ (NSString *)systemVersion;
+
+/// Indicates whether it is running inside an extension or an app.
++ (BOOL)isAppExtension;
+
+/// @return Returns @YES when is run on iOS version greater or equal to 7.0
++ (BOOL)isIOS7OrHigher DEPRECATED_MSG_ATTRIBUTE(
+ "Always `YES` because only iOS 8 and higher supported. The method will be removed.");
+
+@end
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h
new file mode 100644
index 00000000..9432dfc0
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULHeartbeatDateStorage.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Stores either a date or a dictionary to a specified file.
+@interface GULHeartbeatDateStorage : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+@property(nonatomic, readonly) NSURL *fileURL;
+
+/**
+ * Default initializer.
+ * @param fileName The name of the file to store the date information.
+ * exist, it will be created if needed.
+ */
+- (instancetype)initWithFileName:(NSString *)fileName;
+
+/**
+ * Reads the date from the specified file for the given tag.
+ * @return Returns date if exists, otherwise `nil`.
+ */
+- (nullable NSDate *)heartbeatDateForTag:(NSString *)tag;
+
+/**
+ * Saves the date for the specified tag in the specified file.
+ * @return YES on success, NO otherwise.
+ */
+- (BOOL)setHearbeatDate:(NSDate *)date forTag:(NSString *)tag;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainStorage.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainStorage.h
new file mode 100644
index 00000000..dc01a836
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainStorage.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@class FBLPromise<ValueType>;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// The class provides a convenient abstraction on top of the iOS Keychain API to save data.
+@interface GULKeychainStorage : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/** Initializes the keychain storage with Keychain Service name.
+ * @param service A Keychain Service name that will be used to store and retrieve objects. See also
+ * `kSecAttrService`.
+ */
+- (instancetype)initWithService:(NSString *)service;
+
+/**
+ * Get an object by key.
+ * @param key The key.
+ * @param objectClass The expected object class required by `NSSecureCoding`.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns a promise. It is resolved with an object stored by key if exists. It is resolved
+ * with `nil` when the object not found. It fails on a Keychain error.
+ */
+- (FBLPromise<id<NSSecureCoding>> *)getObjectForKey:(NSString *)key
+ objectClass:(Class)objectClass
+ accessGroup:(nullable NSString *)accessGroup;
+
+/**
+ * Saves the given object by the given key.
+ * @param object The object to store.
+ * @param key The key to store the object. If there is an existing object by the key, it will be
+ * overridden.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns which is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)setObject:(id<NSSecureCoding>)object
+ forKey:(NSString *)key
+ accessGroup:(nullable NSString *)accessGroup;
+
+/**
+ * Removes the object by the given key.
+ * @param key The key to store the object. If there is an existing object by the key, it will be
+ * overridden.
+ * @param accessGroup The Keychain Access Group.
+ *
+ * @return Returns which is resolved with `[NSNull null]` on success.
+ */
+- (FBLPromise<NSNull *> *)removeObjectForKey:(NSString *)key
+ accessGroup:(nullable NSString *)accessGroup;
+
+#if TARGET_OS_OSX
+/// If not `nil`, then only this keychain will be used to save and read data (see
+/// `kSecMatchSearchList` and `kSecUseKeychain`. It is mostly intended to be used by unit tests.
+@property(nonatomic, nullable) SecKeychainRef keychainRef;
+#endif // TARGET_OSX
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainUtils.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainUtils.h
new file mode 100644
index 00000000..de4bef2f
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULKeychainUtils.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2019 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+FOUNDATION_EXPORT NSString *const kGULKeychainUtilsErrorDomain;
+
+/// Helper functions to access Keychain.
+@interface GULKeychainUtils : NSObject
+
+/** Fetches a keychain item data matching to the provided query.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemCopyMatching` for
+ * details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns Data for the first Keychain Item matching the provided query or `nil` if there is not
+ * such an item (`outError` will be `nil` in this case) or an error occurred.
+ */
++ (nullable NSData *)getItemWithQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** Stores data to a Keychain Item matching to the provided query. An existing Keychain Item
+ * matching the query parameters will be updated or a new will be created.
+ * @param item A Keychain Item data to store.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemAdd` and
+ * `SecItemUpdate` for details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns `YES` when data was successfully stored, `NO` otherwise.
+ */
++ (BOOL)setItem:(NSData *)item
+ withQuery:(NSDictionary *)query
+ error:(NSError *_Nullable *_Nullable)outError;
+
+/** Removes a Keychain Item matching to the provided query.
+ * @param query A dictionary with Keychain query parameters. See docs for `SecItemDelete` for
+ * details.
+ * @param outError A pointer to `NSError` instance or `NULL`. The instance at `outError` will be
+ * assigned with an error if there is.
+ * @returns `YES` if the item was removed successfully or doesn't exist, `NO` otherwise.
+ */
++ (BOOL)removeItemWithQuery:(NSDictionary *)query error:(NSError *_Nullable *_Nullable)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULSecureCoding.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULSecureCoding.h
new file mode 100644
index 00000000..8484b395
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/Environment/Private/GULSecureCoding.h
@@ -0,0 +1,36 @@
+// Copyright 2019 Google
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** The class wraps `NSKeyedArchiver` and `NSKeyedUnarchiver` API to provide a unified secure coding
+ * methods for iOS versions before and after 11.
+ */
+@interface GULSecureCoding : NSObject
+
++ (nullable id)unarchivedObjectOfClasses:(NSSet<Class> *)classes
+ fromData:(NSData *)data
+ error:(NSError **)outError;
+
++ (nullable id)unarchivedObjectOfClass:(Class)class
+ fromData:(NSData *)data
+ error:(NSError **)outError;
+
++ (nullable NSData *)archivedDataWithRootObject:(id<NSCoding>)object error:(NSError **)outError;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h
new file mode 100644
index 00000000..420b3e76
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/GoogleUtilities/SceneDelegateSwizzler/Private/GULSceneDelegateSwizzler.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if !TARGET_OS_OSX
+#import <UIKit/UIKit.h>
+#endif // !TARGET_OS_OSX
+
+#if ((TARGET_OS_IOS || TARGET_OS_TV) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 130000))
+#define UISCENE_SUPPORTED 1
+#endif
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NSString *const GULSceneDelegateInterceptorID;
+
+/** This class contains methods that isa swizzle the scene delegate. */
+@interface GULSceneDelegateSwizzler : NSProxy
+
+#if UISCENE_SUPPORTED
+
+/** Registers a scene delegate interceptor whose methods will be invoked as they're invoked on the
+ * original scene delegate.
+ *
+ * @param interceptor An instance of a class that conforms to the application delegate protocol.
+ * The interceptor is NOT retained.
+ * @return A unique GULSceneDelegateInterceptorID if interceptor was successfully registered; nil
+ * if it fails.
+ */
++ (nullable GULSceneDelegateInterceptorID)registerSceneDelegateInterceptor:
+ (id<UISceneDelegate>)interceptor API_AVAILABLE(ios(13.0), tvos(13.0));
+
+/** Unregisters an interceptor with the given ID if it exists.
+ *
+ * @param interceptorID The object that was generated when the interceptor was registered.
+ */
++ (void)unregisterSceneDelegateInterceptorWithID:(GULSceneDelegateInterceptorID)interceptorID
+ API_AVAILABLE(ios(13.0), tvos(13.0));
+
+/** Do not initialize this class. */
+- (instancetype)init NS_UNAVAILABLE;
+
+#endif // UISCENE_SUPPORTED
+
+/** This method ensures that the original scene delegate has been proxied. Call this before
+ * registering your interceptor. This method is safe to call multiple times (but it only proxies
+ * the scene delegate once).
+ *
+ * The method has no effect for extensions.
+ */
++ (void)proxyOriginalSceneDelegate;
+
+/** Indicates whether scene delegate proxy is explicitly disabled or enabled. Enabled by default.
+ *
+ * @return YES if SceneDelegateProxy is Enabled, NO otherwise.
+ */
++ (BOOL)isSceneDelegateProxyEnabled;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/Interop/Auth/Public/FIRAuthInterop.h b/StoneIsland/platforms/ios/Pods/FirebaseAuth/Interop/Auth/Public/FIRAuthInterop.h
new file mode 100644
index 00000000..a33da7c9
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/Interop/Auth/Public/FIRAuthInterop.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2018 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FIRAuthInterop_h
+#define FIRAuthInterop_h
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/** @typedef FIRTokenCallback
+ @brief The type of block which gets called when a token is ready.
+ */
+typedef void (^FIRTokenCallback)(NSString *_Nullable token, NSError *_Nullable error)
+ NS_SWIFT_NAME(TokenCallback);
+
+/// Common methods for Auth interoperability.
+NS_SWIFT_NAME(AuthInterop)
+@protocol FIRAuthInterop
+
+/// Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
+- (void)getTokenForcingRefresh:(BOOL)forceRefresh withCallback:(FIRTokenCallback)callback;
+
+/// Get the current Auth user's UID. Returns nil if there is no user signed in.
+- (nullable NSString *)getUserID;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* FIRAuthInterop_h */
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/LICENSE b/StoneIsland/platforms/ios/Pods/FirebaseAuth/LICENSE
new file mode 100644
index 00000000..fcce5066
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2020 Firebase, Inc.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/StoneIsland/platforms/ios/Pods/FirebaseAuth/README.md b/StoneIsland/platforms/ios/Pods/FirebaseAuth/README.md
new file mode 100644
index 00000000..1d9f0f67
--- /dev/null
+++ b/StoneIsland/platforms/ios/Pods/FirebaseAuth/README.md
@@ -0,0 +1,298 @@
+[![Version](https://img.shields.io/cocoapods/v/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![License](https://img.shields.io/cocoapods/l/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+[![Platform](https://img.shields.io/cocoapods/p/Firebase.svg?style=flat)](https://cocoapods.org/pods/Firebase)
+
+[![Actions Status][gh-abtesting-badge]][gh-actions]
+[![Actions Status][gh-auth-badge]][gh-actions]
+[![Actions Status][gh-core-badge]][gh-actions]
+[![Actions Status][gh-crashlytics-badge]][gh-actions]
+[![Actions Status][gh-database-badge]][gh-actions]
+[![Actions Status][gh-datatransport-badge]][gh-actions]
+[![Actions Status][gh-dynamiclinks-badge]][gh-actions]
+[![Actions Status][gh-firebasepod-badge]][gh-actions]
+[![Actions Status][gh-firestore-badge]][gh-actions]
+[![Actions Status][gh-functions-badge]][gh-actions]
+[![Actions Status][gh-inappmessaging-badge]][gh-actions]
+[![Actions Status][gh-interop-badge]][gh-actions]
+[![Actions Status][gh-messaging-badge]][gh-actions]
+[![Actions Status][gh-remoteconfig-badge]][gh-actions]
+[![Actions Status][gh-storage-badge]][gh-actions]
+[![Actions Status][gh-symbolcollision-badge]][gh-actions]
+[![Actions Status][gh-zip-badge]][gh-actions]
+[![Travis](https://travis-ci.org/firebase/firebase-ios-sdk.svg?branch=master)](https://travis-ci.org/firebase/firebase-ios-sdk)
+
+# Firebase Apple Open Source Development
+
+This repository contains all Apple platform Firebase SDK source except FirebaseAnalytics,
+FirebasePerformance, and FirebaseML.
+
+The repository also includes GoogleUtilities source. The
+[GoogleUtilities](GoogleUtilities/README.md) pod is
+a set of utilities used by Firebase and other Google products.
+
+Firebase is an app development platform with tools to help you build, grow and
+monetize your app. More information about Firebase can be found at
+[https://firebase.google.com](https://firebase.google.com).
+
+## Installation
+
+See the three subsections for details about three different installation methods.
+1. [Standard pod install](README.md#standard-pod-install)
+1. [Installing from the GitHub repo](README.md#installing-from-github)
+1. [Experimental Carthage](README.md#carthage-ios-only)
+
+### Standard pod install
+
+Go to
+[https://firebase.google.com/docs/ios/setup](https://firebase.google.com/docs/ios/setup).
+
+### Installing from GitHub
+
+For releases starting with 5.0.0, the source for each release is also deployed
+to CocoaPods master and available via standard
+[CocoaPods Podfile syntax](https://guides.cocoapods.org/syntax/podfile.html#pod).
+
+These instructions can be used to access the Firebase repo at other branches,
+tags, or commits.
+
+#### Background
+
+See
+[the Podfile Syntax Reference](https://guides.cocoapods.org/syntax/podfile.html#pod)
+for instructions and options about overriding pod source locations.
+
+#### Accessing Firebase Source Snapshots
+
+All of the official releases are tagged in this repo and available via CocoaPods. To access a local
+source snapshot or unreleased branch, use Podfile directives like the following:
+
+To access FirebaseFirestore via a branch:
+```
+pod 'FirebaseCore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+pod 'FirebaseFirestore', :git => 'https://github.com/firebase/firebase-ios-sdk.git', :branch => 'master'
+```
+
+To access FirebaseMessaging via a checked out version of the firebase-ios-sdk repo do:
+
+```
+pod 'FirebaseCore', :path => '/path/to/firebase-ios-sdk'
+pod 'FirebaseMessaging', :path => '/path/to/firebase-ios-sdk'
+```
+
+### Carthage (iOS only)
+
+Instructions for the experimental Carthage distribution are at
+[Carthage](Carthage.md).
+
+### Rome
+
+Instructions for installing binary frameworks via
+[Rome](https://github.com/CocoaPods/Rome) are at [Rome](Rome.md).
+
+### Using Firebase from a Framework or a library
+
+[Using Firebase from a Framework or a library](docs/firebase_in_libraries.md)
+
+## Development
+
+To develop Firebase software in this repository, ensure that you have at least
+the following software:
+
+ * Xcode 10.3 (or later)
+ * CocoaPods 1.7.2 (or later)
+ * [CocoaPods generate](https://github.com/square/cocoapods-generate)
+
+For the pod that you want to develop:
+
+`pod gen Firebase{name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+
+Note: If the CocoaPods cache is out of date, you may need to run
+`pod repo update` before the `pod gen` command.
+
+Note: Set the `--platforms` option to `macos` or `tvos` to develop/test for
+those platforms. Since 10.2, Xcode does not properly handle multi-platform
+CocoaPods workspaces.
+
+Firestore has a self contained Xcode project. See
+[Firestore/README.md](Firestore/README.md).
+
+### Development for Catalyst
+* `pod gen {name here}.podspec --local-sources=./ --auto-open --platforms=ios`
+* Check the Mac box in the App-iOS Build Settings
+* Sign the App in the Settings Signing & Capabilities tab
+* Click Pods in the Project Manager
+* Add Signing to the iOS host app and unit test targets
+* Select the Unit-unit scheme
+* Run it to build and test
+
+### Adding a New Firebase Pod
+
+See [AddNewPod.md](AddNewPod.md).
+
+### Managing Headers and Imports
+
+See [HeadersImports.md](HeadersImports.md).
+
+### Code Formatting
+
+To ensure that the code is formatted consistently, run the script
+[./scripts/style.sh](https://github.com/firebase/firebase-ios-sdk/blob/master/scripts/style.sh)
+before creating a PR.
+
+Travis will verify that any code changes are done in a style compliant way. Install
+`clang-format` and `swiftformat`:
+
+```
+brew install clang-format
+brew install swiftformat
+```
+
+### Running Unit Tests
+
+Select a scheme and press Command-u to build a component and run its unit tests.
+
+#### Viewing Code Coverage (Deprecated)
+
+First, make sure that [xcov](https://github.com/nakiostudio/xcov) is installed with `gem install xcov`.
+
+After running the `AllUnitTests_iOS` scheme in Xcode, execute
+`xcov --workspace Firebase.xcworkspace --scheme AllUnitTests_iOS --output_directory xcov_output`
+at Example/ in the terminal. This will aggregate the coverage, and you can run `open xcov_output/index.html` to see the results.
+
+### Running Sample Apps
+In order to run the sample apps and integration tests, you'll need valid
+`GoogleService-Info.plist` files for those samples. The Firebase Xcode project contains dummy plist
+files without real values, but can be replaced with real plist files. To get your own
+`GoogleService-Info.plist` files:
+
+1. Go to the [Firebase Console](https://console.firebase.google.com/)
+2. Create a new Firebase project, if you don't already have one
+3. For each sample app you want to test, create a new Firebase app with the sample app's bundle
+identifier (e.g. `com.google.Database-Example`)
+4. Download the resulting `GoogleService-Info.plist` and add it to the Xcode project.
+
+## Specific Component Instructions
+See the sections below for any special instructions for those components.
+
+### Firebase Auth
+
+If you're doing specific Firebase Auth development, see
+[the Auth Sample README](FirebaseAuth/Tests/Sample/README.md) for instructions about
+building and running the FirebaseAuth pod along with various samples and tests.
+
+### Firebase Database
+
+The Firebase Database Integration tests can be run against a locally running Database Emulator
+or against a production instance.
+
+To run against a local emulator instance, invoke `./scripts/run_database_emulator.sh start` before
+running the integration test.
+
+To run against a production instance, provide a valid GoogleServices-Info.plist and copy it to
+`FirebaseDatabase/Tests/Resources/GoogleService-Info.plist`. Your Security Rule must be set to
+[public](https://firebase.google.com/docs/database/security/quickstart) while your tests are
+running.
+
+### Firebase Storage
+
+To run the Storage Integration tests, follow the instructions in
+[FIRStorageIntegrationTests.m](FirebaseStorage/Tests/Integration/FIRStorageIntegrationTests.m).
+
+#### Push Notifications
+
+Push notifications can only be delivered to specially provisioned App IDs in the developer portal.
+In order to actually test receiving push notifications, you will need to:
+
+1. Change the bundle identifier of the sample app to something you own in your Apple Developer
+account, and enable that App ID for push notifications.
+2. You'll also need to
+[upload your APNs Provider Authentication Key or certificate to the Firebase Console](https://firebase.google.com/docs/cloud-messaging/ios/certs)
+at **Project Settings > Cloud Messaging > [Your Firebase App]**.
+3. Ensure your iOS device is added to your Apple Developer portal as a test device.
+
+#### iOS Simulator
+
+The iOS Simulator cannot register for remote notifications, and will not receive push notifications.
+In order to receive push notifications, you'll have to follow the steps above and run the app on a
+physical device.
+
+## Community Supported Efforts
+
+We've seen an amazing amount of interest and contributions to improve the Firebase SDKs, and we are
+very grateful! We'd like to empower as many developers as we can to be able to use Firebase and
+participate in the Firebase community.
+
+### tvOS, macOS, watchOS and Catalyst
+Thanks to contributions from the community, many of Firebase SDKs now compile, run unit tests, and work on
+tvOS, macOS, watchOS and Catalyst.
+
+For tvOS, checkout the [Sample](Example/tvOSSample).
+For watchOS, currently only Messaging and Storage (and their dependencies) have limited support. Checkout the
+[Independent Watch App Sample](Example/watchOSSample).
+
+Keep in mind that macOS, tvOS, watchOS and Catalyst are not officially supported by Firebase, and this
+repository is actively developed primarily for iOS. While we can catch basic unit test issues with
+Travis, there may be some changes where the SDK no longer works as expected on macOS, tvOS or watchOS. If you
+encounter this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
+
+During app setup in the console, you may get to a step that mentions something like "Checking if the app
+has communicated with our servers". This relies on Analytics and will not work on macOS/tvOS/watchOS/Catalyst.
+**It's safe to ignore the message and continue**, the rest of the SDKs will work as expected.
+
+To install, add a subset of the following to the Podfile:
+
+```
+pod 'Firebase/ABTesting' # No watchOS support yet
+pod 'Firebase/Auth' # No watchOS support yet
+pod 'Firebase/Crashlytics' # No watchOS support yet
+pod 'Firebase/Database' # No watchOS support yet
+pod 'Firebase/Firestore' # No watchOS support yet
+pod 'Firebase/Functions' # No watchOS support yet
+pod 'Firebase/Messaging'
+pod 'Firebase/RemoteConfig' # No watchOS support yet
+pod 'Firebase/Storage'
+```
+
+#### Additional Catalyst Notes
+
+* FirebaseAuth and FirebaseMessaging require adding `Keychain Sharing Capability`
+to Build Settings.
+* FirebaseFirestore requires signing the
+[gRPC Resource target](https://github.com/firebase/firebase-ios-sdk/issues/3500#issuecomment-518741681).
+
+## Roadmap
+
+See [Roadmap](ROADMAP.md) for more about the Firebase iOS SDK Open Source
+plans and directions.
+
+## Contributing
+
+See [Contributing](CONTRIBUTING.md) for more information on contributing to the Firebase
+iOS SDK.
+
+## License
+
+The contents of this repository is licensed under the
+[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
+
+Your use of Firebase is governed by the
+[Terms of Service for Firebase Services](https://firebase.google.com/terms/).
+
+[gh-actions]: https://github.com/firebase/firebase-ios-sdk/actions
+[gh-abtesting-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/abtesting/badge.svg
+[gh-auth-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/auth/badge.svg
+[gh-core-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/core/badge.svg
+[gh-crashlytics-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/crashlytics/badge.svg
+[gh-database-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/database/badge.svg
+[gh-datatransport-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/datatransport/badge.svg
+[gh-dynamiclinks-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/dynamiclinks/badge.svg
+[gh-firebasepod-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firebasepod/badge.svg
+[gh-firestore-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/firestore/badge.svg
+[gh-functions-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/functions/badge.svg
+[gh-inappmessaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/inappmessaging/badge.svg
+[gh-interop-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/interop/badge.svg
+[gh-messaging-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/messaging/badge.svg
+[gh-remoteconfig-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/remoteconfig/badge.svg
+[gh-storage-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/storage/badge.svg
+[gh-symbolcollision-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/symbolcollision/badge.svg
+[gh-zip-badge]: https://github.com/firebase/firebase-ios-sdk/workflows/zip/badge.svg