@firebase/auth 1.7.9 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -1
- package/dist/auth-public.d.ts +22 -10
- package/dist/auth.d.ts +22 -10
- package/dist/browser-cjs/{index-e2e765e6.js → index-b60d3212.js} +393 -176
- package/dist/browser-cjs/index-b60d3212.js.map +1 -0
- package/dist/browser-cjs/index.js +1 -1
- package/dist/browser-cjs/internal.js +1 -1
- package/dist/browser-cjs/src/api/account_management/mfa.d.ts +5 -1
- package/dist/browser-cjs/src/api/authentication/mfa.d.ts +5 -1
- package/dist/browser-cjs/src/api/authentication/sms.d.ts +5 -1
- package/dist/browser-cjs/src/api/index.d.ts +7 -3
- package/dist/browser-cjs/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/browser-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/browser-cjs/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/cordova/auth-cordova-public.d.ts +7 -0
- package/dist/cordova/auth-cordova.d.ts +7 -0
- package/dist/cordova/index.js +6 -7
- package/dist/cordova/index.js.map +1 -1
- package/dist/cordova/internal.js +660 -985
- package/dist/cordova/internal.js.map +1 -1
- package/dist/cordova/popup_redirect-6fcd583a.js +9635 -0
- package/dist/cordova/popup_redirect-6fcd583a.js.map +1 -0
- package/dist/cordova/src/api/account_management/mfa.d.ts +5 -1
- package/dist/cordova/src/api/authentication/mfa.d.ts +5 -1
- package/dist/cordova/src/api/authentication/sms.d.ts +5 -1
- package/dist/cordova/src/api/index.d.ts +7 -3
- package/dist/cordova/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/cordova/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/cordova/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/cordova/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/{esm5/src/api/account_management/mfa.test.d.ts → cordova/test/integration/flows/recaptcha_enterprise.test.d.ts} +1 -1
- package/dist/esm2017/{index-68602d24.js → index-a7d5cfcc.js} +393 -176
- package/dist/esm2017/index-a7d5cfcc.js.map +1 -0
- package/dist/esm2017/index.js +1 -1
- package/dist/esm2017/internal.js +2 -2
- package/dist/esm2017/src/api/account_management/mfa.d.ts +5 -1
- package/dist/esm2017/src/api/authentication/mfa.d.ts +5 -1
- package/dist/esm2017/src/api/authentication/sms.d.ts +5 -1
- package/dist/esm2017/src/api/index.d.ts +7 -3
- package/dist/esm2017/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/esm2017/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/esm2017/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/esm2017/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/{esm5/src/api/account_management/email_and_password.test.d.ts → esm2017/test/integration/flows/recaptcha_enterprise.test.d.ts} +1 -1
- package/dist/index.webworker.js +7912 -0
- package/dist/index.webworker.js.map +1 -0
- package/dist/node/index.js +2 -3
- package/dist/node/index.js.map +1 -1
- package/dist/node/internal.js +555 -844
- package/dist/node/internal.js.map +1 -1
- package/dist/node/src/api/account_management/mfa.d.ts +5 -1
- package/dist/node/src/api/authentication/mfa.d.ts +5 -1
- package/dist/node/src/api/authentication/sms.d.ts +5 -1
- package/dist/node/src/api/index.d.ts +7 -3
- package/dist/node/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/node/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/node/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/node/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/node/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
- package/dist/node/totp-ab108bed.js +7582 -0
- package/dist/node/totp-ab108bed.js.map +1 -0
- package/dist/node-esm/index.js +1 -2
- package/dist/node-esm/index.js.map +1 -1
- package/dist/node-esm/internal.js +2 -3
- package/dist/node-esm/internal.js.map +1 -1
- package/dist/node-esm/src/api/account_management/mfa.d.ts +5 -1
- package/dist/node-esm/src/api/authentication/mfa.d.ts +5 -1
- package/dist/node-esm/src/api/authentication/sms.d.ts +5 -1
- package/dist/node-esm/src/api/index.d.ts +7 -3
- package/dist/node-esm/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/node-esm/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/node-esm/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/node-esm/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/{esm5/scripts/run_node_tests.d.ts → node-esm/test/integration/flows/recaptcha_enterprise.test.d.ts} +1 -1
- package/dist/node-esm/{totp-219bb96f.js → totp-f311e20a.js} +170 -33
- package/dist/node-esm/totp-f311e20a.js.map +1 -0
- package/dist/rn/index-4d73adbf.js +8575 -0
- package/dist/rn/index-4d73adbf.js.map +1 -0
- package/dist/rn/index.js +45 -55
- package/dist/rn/index.js.map +1 -1
- package/dist/rn/internal.js +1195 -1890
- package/dist/rn/internal.js.map +1 -1
- package/dist/rn/src/api/account_management/mfa.d.ts +5 -1
- package/dist/rn/src/api/authentication/mfa.d.ts +5 -1
- package/dist/rn/src/api/authentication/sms.d.ts +5 -1
- package/dist/rn/src/api/index.d.ts +7 -3
- package/dist/rn/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/rn/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/rn/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/rn/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/rn/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
- package/dist/src/api/account_management/mfa.d.ts +5 -1
- package/dist/src/api/authentication/mfa.d.ts +5 -1
- package/dist/src/api/authentication/sms.d.ts +5 -1
- package/dist/src/api/index.d.ts +7 -3
- package/dist/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
- package/dist/web-extension-cjs/index.js +1 -1
- package/dist/web-extension-cjs/internal.js +115 -147
- package/dist/web-extension-cjs/internal.js.map +1 -1
- package/dist/web-extension-cjs/{register-674a8250.js → register-17c71bd5.js} +284 -31
- package/dist/web-extension-cjs/register-17c71bd5.js.map +1 -0
- package/dist/web-extension-cjs/src/api/account_management/mfa.d.ts +5 -1
- package/dist/web-extension-cjs/src/api/authentication/mfa.d.ts +5 -1
- package/dist/web-extension-cjs/src/api/authentication/sms.d.ts +5 -1
- package/dist/web-extension-cjs/src/api/index.d.ts +7 -3
- package/dist/web-extension-cjs/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/web-extension-cjs/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/web-extension-cjs/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/web-extension-cjs/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/web-extension-cjs/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
- package/dist/web-extension-esm2017/auth-web-extension-public.d.ts +7 -0
- package/dist/web-extension-esm2017/auth-web-extension.d.ts +7 -0
- package/dist/web-extension-esm2017/index.js +2 -2
- package/dist/web-extension-esm2017/internal.js +115 -147
- package/dist/web-extension-esm2017/internal.js.map +1 -1
- package/dist/web-extension-esm2017/{register-428f8789.js → register-77f1d56a.js} +281 -32
- package/dist/web-extension-esm2017/register-77f1d56a.js.map +1 -0
- package/dist/web-extension-esm2017/src/api/account_management/mfa.d.ts +5 -1
- package/dist/web-extension-esm2017/src/api/authentication/mfa.d.ts +5 -1
- package/dist/web-extension-esm2017/src/api/authentication/sms.d.ts +5 -1
- package/dist/web-extension-esm2017/src/api/index.d.ts +7 -3
- package/dist/web-extension-esm2017/src/platform_browser/providers/phone.d.ts +7 -5
- package/dist/web-extension-esm2017/src/platform_browser/recaptcha/recaptcha.d.ts +7 -0
- package/dist/web-extension-esm2017/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +4 -4
- package/dist/web-extension-esm2017/src/platform_browser/strategies/phone.d.ts +10 -6
- package/dist/web-extension-esm2017/test/integration/flows/recaptcha_enterprise.test.d.ts +17 -0
- package/internal/package.json +5 -3
- package/package.json +10 -11
- package/dist/browser-cjs/index-e2e765e6.js.map +0 -1
- package/dist/cordova/popup_redirect-abcbab4c.js +0 -11249
- package/dist/cordova/popup_redirect-abcbab4c.js.map +0 -1
- package/dist/esm2017/index-68602d24.js.map +0 -1
- package/dist/esm5/index-c0803b14.js +0 -12741
- package/dist/esm5/index-c0803b14.js.map +0 -1
- package/dist/esm5/index.cordova.d.ts +0 -32
- package/dist/esm5/index.d.ts +0 -37
- package/dist/esm5/index.doc.d.ts +0 -24
- package/dist/esm5/index.js +0 -7
- package/dist/esm5/index.js.map +0 -1
- package/dist/esm5/index.node.d.ts +0 -17
- package/dist/esm5/index.rn.d.ts +0 -40
- package/dist/esm5/index.shared.d.ts +0 -19
- package/dist/esm5/index.web-extension.d.ts +0 -31
- package/dist/esm5/index.webworker.d.ts +0 -21
- package/dist/esm5/internal/index.d.ts +0 -42
- package/dist/esm5/internal.js +0 -682
- package/dist/esm5/internal.js.map +0 -1
- package/dist/esm5/src/api/account_management/account.d.ts +0 -59
- package/dist/esm5/src/api/account_management/account.test.d.ts +0 -17
- package/dist/esm5/src/api/account_management/email_and_password.d.ts +0 -49
- package/dist/esm5/src/api/account_management/mfa.d.ts +0 -103
- package/dist/esm5/src/api/account_management/profile.d.ts +0 -29
- package/dist/esm5/src/api/account_management/profile.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/create_auth_uri.d.ts +0 -26
- package/dist/esm5/src/api/authentication/create_auth_uri.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/custom_token.d.ts +0 -26
- package/dist/esm5/src/api/authentication/custom_token.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/email_and_password.d.ts +0 -85
- package/dist/esm5/src/api/authentication/email_and_password.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/email_link.d.ts +0 -32
- package/dist/esm5/src/api/authentication/email_link.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/idp.d.ts +0 -40
- package/dist/esm5/src/api/authentication/idp.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/mfa.d.ts +0 -69
- package/dist/esm5/src/api/authentication/mfa.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/recaptcha.d.ts +0 -34
- package/dist/esm5/src/api/authentication/recaptcha.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/sign_up.d.ts +0 -34
- package/dist/esm5/src/api/authentication/sign_up.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/sms.d.ts +0 -50
- package/dist/esm5/src/api/authentication/sms.test.d.ts +0 -17
- package/dist/esm5/src/api/authentication/token.d.ts +0 -37
- package/dist/esm5/src/api/authentication/token.test.d.ts +0 -17
- package/dist/esm5/src/api/errors.d.ts +0 -128
- package/dist/esm5/src/api/index.d.ts +0 -97
- package/dist/esm5/src/api/index.test.d.ts +0 -17
- package/dist/esm5/src/api/password_policy/get_password_policy.d.ts +0 -48
- package/dist/esm5/src/api/password_policy/get_password_policy.test.d.ts +0 -17
- package/dist/esm5/src/api/project_config/get_project_config.d.ts +0 -25
- package/dist/esm5/src/api/project_config/get_project_config.test.d.ts +0 -17
- package/dist/esm5/src/core/action_code_url.d.ts +0 -73
- package/dist/esm5/src/core/action_code_url.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/auth_event_manager.d.ts +0 -34
- package/dist/esm5/src/core/auth/auth_event_manager.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/auth_impl.d.ts +0 -130
- package/dist/esm5/src/core/auth/auth_impl.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/emulator.d.ts +0 -42
- package/dist/esm5/src/core/auth/emulator.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/firebase_internal.d.ts +0 -35
- package/dist/esm5/src/core/auth/firebase_internal.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/initialize.d.ts +0 -46
- package/dist/esm5/src/core/auth/initialize.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/middleware.d.ts +0 -25
- package/dist/esm5/src/core/auth/middleware.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/password_policy_impl.d.ts +0 -59
- package/dist/esm5/src/core/auth/password_policy_impl.test.d.ts +0 -17
- package/dist/esm5/src/core/auth/register.d.ts +0 -23
- package/dist/esm5/src/core/credentials/auth_credential.d.ts +0 -75
- package/dist/esm5/src/core/credentials/email.d.ts +0 -60
- package/dist/esm5/src/core/credentials/email.test.d.ts +0 -17
- package/dist/esm5/src/core/credentials/index.d.ts +0 -23
- package/dist/esm5/src/core/credentials/oauth.d.ts +0 -81
- package/dist/esm5/src/core/credentials/oauth.test.d.ts +0 -17
- package/dist/esm5/src/core/credentials/phone.d.ts +0 -52
- package/dist/esm5/src/core/credentials/phone.test.d.ts +0 -17
- package/dist/esm5/src/core/credentials/saml.d.ts +0 -52
- package/dist/esm5/src/core/credentials/saml.test.d.ts +0 -17
- package/dist/esm5/src/core/errors.d.ts +0 -325
- package/dist/esm5/src/core/errors.test.d.ts +0 -17
- package/dist/esm5/src/core/index.d.ts +0 -230
- package/dist/esm5/src/core/persistence/in_memory.d.ts +0 -35
- package/dist/esm5/src/core/persistence/in_memory.test.d.ts +0 -17
- package/dist/esm5/src/core/persistence/index.d.ts +0 -41
- package/dist/esm5/src/core/persistence/persistence_user_manager.d.ts +0 -45
- package/dist/esm5/src/core/persistence/persistence_user_manager.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/email.d.ts +0 -83
- package/dist/esm5/src/core/providers/email.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/facebook.d.ts +0 -93
- package/dist/esm5/src/core/providers/facebook.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/federated.d.ts +0 -64
- package/dist/esm5/src/core/providers/federated.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/github.d.ts +0 -89
- package/dist/esm5/src/core/providers/github.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/google.d.ts +0 -96
- package/dist/esm5/src/core/providers/google.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/oauth.d.ts +0 -151
- package/dist/esm5/src/core/providers/oauth.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/saml.d.ts +0 -62
- package/dist/esm5/src/core/providers/saml.test.d.ts +0 -17
- package/dist/esm5/src/core/providers/twitter.d.ts +0 -103
- package/dist/esm5/src/core/providers/twitter.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/abstract_popup_redirect_operation.d.ts +0 -44
- package/dist/esm5/src/core/strategies/abstract_popup_redirect_operation.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/action_code_settings.d.ts +0 -19
- package/dist/esm5/src/core/strategies/action_code_settings.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/anonymous.d.ts +0 -32
- package/dist/esm5/src/core/strategies/anonymous.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/credential.d.ts +0 -64
- package/dist/esm5/src/core/strategies/credential.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/custom_token.d.ts +0 -37
- package/dist/esm5/src/core/strategies/custom_token.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/email.d.ts +0 -104
- package/dist/esm5/src/core/strategies/email.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/email_and_password.d.ts +0 -139
- package/dist/esm5/src/core/strategies/email_and_password.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/email_link.d.ts +0 -107
- package/dist/esm5/src/core/strategies/email_link.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/idp.d.ts +0 -32
- package/dist/esm5/src/core/strategies/idp.test.d.ts +0 -17
- package/dist/esm5/src/core/strategies/redirect.d.ts +0 -36
- package/dist/esm5/src/core/strategies/redirect.test.d.ts +0 -17
- package/dist/esm5/src/core/user/account_info.d.ts +0 -68
- package/dist/esm5/src/core/user/account_info.test.d.ts +0 -17
- package/dist/esm5/src/core/user/additional_user_info.d.ts +0 -31
- package/dist/esm5/src/core/user/additional_user_info.test.d.ts +0 -17
- package/dist/esm5/src/core/user/id_token_result.d.ts +0 -48
- package/dist/esm5/src/core/user/id_token_result.test.d.ts +0 -17
- package/dist/esm5/src/core/user/invalidation.d.ts +0 -18
- package/dist/esm5/src/core/user/invalidation.test.d.ts +0 -17
- package/dist/esm5/src/core/user/link_unlink.d.ts +0 -30
- package/dist/esm5/src/core/user/link_unlink.test.d.ts +0 -17
- package/dist/esm5/src/core/user/proactive_refresh.d.ts +0 -34
- package/dist/esm5/src/core/user/proactive_refresh.test.d.ts +0 -17
- package/dist/esm5/src/core/user/reauthenticate.d.ts +0 -20
- package/dist/esm5/src/core/user/reauthenticate.test.d.ts +0 -17
- package/dist/esm5/src/core/user/reload.d.ts +0 -29
- package/dist/esm5/src/core/user/reload.test.d.ts +0 -17
- package/dist/esm5/src/core/user/token_manager.d.ts +0 -50
- package/dist/esm5/src/core/user/token_manager.test.d.ts +0 -17
- package/dist/esm5/src/core/user/user_credential_impl.d.ts +0 -37
- package/dist/esm5/src/core/user/user_credential_impl.test.d.ts +0 -17
- package/dist/esm5/src/core/user/user_impl.d.ts +0 -74
- package/dist/esm5/src/core/user/user_impl.test.d.ts +0 -17
- package/dist/esm5/src/core/user/user_metadata.d.ts +0 -27
- package/dist/esm5/src/core/util/assert.d.ts +0 -94
- package/dist/esm5/src/core/util/assert.test.d.ts +0 -17
- package/dist/esm5/src/core/util/browser.d.ts +0 -50
- package/dist/esm5/src/core/util/browser.test.d.ts +0 -17
- package/dist/esm5/src/core/util/delay.d.ts +0 -31
- package/dist/esm5/src/core/util/delay.test.d.ts +0 -17
- package/dist/esm5/src/core/util/emulator.d.ts +0 -18
- package/dist/esm5/src/core/util/emulator.test.d.ts +0 -17
- package/dist/esm5/src/core/util/event_id.d.ts +0 -17
- package/dist/esm5/src/core/util/event_id.test.d.ts +0 -17
- package/dist/esm5/src/core/util/fetch_provider.d.ts +0 -25
- package/dist/esm5/src/core/util/handler.d.ts +0 -20
- package/dist/esm5/src/core/util/instantiator.d.ts +0 -28
- package/dist/esm5/src/core/util/instantiator.test.d.ts +0 -17
- package/dist/esm5/src/core/util/location.d.ts +0 -19
- package/dist/esm5/src/core/util/log.d.ts +0 -23
- package/dist/esm5/src/core/util/navigator.d.ts +0 -21
- package/dist/esm5/src/core/util/providers.d.ts +0 -23
- package/dist/esm5/src/core/util/resolver.d.ts +0 -25
- package/dist/esm5/src/core/util/time.d.ts +0 -17
- package/dist/esm5/src/core/util/validate_origin.d.ts +0 -18
- package/dist/esm5/src/core/util/validate_origin.test.d.ts +0 -17
- package/dist/esm5/src/core/util/version.d.ts +0 -31
- package/dist/esm5/src/core/util/version.test.d.ts +0 -17
- package/dist/esm5/src/index.d.ts +0 -18
- package/dist/esm5/src/mfa/assertions/totp.d.ts +0 -124
- package/dist/esm5/src/mfa/assertions/totp.test.d.ts +0 -17
- package/dist/esm5/src/mfa/index.d.ts +0 -18
- package/dist/esm5/src/mfa/mfa_assertion.d.ts +0 -27
- package/dist/esm5/src/mfa/mfa_error.d.ts +0 -35
- package/dist/esm5/src/mfa/mfa_info.d.ts +0 -36
- package/dist/esm5/src/mfa/mfa_info.test.d.ts +0 -17
- package/dist/esm5/src/mfa/mfa_resolver.d.ts +0 -41
- package/dist/esm5/src/mfa/mfa_resolver.test.d.ts +0 -17
- package/dist/esm5/src/mfa/mfa_session.d.ts +0 -39
- package/dist/esm5/src/mfa/mfa_session.test.d.ts +0 -17
- package/dist/esm5/src/mfa/mfa_user.d.ts +0 -38
- package/dist/esm5/src/mfa/mfa_user.test.d.ts +0 -17
- package/dist/esm5/src/model/application_verifier.d.ts +0 -23
- package/dist/esm5/src/model/auth.d.ts +0 -87
- package/dist/esm5/src/model/enum_maps.d.ts +0 -98
- package/dist/esm5/src/model/enums.d.ts +0 -74
- package/dist/esm5/src/model/id_token.d.ts +0 -87
- package/dist/esm5/src/model/password_policy.d.ts +0 -111
- package/dist/esm5/src/model/popup_redirect.d.ts +0 -94
- package/dist/esm5/src/model/public_types.d.ts +0 -1285
- package/dist/esm5/src/model/user.d.ts +0 -83
- package/dist/esm5/src/platform_browser/auth.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/auth_window.d.ts +0 -37
- package/dist/esm5/src/platform_browser/iframe/gapi.d.ts +0 -19
- package/dist/esm5/src/platform_browser/iframe/gapi.iframes.d.ts +0 -47
- package/dist/esm5/src/platform_browser/iframe/gapi.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/iframe/iframe.d.ts +0 -18
- package/dist/esm5/src/platform_browser/iframe/iframe.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/index.d.ts +0 -27
- package/dist/esm5/src/platform_browser/load_js.d.ts +0 -29
- package/dist/esm5/src/platform_browser/load_js.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/messagechannel/index.d.ts +0 -87
- package/dist/esm5/src/platform_browser/messagechannel/promise.d.ts +0 -33
- package/dist/esm5/src/platform_browser/messagechannel/promise.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/messagechannel/receiver.d.ts +0 -63
- package/dist/esm5/src/platform_browser/messagechannel/receiver.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/messagechannel/sender.d.ts +0 -46
- package/dist/esm5/src/platform_browser/messagechannel/sender.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/mfa/assertions/phone.d.ts +0 -59
- package/dist/esm5/src/platform_browser/mfa/assertions/phone.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/persistence/browser.d.ts +0 -27
- package/dist/esm5/src/platform_browser/persistence/browser.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/persistence/indexed_db.d.ts +0 -33
- package/dist/esm5/src/platform_browser/persistence/indexed_db.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/persistence/local_storage.d.ts +0 -25
- package/dist/esm5/src/platform_browser/persistence/local_storage.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/persistence/session_storage.d.ts +0 -24
- package/dist/esm5/src/platform_browser/persistence/session_storage.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/popup_redirect.d.ts +0 -27
- package/dist/esm5/src/platform_browser/popup_redirect.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/providers/phone.d.ts +0 -152
- package/dist/esm5/src/platform_browser/providers/phone.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha.d.ts +0 -71
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.d.ts +0 -45
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_enterprise_verifier.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_loader.d.ts +0 -49
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_loader.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_mock.d.ts +0 -66
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_mock.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_verifier.d.ts +0 -92
- package/dist/esm5/src/platform_browser/recaptcha/recaptcha_verifier.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/strategies/phone.d.ts +0 -112
- package/dist/esm5/src/platform_browser/strategies/phone.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/strategies/popup.d.ts +0 -109
- package/dist/esm5/src/platform_browser/strategies/popup.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/strategies/redirect.d.ts +0 -176
- package/dist/esm5/src/platform_browser/strategies/redirect.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/util/popup.d.ts +0 -24
- package/dist/esm5/src/platform_browser/util/popup.test.d.ts +0 -17
- package/dist/esm5/src/platform_browser/util/worker.d.ts +0 -20
- package/dist/esm5/src/platform_cordova/plugins.d.ts +0 -42
- package/dist/esm5/src/platform_cordova/popup_redirect/events.d.ts +0 -39
- package/dist/esm5/src/platform_cordova/popup_redirect/events.test.d.ts +0 -17
- package/dist/esm5/src/platform_cordova/popup_redirect/popup_redirect.d.ts +0 -24
- package/dist/esm5/src/platform_cordova/popup_redirect/popup_redirect.test.d.ts +0 -17
- package/dist/esm5/src/platform_cordova/popup_redirect/utils.d.ts +0 -47
- package/dist/esm5/src/platform_cordova/popup_redirect/utils.test.d.ts +0 -17
- package/dist/esm5/src/platform_cordova/strategies/redirect.d.ts +0 -20
- package/dist/esm5/src/platform_node/index.d.ts +0 -50
- package/dist/esm5/src/platform_react_native/persistence/react_native.d.ts +0 -25
- package/dist/esm5/src/platform_react_native/persistence/react_native.test.d.ts +0 -17
- package/dist/esm5/test/helpers/api/helper.d.ts +0 -22
- package/dist/esm5/test/helpers/delay.d.ts +0 -20
- package/dist/esm5/test/helpers/erroring_unavailable_persistence.d.ts +0 -36
- package/dist/esm5/test/helpers/fake_service_worker.d.ts +0 -22
- package/dist/esm5/test/helpers/id_token_response.d.ts +0 -18
- package/dist/esm5/test/helpers/iframe_event.d.ts +0 -19
- package/dist/esm5/test/helpers/integration/emulator_rest_helpers.d.ts +0 -35
- package/dist/esm5/test/helpers/integration/helpers.d.ts +0 -32
- package/dist/esm5/test/helpers/integration/settings.d.ts +0 -23
- package/dist/esm5/test/helpers/jwt.d.ts +0 -17
- package/dist/esm5/test/helpers/mock_auth.d.ts +0 -47
- package/dist/esm5/test/helpers/mock_auth_credential.d.ts +0 -31
- package/dist/esm5/test/helpers/mock_fetch.d.ts +0 -30
- package/dist/esm5/test/helpers/mock_fetch.test.d.ts +0 -17
- package/dist/esm5/test/helpers/mock_popup_redirect_resolver.d.ts +0 -24
- package/dist/esm5/test/helpers/redirect_persistence.d.ts +0 -24
- package/dist/esm5/test/helpers/timeout_stub.d.ts +0 -34
- package/dist/esm5/test/integration/flows/anonymous.test.d.ts +0 -17
- package/dist/esm5/test/integration/flows/custom.local.test.d.ts +0 -17
- package/dist/esm5/test/integration/flows/email.test.d.ts +0 -17
- package/dist/esm5/test/integration/flows/idp.local.test.d.ts +0 -17
- package/dist/esm5/test/integration/flows/middleware_test_generator.d.ts +0 -18
- package/dist/esm5/test/integration/flows/oob.local.test.d.ts +0 -17
- package/dist/esm5/test/integration/flows/password_policy.test.d.ts +0 -17
- package/dist/esm5/test/integration/flows/phone.test.d.ts +0 -17
- package/dist/esm5/test/integration/flows/totp.test.d.ts +0 -17
- package/dist/esm5/test/integration/webdriver/anonymous.test.d.ts +0 -17
- package/dist/esm5/test/integration/webdriver/compat/firebaseui.test.d.ts +0 -17
- package/dist/esm5/test/integration/webdriver/persistence.test.d.ts +0 -17
- package/dist/esm5/test/integration/webdriver/popup.test.d.ts +0 -17
- package/dist/esm5/test/integration/webdriver/redirect.test.d.ts +0 -17
- package/dist/esm5/test/integration/webdriver/util/auth_driver.d.ts +0 -46
- package/dist/esm5/test/integration/webdriver/util/functions.d.ts +0 -81
- package/dist/esm5/test/integration/webdriver/util/idp_page.d.ts +0 -31
- package/dist/esm5/test/integration/webdriver/util/js_load_condition.d.ts +0 -25
- package/dist/esm5/test/integration/webdriver/util/test_runner.d.ts +0 -19
- package/dist/esm5/test/integration/webdriver/util/test_server.d.ts +0 -27
- package/dist/esm5/test/integration/webdriver/util/ui_page.d.ts +0 -33
- package/dist/index.webworker.esm5.js +0 -9265
- package/dist/index.webworker.esm5.js.map +0 -1
- package/dist/node/totp-259483a2.js +0 -8762
- package/dist/node/totp-259483a2.js.map +0 -1
- package/dist/node-esm/totp-219bb96f.js.map +0 -1
- package/dist/rn/index-2f66320e.js +0 -9819
- package/dist/rn/index-2f66320e.js.map +0 -1
- package/dist/web-extension-cjs/register-674a8250.js.map +0 -1
- package/dist/web-extension-esm2017/register-428f8789.js.map +0 -1
- /package/dist/{esm5/test/integration/flows/firebaseserverapp.test.d.ts → browser-cjs/test/integration/flows/recaptcha_enterprise.test.d.ts} +0 -0
package/dist/node/internal.js
CHANGED
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var totp = require('./totp-
|
|
6
|
-
var tslib = require('tslib');
|
|
5
|
+
var totp = require('./totp-ab108bed.js');
|
|
7
6
|
var util = require('@firebase/util');
|
|
7
|
+
require('tslib');
|
|
8
8
|
var app = require('@firebase/app');
|
|
9
9
|
require('@firebase/component');
|
|
10
|
-
require('undici');
|
|
11
10
|
require('@firebase/logger');
|
|
12
11
|
|
|
13
12
|
/**
|
|
@@ -26,11 +25,9 @@ require('@firebase/logger');
|
|
|
26
25
|
* See the License for the specific language governing permissions and
|
|
27
26
|
* limitations under the License.
|
|
28
27
|
*/
|
|
29
|
-
function _generateEventId(prefix, digits) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
var random = '';
|
|
33
|
-
for (var i = 0; i < digits; i++) {
|
|
28
|
+
function _generateEventId(prefix = '', digits = 10) {
|
|
29
|
+
let random = '';
|
|
30
|
+
for (let i = 0; i < digits; i++) {
|
|
34
31
|
random += Math.floor(Math.random() * 10);
|
|
35
32
|
}
|
|
36
33
|
return prefix + random;
|
|
@@ -52,21 +49,20 @@ function _generateEventId(prefix, digits) {
|
|
|
52
49
|
* See the License for the specific language governing permissions and
|
|
53
50
|
* limitations under the License.
|
|
54
51
|
*/
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
class AuthPopup {
|
|
53
|
+
constructor(window) {
|
|
57
54
|
this.window = window;
|
|
58
55
|
this.associatedEvent = null;
|
|
59
56
|
}
|
|
60
|
-
|
|
57
|
+
close() {
|
|
61
58
|
if (this.window) {
|
|
62
59
|
try {
|
|
63
60
|
this.window.close();
|
|
64
61
|
}
|
|
65
62
|
catch (e) { }
|
|
66
63
|
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
}());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
70
66
|
|
|
71
67
|
/**
|
|
72
68
|
* @license
|
|
@@ -113,24 +109,22 @@ function _withDefaultResolver(auth, resolverOverride) {
|
|
|
113
109
|
* See the License for the specific language governing permissions and
|
|
114
110
|
* limitations under the License.
|
|
115
111
|
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
IdpCredential.prototype._getIdTokenResponse = function (auth) {
|
|
112
|
+
class IdpCredential extends totp.AuthCredential {
|
|
113
|
+
constructor(params) {
|
|
114
|
+
super("custom" /* ProviderId.CUSTOM */, "custom" /* ProviderId.CUSTOM */);
|
|
115
|
+
this.params = params;
|
|
116
|
+
}
|
|
117
|
+
_getIdTokenResponse(auth) {
|
|
124
118
|
return totp.signInWithIdp(auth, this._buildIdpRequest());
|
|
125
|
-
}
|
|
126
|
-
|
|
119
|
+
}
|
|
120
|
+
_linkToIdToken(auth, idToken) {
|
|
127
121
|
return totp.signInWithIdp(auth, this._buildIdpRequest(idToken));
|
|
128
|
-
}
|
|
129
|
-
|
|
122
|
+
}
|
|
123
|
+
_getReauthenticationResolver(auth) {
|
|
130
124
|
return totp.signInWithIdp(auth, this._buildIdpRequest());
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
125
|
+
}
|
|
126
|
+
_buildIdpRequest(idToken) {
|
|
127
|
+
const request = {
|
|
134
128
|
requestUri: this.params.requestUri,
|
|
135
129
|
sessionId: this.params.sessionId,
|
|
136
130
|
postBody: this.params.postBody,
|
|
@@ -143,26 +137,20 @@ var IdpCredential = /** @class */ (function (_super) {
|
|
|
143
137
|
request.idToken = idToken;
|
|
144
138
|
}
|
|
145
139
|
return request;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
}(totp.AuthCredential));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
149
142
|
function _signIn(params) {
|
|
150
143
|
return totp._signInWithCredential(params.auth, new IdpCredential(params), params.bypassAuthState);
|
|
151
144
|
}
|
|
152
145
|
function _reauth(params) {
|
|
153
|
-
|
|
146
|
+
const { auth, user } = params;
|
|
154
147
|
totp._assert(user, auth, "internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
|
|
155
148
|
return totp._reauthenticate(user, new IdpCredential(params), params.bypassAuthState);
|
|
156
149
|
}
|
|
157
|
-
function _link(params) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
auth = params.auth, user = params.user;
|
|
162
|
-
totp._assert(user, auth, "internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
|
|
163
|
-
return [2 /*return*/, totp._link(user, new IdpCredential(params), params.bypassAuthState)];
|
|
164
|
-
});
|
|
165
|
-
});
|
|
150
|
+
async function _link(params) {
|
|
151
|
+
const { auth, user } = params;
|
|
152
|
+
totp._assert(user, auth, "internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
|
|
153
|
+
return totp._link(user, new IdpCredential(params), params.bypassAuthState);
|
|
166
154
|
}
|
|
167
155
|
|
|
168
156
|
/**
|
|
@@ -185,9 +173,8 @@ function _link(params) {
|
|
|
185
173
|
* Popup event manager. Handles the popup's entire lifecycle; listens to auth
|
|
186
174
|
* events
|
|
187
175
|
*/
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if (bypassAuthState === void 0) { bypassAuthState = false; }
|
|
176
|
+
class AbstractPopupRedirectOperation {
|
|
177
|
+
constructor(auth, filter, resolver, user, bypassAuthState = false) {
|
|
191
178
|
this.auth = auth;
|
|
192
179
|
this.resolver = resolver;
|
|
193
180
|
this.user = user;
|
|
@@ -196,76 +183,45 @@ var AbstractPopupRedirectOperation = /** @class */ (function () {
|
|
|
196
183
|
this.eventManager = null;
|
|
197
184
|
this.filter = Array.isArray(filter) ? filter : [filter];
|
|
198
185
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
_a = this;
|
|
211
|
-
return [4 /*yield*/, this.resolver._initialize(this.auth)];
|
|
212
|
-
case 2:
|
|
213
|
-
_a.eventManager = _b.sent();
|
|
214
|
-
return [4 /*yield*/, this.onExecution()];
|
|
215
|
-
case 3:
|
|
216
|
-
_b.sent();
|
|
217
|
-
this.eventManager.registerConsumer(this);
|
|
218
|
-
return [3 /*break*/, 5];
|
|
219
|
-
case 4:
|
|
220
|
-
e_1 = _b.sent();
|
|
221
|
-
this.reject(e_1);
|
|
222
|
-
return [3 /*break*/, 5];
|
|
223
|
-
case 5: return [2 /*return*/];
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
}); });
|
|
227
|
-
};
|
|
228
|
-
AbstractPopupRedirectOperation.prototype.onAuthEvent = function (event) {
|
|
229
|
-
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
230
|
-
var urlResponse, sessionId, postBody, tenantId, error, type, params, _a, e_2;
|
|
231
|
-
return tslib.__generator(this, function (_b) {
|
|
232
|
-
switch (_b.label) {
|
|
233
|
-
case 0:
|
|
234
|
-
urlResponse = event.urlResponse, sessionId = event.sessionId, postBody = event.postBody, tenantId = event.tenantId, error = event.error, type = event.type;
|
|
235
|
-
if (error) {
|
|
236
|
-
this.reject(error);
|
|
237
|
-
return [2 /*return*/];
|
|
238
|
-
}
|
|
239
|
-
params = {
|
|
240
|
-
auth: this.auth,
|
|
241
|
-
requestUri: urlResponse,
|
|
242
|
-
sessionId: sessionId,
|
|
243
|
-
tenantId: tenantId || undefined,
|
|
244
|
-
postBody: postBody || undefined,
|
|
245
|
-
user: this.user,
|
|
246
|
-
bypassAuthState: this.bypassAuthState
|
|
247
|
-
};
|
|
248
|
-
_b.label = 1;
|
|
249
|
-
case 1:
|
|
250
|
-
_b.trys.push([1, 3, , 4]);
|
|
251
|
-
_a = this.resolve;
|
|
252
|
-
return [4 /*yield*/, this.getIdpTask(type)(params)];
|
|
253
|
-
case 2:
|
|
254
|
-
_a.apply(this, [_b.sent()]);
|
|
255
|
-
return [3 /*break*/, 4];
|
|
256
|
-
case 3:
|
|
257
|
-
e_2 = _b.sent();
|
|
258
|
-
this.reject(e_2);
|
|
259
|
-
return [3 /*break*/, 4];
|
|
260
|
-
case 4: return [2 /*return*/];
|
|
261
|
-
}
|
|
262
|
-
});
|
|
186
|
+
execute() {
|
|
187
|
+
return new Promise(async (resolve, reject) => {
|
|
188
|
+
this.pendingPromise = { resolve, reject };
|
|
189
|
+
try {
|
|
190
|
+
this.eventManager = await this.resolver._initialize(this.auth);
|
|
191
|
+
await this.onExecution();
|
|
192
|
+
this.eventManager.registerConsumer(this);
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
this.reject(e);
|
|
196
|
+
}
|
|
263
197
|
});
|
|
264
|
-
}
|
|
265
|
-
|
|
198
|
+
}
|
|
199
|
+
async onAuthEvent(event) {
|
|
200
|
+
const { urlResponse, sessionId, postBody, tenantId, error, type } = event;
|
|
201
|
+
if (error) {
|
|
202
|
+
this.reject(error);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const params = {
|
|
206
|
+
auth: this.auth,
|
|
207
|
+
requestUri: urlResponse,
|
|
208
|
+
sessionId: sessionId,
|
|
209
|
+
tenantId: tenantId || undefined,
|
|
210
|
+
postBody: postBody || undefined,
|
|
211
|
+
user: this.user,
|
|
212
|
+
bypassAuthState: this.bypassAuthState
|
|
213
|
+
};
|
|
214
|
+
try {
|
|
215
|
+
this.resolve(await this.getIdpTask(type)(params));
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
this.reject(e);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
onError(error) {
|
|
266
222
|
this.reject(error);
|
|
267
|
-
}
|
|
268
|
-
|
|
223
|
+
}
|
|
224
|
+
getIdpTask(type) {
|
|
269
225
|
switch (type) {
|
|
270
226
|
case "signInViaPopup" /* AuthEventType.SIGN_IN_VIA_POPUP */:
|
|
271
227
|
case "signInViaRedirect" /* AuthEventType.SIGN_IN_VIA_REDIRECT */:
|
|
@@ -279,26 +235,25 @@ var AbstractPopupRedirectOperation = /** @class */ (function () {
|
|
|
279
235
|
default:
|
|
280
236
|
totp._fail(this.auth, "internal-error" /* AuthErrorCode.INTERNAL_ERROR */);
|
|
281
237
|
}
|
|
282
|
-
}
|
|
283
|
-
|
|
238
|
+
}
|
|
239
|
+
resolve(cred) {
|
|
284
240
|
totp.debugAssert(this.pendingPromise, 'Pending promise was never set');
|
|
285
241
|
this.pendingPromise.resolve(cred);
|
|
286
242
|
this.unregisterAndCleanUp();
|
|
287
|
-
}
|
|
288
|
-
|
|
243
|
+
}
|
|
244
|
+
reject(error) {
|
|
289
245
|
totp.debugAssert(this.pendingPromise, 'Pending promise was never set');
|
|
290
246
|
this.pendingPromise.reject(error);
|
|
291
247
|
this.unregisterAndCleanUp();
|
|
292
|
-
}
|
|
293
|
-
|
|
248
|
+
}
|
|
249
|
+
unregisterAndCleanUp() {
|
|
294
250
|
if (this.eventManager) {
|
|
295
251
|
this.eventManager.unregisterConsumer(this);
|
|
296
252
|
}
|
|
297
253
|
this.pendingPromise = null;
|
|
298
254
|
this.cleanUp();
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
}());
|
|
255
|
+
}
|
|
256
|
+
}
|
|
302
257
|
|
|
303
258
|
/**
|
|
304
259
|
* @license
|
|
@@ -316,133 +271,76 @@ var AbstractPopupRedirectOperation = /** @class */ (function () {
|
|
|
316
271
|
* See the License for the specific language governing permissions and
|
|
317
272
|
* limitations under the License.
|
|
318
273
|
*/
|
|
319
|
-
|
|
274
|
+
const PENDING_REDIRECT_KEY = 'pendingRedirect';
|
|
320
275
|
// We only get one redirect outcome for any one auth, so just store it
|
|
321
276
|
// in here.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
if (bypassAuthState === void 0) { bypassAuthState = false; }
|
|
327
|
-
var _this = _super.call(this, auth, [
|
|
277
|
+
const redirectOutcomeMap = new Map();
|
|
278
|
+
class RedirectAction extends AbstractPopupRedirectOperation {
|
|
279
|
+
constructor(auth, resolver, bypassAuthState = false) {
|
|
280
|
+
super(auth, [
|
|
328
281
|
"signInViaRedirect" /* AuthEventType.SIGN_IN_VIA_REDIRECT */,
|
|
329
282
|
"linkViaRedirect" /* AuthEventType.LINK_VIA_REDIRECT */,
|
|
330
283
|
"reauthViaRedirect" /* AuthEventType.REAUTH_VIA_REDIRECT */,
|
|
331
284
|
"unknown" /* AuthEventType.UNKNOWN */
|
|
332
|
-
], resolver, undefined, bypassAuthState)
|
|
333
|
-
|
|
334
|
-
return _this;
|
|
285
|
+
], resolver, undefined, bypassAuthState);
|
|
286
|
+
this.eventId = null;
|
|
335
287
|
}
|
|
336
288
|
/**
|
|
337
289
|
* Override the execute function; if we already have a redirect result, then
|
|
338
290
|
* just return it.
|
|
339
291
|
*/
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
if (!!readyOutcome) return [3 /*break*/, 8];
|
|
348
|
-
_b.label = 1;
|
|
349
|
-
case 1:
|
|
350
|
-
_b.trys.push([1, 6, , 7]);
|
|
351
|
-
return [4 /*yield*/, _getAndClearPendingRedirectStatus(this.resolver, this.auth)];
|
|
352
|
-
case 2:
|
|
353
|
-
hasPendingRedirect = _b.sent();
|
|
354
|
-
if (!hasPendingRedirect) return [3 /*break*/, 4];
|
|
355
|
-
return [4 /*yield*/, _super.prototype.execute.call(this)];
|
|
356
|
-
case 3:
|
|
357
|
-
_a = _b.sent();
|
|
358
|
-
return [3 /*break*/, 5];
|
|
359
|
-
case 4:
|
|
360
|
-
_a = null;
|
|
361
|
-
_b.label = 5;
|
|
362
|
-
case 5:
|
|
363
|
-
result_1 = _a;
|
|
364
|
-
readyOutcome = function () { return Promise.resolve(result_1); };
|
|
365
|
-
return [3 /*break*/, 7];
|
|
366
|
-
case 6:
|
|
367
|
-
e_1 = _b.sent();
|
|
368
|
-
readyOutcome = function () { return Promise.reject(e_1); };
|
|
369
|
-
return [3 /*break*/, 7];
|
|
370
|
-
case 7:
|
|
371
|
-
redirectOutcomeMap.set(this.auth._key(), readyOutcome);
|
|
372
|
-
_b.label = 8;
|
|
373
|
-
case 8:
|
|
374
|
-
// If we're not bypassing auth state, the ready outcome should be set to
|
|
375
|
-
// null.
|
|
376
|
-
if (!this.bypassAuthState) {
|
|
377
|
-
redirectOutcomeMap.set(this.auth._key(), function () { return Promise.resolve(null); });
|
|
378
|
-
}
|
|
379
|
-
return [2 /*return*/, readyOutcome()];
|
|
380
|
-
}
|
|
381
|
-
});
|
|
382
|
-
});
|
|
383
|
-
};
|
|
384
|
-
RedirectAction.prototype.onAuthEvent = function (event) {
|
|
385
|
-
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
386
|
-
var user;
|
|
387
|
-
return tslib.__generator(this, function (_a) {
|
|
388
|
-
switch (_a.label) {
|
|
389
|
-
case 0:
|
|
390
|
-
if (event.type === "signInViaRedirect" /* AuthEventType.SIGN_IN_VIA_REDIRECT */) {
|
|
391
|
-
return [2 /*return*/, _super.prototype.onAuthEvent.call(this, event)];
|
|
392
|
-
}
|
|
393
|
-
else if (event.type === "unknown" /* AuthEventType.UNKNOWN */) {
|
|
394
|
-
// This is a sentinel value indicating there's no pending redirect
|
|
395
|
-
this.resolve(null);
|
|
396
|
-
return [2 /*return*/];
|
|
397
|
-
}
|
|
398
|
-
if (!event.eventId) return [3 /*break*/, 2];
|
|
399
|
-
return [4 /*yield*/, this.auth._redirectUserForId(event.eventId)];
|
|
400
|
-
case 1:
|
|
401
|
-
user = _a.sent();
|
|
402
|
-
if (user) {
|
|
403
|
-
this.user = user;
|
|
404
|
-
return [2 /*return*/, _super.prototype.onAuthEvent.call(this, event)];
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
this.resolve(null);
|
|
408
|
-
}
|
|
409
|
-
_a.label = 2;
|
|
410
|
-
case 2: return [2 /*return*/];
|
|
411
|
-
}
|
|
412
|
-
});
|
|
413
|
-
});
|
|
414
|
-
};
|
|
415
|
-
RedirectAction.prototype.onExecution = function () {
|
|
416
|
-
return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) {
|
|
417
|
-
return [2 /*return*/];
|
|
418
|
-
}); });
|
|
419
|
-
};
|
|
420
|
-
RedirectAction.prototype.cleanUp = function () { };
|
|
421
|
-
return RedirectAction;
|
|
422
|
-
}(AbstractPopupRedirectOperation));
|
|
423
|
-
function _getAndClearPendingRedirectStatus(resolver, auth) {
|
|
424
|
-
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
425
|
-
var key, persistence, hasPendingRedirect;
|
|
426
|
-
return tslib.__generator(this, function (_a) {
|
|
427
|
-
switch (_a.label) {
|
|
428
|
-
case 0:
|
|
429
|
-
key = pendingRedirectKey(auth);
|
|
430
|
-
persistence = resolverPersistence(resolver);
|
|
431
|
-
return [4 /*yield*/, persistence._isAvailable()];
|
|
432
|
-
case 1:
|
|
433
|
-
if (!(_a.sent())) {
|
|
434
|
-
return [2 /*return*/, false];
|
|
435
|
-
}
|
|
436
|
-
return [4 /*yield*/, persistence._get(key)];
|
|
437
|
-
case 2:
|
|
438
|
-
hasPendingRedirect = (_a.sent()) === 'true';
|
|
439
|
-
return [4 /*yield*/, persistence._remove(key)];
|
|
440
|
-
case 3:
|
|
441
|
-
_a.sent();
|
|
442
|
-
return [2 /*return*/, hasPendingRedirect];
|
|
292
|
+
async execute() {
|
|
293
|
+
let readyOutcome = redirectOutcomeMap.get(this.auth._key());
|
|
294
|
+
if (!readyOutcome) {
|
|
295
|
+
try {
|
|
296
|
+
const hasPendingRedirect = await _getAndClearPendingRedirectStatus(this.resolver, this.auth);
|
|
297
|
+
const result = hasPendingRedirect ? await super.execute() : null;
|
|
298
|
+
readyOutcome = () => Promise.resolve(result);
|
|
443
299
|
}
|
|
444
|
-
|
|
445
|
-
|
|
300
|
+
catch (e) {
|
|
301
|
+
readyOutcome = () => Promise.reject(e);
|
|
302
|
+
}
|
|
303
|
+
redirectOutcomeMap.set(this.auth._key(), readyOutcome);
|
|
304
|
+
}
|
|
305
|
+
// If we're not bypassing auth state, the ready outcome should be set to
|
|
306
|
+
// null.
|
|
307
|
+
if (!this.bypassAuthState) {
|
|
308
|
+
redirectOutcomeMap.set(this.auth._key(), () => Promise.resolve(null));
|
|
309
|
+
}
|
|
310
|
+
return readyOutcome();
|
|
311
|
+
}
|
|
312
|
+
async onAuthEvent(event) {
|
|
313
|
+
if (event.type === "signInViaRedirect" /* AuthEventType.SIGN_IN_VIA_REDIRECT */) {
|
|
314
|
+
return super.onAuthEvent(event);
|
|
315
|
+
}
|
|
316
|
+
else if (event.type === "unknown" /* AuthEventType.UNKNOWN */) {
|
|
317
|
+
// This is a sentinel value indicating there's no pending redirect
|
|
318
|
+
this.resolve(null);
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (event.eventId) {
|
|
322
|
+
const user = await this.auth._redirectUserForId(event.eventId);
|
|
323
|
+
if (user) {
|
|
324
|
+
this.user = user;
|
|
325
|
+
return super.onAuthEvent(event);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
this.resolve(null);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
async onExecution() { }
|
|
333
|
+
cleanUp() { }
|
|
334
|
+
}
|
|
335
|
+
async function _getAndClearPendingRedirectStatus(resolver, auth) {
|
|
336
|
+
const key = pendingRedirectKey(auth);
|
|
337
|
+
const persistence = resolverPersistence(resolver);
|
|
338
|
+
if (!(await persistence._isAvailable())) {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
const hasPendingRedirect = (await persistence._get(key)) === 'true';
|
|
342
|
+
await persistence._remove(key);
|
|
343
|
+
return hasPendingRedirect;
|
|
446
344
|
}
|
|
447
345
|
function _clearRedirectOutcomes() {
|
|
448
346
|
redirectOutcomeMap.clear();
|
|
@@ -473,38 +371,23 @@ function pendingRedirectKey(auth) {
|
|
|
473
371
|
* See the License for the specific language governing permissions and
|
|
474
372
|
* limitations under the License.
|
|
475
373
|
*/
|
|
476
|
-
function _getRedirectResult(auth, resolverExtern, bypassAuthState) {
|
|
477
|
-
if (
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
case 1:
|
|
491
|
-
result = _a.sent();
|
|
492
|
-
if (!(result && !bypassAuthState)) return [3 /*break*/, 4];
|
|
493
|
-
delete result.user._redirectEventId;
|
|
494
|
-
return [4 /*yield*/, authInternal._persistUserIfCurrent(result.user)];
|
|
495
|
-
case 2:
|
|
496
|
-
_a.sent();
|
|
497
|
-
return [4 /*yield*/, authInternal._setRedirectUser(null, resolverExtern)];
|
|
498
|
-
case 3:
|
|
499
|
-
_a.sent();
|
|
500
|
-
_a.label = 4;
|
|
501
|
-
case 4: return [2 /*return*/, result];
|
|
502
|
-
}
|
|
503
|
-
});
|
|
504
|
-
});
|
|
374
|
+
async function _getRedirectResult(auth, resolverExtern, bypassAuthState = false) {
|
|
375
|
+
if (app._isFirebaseServerApp(auth.app)) {
|
|
376
|
+
return Promise.reject(totp._serverAppCurrentUserOperationNotSupportedError(auth));
|
|
377
|
+
}
|
|
378
|
+
const authInternal = totp._castAuth(auth);
|
|
379
|
+
const resolver = _withDefaultResolver(authInternal, resolverExtern);
|
|
380
|
+
const action = new RedirectAction(authInternal, resolver, bypassAuthState);
|
|
381
|
+
const result = await action.execute();
|
|
382
|
+
if (result && !bypassAuthState) {
|
|
383
|
+
delete result.user._redirectEventId;
|
|
384
|
+
await authInternal._persistUserIfCurrent(result.user);
|
|
385
|
+
await authInternal._setRedirectUser(null, resolverExtern);
|
|
386
|
+
}
|
|
387
|
+
return result;
|
|
505
388
|
}
|
|
506
389
|
|
|
507
|
-
|
|
390
|
+
const STORAGE_AVAILABLE_KEY = '__sak';
|
|
508
391
|
|
|
509
392
|
/**
|
|
510
393
|
* @license
|
|
@@ -525,12 +408,12 @@ var STORAGE_AVAILABLE_KEY = '__sak';
|
|
|
525
408
|
// There are two different browser persistence types: local and session.
|
|
526
409
|
// Both have the same implementation but use a different underlying storage
|
|
527
410
|
// object.
|
|
528
|
-
|
|
529
|
-
|
|
411
|
+
class BrowserPersistenceClass {
|
|
412
|
+
constructor(storageRetriever, type) {
|
|
530
413
|
this.storageRetriever = storageRetriever;
|
|
531
414
|
this.type = type;
|
|
532
415
|
}
|
|
533
|
-
|
|
416
|
+
_isAvailable() {
|
|
534
417
|
try {
|
|
535
418
|
if (!this.storage) {
|
|
536
419
|
return Promise.resolve(false);
|
|
@@ -542,28 +425,23 @@ var BrowserPersistenceClass = /** @class */ (function () {
|
|
|
542
425
|
catch (_a) {
|
|
543
426
|
return Promise.resolve(false);
|
|
544
427
|
}
|
|
545
|
-
}
|
|
546
|
-
|
|
428
|
+
}
|
|
429
|
+
_set(key, value) {
|
|
547
430
|
this.storage.setItem(key, JSON.stringify(value));
|
|
548
431
|
return Promise.resolve();
|
|
549
|
-
}
|
|
550
|
-
|
|
551
|
-
|
|
432
|
+
}
|
|
433
|
+
_get(key) {
|
|
434
|
+
const json = this.storage.getItem(key);
|
|
552
435
|
return Promise.resolve(json ? JSON.parse(json) : null);
|
|
553
|
-
}
|
|
554
|
-
|
|
436
|
+
}
|
|
437
|
+
_remove(key) {
|
|
555
438
|
this.storage.removeItem(key);
|
|
556
439
|
return Promise.resolve();
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
enumerable: false,
|
|
563
|
-
configurable: true
|
|
564
|
-
});
|
|
565
|
-
return BrowserPersistenceClass;
|
|
566
|
-
}());
|
|
440
|
+
}
|
|
441
|
+
get storage() {
|
|
442
|
+
return this.storageRetriever();
|
|
443
|
+
}
|
|
444
|
+
}
|
|
567
445
|
|
|
568
446
|
/**
|
|
569
447
|
* @license
|
|
@@ -581,29 +459,27 @@ var BrowserPersistenceClass = /** @class */ (function () {
|
|
|
581
459
|
* See the License for the specific language governing permissions and
|
|
582
460
|
* limitations under the License.
|
|
583
461
|
*/
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
return _super.call(this, function () { return window.sessionStorage; }, "SESSION" /* PersistenceType.SESSION */) || this;
|
|
462
|
+
class BrowserSessionPersistence extends BrowserPersistenceClass {
|
|
463
|
+
constructor() {
|
|
464
|
+
super(() => window.sessionStorage, "SESSION" /* PersistenceType.SESSION */);
|
|
588
465
|
}
|
|
589
|
-
|
|
466
|
+
_addListener(_key, _listener) {
|
|
590
467
|
// Listeners are not supported for session storage since it cannot be shared across windows
|
|
591
468
|
return;
|
|
592
|
-
}
|
|
593
|
-
|
|
469
|
+
}
|
|
470
|
+
_removeListener(_key, _listener) {
|
|
594
471
|
// Listeners are not supported for session storage since it cannot be shared across windows
|
|
595
472
|
return;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
}(BrowserPersistenceClass));
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
BrowserSessionPersistence.type = 'SESSION';
|
|
600
476
|
/**
|
|
601
477
|
* An implementation of {@link Persistence} of `SESSION` using `sessionStorage`
|
|
602
478
|
* for the underlying storage.
|
|
603
479
|
*
|
|
604
480
|
* @public
|
|
605
481
|
*/
|
|
606
|
-
|
|
482
|
+
const browserSessionPersistence = BrowserSessionPersistence;
|
|
607
483
|
|
|
608
484
|
/**
|
|
609
485
|
* @license
|
|
@@ -626,79 +502,69 @@ var browserSessionPersistence = BrowserSessionPersistence;
|
|
|
626
502
|
*
|
|
627
503
|
* @internal
|
|
628
504
|
*/
|
|
629
|
-
|
|
505
|
+
const WIDGET_PATH = '__/auth/handler';
|
|
630
506
|
/**
|
|
631
507
|
* URL for emulated environment
|
|
632
508
|
*
|
|
633
509
|
* @internal
|
|
634
510
|
*/
|
|
635
|
-
|
|
511
|
+
const EMULATOR_WIDGET_PATH = 'emulator/auth/handler';
|
|
636
512
|
/**
|
|
637
513
|
* Fragment name for the App Check token that gets passed to the widget
|
|
638
514
|
*
|
|
639
515
|
* @internal
|
|
640
516
|
*/
|
|
641
|
-
|
|
642
|
-
function _getRedirectUrl(auth, provider, authType, redirectUrl, eventId, additionalParams) {
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
appCheckToken = _e.sent();
|
|
689
|
-
appCheckTokenFragment = appCheckToken
|
|
690
|
-
? "#".concat(FIREBASE_APP_CHECK_FRAGMENT_ID, "=").concat(encodeURIComponent(appCheckToken))
|
|
691
|
-
: '';
|
|
692
|
-
// Start at index 1 to skip the leading '&' in the query string
|
|
693
|
-
return [2 /*return*/, "".concat(getHandlerBase(auth), "?").concat(util.querystring(paramsDict).slice(1)).concat(appCheckTokenFragment)];
|
|
694
|
-
}
|
|
695
|
-
});
|
|
696
|
-
});
|
|
517
|
+
const FIREBASE_APP_CHECK_FRAGMENT_ID = encodeURIComponent('fac');
|
|
518
|
+
async function _getRedirectUrl(auth, provider, authType, redirectUrl, eventId, additionalParams) {
|
|
519
|
+
totp._assert(auth.config.authDomain, auth, "auth-domain-config-required" /* AuthErrorCode.MISSING_AUTH_DOMAIN */);
|
|
520
|
+
totp._assert(auth.config.apiKey, auth, "invalid-api-key" /* AuthErrorCode.INVALID_API_KEY */);
|
|
521
|
+
const params = {
|
|
522
|
+
apiKey: auth.config.apiKey,
|
|
523
|
+
appName: auth.name,
|
|
524
|
+
authType,
|
|
525
|
+
redirectUrl,
|
|
526
|
+
v: app.SDK_VERSION,
|
|
527
|
+
eventId
|
|
528
|
+
};
|
|
529
|
+
if (provider instanceof totp.FederatedAuthProvider) {
|
|
530
|
+
provider.setDefaultLanguage(auth.languageCode);
|
|
531
|
+
params.providerId = provider.providerId || '';
|
|
532
|
+
if (!util.isEmpty(provider.getCustomParameters())) {
|
|
533
|
+
params.customParameters = JSON.stringify(provider.getCustomParameters());
|
|
534
|
+
}
|
|
535
|
+
// TODO set additionalParams from the provider as well?
|
|
536
|
+
for (const [key, value] of Object.entries(additionalParams || {})) {
|
|
537
|
+
params[key] = value;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
if (provider instanceof totp.BaseOAuthProvider) {
|
|
541
|
+
const scopes = provider.getScopes().filter(scope => scope !== '');
|
|
542
|
+
if (scopes.length > 0) {
|
|
543
|
+
params.scopes = scopes.join(',');
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
if (auth.tenantId) {
|
|
547
|
+
params.tid = auth.tenantId;
|
|
548
|
+
}
|
|
549
|
+
// TODO: maybe set eid as endpointId
|
|
550
|
+
// TODO: maybe set fw as Frameworks.join(",")
|
|
551
|
+
const paramsDict = params;
|
|
552
|
+
for (const key of Object.keys(paramsDict)) {
|
|
553
|
+
if (paramsDict[key] === undefined) {
|
|
554
|
+
delete paramsDict[key];
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
// Sets the App Check token to pass to the widget
|
|
558
|
+
const appCheckToken = await auth._getAppCheckToken();
|
|
559
|
+
const appCheckTokenFragment = appCheckToken
|
|
560
|
+
? `#${FIREBASE_APP_CHECK_FRAGMENT_ID}=${encodeURIComponent(appCheckToken)}`
|
|
561
|
+
: '';
|
|
562
|
+
// Start at index 1 to skip the leading '&' in the query string
|
|
563
|
+
return `${getHandlerBase(auth)}?${util.querystring(paramsDict).slice(1)}${appCheckTokenFragment}`;
|
|
697
564
|
}
|
|
698
|
-
function getHandlerBase(
|
|
699
|
-
var config = _a.config;
|
|
565
|
+
function getHandlerBase({ config }) {
|
|
700
566
|
if (!config.emulator) {
|
|
701
|
-
return
|
|
567
|
+
return `https://${config.authDomain}/${WIDGET_PATH}`;
|
|
702
568
|
}
|
|
703
569
|
return totp._emulatorUrl(config, EMULATOR_WIDGET_PATH);
|
|
704
570
|
}
|
|
@@ -739,13 +605,8 @@ function _cordovaWindow() {
|
|
|
739
605
|
* See the License for the specific language governing permissions and
|
|
740
606
|
* limitations under the License.
|
|
741
607
|
*/
|
|
742
|
-
function _getProjectConfig(auth, request) {
|
|
743
|
-
|
|
744
|
-
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
745
|
-
return tslib.__generator(this, function (_a) {
|
|
746
|
-
return [2 /*return*/, totp._performApiRequest(auth, "GET" /* HttpMethod.GET */, "/v1/projects" /* Endpoint.GET_PROJECT_CONFIG */, request)];
|
|
747
|
-
});
|
|
748
|
-
});
|
|
608
|
+
async function _getProjectConfig(auth, request = {}) {
|
|
609
|
+
return totp._performApiRequest(auth, "GET" /* HttpMethod.GET */, "/v1/projects" /* Endpoint.GET_PROJECT_CONFIG */, request);
|
|
749
610
|
}
|
|
750
611
|
|
|
751
612
|
/**
|
|
@@ -768,81 +629,60 @@ function _getProjectConfig(auth, request) {
|
|
|
768
629
|
* How long to wait after the app comes back into focus before concluding that
|
|
769
630
|
* the user closed the sign in tab.
|
|
770
631
|
*/
|
|
771
|
-
|
|
632
|
+
const REDIRECT_TIMEOUT_MS = 2000;
|
|
772
633
|
/**
|
|
773
634
|
* Generates the URL for the OAuth handler.
|
|
774
635
|
*/
|
|
775
|
-
function _generateHandlerUrl(auth, event, provider) {
|
|
636
|
+
async function _generateHandlerUrl(auth, event, provider) {
|
|
776
637
|
var _a;
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
if (BuildInfo.displayName) {
|
|
801
|
-
additionalParams['appDisplayName'] = BuildInfo.displayName;
|
|
802
|
-
}
|
|
803
|
-
// Attached the hashed session ID
|
|
804
|
-
additionalParams['sessionId'] = sessionDigest;
|
|
805
|
-
return [2 /*return*/, _getRedirectUrl(auth, provider, event.type, undefined, (_a = event.eventId) !== null && _a !== void 0 ? _a : undefined, additionalParams)];
|
|
806
|
-
}
|
|
807
|
-
});
|
|
808
|
-
});
|
|
638
|
+
// Get the cordova plugins
|
|
639
|
+
const { BuildInfo } = _cordovaWindow();
|
|
640
|
+
totp.debugAssert(event.sessionId, 'AuthEvent did not contain a session ID');
|
|
641
|
+
const sessionDigest = await computeSha256(event.sessionId);
|
|
642
|
+
const additionalParams = {};
|
|
643
|
+
if (totp._isIOS()) {
|
|
644
|
+
// iOS app identifier
|
|
645
|
+
additionalParams['ibi'] = BuildInfo.packageName;
|
|
646
|
+
}
|
|
647
|
+
else if (totp._isAndroid()) {
|
|
648
|
+
// Android app identifier
|
|
649
|
+
additionalParams['apn'] = BuildInfo.packageName;
|
|
650
|
+
}
|
|
651
|
+
else {
|
|
652
|
+
totp._fail(auth, "operation-not-supported-in-this-environment" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);
|
|
653
|
+
}
|
|
654
|
+
// Add the display name if available
|
|
655
|
+
if (BuildInfo.displayName) {
|
|
656
|
+
additionalParams['appDisplayName'] = BuildInfo.displayName;
|
|
657
|
+
}
|
|
658
|
+
// Attached the hashed session ID
|
|
659
|
+
additionalParams['sessionId'] = sessionDigest;
|
|
660
|
+
return _getRedirectUrl(auth, provider, event.type, undefined, (_a = event.eventId) !== null && _a !== void 0 ? _a : undefined, additionalParams);
|
|
809
661
|
}
|
|
810
662
|
/**
|
|
811
663
|
* Validates that this app is valid for this project configuration
|
|
812
664
|
*/
|
|
813
|
-
function _validateOrigin(auth) {
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
else {
|
|
828
|
-
totp._fail(auth, "operation-not-supported-in-this-environment" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);
|
|
829
|
-
}
|
|
830
|
-
// Will fail automatically if package name is not authorized
|
|
831
|
-
return [4 /*yield*/, _getProjectConfig(auth, request)];
|
|
832
|
-
case 1:
|
|
833
|
-
// Will fail automatically if package name is not authorized
|
|
834
|
-
_a.sent();
|
|
835
|
-
return [2 /*return*/];
|
|
836
|
-
}
|
|
837
|
-
});
|
|
838
|
-
});
|
|
665
|
+
async function _validateOrigin(auth) {
|
|
666
|
+
const { BuildInfo } = _cordovaWindow();
|
|
667
|
+
const request = {};
|
|
668
|
+
if (totp._isIOS()) {
|
|
669
|
+
request.iosBundleId = BuildInfo.packageName;
|
|
670
|
+
}
|
|
671
|
+
else if (totp._isAndroid()) {
|
|
672
|
+
request.androidPackageName = BuildInfo.packageName;
|
|
673
|
+
}
|
|
674
|
+
else {
|
|
675
|
+
totp._fail(auth, "operation-not-supported-in-this-environment" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);
|
|
676
|
+
}
|
|
677
|
+
// Will fail automatically if package name is not authorized
|
|
678
|
+
await _getProjectConfig(auth, request);
|
|
839
679
|
}
|
|
840
680
|
function _performRedirect(handlerUrl) {
|
|
841
681
|
// Get the cordova plugins
|
|
842
|
-
|
|
843
|
-
return new Promise(
|
|
844
|
-
cordova.plugins.browsertab.isAvailable(
|
|
845
|
-
|
|
682
|
+
const { cordova } = _cordovaWindow();
|
|
683
|
+
return new Promise(resolve => {
|
|
684
|
+
cordova.plugins.browsertab.isAvailable(browserTabIsAvailable => {
|
|
685
|
+
let iabRef = null;
|
|
846
686
|
if (browserTabIsAvailable) {
|
|
847
687
|
cordova.plugins.browsertab.openUrl(handlerUrl);
|
|
848
688
|
}
|
|
@@ -860,78 +700,66 @@ function _performRedirect(handlerUrl) {
|
|
|
860
700
|
* to be visible, this promise resolves. AFTER that resolution, the listeners
|
|
861
701
|
* are detached and any browser tabs left open will be closed.
|
|
862
702
|
*/
|
|
863
|
-
function _waitForAppResume(auth, eventListener, iabRef) {
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
}
|
|
886
|
-
// Close inappbrowser embedded webview in iOS7 and 8 case if still
|
|
887
|
-
// open.
|
|
888
|
-
if (typeof (iabRef === null || iabRef === void 0 ? void 0 : iabRef.close) === 'function') {
|
|
889
|
-
iabRef.close();
|
|
890
|
-
}
|
|
891
|
-
}
|
|
892
|
-
function resumed() {
|
|
893
|
-
if (onCloseTimer) {
|
|
894
|
-
// This code already ran; do not rerun.
|
|
895
|
-
return;
|
|
896
|
-
}
|
|
897
|
-
onCloseTimer = window.setTimeout(function () {
|
|
898
|
-
// Wait two seconds after resume then reject.
|
|
899
|
-
reject(totp._createError(auth, "redirect-cancelled-by-user" /* AuthErrorCode.REDIRECT_CANCELLED_BY_USER */));
|
|
900
|
-
}, REDIRECT_TIMEOUT_MS);
|
|
901
|
-
}
|
|
902
|
-
function visibilityChanged() {
|
|
903
|
-
if ((document === null || document === void 0 ? void 0 : document.visibilityState) === 'visible') {
|
|
904
|
-
resumed();
|
|
905
|
-
}
|
|
906
|
-
}
|
|
907
|
-
// ATTACH ALL THE LISTENERS =====
|
|
908
|
-
// Listen for the auth event
|
|
909
|
-
eventListener.addPassiveListener(authEventSeen);
|
|
910
|
-
// Listen for resume and visibility events
|
|
911
|
-
document.addEventListener('resume', resumed, false);
|
|
912
|
-
if (totp._isAndroid()) {
|
|
913
|
-
document.addEventListener('visibilitychange', visibilityChanged, false);
|
|
914
|
-
}
|
|
915
|
-
// SETUP THE CLEANUP FUNCTION =====
|
|
916
|
-
cleanup = function () {
|
|
917
|
-
eventListener.removePassiveListener(authEventSeen);
|
|
918
|
-
document.removeEventListener('resume', resumed, false);
|
|
919
|
-
document.removeEventListener('visibilitychange', visibilityChanged, false);
|
|
920
|
-
if (onCloseTimer) {
|
|
921
|
-
window.clearTimeout(onCloseTimer);
|
|
922
|
-
}
|
|
923
|
-
};
|
|
924
|
-
})];
|
|
925
|
-
case 2:
|
|
926
|
-
_a.sent();
|
|
927
|
-
return [3 /*break*/, 4];
|
|
928
|
-
case 3:
|
|
929
|
-
cleanup();
|
|
930
|
-
return [7 /*endfinally*/];
|
|
931
|
-
case 4: return [2 /*return*/];
|
|
703
|
+
async function _waitForAppResume(auth, eventListener, iabRef) {
|
|
704
|
+
// Get the cordova plugins
|
|
705
|
+
const { cordova } = _cordovaWindow();
|
|
706
|
+
let cleanup = () => { };
|
|
707
|
+
try {
|
|
708
|
+
await new Promise((resolve, reject) => {
|
|
709
|
+
let onCloseTimer = null;
|
|
710
|
+
// DEFINE ALL THE CALLBACKS =====
|
|
711
|
+
function authEventSeen() {
|
|
712
|
+
var _a;
|
|
713
|
+
// Auth event was detected. Resolve this promise and close the extra
|
|
714
|
+
// window if it's still open.
|
|
715
|
+
resolve();
|
|
716
|
+
const closeBrowserTab = (_a = cordova.plugins.browsertab) === null || _a === void 0 ? void 0 : _a.close;
|
|
717
|
+
if (typeof closeBrowserTab === 'function') {
|
|
718
|
+
closeBrowserTab();
|
|
719
|
+
}
|
|
720
|
+
// Close inappbrowser embedded webview in iOS7 and 8 case if still
|
|
721
|
+
// open.
|
|
722
|
+
if (typeof (iabRef === null || iabRef === void 0 ? void 0 : iabRef.close) === 'function') {
|
|
723
|
+
iabRef.close();
|
|
724
|
+
}
|
|
932
725
|
}
|
|
726
|
+
function resumed() {
|
|
727
|
+
if (onCloseTimer) {
|
|
728
|
+
// This code already ran; do not rerun.
|
|
729
|
+
return;
|
|
730
|
+
}
|
|
731
|
+
onCloseTimer = window.setTimeout(() => {
|
|
732
|
+
// Wait two seconds after resume then reject.
|
|
733
|
+
reject(totp._createError(auth, "redirect-cancelled-by-user" /* AuthErrorCode.REDIRECT_CANCELLED_BY_USER */));
|
|
734
|
+
}, REDIRECT_TIMEOUT_MS);
|
|
735
|
+
}
|
|
736
|
+
function visibilityChanged() {
|
|
737
|
+
if ((document === null || document === void 0 ? void 0 : document.visibilityState) === 'visible') {
|
|
738
|
+
resumed();
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
// ATTACH ALL THE LISTENERS =====
|
|
742
|
+
// Listen for the auth event
|
|
743
|
+
eventListener.addPassiveListener(authEventSeen);
|
|
744
|
+
// Listen for resume and visibility events
|
|
745
|
+
document.addEventListener('resume', resumed, false);
|
|
746
|
+
if (totp._isAndroid()) {
|
|
747
|
+
document.addEventListener('visibilitychange', visibilityChanged, false);
|
|
748
|
+
}
|
|
749
|
+
// SETUP THE CLEANUP FUNCTION =====
|
|
750
|
+
cleanup = () => {
|
|
751
|
+
eventListener.removePassiveListener(authEventSeen);
|
|
752
|
+
document.removeEventListener('resume', resumed, false);
|
|
753
|
+
document.removeEventListener('visibilitychange', visibilityChanged, false);
|
|
754
|
+
if (onCloseTimer) {
|
|
755
|
+
window.clearTimeout(onCloseTimer);
|
|
756
|
+
}
|
|
757
|
+
};
|
|
933
758
|
});
|
|
934
|
-
}
|
|
759
|
+
}
|
|
760
|
+
finally {
|
|
761
|
+
cleanup();
|
|
762
|
+
}
|
|
935
763
|
}
|
|
936
764
|
/**
|
|
937
765
|
* Checks the configuration of the Cordova environment. This has no side effect
|
|
@@ -940,7 +768,7 @@ function _waitForAppResume(auth, eventListener, iabRef) {
|
|
|
940
768
|
*/
|
|
941
769
|
function _checkCordovaConfiguration(auth) {
|
|
942
770
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
943
|
-
|
|
771
|
+
const win = _cordovaWindow();
|
|
944
772
|
// Check all dependencies installed.
|
|
945
773
|
// https://github.com/nordnet/cordova-universal-links-plugin
|
|
946
774
|
// Note that cordova-universal-links-plugin has been abandoned.
|
|
@@ -970,21 +798,15 @@ function _checkCordovaConfiguration(auth) {
|
|
|
970
798
|
* available in "secure" contexts, which covers Cordova (which is served on a file
|
|
971
799
|
* protocol).
|
|
972
800
|
*/
|
|
973
|
-
function computeSha256(sessionId) {
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
buf = _a.sent();
|
|
983
|
-
arr = Array.from(new Uint8Array(buf));
|
|
984
|
-
return [2 /*return*/, arr.map(function (num) { return num.toString(16).padStart(2, '0'); }).join('')];
|
|
985
|
-
}
|
|
986
|
-
});
|
|
987
|
-
});
|
|
801
|
+
async function computeSha256(sessionId) {
|
|
802
|
+
const bytes = stringToArrayBuffer(sessionId);
|
|
803
|
+
// TODO: For IE11 crypto has a different name and this operation comes back
|
|
804
|
+
// as an object, not a promise. This is the old proposed standard that
|
|
805
|
+
// is used by IE11:
|
|
806
|
+
// https://www.w3.org/TR/2013/WD-WebCryptoAPI-20130108/#cryptooperation-interface
|
|
807
|
+
const buf = await crypto.subtle.digest('SHA-256', bytes);
|
|
808
|
+
const arr = Array.from(new Uint8Array(buf));
|
|
809
|
+
return arr.map(num => num.toString(16).padStart(2, '0')).join('');
|
|
988
810
|
}
|
|
989
811
|
function stringToArrayBuffer(str) {
|
|
990
812
|
// This function is only meant to deal with an ASCII charset and makes
|
|
@@ -993,9 +815,9 @@ function stringToArrayBuffer(str) {
|
|
|
993
815
|
if (typeof TextEncoder !== 'undefined') {
|
|
994
816
|
return new TextEncoder().encode(str);
|
|
995
817
|
}
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
for (
|
|
818
|
+
const buff = new ArrayBuffer(str.length);
|
|
819
|
+
const view = new Uint8Array(buff);
|
|
820
|
+
for (let i = 0; i < str.length; i++) {
|
|
999
821
|
view[i] = str.charCodeAt(i);
|
|
1000
822
|
}
|
|
1001
823
|
return view;
|
|
@@ -1019,9 +841,9 @@ function stringToArrayBuffer(str) {
|
|
|
1019
841
|
*/
|
|
1020
842
|
// The amount of time to store the UIDs of seen events; this is
|
|
1021
843
|
// set to 10 min by default
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
844
|
+
const EVENT_DUPLICATION_CACHE_DURATION_MS = 10 * 60 * 1000;
|
|
845
|
+
class AuthEventManager {
|
|
846
|
+
constructor(auth) {
|
|
1025
847
|
this.auth = auth;
|
|
1026
848
|
this.cachedEventUids = new Set();
|
|
1027
849
|
this.consumers = new Set();
|
|
@@ -1029,7 +851,7 @@ var AuthEventManager = /** @class */ (function () {
|
|
|
1029
851
|
this.hasHandledPotentialRedirect = false;
|
|
1030
852
|
this.lastProcessedEventTime = Date.now();
|
|
1031
853
|
}
|
|
1032
|
-
|
|
854
|
+
registerConsumer(authEventConsumer) {
|
|
1033
855
|
this.consumers.add(authEventConsumer);
|
|
1034
856
|
if (this.queuedRedirectEvent &&
|
|
1035
857
|
this.isEventForConsumer(this.queuedRedirectEvent, authEventConsumer)) {
|
|
@@ -1037,22 +859,21 @@ var AuthEventManager = /** @class */ (function () {
|
|
|
1037
859
|
this.saveEventToCache(this.queuedRedirectEvent);
|
|
1038
860
|
this.queuedRedirectEvent = null;
|
|
1039
861
|
}
|
|
1040
|
-
}
|
|
1041
|
-
|
|
862
|
+
}
|
|
863
|
+
unregisterConsumer(authEventConsumer) {
|
|
1042
864
|
this.consumers.delete(authEventConsumer);
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
var _this = this;
|
|
865
|
+
}
|
|
866
|
+
onEvent(event) {
|
|
1046
867
|
// Check if the event has already been handled
|
|
1047
868
|
if (this.hasEventBeenHandled(event)) {
|
|
1048
869
|
return false;
|
|
1049
870
|
}
|
|
1050
|
-
|
|
1051
|
-
this.consumers.forEach(
|
|
1052
|
-
if (
|
|
871
|
+
let handled = false;
|
|
872
|
+
this.consumers.forEach(consumer => {
|
|
873
|
+
if (this.isEventForConsumer(event, consumer)) {
|
|
1053
874
|
handled = true;
|
|
1054
|
-
|
|
1055
|
-
|
|
875
|
+
this.sendToConsumer(event, consumer);
|
|
876
|
+
this.saveEventToCache(event);
|
|
1056
877
|
}
|
|
1057
878
|
});
|
|
1058
879
|
if (this.hasHandledPotentialRedirect || !isRedirectEvent(event)) {
|
|
@@ -1067,43 +888,41 @@ var AuthEventManager = /** @class */ (function () {
|
|
|
1067
888
|
handled = true;
|
|
1068
889
|
}
|
|
1069
890
|
return handled;
|
|
1070
|
-
}
|
|
1071
|
-
|
|
891
|
+
}
|
|
892
|
+
sendToConsumer(event, consumer) {
|
|
1072
893
|
var _a;
|
|
1073
894
|
if (event.error && !isNullRedirectEvent(event)) {
|
|
1074
|
-
|
|
895
|
+
const code = ((_a = event.error.code) === null || _a === void 0 ? void 0 : _a.split('auth/')[1]) ||
|
|
1075
896
|
"internal-error" /* AuthErrorCode.INTERNAL_ERROR */;
|
|
1076
897
|
consumer.onError(totp._createError(this.auth, code));
|
|
1077
898
|
}
|
|
1078
899
|
else {
|
|
1079
900
|
consumer.onAuthEvent(event);
|
|
1080
901
|
}
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
|
-
|
|
902
|
+
}
|
|
903
|
+
isEventForConsumer(event, consumer) {
|
|
904
|
+
const eventIdMatches = consumer.eventId === null ||
|
|
1084
905
|
(!!event.eventId && event.eventId === consumer.eventId);
|
|
1085
906
|
return consumer.filter.includes(event.type) && eventIdMatches;
|
|
1086
|
-
}
|
|
1087
|
-
|
|
907
|
+
}
|
|
908
|
+
hasEventBeenHandled(event) {
|
|
1088
909
|
if (Date.now() - this.lastProcessedEventTime >=
|
|
1089
910
|
EVENT_DUPLICATION_CACHE_DURATION_MS) {
|
|
1090
911
|
this.cachedEventUids.clear();
|
|
1091
912
|
}
|
|
1092
913
|
return this.cachedEventUids.has(eventUid(event));
|
|
1093
|
-
}
|
|
1094
|
-
|
|
914
|
+
}
|
|
915
|
+
saveEventToCache(event) {
|
|
1095
916
|
this.cachedEventUids.add(eventUid(event));
|
|
1096
917
|
this.lastProcessedEventTime = Date.now();
|
|
1097
|
-
}
|
|
1098
|
-
|
|
1099
|
-
}());
|
|
918
|
+
}
|
|
919
|
+
}
|
|
1100
920
|
function eventUid(e) {
|
|
1101
|
-
return [e.type, e.eventId, e.sessionId, e.tenantId].filter(
|
|
921
|
+
return [e.type, e.eventId, e.sessionId, e.tenantId].filter(v => v).join('-');
|
|
1102
922
|
}
|
|
1103
|
-
function isNullRedirectEvent(
|
|
1104
|
-
var type = _a.type, error = _a.error;
|
|
923
|
+
function isNullRedirectEvent({ type, error }) {
|
|
1105
924
|
return (type === "unknown" /* AuthEventType.UNKNOWN */ &&
|
|
1106
|
-
(error === null || error === void 0 ? void 0 : error.code) ===
|
|
925
|
+
(error === null || error === void 0 ? void 0 : error.code) === `auth/${"no-auth-event" /* AuthErrorCode.NO_AUTH_EVENT */}`);
|
|
1107
926
|
}
|
|
1108
927
|
function isRedirectEvent(event) {
|
|
1109
928
|
switch (event.type) {
|
|
@@ -1135,49 +954,44 @@ function isRedirectEvent(event) {
|
|
|
1135
954
|
* limitations under the License.
|
|
1136
955
|
*/
|
|
1137
956
|
// The polling period in case events are not supported
|
|
1138
|
-
|
|
957
|
+
const _POLLING_INTERVAL_MS = 1000;
|
|
1139
958
|
// The IE 10 localStorage cross tab synchronization delay in milliseconds
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
_this.localCache = {};
|
|
959
|
+
const IE10_LOCAL_STORAGE_SYNC_DELAY = 10;
|
|
960
|
+
class BrowserLocalPersistence extends BrowserPersistenceClass {
|
|
961
|
+
constructor() {
|
|
962
|
+
super(() => window.localStorage, "LOCAL" /* PersistenceType.LOCAL */);
|
|
963
|
+
this.boundEventHandler = (event, poll) => this.onStorageEvent(event, poll);
|
|
964
|
+
this.listeners = {};
|
|
965
|
+
this.localCache = {};
|
|
1148
966
|
// setTimeout return value is platform specific
|
|
1149
967
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1150
|
-
|
|
968
|
+
this.pollTimer = null;
|
|
1151
969
|
// Whether to use polling instead of depending on window events
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
return _this;
|
|
970
|
+
this.fallbackToPolling = totp._isMobileBrowser();
|
|
971
|
+
this._shouldAllowMigration = true;
|
|
1155
972
|
}
|
|
1156
|
-
|
|
973
|
+
forAllChangedKeys(cb) {
|
|
1157
974
|
// Check all keys with listeners on them.
|
|
1158
|
-
for (
|
|
1159
|
-
var key = _a[_i];
|
|
975
|
+
for (const key of Object.keys(this.listeners)) {
|
|
1160
976
|
// Get value from localStorage.
|
|
1161
|
-
|
|
1162
|
-
|
|
977
|
+
const newValue = this.storage.getItem(key);
|
|
978
|
+
const oldValue = this.localCache[key];
|
|
1163
979
|
// If local map value does not match, trigger listener with storage event.
|
|
1164
980
|
// Differentiate this simulated event from the real storage event.
|
|
1165
981
|
if (newValue !== oldValue) {
|
|
1166
982
|
cb(key, oldValue, newValue);
|
|
1167
983
|
}
|
|
1168
984
|
}
|
|
1169
|
-
}
|
|
1170
|
-
|
|
1171
|
-
var _this = this;
|
|
1172
|
-
if (poll === void 0) { poll = false; }
|
|
985
|
+
}
|
|
986
|
+
onStorageEvent(event, poll = false) {
|
|
1173
987
|
// Key would be null in some situations, like when localStorage is cleared
|
|
1174
988
|
if (!event.key) {
|
|
1175
|
-
this.forAllChangedKeys(
|
|
1176
|
-
|
|
989
|
+
this.forAllChangedKeys((key, _oldValue, newValue) => {
|
|
990
|
+
this.notifyListeners(key, newValue);
|
|
1177
991
|
});
|
|
1178
992
|
return;
|
|
1179
993
|
}
|
|
1180
|
-
|
|
994
|
+
const key = event.key;
|
|
1181
995
|
// Check the mechanism how this event was detected.
|
|
1182
996
|
// The first event will dictate the mechanism to be used.
|
|
1183
997
|
if (poll) {
|
|
@@ -1190,18 +1004,18 @@ var BrowserLocalPersistence = /** @class */ (function (_super) {
|
|
|
1190
1004
|
// Remove polling listener to prevent possible event duplication.
|
|
1191
1005
|
this.stopPolling();
|
|
1192
1006
|
}
|
|
1193
|
-
|
|
1007
|
+
const triggerListeners = () => {
|
|
1194
1008
|
// Keep local map up to date in case storage event is triggered before
|
|
1195
1009
|
// poll.
|
|
1196
|
-
|
|
1197
|
-
if (!poll &&
|
|
1010
|
+
const storedValue = this.storage.getItem(key);
|
|
1011
|
+
if (!poll && this.localCache[key] === storedValue) {
|
|
1198
1012
|
// Real storage event which has already been detected, do nothing.
|
|
1199
1013
|
// This seems to trigger in some IE browsers for some reason.
|
|
1200
1014
|
return;
|
|
1201
1015
|
}
|
|
1202
|
-
|
|
1016
|
+
this.notifyListeners(key, storedValue);
|
|
1203
1017
|
};
|
|
1204
|
-
|
|
1018
|
+
const storedValue = this.storage.getItem(key);
|
|
1205
1019
|
if (totp._isIE10() &&
|
|
1206
1020
|
storedValue !== event.newValue &&
|
|
1207
1021
|
event.newValue !== event.oldValue) {
|
|
@@ -1214,44 +1028,42 @@ var BrowserLocalPersistence = /** @class */ (function (_super) {
|
|
|
1214
1028
|
else {
|
|
1215
1029
|
triggerListeners();
|
|
1216
1030
|
}
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1031
|
+
}
|
|
1032
|
+
notifyListeners(key, value) {
|
|
1219
1033
|
this.localCache[key] = value;
|
|
1220
|
-
|
|
1034
|
+
const listeners = this.listeners[key];
|
|
1221
1035
|
if (listeners) {
|
|
1222
|
-
for (
|
|
1223
|
-
var listener = _a[_i];
|
|
1036
|
+
for (const listener of Array.from(listeners)) {
|
|
1224
1037
|
listener(value ? JSON.parse(value) : value);
|
|
1225
1038
|
}
|
|
1226
1039
|
}
|
|
1227
|
-
}
|
|
1228
|
-
|
|
1229
|
-
var _this = this;
|
|
1040
|
+
}
|
|
1041
|
+
startPolling() {
|
|
1230
1042
|
this.stopPolling();
|
|
1231
|
-
this.pollTimer = setInterval(
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
key
|
|
1235
|
-
oldValue
|
|
1236
|
-
newValue
|
|
1043
|
+
this.pollTimer = setInterval(() => {
|
|
1044
|
+
this.forAllChangedKeys((key, oldValue, newValue) => {
|
|
1045
|
+
this.onStorageEvent(new StorageEvent('storage', {
|
|
1046
|
+
key,
|
|
1047
|
+
oldValue,
|
|
1048
|
+
newValue
|
|
1237
1049
|
}),
|
|
1238
1050
|
/* poll */ true);
|
|
1239
1051
|
});
|
|
1240
1052
|
}, _POLLING_INTERVAL_MS);
|
|
1241
|
-
}
|
|
1242
|
-
|
|
1053
|
+
}
|
|
1054
|
+
stopPolling() {
|
|
1243
1055
|
if (this.pollTimer) {
|
|
1244
1056
|
clearInterval(this.pollTimer);
|
|
1245
1057
|
this.pollTimer = null;
|
|
1246
1058
|
}
|
|
1247
|
-
}
|
|
1248
|
-
|
|
1059
|
+
}
|
|
1060
|
+
attachListener() {
|
|
1249
1061
|
window.addEventListener('storage', this.boundEventHandler);
|
|
1250
|
-
}
|
|
1251
|
-
|
|
1062
|
+
}
|
|
1063
|
+
detachListener() {
|
|
1252
1064
|
window.removeEventListener('storage', this.boundEventHandler);
|
|
1253
|
-
}
|
|
1254
|
-
|
|
1065
|
+
}
|
|
1066
|
+
_addListener(key, listener) {
|
|
1255
1067
|
if (Object.keys(this.listeners).length === 0) {
|
|
1256
1068
|
// Whether browser can detect storage event when it had already been pushed to the background.
|
|
1257
1069
|
// This may happen in some mobile browsers. A localStorage change in the foreground window
|
|
@@ -1270,8 +1082,8 @@ var BrowserLocalPersistence = /** @class */ (function (_super) {
|
|
|
1270
1082
|
this.localCache[key] = this.storage.getItem(key);
|
|
1271
1083
|
}
|
|
1272
1084
|
this.listeners[key].add(listener);
|
|
1273
|
-
}
|
|
1274
|
-
|
|
1085
|
+
}
|
|
1086
|
+
_removeListener(key, listener) {
|
|
1275
1087
|
if (this.listeners[key]) {
|
|
1276
1088
|
this.listeners[key].delete(listener);
|
|
1277
1089
|
if (this.listeners[key].size === 0) {
|
|
@@ -1282,58 +1094,30 @@ var BrowserLocalPersistence = /** @class */ (function (_super) {
|
|
|
1282
1094
|
this.detachListener();
|
|
1283
1095
|
this.stopPolling();
|
|
1284
1096
|
}
|
|
1285
|
-
}
|
|
1097
|
+
}
|
|
1286
1098
|
// Update local cache on base operations:
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
}
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
var value;
|
|
1303
|
-
return tslib.__generator(this, function (_a) {
|
|
1304
|
-
switch (_a.label) {
|
|
1305
|
-
case 0: return [4 /*yield*/, _super.prototype._get.call(this, key)];
|
|
1306
|
-
case 1:
|
|
1307
|
-
value = _a.sent();
|
|
1308
|
-
this.localCache[key] = JSON.stringify(value);
|
|
1309
|
-
return [2 /*return*/, value];
|
|
1310
|
-
}
|
|
1311
|
-
});
|
|
1312
|
-
});
|
|
1313
|
-
};
|
|
1314
|
-
BrowserLocalPersistence.prototype._remove = function (key) {
|
|
1315
|
-
return tslib.__awaiter(this, void 0, void 0, function () {
|
|
1316
|
-
return tslib.__generator(this, function (_a) {
|
|
1317
|
-
switch (_a.label) {
|
|
1318
|
-
case 0: return [4 /*yield*/, _super.prototype._remove.call(this, key)];
|
|
1319
|
-
case 1:
|
|
1320
|
-
_a.sent();
|
|
1321
|
-
delete this.localCache[key];
|
|
1322
|
-
return [2 /*return*/];
|
|
1323
|
-
}
|
|
1324
|
-
});
|
|
1325
|
-
});
|
|
1326
|
-
};
|
|
1327
|
-
BrowserLocalPersistence.type = 'LOCAL';
|
|
1328
|
-
return BrowserLocalPersistence;
|
|
1329
|
-
}(BrowserPersistenceClass));
|
|
1099
|
+
async _set(key, value) {
|
|
1100
|
+
await super._set(key, value);
|
|
1101
|
+
this.localCache[key] = JSON.stringify(value);
|
|
1102
|
+
}
|
|
1103
|
+
async _get(key) {
|
|
1104
|
+
const value = await super._get(key);
|
|
1105
|
+
this.localCache[key] = JSON.stringify(value);
|
|
1106
|
+
return value;
|
|
1107
|
+
}
|
|
1108
|
+
async _remove(key) {
|
|
1109
|
+
await super._remove(key);
|
|
1110
|
+
delete this.localCache[key];
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
BrowserLocalPersistence.type = 'LOCAL';
|
|
1330
1114
|
/**
|
|
1331
1115
|
* An implementation of {@link Persistence} of type `LOCAL` using `localStorage`
|
|
1332
1116
|
* for the underlying storage.
|
|
1333
1117
|
*
|
|
1334
1118
|
* @public
|
|
1335
1119
|
*/
|
|
1336
|
-
|
|
1120
|
+
const browserLocalPersistence = BrowserLocalPersistence;
|
|
1337
1121
|
|
|
1338
1122
|
/**
|
|
1339
1123
|
* @license
|
|
@@ -1351,58 +1135,45 @@ var browserLocalPersistence = BrowserLocalPersistence;
|
|
|
1351
1135
|
* See the License for the specific language governing permissions and
|
|
1352
1136
|
* limitations under the License.
|
|
1353
1137
|
*/
|
|
1354
|
-
|
|
1138
|
+
const SESSION_ID_LENGTH = 20;
|
|
1355
1139
|
/** Custom AuthEventManager that adds passive listeners to events */
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
_this.resolveInitialized = resolve;
|
|
1140
|
+
class CordovaAuthEventManager extends AuthEventManager {
|
|
1141
|
+
constructor() {
|
|
1142
|
+
super(...arguments);
|
|
1143
|
+
this.passiveListeners = new Set();
|
|
1144
|
+
this.initPromise = new Promise(resolve => {
|
|
1145
|
+
this.resolveInitialized = resolve;
|
|
1363
1146
|
});
|
|
1364
|
-
return _this;
|
|
1365
1147
|
}
|
|
1366
|
-
|
|
1148
|
+
addPassiveListener(cb) {
|
|
1367
1149
|
this.passiveListeners.add(cb);
|
|
1368
|
-
}
|
|
1369
|
-
|
|
1150
|
+
}
|
|
1151
|
+
removePassiveListener(cb) {
|
|
1370
1152
|
this.passiveListeners.delete(cb);
|
|
1371
|
-
}
|
|
1153
|
+
}
|
|
1372
1154
|
// In a Cordova environment, this manager can live through multiple redirect
|
|
1373
1155
|
// operations
|
|
1374
|
-
|
|
1156
|
+
resetRedirect() {
|
|
1375
1157
|
this.queuedRedirectEvent = null;
|
|
1376
1158
|
this.hasHandledPotentialRedirect = false;
|
|
1377
|
-
}
|
|
1159
|
+
}
|
|
1378
1160
|
/** Override the onEvent method */
|
|
1379
|
-
|
|
1161
|
+
onEvent(event) {
|
|
1380
1162
|
this.resolveInitialized();
|
|
1381
|
-
this.passiveListeners.forEach(
|
|
1382
|
-
return
|
|
1383
|
-
}
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
case 0: return [4 /*yield*/, this.initPromise];
|
|
1389
|
-
case 1:
|
|
1390
|
-
_a.sent();
|
|
1391
|
-
return [2 /*return*/];
|
|
1392
|
-
}
|
|
1393
|
-
});
|
|
1394
|
-
});
|
|
1395
|
-
};
|
|
1396
|
-
return CordovaAuthEventManager;
|
|
1397
|
-
}(AuthEventManager));
|
|
1163
|
+
this.passiveListeners.forEach(cb => cb(event));
|
|
1164
|
+
return super.onEvent(event);
|
|
1165
|
+
}
|
|
1166
|
+
async initialized() {
|
|
1167
|
+
await this.initPromise;
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1398
1170
|
/**
|
|
1399
1171
|
* Generates a (partial) {@link AuthEvent}.
|
|
1400
1172
|
*/
|
|
1401
|
-
function _generateNewEvent(auth, type, eventId) {
|
|
1402
|
-
if (eventId === void 0) { eventId = null; }
|
|
1173
|
+
function _generateNewEvent(auth, type, eventId = null) {
|
|
1403
1174
|
return {
|
|
1404
|
-
type
|
|
1405
|
-
eventId
|
|
1175
|
+
type,
|
|
1176
|
+
eventId,
|
|
1406
1177
|
urlResponse: null,
|
|
1407
1178
|
sessionId: generateSessionId(),
|
|
1408
1179
|
postBody: null,
|
|
@@ -1413,28 +1184,17 @@ function _generateNewEvent(auth, type, eventId) {
|
|
|
1413
1184
|
function _savePartialEvent(auth, event) {
|
|
1414
1185
|
return storage()._set(persistenceKey(auth), event);
|
|
1415
1186
|
}
|
|
1416
|
-
function _getAndRemoveEvent(auth) {
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
case 1:
|
|
1423
|
-
event = (_a.sent());
|
|
1424
|
-
if (!event) return [3 /*break*/, 3];
|
|
1425
|
-
return [4 /*yield*/, storage()._remove(persistenceKey(auth))];
|
|
1426
|
-
case 2:
|
|
1427
|
-
_a.sent();
|
|
1428
|
-
_a.label = 3;
|
|
1429
|
-
case 3: return [2 /*return*/, event];
|
|
1430
|
-
}
|
|
1431
|
-
});
|
|
1432
|
-
});
|
|
1187
|
+
async function _getAndRemoveEvent(auth) {
|
|
1188
|
+
const event = (await storage()._get(persistenceKey(auth)));
|
|
1189
|
+
if (event) {
|
|
1190
|
+
await storage()._remove(persistenceKey(auth));
|
|
1191
|
+
}
|
|
1192
|
+
return event;
|
|
1433
1193
|
}
|
|
1434
1194
|
function _eventFromPartialAndUrl(partialEvent, url) {
|
|
1435
1195
|
var _a, _b;
|
|
1436
1196
|
// Parse the deep link within the dynamic link URL.
|
|
1437
|
-
|
|
1197
|
+
const callbackUrl = _getDeepLinkFromCallback(url);
|
|
1438
1198
|
// Confirm it is actually a callback URL.
|
|
1439
1199
|
// Currently the universal link will be of this format:
|
|
1440
1200
|
// https://<AUTH_DOMAIN>/__/auth/callback<OAUTH_RESPONSE>
|
|
@@ -1444,19 +1204,19 @@ function _eventFromPartialAndUrl(partialEvent, url) {
|
|
|
1444
1204
|
// Check if there is an error in the URL.
|
|
1445
1205
|
// This mechanism is also used to pass errors back to the app:
|
|
1446
1206
|
// https://<AUTH_DOMAIN>/__/auth/callback?firebaseError=<STRINGIFIED_ERROR>
|
|
1447
|
-
|
|
1207
|
+
const params = searchParamsOrEmpty(callbackUrl);
|
|
1448
1208
|
// Get the error object corresponding to the stringified error if found.
|
|
1449
|
-
|
|
1209
|
+
const errorObject = params['firebaseError']
|
|
1450
1210
|
? parseJsonOrNull(decodeURIComponent(params['firebaseError']))
|
|
1451
1211
|
: null;
|
|
1452
|
-
|
|
1453
|
-
|
|
1212
|
+
const code = (_b = (_a = errorObject === null || errorObject === void 0 ? void 0 : errorObject['code']) === null || _a === void 0 ? void 0 : _a.split('auth/')) === null || _b === void 0 ? void 0 : _b[1];
|
|
1213
|
+
const error = code ? totp._createError(code) : null;
|
|
1454
1214
|
if (error) {
|
|
1455
1215
|
return {
|
|
1456
1216
|
type: partialEvent.type,
|
|
1457
1217
|
eventId: partialEvent.eventId,
|
|
1458
1218
|
tenantId: partialEvent.tenantId,
|
|
1459
|
-
error
|
|
1219
|
+
error,
|
|
1460
1220
|
urlResponse: null,
|
|
1461
1221
|
sessionId: null,
|
|
1462
1222
|
postBody: null
|
|
@@ -1476,10 +1236,10 @@ function _eventFromPartialAndUrl(partialEvent, url) {
|
|
|
1476
1236
|
return null;
|
|
1477
1237
|
}
|
|
1478
1238
|
function generateSessionId() {
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
for (
|
|
1482
|
-
|
|
1239
|
+
const chars = [];
|
|
1240
|
+
const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
1241
|
+
for (let i = 0; i < SESSION_ID_LENGTH; i++) {
|
|
1242
|
+
const idx = Math.floor(Math.random() * allowedChars.length);
|
|
1483
1243
|
chars.push(allowedChars.charAt(idx));
|
|
1484
1244
|
}
|
|
1485
1245
|
return chars.join('');
|
|
@@ -1500,15 +1260,15 @@ function parseJsonOrNull(json) {
|
|
|
1500
1260
|
}
|
|
1501
1261
|
// Exported for testing
|
|
1502
1262
|
function _getDeepLinkFromCallback(url) {
|
|
1503
|
-
|
|
1504
|
-
|
|
1263
|
+
const params = searchParamsOrEmpty(url);
|
|
1264
|
+
const link = params['link'] ? decodeURIComponent(params['link']) : undefined;
|
|
1505
1265
|
// Double link case (automatic redirect)
|
|
1506
|
-
|
|
1266
|
+
const doubleDeepLink = searchParamsOrEmpty(link)['link'];
|
|
1507
1267
|
// iOS custom scheme links.
|
|
1508
|
-
|
|
1268
|
+
const iOSDeepLink = params['deep_link_id']
|
|
1509
1269
|
? decodeURIComponent(params['deep_link_id'])
|
|
1510
1270
|
: undefined;
|
|
1511
|
-
|
|
1271
|
+
const iOSDoubleDeepLink = searchParamsOrEmpty(iOSDeepLink)['link'];
|
|
1512
1272
|
return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;
|
|
1513
1273
|
}
|
|
1514
1274
|
/**
|
|
@@ -1519,7 +1279,7 @@ function searchParamsOrEmpty(url) {
|
|
|
1519
1279
|
if (!(url === null || url === void 0 ? void 0 : url.includes('?'))) {
|
|
1520
1280
|
return {};
|
|
1521
1281
|
}
|
|
1522
|
-
|
|
1282
|
+
const [_, ...rest] = url.split('?');
|
|
1523
1283
|
return util.querystringDecode(rest.join('?'));
|
|
1524
1284
|
}
|
|
1525
1285
|
|
|
@@ -1543,9 +1303,9 @@ function searchParamsOrEmpty(url) {
|
|
|
1543
1303
|
* How long to wait for the initial auth event before concluding no
|
|
1544
1304
|
* redirect pending
|
|
1545
1305
|
*/
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1306
|
+
const INITIAL_EVENT_TIMEOUT_MS = 500;
|
|
1307
|
+
class CordovaPopupRedirectResolver {
|
|
1308
|
+
constructor() {
|
|
1549
1309
|
this._redirectPersistence = browserSessionPersistence;
|
|
1550
1310
|
this._shouldInitProactively = true; // This is lightweight for Cordova
|
|
1551
1311
|
this.eventManagers = new Map();
|
|
@@ -1553,110 +1313,65 @@ var CordovaPopupRedirectResolver = /** @class */ (function () {
|
|
|
1553
1313
|
this._completeRedirectFn = _getRedirectResult;
|
|
1554
1314
|
this._overrideRedirectResult = _overrideRedirectResult;
|
|
1555
1315
|
}
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
return [2 /*return*/, manager];
|
|
1568
|
-
});
|
|
1569
|
-
});
|
|
1570
|
-
};
|
|
1571
|
-
CordovaPopupRedirectResolver.prototype._openPopup = function (auth) {
|
|
1316
|
+
async _initialize(auth) {
|
|
1317
|
+
const key = auth._key();
|
|
1318
|
+
let manager = this.eventManagers.get(key);
|
|
1319
|
+
if (!manager) {
|
|
1320
|
+
manager = new CordovaAuthEventManager(auth);
|
|
1321
|
+
this.eventManagers.set(key, manager);
|
|
1322
|
+
this.attachCallbackListeners(auth, manager);
|
|
1323
|
+
}
|
|
1324
|
+
return manager;
|
|
1325
|
+
}
|
|
1326
|
+
_openPopup(auth) {
|
|
1572
1327
|
totp._fail(auth, "operation-not-supported-in-this-environment" /* AuthErrorCode.OPERATION_NOT_SUPPORTED */);
|
|
1573
|
-
}
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
_clearRedirectOutcomes();
|
|
1592
|
-
return [4 /*yield*/, this._originValidation(auth)];
|
|
1593
|
-
case 3:
|
|
1594
|
-
_a.sent();
|
|
1595
|
-
event = _generateNewEvent(auth, authType, eventId);
|
|
1596
|
-
return [4 /*yield*/, _savePartialEvent(auth, event)];
|
|
1597
|
-
case 4:
|
|
1598
|
-
_a.sent();
|
|
1599
|
-
return [4 /*yield*/, _generateHandlerUrl(auth, event, provider)];
|
|
1600
|
-
case 5:
|
|
1601
|
-
url = _a.sent();
|
|
1602
|
-
return [4 /*yield*/, _performRedirect(url)];
|
|
1603
|
-
case 6:
|
|
1604
|
-
iabRef = _a.sent();
|
|
1605
|
-
return [2 /*return*/, _waitForAppResume(auth, manager, iabRef)];
|
|
1606
|
-
}
|
|
1607
|
-
});
|
|
1608
|
-
});
|
|
1609
|
-
};
|
|
1610
|
-
CordovaPopupRedirectResolver.prototype._isIframeWebStorageSupported = function (_auth, _cb) {
|
|
1328
|
+
}
|
|
1329
|
+
async _openRedirect(auth, provider, authType, eventId) {
|
|
1330
|
+
_checkCordovaConfiguration(auth);
|
|
1331
|
+
const manager = await this._initialize(auth);
|
|
1332
|
+
await manager.initialized();
|
|
1333
|
+
// Reset the persisted redirect states. This does not matter on Web where
|
|
1334
|
+
// the redirect always blows away application state entirely. On Cordova,
|
|
1335
|
+
// the app maintains control flow through the redirect.
|
|
1336
|
+
manager.resetRedirect();
|
|
1337
|
+
_clearRedirectOutcomes();
|
|
1338
|
+
await this._originValidation(auth);
|
|
1339
|
+
const event = _generateNewEvent(auth, authType, eventId);
|
|
1340
|
+
await _savePartialEvent(auth, event);
|
|
1341
|
+
const url = await _generateHandlerUrl(auth, event, provider);
|
|
1342
|
+
const iabRef = await _performRedirect(url);
|
|
1343
|
+
return _waitForAppResume(auth, manager, iabRef);
|
|
1344
|
+
}
|
|
1345
|
+
_isIframeWebStorageSupported(_auth, _cb) {
|
|
1611
1346
|
throw new Error('Method not implemented.');
|
|
1612
|
-
}
|
|
1613
|
-
|
|
1614
|
-
|
|
1347
|
+
}
|
|
1348
|
+
_originValidation(auth) {
|
|
1349
|
+
const key = auth._key();
|
|
1615
1350
|
if (!this.originValidationPromises[key]) {
|
|
1616
1351
|
this.originValidationPromises[key] = _validateOrigin(auth);
|
|
1617
1352
|
}
|
|
1618
1353
|
return this.originValidationPromises[key];
|
|
1619
|
-
}
|
|
1620
|
-
|
|
1621
|
-
var _this = this;
|
|
1354
|
+
}
|
|
1355
|
+
attachCallbackListeners(auth, manager) {
|
|
1622
1356
|
// Get the global plugins
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
var partialEvent, finalEvent;
|
|
1642
|
-
return tslib.__generator(this, function (_a) {
|
|
1643
|
-
switch (_a.label) {
|
|
1644
|
-
case 0:
|
|
1645
|
-
// We have an event so we can clear the no event timeout
|
|
1646
|
-
clearTimeout(noEventTimeout);
|
|
1647
|
-
return [4 /*yield*/, _getAndRemoveEvent(auth)];
|
|
1648
|
-
case 1:
|
|
1649
|
-
partialEvent = _a.sent();
|
|
1650
|
-
finalEvent = null;
|
|
1651
|
-
if (partialEvent && (eventData === null || eventData === void 0 ? void 0 : eventData['url'])) {
|
|
1652
|
-
finalEvent = _eventFromPartialAndUrl(partialEvent, eventData['url']);
|
|
1653
|
-
}
|
|
1654
|
-
// If finalEvent is never filled, trigger with no event
|
|
1655
|
-
manager.onEvent(finalEvent || generateNoEvent());
|
|
1656
|
-
return [2 /*return*/];
|
|
1657
|
-
}
|
|
1658
|
-
});
|
|
1659
|
-
}); };
|
|
1357
|
+
const { universalLinks, handleOpenURL, BuildInfo } = _cordovaWindow();
|
|
1358
|
+
const noEventTimeout = setTimeout(async () => {
|
|
1359
|
+
// We didn't see that initial event. Clear any pending object and
|
|
1360
|
+
// dispatch no event
|
|
1361
|
+
await _getAndRemoveEvent(auth);
|
|
1362
|
+
manager.onEvent(generateNoEvent());
|
|
1363
|
+
}, INITIAL_EVENT_TIMEOUT_MS);
|
|
1364
|
+
const universalLinksCb = async (eventData) => {
|
|
1365
|
+
// We have an event so we can clear the no event timeout
|
|
1366
|
+
clearTimeout(noEventTimeout);
|
|
1367
|
+
const partialEvent = await _getAndRemoveEvent(auth);
|
|
1368
|
+
let finalEvent = null;
|
|
1369
|
+
if (partialEvent && (eventData === null || eventData === void 0 ? void 0 : eventData['url'])) {
|
|
1370
|
+
finalEvent = _eventFromPartialAndUrl(partialEvent, eventData['url']);
|
|
1371
|
+
}
|
|
1372
|
+
// If finalEvent is never filled, trigger with no event
|
|
1373
|
+
manager.onEvent(finalEvent || generateNoEvent());
|
|
1374
|
+
};
|
|
1660
1375
|
// Universal links subscriber doesn't exist for iOS, so we need to check
|
|
1661
1376
|
if (typeof universalLinks !== 'undefined' &&
|
|
1662
1377
|
typeof universalLinks.subscribe === 'function') {
|
|
@@ -1667,38 +1382,34 @@ var CordovaPopupRedirectResolver = /** @class */ (function () {
|
|
|
1667
1382
|
// For this to work, cordova-plugin-customurlscheme needs to be installed.
|
|
1668
1383
|
// https://github.com/EddyVerbruggen/Custom-URL-scheme
|
|
1669
1384
|
// Do not overwrite the existing developer's URL handler.
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
_cordovaWindow().handleOpenURL =
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1385
|
+
const existingHandleOpenURL = handleOpenURL;
|
|
1386
|
+
const packagePrefix = `${BuildInfo.packageName.toLowerCase()}://`;
|
|
1387
|
+
_cordovaWindow().handleOpenURL = async (url) => {
|
|
1388
|
+
if (url.toLowerCase().startsWith(packagePrefix)) {
|
|
1389
|
+
// We want this intentionally to float
|
|
1390
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
1391
|
+
universalLinksCb({ url });
|
|
1392
|
+
}
|
|
1393
|
+
// Call the developer's handler if it is present.
|
|
1394
|
+
if (typeof existingHandleOpenURL === 'function') {
|
|
1395
|
+
try {
|
|
1396
|
+
existingHandleOpenURL(url);
|
|
1678
1397
|
}
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
existingHandleOpenURL(url);
|
|
1683
|
-
}
|
|
1684
|
-
catch (e) {
|
|
1685
|
-
// This is a developer error. Don't stop the flow of the SDK.
|
|
1686
|
-
console.error(e);
|
|
1687
|
-
}
|
|
1398
|
+
catch (e) {
|
|
1399
|
+
// This is a developer error. Don't stop the flow of the SDK.
|
|
1400
|
+
console.error(e);
|
|
1688
1401
|
}
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
return CordovaPopupRedirectResolver;
|
|
1694
|
-
}());
|
|
1402
|
+
}
|
|
1403
|
+
};
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1695
1406
|
/**
|
|
1696
1407
|
* An implementation of {@link PopupRedirectResolver} suitable for Cordova
|
|
1697
1408
|
* based applications.
|
|
1698
1409
|
*
|
|
1699
1410
|
* @public
|
|
1700
1411
|
*/
|
|
1701
|
-
|
|
1412
|
+
const cordovaPopupRedirectResolver = CordovaPopupRedirectResolver;
|
|
1702
1413
|
function generateNoEvent() {
|
|
1703
1414
|
return {
|
|
1704
1415
|
type: "unknown" /* AuthEventType.UNKNOWN */,
|